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)
A simple Tornado based framework designed to accelerate web service development

Toto Toto is a small framework intended to accelerate web service development. It is built on top of Tornado and can currently use MySQL, MongoDB, Pos

Jeremy Olmsted-Thompson 61 Apr 06, 2022
Asynchronous HTTP client/server framework for asyncio and Python

Async http client/server framework Key Features Supports both client and server side of HTTP protocol. Supports both client and server Web-Sockets out

aio-libs 13.2k Jan 05, 2023
Flask-Potion is a RESTful API framework for Flask and SQLAlchemy, Peewee or MongoEngine

Flask-Potion Description Flask-Potion is a powerful Flask extension for building RESTful JSON APIs. Potion features include validation, model resource

DTU Biosustain 491 Dec 08, 2022
Bablyon 🐍 A small ASGI web framework

A small ASGI web framework that you can make asynchronous web applications using uvicorn with using few lines of code

xArty 8 Dec 07, 2021
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
An effective, simple, and async security library for the Sanic framework.

Sanic Security An effective, simple, and async security library for the Sanic framework. Table of Contents About the Project Getting Started Prerequis

Sunset Dev 72 Nov 30, 2022
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
A boilerplate Flask API for a Fullstack Project with some additional packages and configuration prebuilt. ⚙

Flask Boilerplate to quickly get started with production grade flask application with some additional packages and configuration prebuilt.

Yasser Tahiri 32 Dec 24, 2022
A simple todo app using flask and sqlachemy

TODO app This is a simple TODO app made using Flask. Packages used: DoodleCSS Special thanks to Chris McCormick (@mccrmx) :) Flask Flask-SQLAlchemy Fl

Lenin 1 Dec 26, 2021
Fully featured framework for fast, easy and documented API development with Flask

Flask RestPlus IMPORTANT NOTICE: This project has been forked to Flask-RESTX and will be maintained by by the python-restx organization. Flask-RESTPlu

Axel H. 2.7k 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
O SnakeG é um WSGI feito para suprir necessidadades de perfomance e segurança.

SnakeG O SnakeG é um WSGI feito para suprir necessidadades de perfomance e segurança. Veja o que o SnakeG possui: Multiprocessamento de requisições HT

Jaedson Silva 1 Jul 02, 2022
Loan qualifier app - Loan Qualifier Application Built With Python

Loan Qualifier Application This program is designed to automate the discovery pr

Phil Hills 1 Jan 04, 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
cirrina is an opinionated asynchronous web framework based on aiohttp

cirrina cirrina is an opinionated asynchronous web framework based on aiohttp. Features: HTTP Server Websocket Server JSON RPC Server Shared sessions

André Roth 32 Mar 05, 2022
Light, Flexible and Extensible ASGI API framework

Starlite Starlite is a light, opinionated and flexible ASGI API framework built on top of pydantic and Starlette. Check out the Starlite documentation

Na'aman Hirschfeld 1.6k Jan 09, 2023
Pulumi-checkly - Checkly Pulumi Provider With Python

🚨 This project is still in very early stages and is not stable, use at your own

Checkly 16 Dec 15, 2022
The no-nonsense, minimalist REST and app backend framework for Python developers, with a focus on reliability, correctness, and performance at scale.

The Falcon Web Framework Falcon is a reliable, high-performance Python web framework for building large-scale app backends and microservices. It encou

Falconry 9k Jan 01, 2023
web.py is a web framework for python that is as simple as it is powerful.

web.py is a web framework for Python that is as simple as it is powerful. Visit http://webpy.org/ for more information. The latest stable release 0.62

5.8k Dec 30, 2022
Restful API framework wrapped around MongoEngine

Flask-MongoRest A Restful API framework wrapped around MongoEngine. Setup from flask import Flask from flask_mongoengine import MongoEngine from flask

Close 525 Jan 01, 2023