Skip to main content

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.46.0

Release files for xpresso 0.46.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for xpresso 0.46.0
File Size Uploaded
xpresso-0.46.0.tar.gz 44.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for xpresso 0.46.0
File Interpreter ABI Platform
xpresso-0.46.0-py3-none-any.whl Python 3 none any Details

Total release size: 107.0 kB

Release files / xpresso-0.46.0.tar.gz

Download URL xpresso-0.46.0.tar.gz
Size 44.2 kB
Tags Source
SHA-256 checksum
How to use checksums
04eb84086f49e8e8c8876e9c4f42e427b87497369d91afca6d464ab17b2ee91f
BLAKE2b-256 checksum
How to use checksums
9b37aa86b88be41bbf2a15264012076ab974b16390b625d8741cfcb6f1d9e306
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.13 CPython/3.11.1 Linux/5.15.0-1024-azure

Release files / xpresso-0.46.0-py3-none-any.whl

Download URL xpresso-0.46.0-py3-none-any.whl
Size 62.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
72034522eee732a78c4ddf67ec6c10080b499eb9e7f32dba43d5464b0a71b5d1
BLAKE2b-256 checksum
How to use checksums
2150a4fd8df8b74590c18a1381a7774cc137a7882d70203d48ef6dc211410f9f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.13 CPython/3.11.1 Linux/5.15.0-1024-azure

Release history Release notifications | RSS feed

This release

0.46.0 This release

2 release files

0.45.1

1 release file

0.42.3

2 release files

0.42.2

2 release files

0.41.0

2 release files

0.40.0

2 release files

0.39.0

2 release files

0.38.3

2 release files

0.38.2

2 release files

0.38.1

2 release files

0.34.1

2 release files

0.34.0

2 release files

0.33.0

2 release files

0.32.0

2 release files

0.31.1

2 release files

0.31.0

2 release files

0.30.0

2 release files

0.29.0

2 release files

0.28.3

2 release files

0.28.2

2 release files

0.28.1

2 release files

0.28.0

2 release files

0.22.1

2 release files

0.21.1

2 release files

0.21.0

2 release files

0.20.2

2 release files

0.20.1

2 release files

0.20.0

2 release files

0.19.0

2 release files

0.18.1

2 release files

0.18.0

2 release files

0.17.1

2 release files

0.17.0

2 release files

0.9.4

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.8.0

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.6

2 release files

0.6.5

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page