Skip to main content

Call ASGI Python application from command line, just like CURL

Project description

ASGI CLI

tests Coverage Status pypi version

Call ASGI Python application from command line, just like CURL.

If you’re using this tool, ★Star this repository to show your interest, please!

Install

pip install asgi-cli

Usage

asgi-cli --help
usage: asgi-cli [-h] [--version] [-X COMMAND] [-I] [-H HEADER] [-d DATA] [-b]
                [-n NUMBER] [-v]
                app [url]

positional arguments:
  app                   an application module or file
  url                   a uniform resource locator or path (default /)

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  -X COMMAND, --request COMMAND
                        specify request command to use, e.g. POST (default
                        GET)
  -I, --head            show status and headers only
  -H HEADER, --header HEADER
                        pass custom header line, e.g. -H='Accept:
                        application/json'
  -d DATA               request body data, e.g. '{"msg":"hello"}', 'msg=hello'
  -b, --benchmark       issue a number of requests through repeated
                        iterations, (reports throughtput and average call
                        time)
  -n NUMBER             a number of requests to issue (default 100K)
  -v, --verbose         make the operation more talkative

Examples

example.py:

START = {
    "type": "http.response.start",
    "status": 200,
    "headers": [
        (b"content-length", b"13"),
        (b"content-type", b"text/html; charset=utf-8"),
    ],
}

BODY1 = {
    "type": "http.response.body",
    "body": b"Hello",
}

BODY2 = {
    "type": "http.response.body",
    "body": b", world!",
}


async def app(scope, receive, send) -> None:
    await send(START)
    await send(BODY1)
    await send(BODY2)

Then run the examples:

asgi-cli example:app prints response body:

Hello, world!

asgi-cli -v example:app pretty prints scope and sent messages:

{'scope': {'asgi': {'spec_version': '2.1', 'version': '3.0'},
           'client': ('127.0.0.1', 49327),
           'headers': [(b'accept', b'*/*'),
                       (b'user-agent', b'asgi-cli/0.0.1'),
                       (b'host', b'127.0.0.1:8000')],
           'http_version': '1.1',
           'method': 'GET',
           'path': '/',
           'query_string': b'',
           'raw_path': b'/',
           'root_path': '',
           'scheme': 'http',
           'server': ('127.0.0.1', 8000),
           'type': 'http'}}
{'message': {'headers': [(b'content-length', b'13'),
                         (b'content-type', b'text/html; charset=utf-8')],
             'status': 200,
             'type': 'http.response.start'}}
{'message': {'body': b'Hello', 'type': 'http.response.body'}}
{'message': {'body': b', world!', 'type': 'http.response.body'}}

asgi-cli -b example:app shows execution stats (runs in 3 iterations, for each iteration displays requests per second and an average call time):

 #1 => 706.26K, 1.42μs
 #2 => 688.64K, 1.45μs
 #3 => 733.55K, 1.36μs

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

asgi-cli-0.1.0.tar.gz (9.1 kB view hashes)

Uploaded Source

Built Distribution

asgi_cli-0.1.0-py3-none-any.whl (9.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page