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)
Official mirror of https://gitlab.com/pgjones/quart

Quart Quart is an async Python web microframework. Using Quart you can, render and serve HTML templates, write (RESTful) JSON APIs, serve WebSockets,

Phil Jones 2 Oct 05, 2022
Free and open source full-stack enterprise framework for agile development of secure database-driven web-based applications, written and programmable in Python.

Readme web2py is a free open source full-stack framework for rapid development of fast, scalable, secure and portable database-driven web-based applic

2k Dec 31, 2022
Online Boutique is a cloud-native microservices demo application

Online Boutique is a cloud-native microservices demo application. Online Boutique consists of a 10-tier microservices application. The application is

Matt Reider 1 Oct 22, 2021
Web framework based on type hint。

Hint API 中文 | English 基于 Type hint 的 Web 框架 hintapi 文档 hintapi 实现了 WSGI 接口,并使用 Radix Tree 进行路由查找。是最快的 Python web 框架之一。一切特性都服务于快速开发高性能的 Web 服务。 大量正确的类型

Aber 19 Dec 02, 2022
Pyrin is an application framework built on top of Flask micro-framework to make life easier for developers who want to develop an enterprise application using Flask

Pyrin A rich, fast, performant and easy to use application framework to build apps using Flask on top of it. Pyrin is an application framework built o

Mohamad Nobakht 10 Jan 25, 2022
The lightning-fast ASGI server. ?

The lightning-fast ASGI server. Documentation: https://www.uvicorn.org Community: https://discuss.encode.io/c/uvicorn Requirements: Python 3.6+ (For P

Encode 6k Jan 03, 2023
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
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
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
Python Wrapper for interacting with the Flutterwave API

Python Flutterwave Description Python Wrapper for interacting with the Flutterwa

William Otieno 32 Dec 14, 2022
A shopping list and kitchen inventory management app.

Flask React Project This is the backend for the Flask React project. Getting started Clone this repository (only this branch) git clone https://github

11 Jun 03, 2022
A Flask API REST to access words' definition

A Flask API to access words' definitions

Pablo Emídio S.S 9 Jul 22, 2022
A public API written in Python using the Flask web framework to determine the direction of a road sign using AI

python-public-API This repository is a public API for solving the problem of the final of the AIIJC competition. The task is to create an AI for the c

Lev 1 Nov 08, 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
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
The little ASGI framework that shines. ?

✨ The little ASGI framework that shines. ✨ Documentation: https://www.starlette.io/ Community: https://discuss.encode.io/c/starlette Starlette Starlet

Encode 7.7k Jan 01, 2023
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
A tool for quickly creating REST/HATEOAS/Hypermedia APIs in python

ripozo Ripozo is a tool for building RESTful/HATEOAS/Hypermedia apis. It provides strong, simple, and fully qualified linking between resources, the a

Vertical Knowledge 198 Jan 07, 2023
The Web framework for perfectionists with deadlines.

Django Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Thanks for checking it out. All docu

Django 67.9k Dec 29, 2022
Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.

Tornado Web Server Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed. By using non-blocking ne

20.9k Jan 01, 2023