Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Explanation

Lets take a look inside ncurl.py:

import neocurl as nc

@nc.on_init
def main():
    if not nc.check_version("2.0.0-alpha.2"):
        nc.fatal(f"This version of neocurl is not compatible with this script: {nc.version()}")

    logger_config = nc.get_logger_config()
    if nc.env("LOG") == "DEBUG":
        logger_config.level = nc.LogLevel.Debug
    else:
        logger_config.level = nc.LogLevel.Info
    logger_config.datetime_format = "%H:%M:%S%.3f"
    logger_config.use_colors = True
    nc.set_logger_config(logger_config)

    nc.info("Neocurl initialized")

@nc.on_cleanup
def cleanup():
    nc.info("Neocurl cleanup complete")

@nc.define
def get(client):
    nc.debug("Sending GET request")

    response = client.get("https://httpbin.org/get")
    nc.info(f"Response status: {response.status}, finished in {response.duration:.2f}ms")

    assert response.status_code == 200, f"Expected status code 200, but got {response.status_code} ({response.status})"

    response.print()

This is not that scary as it look.

Line by line

import neocurl as nc

Module neocurl is provided by NeoCurl at runtime.

@nc.on_init
def main():

This defines a function with nc.on_init decorator. NeoCurl will run this function before running any definitions.

    if not nc.check_version("2.0.0-alpha.2"):
        nc.fatal(f"This version of neocurl is not compatible with this script: {nc.version()}")

This checks if the NeoCurl version is 2.0.0-alpha.2 (This might have beed updated since the book bas been written). If the NeoCurl version does not match the version requested by the script, it fails with an error. The function nc.fatal(msg) prints the message and exits the executable.

    logger_config = nc.get_logger_config()

Gets the logger_config struct.

    if nc.env("LOG") == "DEBUG":
        logger_config.level = nc.LogLevel.Debug
    else:
        logger_config.level = nc.LogLevel.Info

If there is a LOG env var and it is set to DEBUG, set the logger level to Debug, otherwise set Info.

    logger_config.datetime_format = "%H:%M:%S%.3f"
    logger_config.use_colors = True

Sets the datatime format for logs and enabled colors.

    nc.set_logger_config(logger_config)

Sets the logger config.

    nc.info("Neocurl initialized")

Logs a message, saying NeoCurl has been initialized.

@nc.on_cleanup
def cleanup():
    nc.info("Neocurl cleanup complete")

Defines a function with a nc.on_cleanup decorator. NeoCurl will run this after a definition is ran. The function logs a message about cleanup being successful.

@nc.define
def get(client):

Defines a function get (The definition name) with a nc.define decorator. This will be ran when ncurl run get is executed.

    response = client.get("https://httpbin.org/get")
    nc.info(f"Response status: {response.status}, finished in {response.duration:.2f}ms")

Send a GET request to https://httpbin.org/get and gets the response. Logs the status and the duration.

    assert response.status_code == 200, f"Expected status code 200, but got {response.status_code} ({response.status})"

Checks if the status code is 200, raises an error if it is not.

    response.print()

Prints the response.