Skip to main content

Utilities for use with FastAPI and django

Project description

djfapi

A utility library to integrate and use fastapi with the django orm.

🚧 This project is WIP and is subject to change at any time

This project is currently in the alpha state, even though it can be used in production with some caution. Make sure to fix the version in your requirements.txt and review changes frequently.

Installation

pip install djfapi

Features

Sentry

Provides optional sentry integration.

djdantic usage

See djdantic for schema usage.

Automatic Route Generation

Declare routes without having to write routes using the djfapi.routing.django.DjangoRouterSchema.

The DjangoRouterSchema will supply a router, which just has to be included in the FastAPI app.

Example for Routes

from djfapi.routing.django import DjangoRouterSchema, SecurityScopes


transaction_token = JWTToken(scheme_name="Transaction Token")


def company_objects_filter(access: Access) -> Q:
    q = Q(tenant_id=access.tenant_id)
    if access.scope.selector != 'any':
        q &= Q(employees__user_id=access.user_id, employees__type__in=[models.Employee.EmployeeType.OWNER, models.Employee.EmployeeType.ADMIN])

    return q


router = DjangoRouterSchema(
    name='companies',
    model=models.Company,
    get=schemas.response.Company,
    create=schemas.request.CompanyCreate,
    update=schemas.request.CompanyUpdate,
    security=transaction_token,
    security_scopes=SecurityScopes(
        get=['business.companies.read.any', 'business.companies.read.own',],
        post=['business.companies.create',],
        patch=['business.companies.update.any', 'business.companies.update.own',],
        put=['business.companies.update.any', 'business.companies.update.own',],
        delete=['business.companies.delete.any', 'business.companies.delete.own',],
    ),
    objects_filter=company_objects_filter,
    children=[
        DjangoRouterSchema(
            name='departments',
            model=models.CompanyDepartment,
            get=schemas.response.CompanyDepartment,
            create=schemas.request.CompanyDepartmentCreate,
            update=schemas.request.CompanyDepartmentUpdate,
            children=[
                DjangoRouterSchema(
                    name='teams',
                    model=models.CompanyDepartmentTeam,
                    get=schemas.response.CompanyDepartmentTeam,
                    create=schemas.request.CompanyDepartmentTeamCreate,
                    update=schemas.request.CompanyDepartmentTeamUpdate,
                ),
            ]
        ),
        DjangoRouterSchema(
            name='costcenters',
            model=models.CompanyCostcenter,
            get=schemas.response.CompanyCostcenter,
            create=schemas.request.CompanyCostcenterCreate,
            update=schemas.request.CompanyCostcenterUpdate,
        ),
    ]
)

Info for using FastAPI and Django

⚠️ Database Connection Leaks

When using FastAPI with Django and performing django db operations from within a FastAPI Endpoint, required signals regarding request handling from django are not called. The Django signals django.core.signals.request_started and django.core.signals.request_finished need to be called prior and after every request (which uses the django orm in it's endpoint), otherwise database connections are leaked undefinedly. Those signals must be called from the same thread, in which the orm is used.

There is a method decorator provided by djfapi in djfapi.utils.fastapi_django.request_signalling, which can be applied to any (sync) endpoints. For autogenerated endpoints or manual endpoints decorated with a DjangoRouterSchema.endpoint, this is already done.

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

djfapi-0.0.72b24.tar.gz (35.3 kB view details)

Uploaded Source

Built Distribution

djfapi-0.0.72b24-py3-none-any.whl (40.2 kB view details)

Uploaded Python 3

File details

Details for the file djfapi-0.0.72b24.tar.gz.

File metadata

  • Download URL: djfapi-0.0.72b24.tar.gz
  • Upload date:
  • Size: 35.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for djfapi-0.0.72b24.tar.gz
Algorithm Hash digest
SHA256 c15304fda8b92ee3027528c2d54a918a713966cf84eb9f8bd3cace894c69b22e
MD5 4516439ec74ee9e71e561232d371d98d
BLAKE2b-256 f97cf2d3d2435c20b4dc0c9bd9d435667084a76a18128bc175d0dd91a97b726c

See more details on using hashes here.

File details

Details for the file djfapi-0.0.72b24-py3-none-any.whl.

File metadata

  • Download URL: djfapi-0.0.72b24-py3-none-any.whl
  • Upload date:
  • Size: 40.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for djfapi-0.0.72b24-py3-none-any.whl
Algorithm Hash digest
SHA256 57a86a655e4c8511c922649411a5944c38a57388be5be74ca87e43589e50fbf5
MD5 56d55e7d4ac1c2d2a803c17b3bc1c746
BLAKE2b-256 37494a6c7c9ab186d1af7dd191169d31793bc905a8240063d681ab2d21c722e0

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