Skip to main content

A developer centric, performant Python web framework

Project description

Xpresso

Test Coverage Package version Supported Python versions

Xpresso is an ASGI web framework built on top of Starlette, Pydantic and di, with heavy inspiration from FastAPI.

Some of the standout features are:

  • ASGI support for high performance (within the context of Python web frameworks)
  • OpenAPI documentation generation
  • Automatic parsing and validation of request bodies and parameters, with hooks for custom extractors
  • Full support for OpenAPI parameter serialization
  • Highly typed and tested codebase with great IDE support
  • A powerful dependency injection system, backed by di

Requirements

Python 3.7+

Installation

pip install xpresso

You'll also want to install an ASGI server, such as Uvicorn.

pip install uvicorn

Example

Create a file named example.py:

from pydantic import BaseModel
from xpresso import App, Path, FromPath, FromQuery

class Item(BaseModel):
    item_id: int
    name: str

async def read_item(item_id: FromPath[int], name: FromQuery[str]) -> Item:
    return Item(item_id=item_id, name=name)

app = App(
    routes=[
        Path(
            "/items/{item_id}",
            get=read_item,
        )
    ]
)

Run the application:

uvicorn example:app

Navigate to http://127.0.0.1:8000/items/123?name=foobarbaz in your browser. You will get the following JSON response:

{"item_id":123,"name":"foobarbaz"}

Now navigate to http://127.0.0.1:8000/docs to poke around the interactive Swagger UI documentation:

Swagger UI

For more examples, tutorials and reference materials, see our documentation.

Inspiration and relationship to other frameworks

Xpresso is mainly inspired by FastAPI. FastAPI pioneered several ideas that are core to Xpresso's approach:

  • Leverage Pydantic for JSON parsing, validation and schema generation.
  • Leverage Starlette for routing and other low level web framework functionality.
  • Provide a simple but powerful dependency injection system.
  • Use that dependency injection system to provide extraction of request bodies, forms, query parameters, etc.

Xpresso takes these ideas and refines them by:

Current state

This project is under active development. It should not be considered "stable" or ready to be used in production. It is however ready for experimentation and learning!

What is implemented and mostly stable?

  1. Extraction and OpenAPI documentation of parameters (query, headers, etc.) and request bodies (including multipart requests).
  2. Parameter serialization.
  3. Routing, including applications, routers and routes.
  4. Dependency injection and testing utilities (dependency overrides).

Most of this APIs will be generally stable going forward, although some minor aspects like argument names will probably change at some point.

What is not implemented or unstable?

  1. Low-level API for binders (stuff in xpresso.binders): this is public, but should be considered experimental and is likely to change. The high level APIs (FromPath[str] and Annotated[str, PathParam(...)]) are likely to be stable.
  2. Security dependencies and OpenAPI integration. This part used to exist, but needed some work. It is planned for the future, but we need to think about the scope of these features and the API.

See this release on GitHub: v0.38.0

Release history Release notifications | RSS feed

Download files

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

Source Distribution

xpresso-0.38.0.tar.gz (42.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

xpresso-0.38.0-py3-none-any.whl (59.8 kB view details)

Uploaded Python 3

File details

Details for the file xpresso-0.38.0.tar.gz.

File metadata

  • Download URL: xpresso-0.38.0.tar.gz
  • Upload date:
  • Size: 42.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.10.2 Linux/5.11.0-1028-azure

File hashes

Hashes for xpresso-0.38.0.tar.gz
Algorithm Hash digest
SHA256 8b7dfadff8c49c5b9f8e7c0c82d38d1c2b24845c4827e53aaaaf1d5e86339486
MD5 0e2fdcc0d009c38ee45fbe5dd062e8d3
BLAKE2b-256 dcbe643334247efc1820edeff045c695c1d55311202e71b1d21aff02f065f008

See more details on using hashes here.

File details

Details for the file xpresso-0.38.0-py3-none-any.whl.

File metadata

  • Download URL: xpresso-0.38.0-py3-none-any.whl
  • Upload date:
  • Size: 59.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.10.2 Linux/5.11.0-1028-azure

File hashes

Hashes for xpresso-0.38.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4f30fccb9633e427b36da75ea8e932ecf0b7a427f1e0587ef5873237da427fb8
MD5 74d9980edd55f2a390d5afb4d68171fc
BLAKE2b-256 d8842e80ef987c3cac4f4303f06c1c49f518a0517b03ae960721f8b541d77b1a

See more details on using hashes here.

Supported by

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