Skip to main content

Provides integrations of classic libs with Falcon web framework

Project description

Classic Falcon Integration

Предоставляет простую интеграцию веб-фреймворка Falcon, SpecTree, orjson и classic-error-handling.

Установка

pip install classic-falcon-integration

Quickstart

from falcon import App, Request, Response
from spectree import Response as Responses
from pydantic import BaseModel
import waitress

from classic.components import component
from classic.falcon_integration import specification, register_all
from classic import db_tools


class Pet(BaseModel):
    id: int
    name: str
    age: int


class FilterPets(BaseModel):
    name__contains: list[str] | None = None
    age__le: int | None = None
    age__gt: int | None = None
    id: int | None = None


class NewPet(BaseModel):
    name: str
    age: int


@component
class PetsResource:
    db: db_tools.Engine

    @specification(
        query=FilterPets,
        resp=Responses(
            HTTP_200=list[Pet],
        ),
        operation_id='find_pets',
        tags=['pets'],
    )
    def on_get(self, request: Request, response: Response):
        # Валидация по спецификации отключена по умолчанию,
        # потому вызов валидации обязательно добавлять вручную.
        # Валидацию лучше сего проводить через model_validate,
        # так как далее данные все равно будут переданы в виде dict
        FilterPets.model_validate(request.params)

        # Здесь приведен пример работы с БД с classic-db-tools,
        # но здесь может быть что угодно
        with self.db:
            response.media = self.db.queries.filter_pets(
                **request.params
            ).return_as(
                db_tools.ToCls(Pet, id='id'),
                returns=Pet,
            ).many()

    @specification(
        json=NewPet,
        resp=Responses(
            HTTP_200=Pet,
        ),
        tags=['pets'],
    )
    def on_post(self, request: Request, response: Response):
        NewPet.model_validate(request.media)
        with self.db:
            response.media = self.db.queries.save_pet(
                **request.media,
            )


if __name__ == '__main__':
    app = App()
    app.add_route('/api/pets', PetsResource())
    register_all(app)

    waitress.serve(
        app,
        host='127.0.0.1',
        port='8000',
    )

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

classic_falcon_integration-1.0.2.tar.gz (5.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

classic_falcon_integration-1.0.2-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file classic_falcon_integration-1.0.2.tar.gz.

File metadata

File hashes

Hashes for classic_falcon_integration-1.0.2.tar.gz
Algorithm Hash digest
SHA256 405da3e9011cd530d86536e5da1fcf8ea5c1afba37f1dc082b2f3fb29f494652
MD5 df8ceea42bdf2e000587421854197cee
BLAKE2b-256 2ff5db6ef1f665e4fa0bc64f7550ccd1fb59ce456cc0056a69df5692053083f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for classic_falcon_integration-1.0.2.tar.gz:

Publisher: publish.yml on variasov/classic-falcon-integration

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file classic_falcon_integration-1.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for classic_falcon_integration-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2aa7c590b8c99f784327041b21c2ded5bacbf8ad54231545f6aaa0a0edb61581
MD5 6bc139bf6259008a951a07c720013b96
BLAKE2b-256 04e954930e91f65394271aaa28b2c2adc5f29845bff67b54e244e3a308c5f870

See more details on using hashes here.

Provenance

The following attestation bundles were made for classic_falcon_integration-1.0.2-py3-none-any.whl:

Publisher: publish.yml on variasov/classic-falcon-integration

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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