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 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
WebSocket and WAMP in Python for Twisted and asyncio

Autobahn|Python WebSocket & WAMP for Python on Twisted and asyncio. Quick Links: Source Code - Documentation - WebSocket Examples - WAMP Examples Comm

Crossbar.io 2.4k Jan 06, 2023
Web3.py plugin for using Flashbots' bundle APIs

This library works by injecting a new module in the Web3.py instance, which allows submitting "bundles" of transactions directly to miners. This is done by also creating a middleware which captures c

Georgios Konstantopoulos 294 Jan 04, 2023
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
Asita is a web application framework for python.

What is Asita ? Asita is a web application framework for python. It is designed to be easy to use and be more easy for javascript users to use python

Mattéo 4 Nov 16, 2021
Bromelia-hss implements an HSS by using the Python micro framework Bromélia.

Bromélia HSS bromelia-hss is the second official implementation of a Diameter-based protocol application by using the Python micro framework Bromélia.

henriquemr 7 Nov 02, 2022
Quiz Web App with Flask and MongoDB as the Databases

quiz-app Quiz Web Application made with flask and mongodb as the Databases Before you run this application, change the inside MONGODB_URI ( in config.

gibran abdillah 7 Dec 14, 2022
Python AsyncIO data API to manage billions of resources

Introduction Please read the detailed docs This is the working project of the next generation Guillotina server based on asyncio. Dependencies Python

Plone Foundation 183 Nov 15, 2022
Python implementation of the Javascript Object Signing and Encryption (JOSE) framework

Python implementation of the Javascript Object Signing and Encryption (JOSE) framework

Demonware 94 Nov 20, 2022
You can use the mvc pattern in your flask application using this extension.

You can use the mvc pattern in your flask application using this extension. Installation Run the follow command to install mvc_flask: $ pip install mv

Marcus Pereira 37 Dec 17, 2022
CherryPy is a pythonic, object-oriented HTTP framework. https://docs.cherrypy.org/

Welcome to the GitHub repository of CherryPy! CherryPy is a pythonic, object-oriented HTTP framework. It allows building web applications in much the

CherryPy 1.6k Dec 29, 2022
Trame let you weave various components and technologies into a Web Application solely written in Python.

Trame Trame aims to be a framework for building interactive applications using a web front-end in plain Python. Such applications can be used locally

Kitware, Inc. 85 Dec 29, 2022
Django Ninja - Fast Django REST Framework

Django Ninja is a web framework for building APIs with Django and Python 3.6+ type hints.

Vitaliy Kucheryaviy 3.8k Jan 02, 2023
Low code web framework for real world applications, in Python and Javascript

Full-stack web application framework that uses Python and MariaDB on the server side and a tightly integrated client side library.

Frappe 4.3k Dec 30, 2022
A Python package to easily create APIs in Python.

API_Easy An Python Package for easily create APIs in Python pip install easy-api-builder Requiremnets: = python 3.6 Required modules -- Flask Docume

Envyre-Coding 2 Jan 04, 2022
An easy-to-use high-performance asynchronous web framework.

中文 | English 一个易用的高性能异步 web 框架。 Index.py 文档 Index.py 实现了 ASGI3 接口,并使用 Radix Tree 进行路由查找。是最快的 Python web 框架之一。一切特性都服务于快速开发高性能的 Web 服务。 大量正确的类型注释 灵活且高效的

Index.py 264 Dec 31, 2022
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
Flask like web framework for AWS Lambda

lambdarest Python routing mini-framework for AWS Lambda with optional JSON-schema validation. ⚠️ A user study is currently happening here, and your op

sloev / Johannes Valbjørn 91 Nov 10, 2022
The Python micro framework for building web applications.

Flask Flask is a lightweight WSGI web application framework. It is designed to make getting started quick and easy, with the ability to scale up to co

The Pallets Projects 61.5k Jan 06, 2023
Full duplex RESTful API for your asyncio web apps

TBone TBone makes it easy to develop full-duplex RESTful APIs on top of your asyncio web application or webservice. It uses a nonblocking asynchronous

TBone Framework 37 Aug 07, 2022