The Wayback Machine - https://web.archive.org/web/20210101103137/https://github.com/encode/uvicorn
Skip to content
master
Go to file
Code

Latest commit

* Used async context manager instead of thread

* Refactored test_ssl

* Refactored test_main , last test become irrelevant

* Same with test_websockets, now exceptions are bubbled !

* Update requirements.txt

* Refactor test_trace_logging.py as well

* Removed what appears to be dead code since we dont use threads

* asynccontextmanager appears in 3.7, just removing it to check if CI passes

* trace logging reworked

* Attempt at 3.6

* Should be better with correct lib name

* Removed requests dependency and pass it to httpx !

* Using same encoding as server

* Blacked

* Merge leftovers

* No need for a client here

* Another merge leftover, should have rebased

* Removed test_client.py since we dont have it anymore !

* Direct use of httpx Headers

* Verbose pytest

* Throwing some debug stuff

* Commenting the previous test just to see if the server close that should happen here is what causes the subsequent test to fail

* Trying to cancel that task on connection_lost, is that legit ?

* Ok so it shows this is indeed the task that is responsible for the flakiness but this feels a hack to cancel it here

* Test script back

* Candel handler task if connection lost and handshake not started ?

* This look like the fix

* Found the 2nd one, OMFG

* Not part of that PR anymore
a67ac86

Git stats

Files

Permalink
Failed to load latest commit information.

README.md

uvicorn

The lightning-fast ASGI server.


Build Status Package version

Documentation: https://www.uvicorn.org

Community: https://discuss.encode.io/c/uvicorn

Requirements: Python 3.6+ (For Python 3.5 support, install version 0.8.6.)

Uvicorn is a lightning-fast ASGI server implementation, using uvloop and httptools.

Until recently Python has lacked a minimal low-level server/application interface for asyncio frameworks. The ASGI specification fills this gap, and means we're now able to start building a common set of tooling usable across all asyncio frameworks.

Uvicorn currently supports HTTP/1.1 and WebSockets. Support for HTTP/2 is planned.

Quickstart

Install using pip:

$ pip install uvicorn

This will install uvicorn with minimal (pure Python) dependencies.

$ pip install uvicorn[standard]

This will install uvicorn with "Cython-based" dependencies (where possible) and other "optional extras".

In this context, "Cython-based" means the following:

  • the event loop uvloop will be installed and used if possible.
  • the http protocol will be handled by httptools if possible.

Moreover, "optional extras" means that:

  • the websocket protocol will be handled by websockets (should you want to use wsproto you'd need to install it manually) if possible.
  • the --reloader flag in development mode will use watchgod.
  • windows users will have colorama installed for the colored logs.
  • python-dotenv will be installed should you want to use the --env-file option.
  • PyYAML will be installed to allow you to provide a .yaml file to --log-config, if desired.

Create an application, in example.py:

async def app(scope, receive, send):
    assert scope['type'] == 'http'

    await send({
        'type': 'http.response.start',
        'status': 200,
        'headers': [
            [b'content-type', b'text/plain'],
        ],
    })
    await send({
        'type': 'http.response.body',
        'body': b'Hello, world!',
    })

Run the server:

$ uvicorn example:app

Uvicorn is BSD licensed code.
Designed & built in Brighton, England.

β€” πŸ¦„ β€”

You can’t perform that action at this time.