Skip to main content

FastAPI + uvicorn as a nexus-kit lifecycle service, with a Depends bridge into the nexus container.

Project description

nexus-kit-fastapi

PyPI CI

FastAPI + uvicorn as a nexus-kit lifecycle service, plus a Depends bridge into the nexus container.

A bridge, not a wrapper: FastAPI stays fully in charge of HTTP — routers, middleware, auth, OpenAPI are plain FastAPI. This package owns only the process concerns: when the server starts and stops (as one ServiceInterface among your other services), and how route handlers reach the nexus container.

uv add nexus-kit-fastapi

The server as a service

# app/api/service.py
from injector import inject, singleton
from fastapi import FastAPI
from nexus_kit.interfaces import ContainerInterface
from nexus_kit_fastapi import HttpService

from app.config.environment import Environment
from app.api import accounts, health

@singleton
class ApiService(HttpService):
    @inject
    def __init__(self, env: Environment, container: ContainerInterface) -> None:
        super().__init__(container)
        self.host, self.port = env.HOST, env.PORT

    def create_app(self) -> FastAPI:          # plain FastAPI — yours entirely
        app = FastAPI(title="my gateway")
        app.include_router(health.router)
        app.include_router(accounts.router)
        return app
# app/application.py
class Application(ApplicationInterface):
    SERVICES = [Database, WebhookDispatcher, ApiService]   # http last up, first down

    async def _serve(self) -> None:
        async with ServiceRunner(self._container, self.SERVICES):
            await self._container.get(ApiService).wait()   # until Ctrl+C / SIGTERM

start() returns only once the socket is bound — a busy port raises right there and ServiceRunner rolls the other services back. stop() is a graceful uvicorn shutdown. port = 0 binds an ephemeral port (service.bound_port tells which — handy in tests).

Routes reach the container through plain Depends

Injected(cls) is an ordinary FastAPI dependency that resolves cls from the container — no per-service get_x() boilerplate:

from nexus_kit_fastapi import Injected

@router.post("/send")
async def send(text: str, sender: Sender = Injected(Sender)):
    await sender.enqueue(text)

It composes with everything FastAPI: auth dependencies, sub-dependencies, Annotated, middleware. For tests, bind fakes into the container (container.set(Sender, FakeSender())) and drive the app with FastAPI's TestClient — attach the container manually via attach_container(app, container), no server needed.

What this package deliberately does NOT do

  • No FastAPI lifespan management — your Application + ServiceRunner own the lifecycle; the HTTP edge is just one service among many.
  • No routing/middleware/auth helpers — that's FastAPI's job.
  • No signal handling — uvicorn's own handlers end wait(), and the runner tears everything down.

For AI assistants

The package ships a compact machine-oriented reference — .ai/guide.md: the HttpService contract, the Injected bridge, and the anti-patterns to avoid. Point your agent at it before it touches the HTTP layer.

License

MIT © Astislav Bozhevolnov

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

nexus_kit_fastapi-0.1.0.tar.gz (7.9 kB view details)

Uploaded Source

Built Distribution

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

nexus_kit_fastapi-0.1.0-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

File details

Details for the file nexus_kit_fastapi-0.1.0.tar.gz.

File metadata

  • Download URL: nexus_kit_fastapi-0.1.0.tar.gz
  • Upload date:
  • Size: 7.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for nexus_kit_fastapi-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a75273d6df766fb81bbb3e0f97a789f72ce7e486e99370b1cde6e2cdb3507c2a
MD5 37f291750f92ff5f381b0e2c9b417ead
BLAKE2b-256 3b7a87bcabb0fdcb3f3383c0e2f23b3b0b974ed511db1ff9799306f31668dba8

See more details on using hashes here.

File details

Details for the file nexus_kit_fastapi-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: nexus_kit_fastapi-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for nexus_kit_fastapi-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3044b4cf37fd7559eb65df0bd2e4dd3e0d9283f8efa2f58df74e41d15bcc7bc8
MD5 072a56fc8bbb62377f2e58694ae0e9b5
BLAKE2b-256 2a8c34c0ce1372cc1d6a639a89340218a3808917abe148506091e26d7f1adaaf

See more details on using hashes here.

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