Developer centric, performant and extensible Python ASGI framework

Overview

Xpresso

Test Coverage Package version Supported Python versions

Introduction

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.

Comments
  • Pip can't resolve dependencies

    Pip can't resolve dependencies

    I'm having some trouble installing the following from a requirements file:

    jinja2
    piccolo[postgres]
    piccolo_admin
    xpresso
    uvicorn
    

    Pip can't resolve the dependencies and gets caught in an endless loop.

    It only started today - I noticed because the CI started failing. I can't see anything in the latest Xpresso release which may have caused this.

    Do you have any ideas?

    opened by dantownsend 10
  • Cannot import name 'DependantBase' from 'di.api.dependencies'

    Cannot import name 'DependantBase' from 'di.api.dependencies'

    I'm getting this error when running Xpresso:

    from di.api.dependencies import DependantBase
    ImportError: cannot import name 'DependantBase' from 'di.api.dependencies'
    

    I see you renamed something in di recently. How about putting something like this for backwards compatibility:

    DependantBase = DependentBase
    
    opened by dantownsend 6
  • feat/refactor!: router-level middleware, support for lifespans on mounted apps

    feat/refactor!: router-level middleware, support for lifespans on mounted apps

    Closes #32

    This is a middle road of where we are now and #32: App is not longer based on Starlette, but Router still inherits from Starlette's Router and adds middleware on top of it

    opened by adriangb 6
  • chore(dev): Improve low Code and Refactor Functions

    chore(dev): Improve low Code and Refactor Functions

    Hello @adriangb It's been a long time we talk about the projects, I just find the right time to do some improvement in code may be related to styling and improving code to use the last Pythonic ways, that's why!

    I guess you will find most of the refactor functions are:

    • Simplifies boolean if expressions by removing unnecessary explicit references to True or False states.
    • Replaces conditional assignment to a variable with an if expression

    And other ones, also sorry for this Big Pull request 😅

    opened by yezz123 4
  • feat: add @Router.get, @Router.put, etc. decorators to Router

    feat: add @Router.get, @Router.put, etc. decorators to Router

    Background: https://github.com/encode/starlette/pull/704

    There are pros and cons to the decorator / list of routes approach. I think the big pro of the decorator approach is having the path parameters close to the endpoint function. The main con is that it introduces a lot of code paths, for example with App.add_middleware() and the relationship between App and App.router.

    A good compromise may be to add decorators only for Path. This gives us the best of both worlds:

    • Path parameter declarations are close to where they are used
    • There is no complicated state management (Path is pretty simple)
    • Other classes are boilerplate free and have simple declarative constructor composability

    The main issue is how to deal with Operation. I guess we'd have to make the decorators accept all of the parameters of Operation, which I don't like.

    opened by adriangb 3
  • feat: add App.dependency_overrides

    feat: add App.dependency_overrides

    App.dependency_overrides can be used as a mapping or context manager that yields a mapping

    This reduces a lot of boilerplate for users by wrapping their callable in Depends for them and shortening the function calls. It also acts as an ExitStack: users can assign overrides without increasing indentation and they all get unwound when the underlaying context manager exits.

    opened by adriangb 2
  • bug: repeated vs comma separated array headers

    bug: repeated vs comma separated array headers

    As per specs, these should be treated as equivalent. But I believe we are only dealing with the latter right now. It might make sense to double check what the ASGI spec, the HTTP specs, the OpenAPI spec, requests/TesClient and finally Starlette have to say about the matter and then fix the issue (if there is one)

    opened by adriangb 2
  • chore(deps): bump certifi from 2022.9.24 to 2022.12.7

    chore(deps): bump certifi from 2022.9.24 to 2022.12.7

    Bumps certifi from 2022.9.24 to 2022.12.7.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • chore(deps-dev): bump httpx from 0.18.1 to 0.23.0

    chore(deps-dev): bump httpx from 0.18.1 to 0.23.0

    Bumps httpx from 0.18.1 to 0.23.0.

    Release notes

    Sourced from httpx's releases.

    Version 0.23.0

    0.23.0 (23rd May, 2022)

    Changed

    • Drop support for Python 3.6. (#2097)
    • Use utf-8 as the default character set, instead of falling back to charset-normalizer for auto-detection. To enable automatic character set detection, see the documentation. (#2165)

    Fixed

    • Fix URL.copy_with for some oddly formed URL cases. (#2185)
    • Digest authentication should use case-insensitive comparison for determining which algorithm is being used. (#2204)
    • Fix console markup escaping in command line client. (#1866)
    • When files are used in multipart upload, ensure we always seek to the start of the file. (#2065)
    • Ensure that iter_bytes never yields zero-length chunks. (#2068)
    • Preserve Authorization header for redirects that are to the same origin, but are an http-to-https upgrade. (#2074)
    • When responses have binary output, don't print the output to the console in the command line client. Use output like <16086 bytes of binary data> instead. (#2076)
    • Fix display of --proxies argument in the command line client help. (#2125)
    • Close responses when task cancellations occur during stream reading. (#2156)
    • Fix type error on accessing .request on HTTPError exceptions. (#2158)

    Version 0.22.0

    0.22.0 (26th January, 2022)

    Added

    Fixed

    • Don't perform unreliable close/warning on __del__ with unclosed clients. (#2026)
    • Fix Headers.update(...) to correctly handle repeated headers (#2038)

    Version 0.21.3

    0.21.3 (6th January, 2022)

    Fixed

    • Fix streaming uploads using SyncByteStream or AsyncByteStream. Regression in 0.21.2. (#2016)

    Version 0.21.2

    0.21.2 (5th January, 2022)

    Fixed

    • HTTP/2 support for tunnelled proxy cases. (#2009)
    • Improved the speed of large file uploads. (#1948)

    Version 0.21.1

    ... (truncated)

    Changelog

    Sourced from httpx's changelog.

    0.23.0 (23rd May, 2022)

    Changed

    • Drop support for Python 3.6. (#2097)
    • Use utf-8 as the default character set, instead of falling back to charset-normalizer for auto-detection. To enable automatic character set detection, see the documentation. (#2165)

    Fixed

    • Fix URL.copy_with for some oddly formed URL cases. (#2185)
    • Digest authentication should use case-insensitive comparison for determining which algorithm is being used. (#2204)
    • Fix console markup escaping in command line client. (#1866)
    • When files are used in multipart upload, ensure we always seek to the start of the file. (#2065)
    • Ensure that iter_bytes never yields zero-length chunks. (#2068)
    • Preserve Authorization header for redirects that are to the same origin, but are an http-to-https upgrade. (#2074)
    • When responses have binary output, don't print the output to the console in the command line client. Use output like <16086 bytes of binary data> instead. (#2076)
    • Fix display of --proxies argument in the command line client help. (#2125)
    • Close responses when task cancellations occur during stream reading. (#2156)
    • Fix type error on accessing .request on HTTPError exceptions. (#2158)

    0.22.0 (26th January, 2022)

    Added

    Fixed

    • Don't perform unreliable close/warning on __del__ with unclosed clients. (#2026)
    • Fix Headers.update(...) to correctly handle repeated headers (#2038)

    0.21.3 (6th January, 2022)

    Fixed

    • Fix streaming uploads using SyncByteStream or AsyncByteStream. Regression in 0.21.2. (#2016)

    0.21.2 (5th January, 2022)

    Fixed

    • HTTP/2 support for tunnelled proxy cases. (#2009)
    • Improved the speed of large file uploads. (#1948)

    0.21.1 (16th November, 2021)

    Fixed

    • The response.url property is now correctly annotated as URL, instead of Optional[URL]. (#1940)

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • refactor!: change binder API to modify OpenAPI schema in place

    refactor!: change binder API to modify OpenAPI schema in place

    This paves the path for more OpenAPI generation (security models and such) without bloating the API, at the cost of shifting some responsibilies to each implementer instead of centralizing them in the OpenAPI generation infra

    opened by adriangb 1
  • chore: simplify binder APIs by dropping support for generic field extractors

    chore: simplify binder APIs by dropping support for generic field extractors

    BREAKING_CHANGE: removed ExtractField and ExtractRepeatedField. Extracting JSON from a form field is no longer supported. Changes to generated OpenAPI.

    I think proving out the idea of very generic extractors (e.g.FromRepeatedFormField[FromJson[Model]]) was interesting. It also helped shape some APIs. But I don't think this is a feature I would use all that often, and so I would prefer to get some real world use cases form users before exposing these sorts of APIs. We can add these APIs in the future, but we can't remove them (without breaking changes).

    Removing this functionality (and refactoring the binder APIs and implementations) we can arrive at a much simpler system (2 interfaces / ~2 functions to implement the binder API), and reduce the package's codebase by ~15%.

    There's a lot more cleanup that needs to be done with tests after this (e.g. coverage for the file extractor); that will be done in subsequent changes.

    opened by adriangb 1
  • chore(deps): bump setuptools from 65.4.1 to 65.5.1

    chore(deps): bump setuptools from 65.4.1 to 65.5.1

    Bumps setuptools from 65.4.1 to 65.5.1.

    Changelog

    Sourced from setuptools's changelog.

    v65.5.1

    Misc ^^^^

    • #3638: Drop a test dependency on the mock package, always use :external+python:py:mod:unittest.mock -- by :user:hroncok
    • #3659: Fixed REDoS vector in package_index.

    v65.5.0

    Changes ^^^^^^^

    • #3624: Fixed editable install for multi-module/no-package src-layout projects.
    • #3626: Minor refactorings to support distutils using stdlib logging module.

    Documentation changes ^^^^^^^^^^^^^^^^^^^^^

    • #3419: Updated the example version numbers to be compliant with PEP-440 on the "Specifying Your Project’s Version" page of the user guide.

    Misc ^^^^

    • #3569: Improved information about conflicting entries in the current working directory and editable install (in documentation and as an informational warning).
    • #3576: Updated version of validate_pyproject.
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Make response scraping from return values pluggable

    Make response scraping from return values pluggable

    https://github.com/adriangb/xpresso/pull/106#discussion_r968491622

    While it is currently possible to use a combination of the reponse_factory parameter to Operation and explicitly setting the response schema via the responses parameter to Operation to support non-Pydantic responses, it is super boilerplatey and cumbersome.

    opened by adriangb 1
  • doc: binder example for msgspec

    doc: binder example for msgspec

    cc @jcrist

    I'm not covering a bunch of edge cases and additional features (empty bodies, include_in_schema=False, descriptions, etc.) nor am I covering doing the same thing for query/path/etc. params. I think it would be interesting as a 3rd party package though!

    opened by adriangb 3
  • Add section to the docs about ecosystem / ASGI integration?

    Add section to the docs about ecosystem / ASGI integration?

    I know it's still early days for Xpresso, but how about an ecosystem page in the docs?

    I know Piccolo is compatible, and there's bound to be other generic ASGI middleware etc which is known to work.

    Just an idea.

    opened by dantownsend 1
  • POC for security classes using Protocol

    POC for security classes using Protocol

    This uses Protocols to create "template classes": classes that give you errors if you don't implement all of the required class variables.

    This at least allows some typechecking of missing parameters and wrongly typed parameters

    Screenshot 2022-02-27 223825 Screenshot 2022-02-27 223609
    opened by adriangb 1
Releases(0.46.0)
  • 0.46.0(Dec 21, 2022)

    What's Changed

    • fix: rename things to match di>=0.73.0 and pin di by @adriangb in https://github.com/adriangb/xpresso/pull/112
    • chore: fix ci by removing httptools (doesn't build 3.11 wheels) by @adriangb in https://github.com/adriangb/xpresso/pull/113
    • fix: bump minimum Pydantic version for compatibility with 3.11 by @adriangb in https://github.com/adriangb/xpresso/pull/114
    • feat!: rename FromFile and File to FromRawBody and RawBody by @adriangb in https://github.com/adriangb/xpresso/pull/117

    Full Changelog: https://github.com/adriangb/xpresso/compare/0.44.1...0.46.0

    Source code(tar.gz)
    Source code(zip)
  • 0.44.1(Oct 6, 2022)

  • 0.44.0(Oct 6, 2022)

    What's Changed

    • Update Starlette to >=0.21.0 by @adriangb in https://github.com/adriangb/xpresso/pull/108

    Full Changelog: https://github.com/adriangb/xpresso/compare/0.43.0...0.44.0

    Source code(tar.gz)
    Source code(zip)
  • 0.43.0(Oct 5, 2022)

    What's Changed

    • Pin importlib-metadata by @adriangb in https://github.com/adriangb/xpresso/pull/110
    • don't run sync dependencies in threads by default by @adriangb in https://github.com/adriangb/xpresso/pull/109

    Full Changelog: https://github.com/adriangb/xpresso/compare/0.42.3...0.43.0

    Source code(tar.gz)
    Source code(zip)
  • 0.42.3(Sep 12, 2022)

  • 0.42.2(Sep 12, 2022)

  • 0.42.1(Sep 9, 2022)

    What's Changed

    • fix minor typo in docs included -> include by @dantownsend in https://github.com/adriangb/xpresso/pull/102
    • chore: fix nightly tests by @adriangb in https://github.com/adriangb/xpresso/pull/105
    • doc: update examples to reflect dependency scope inference by @adriangb in https://github.com/adriangb/xpresso/pull/104

    Full Changelog: https://github.com/adriangb/xpresso/compare/0.42.0...0.42.1

    Source code(tar.gz)
    Source code(zip)
  • 0.42.0(Aug 8, 2022)

    What's Changed

    • Incorporate scope inference by @adriangb in https://github.com/adriangb/xpresso/pull/101

    Full Changelog: https://github.com/adriangb/xpresso/compare/0.41.2...0.42.0

    Source code(tar.gz)
    Source code(zip)
  • 0.41.2(Aug 3, 2022)

  • 0.41.1(Jun 2, 2022)

    What's Changed

    • chore: update lockfile by @adriangb in https://github.com/adriangb/xpresso/pull/98
    • chore(deps-dev): bump httpx from 0.18.1 to 0.23.0 by @dependabot in https://github.com/adriangb/xpresso/pull/99
    • fix: compatibility with pydantic master branch by @adriangb in https://github.com/adriangb/xpresso/pull/100

    New Contributors

    • @dependabot made their first contribution in https://github.com/adriangb/xpresso/pull/99

    Full Changelog: https://github.com/adriangb/xpresso/compare/0.41.0...0.41.1

    Source code(tar.gz)
    Source code(zip)
  • 0.41.0(Apr 27, 2022)

    What's Changed

    • feat: support context managers for extractors by @adriangb in https://github.com/adriangb/xpresso/pull/95

    Full Changelog: https://github.com/adriangb/xpresso/compare/0.40.0...0.41.0

    Source code(tar.gz)
    Source code(zip)
  • 0.40.0(Apr 22, 2022)

    What's Changed

    • refactor!: change binder API to modify OpenAPI schema in place by @adriangb in https://github.com/adriangb/xpresso/pull/94

    Full Changelog: https://github.com/adriangb/xpresso/compare/0.39.0...0.40.0

    Source code(tar.gz)
    Source code(zip)
  • 0.39.0(Apr 22, 2022)

    What's Changed

    • Update query_params.py by @Kludex in https://github.com/adriangb/xpresso/pull/92
    • feat: allow binding of dependencies from within lifespans by @adriangb in https://github.com/adriangb/xpresso/pull/93

    New Contributors

    • @Kludex made their first contribution in https://github.com/adriangb/xpresso/pull/92

    Full Changelog: https://github.com/adriangb/xpresso/compare/0.38.3...0.39.0

    Source code(tar.gz)
    Source code(zip)
  • 0.38.3(Apr 18, 2022)

  • 0.38.2(Apr 15, 2022)

  • 0.38.1(Apr 15, 2022)

  • 0.38.0(Apr 3, 2022)

  • 0.37.0(Apr 2, 2022)

  • 0.35.0(Apr 2, 2022)

  • 0.34.1(Mar 28, 2022)

  • 0.34.0(Mar 26, 2022)

  • 0.33.0(Mar 25, 2022)

  • 0.32.0(Mar 24, 2022)

    What's Changed

    • chore: simplify binder APIs by dropping support for generic field extractors by @adriangb in https://github.com/adriangb/xpresso/pull/90

    Full Changelog: https://github.com/adriangb/xpresso/compare/0.31.1...0.32.0

    Source code(tar.gz)
    Source code(zip)
  • 0.31.1(Mar 17, 2022)

  • 0.31.0(Mar 17, 2022)

    What's Changed

    • feat: handle merging of response specs by @adriangb in https://github.com/adriangb/xpresso/pull/89

    Full Changelog: https://github.com/adriangb/xpresso/compare/0.30.0...0.31.0

    Source code(tar.gz)
    Source code(zip)
  • 0.30.0(Mar 16, 2022)

    What's Changed

    • fix!: rename Config -> BaseConfig to avoid name collisions with pydantic.BaseSettings.Config by @adriangb in https://github.com/adriangb/xpresso/pull/88

    Full Changelog: https://github.com/adriangb/xpresso/compare/0.29.0...0.30.0

    Source code(tar.gz)
    Source code(zip)
  • 0.29.0(Mar 13, 2022)

    What's Changed

    • feat: accept files as streams by @adriangb in https://github.com/adriangb/xpresso/pull/87

    Full Changelog: https://github.com/adriangb/xpresso/compare/0.28.3...0.29.0

    Source code(tar.gz)
    Source code(zip)
  • 0.28.3(Mar 12, 2022)

    What's Changed

    • chore: cleanup Operation and Path by @adriangb in https://github.com/adriangb/xpresso/pull/86

    Full Changelog: https://github.com/adriangb/xpresso/compare/0.28.2...0.28.3

    Source code(tar.gz)
    Source code(zip)
  • 0.28.2(Mar 11, 2022)

    What's Changed

    • fix: support starlette>=0.17.1 by @adriangb in https://github.com/adriangb/xpresso/pull/85

    Full Changelog: https://github.com/adriangb/xpresso/compare/0.28.1...0.28.2

    Source code(tar.gz)
    Source code(zip)
  • 0.28.1(Mar 11, 2022)

    What's Changed

    • chore: remove importlib-metadata dependency by @adriangb in https://github.com/adriangb/xpresso/pull/84

    Full Changelog: https://github.com/adriangb/xpresso/compare/0.28.0...0.28.1

    Source code(tar.gz)
    Source code(zip)
APIFlask is a lightweight Python web API framework based on Flask and marshmallow-code projects

APIFlask APIFlask is a lightweight Python web API framework based on Flask and marshmallow-code projects. It's easy to use, highly customizable, ORM/O

Grey Li 705 Jan 04, 2023
Pyramid - A Python web framework

Pyramid Pyramid is a small, fast, down-to-earth, open source Python web framework. It makes real-world web application development and deployment more

Pylons Project 3.7k Dec 30, 2022
FastAPI framework, high performance, easy to learn, fast to code, ready for production

FastAPI framework, high performance, easy to learn, fast to code, ready for production Documentation: https://fastapi.tiangolo.com Source Code: https:

Sebastián Ramírez 53k Jan 02, 2023
Chisel is a light-weight Python WSGI application framework built for creating well-documented, schema-validated JSON web APIs

chisel Chisel is a light-weight Python WSGI application framework built for creating well-documented, schema-validated JSON web APIs. Here are its fea

Craig Hobbs 2 Dec 02, 2021
Bionic is Python Framework for crafting beautiful, fast user experiences for web and is free and open source

Bionic is fast. It's powered core python without any extra dependencies. Bionic offers stateful hot reload, allowing you to make changes to your code and see the results instantly without restarting

âš“ 0 Mar 05, 2022
Cses2humio - CrowdStrike Falcon Event Stream to Humio

CrowdStrike Falcon Event Stream to Humio This project intend to provide a simple

Trifork.Security 6 Aug 02, 2022
Dazzler is a Python async UI/Web framework built with aiohttp and react.

Dazzler is a Python async UI/Web framework built with aiohttp and react. Create dazzling fast pages with a layout of Python components and bindings to update from the backend.

Philippe Duval 17 Oct 18, 2022
The source code to the Midnight project

MidnightSniper Started: 24/08/2021 Ended: 24/10/2021 What? This is the source code to a project developed to snipe minecraft names Why release? The ad

Kami 2 Dec 03, 2021
Try to create a python mircoservice framework.

Micro current_status: prototype. ... Python microservice framework. More in Document. You should clone this project and run inv docs. Install Not now.

修昊 1 Dec 07, 2021
FPS, fast pluggable server, is a framework designed to compose and run a web-server based on plugins.

FPS, fast pluggable server, is a framework designed to compose and run a web-server based on plugins. It is based on top of fastAPI, uvicorn, typer, and pluggy.

Adrien Delsalle 1 Nov 16, 2021
A microservice written in Python detecting nudity in images/videos

py-nudec py-nudec (python nude detector) is a microservice, which scans all the images and videos from the multipart/form-data request payload and sen

Michael Grigoryan 8 Jul 09, 2022
Python Wrapper for interacting with the Flutterwave API

Python Flutterwave Description Python Wrapper for interacting with the Flutterwa

William Otieno 32 Dec 14, 2022
The web framework for inventors

Emmett is a full-stack Python web framework designed with simplicity in mind. The aim of Emmett is to be clearly understandable, easy to be learned an

Emmett 796 Dec 26, 2022
Lemon is an async and lightweight API framework for python

Lemon is an async and lightweight API framework for python . Inspired by Koa and Sanic .

Joway 29 Nov 20, 2022
Distribution Analyser is a Web App that allows you to interactively explore continuous distributions from SciPy and fit distribution(s) to your data.

Distribution Analyser Distribution Analyser is a Web App that allows you to interactively explore continuous distributions from SciPy and fit distribu

Robert Dzudzar 46 Nov 08, 2022
Klein - A micro-framework for developing production-ready web services with Python

Klein, a Web Micro-Framework Klein is a micro-framework for developing production-ready web services with Python. It is 'micro' in that it has an incr

Twisted Matrix Labs 814 Jan 08, 2023
WAZO REST API for the call management of the C4 infrastructure

wazo-router-calld wazo-router-calld provides REST API for the C4 infrastructure. Installing wazo-router-calld The server is already provided as a part

Wazo Platform 4 Dec 21, 2022
A high-level framework for building GitHub applications in Python.

A high-level framework for building GitHub applications in Python. Core Features Async Proper ratelimit handling Handles interactions for you (

Vish M 3 Apr 12, 2022
Async Python 3.6+ web server/framework | Build fast. Run fast.

Sanic | Build fast. Run fast. Build Docs Package Support Stats Sanic is a Python 3.6+ web server and web framework that's written to go fast. It allow

Sanic Community Organization 16.7k Jan 08, 2023
A PC remote controller for YouTube and Twitch

Lazynite Lazynite is a PC remote controller for YouTube and Twitch on Telegram. Features Volume control; Browser fullscreen / video fullscreen; PC shu

Alessio Celentano 46 Nov 12, 2022