Skip to main content

msgspec integration for Flask

Project description

flask-msgspec

msgspec integration for Flask

This project was inspired by the flask-pydantic package created by bauerji and the Litestar framework, however while the validate decorator appears similar to the one found in flask-pydantic there are many differences.

Installation

pip install flask-msgspec

Usage

Consider this simple example:

class BodyStructWithConstraints(msgspec.Struct):
    foo: Annotated[int, msgspec.Meta(gt=0, le=100)]
    bar: Annotated[list[str | int], msgspec.Meta(min_length=1)]


@app.post(rule="/test/<uuid:uuid_value>")
@validate()
def test_handler(
    uuid_value: UUID,
    query1: float,
    body: BodyStructWithConstraints,
    optional_query: str = "default_value",
) -> dict:
    return locals()

Here we have a UUID path parameter, a required query parameter of float type, a body of type BodyStructWithConstraints, and an optional query parameter which is a string, the endpoint will return a dictionary of unknown types.

Currently there is only one reserved keyword; body. This tries to convert either request.data or request.form to the specified type.

Similar to how Litestar works, keywords that are neither path parameters or reserved keywords are considered query parameters.

The return type can be set either:

  • via the return_model keyword in validate decorator, or
  • by annotating the function return type. (return_model keyword takes priority)

Sequences/iterables can also be used for return type, e.g.; list[ResponseModel].

The successful response status code can also be changed in two ways:

  • via setting the status_code keyword in validate decorator, or
  • by using the standard Flask syntax of returning a tuple.

Returning a tuple with a status code will override the value set by the status_code keyword.

As you might have noticed mixing these together most likely will cause issues or just going to be annoying to annotate.
Avoid using the standard Flask tuple return syntax to change the status code if you are also using the function return type to annotate the return model. This will cause issues; first with a static type checker, then with the code handling return values and conversion.
In my opinion the response model should be set via annotating the return type of the function and if the status code needs to be changed use the status_code keyword. Additionally, if you need to set headers, then set both, the return type and status code using the keywords of the validate decorator.

You can use msgspec.Struct, dataclass, and most built-in types natively supported by msgspec.

More examples and others stuff will be added soon:tm:.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flask_msgspec-0.0.2.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

flask_msgspec-0.0.2-py3-none-any.whl (5.5 kB view details)

Uploaded Python 3

File details

Details for the file flask_msgspec-0.0.2.tar.gz.

File metadata

  • Download URL: flask_msgspec-0.0.2.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.11.4 Windows/10

File hashes

Hashes for flask_msgspec-0.0.2.tar.gz
Algorithm Hash digest
SHA256 a30cec9d91c5d2f7da0408f06764f02665d5d8fdda285b40240ccbf16e4a9764
MD5 2f9146ed3892b35d004d7d3202cdce3e
BLAKE2b-256 e7c2d5fc0f5501120f994543f41e32902d3d6777ae00a880c3058733fa5b9eeb

See more details on using hashes here.

File details

Details for the file flask_msgspec-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: flask_msgspec-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 5.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.11.4 Windows/10

File hashes

Hashes for flask_msgspec-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6c4851aa365e172477b62e01a6f23aa80d1971856a3dc1f7feeb29e4656c9ef1
MD5 a65eecececd8bf0a546a56a425b84caa
BLAKE2b-256 9b357a3d65dbc3806ad3529e596446558f8310d1dcb39ba022438e40b6ab82ea

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page