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
            ).returning(
                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.1.tar.gz (9.0 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.1-py3-none-any.whl (11.0 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for classic_falcon_integration-1.0.1.tar.gz
Algorithm Hash digest
SHA256 7c90f088dd85b89bfde4ccc904e55be9556808cf8f0a5faed7a7a800168d693c
MD5 707e87e9651ba6db76d3219ad4540072
BLAKE2b-256 d0ba66460eb82c08cd2b9ed0e98f48f6513a9efbafa1ce8db8873abe6a73ee6b

See more details on using hashes here.

Provenance

The following attestation bundles were made for classic_falcon_integration-1.0.1.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.1-py3-none-any.whl.

File metadata

File hashes

Hashes for classic_falcon_integration-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a4b7a32f68727016df722c6de525377a1cf8125e5b78339a935fa3e1535c7d13
MD5 6eb0392a52bfcda097e7ade9f380cd3e
BLAKE2b-256 99ff1f94f5262ff034e27a2d1bfd391412d64523d4b63e4afaf5c46e8c6b6063

See more details on using hashes here.

Provenance

The following attestation bundles were made for classic_falcon_integration-1.0.1-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