API reference¶
safir Package¶
Safir is the SQuaRE framework for Roundtable bots.
Variables¶
The version string of Safir (PEP 440 / SemVer compatible). |
|
The decomposed version, split across " |
safir.arq Module¶
An arq client with a mock for testing.
Classes¶
|
A base class for errors related to arq jobs. |
|
The job was not successfully queued. |
|
A job cannot be found. |
|
The job's result is unavailable. |
|
Mode configuration for the Arq queue. |
|
Information about a queued job. |
|
The full result of a job, as well as its metadata. |
|
An common interface for working with an arq queue that can be implemented either with a real Redis backend, or an in-memory repository for testing. |
|
A distributed queue, based on arq and Redis. |
|
A mocked queue for testing API services. |
Class Inheritance Diagram¶
safir.database Module¶
Utility functions for database management.
Functions¶
|
Create a new async database session. |
|
Create a new async database engine. |
|
Create a new sync database session. |
Add the UTC time zone to a naive datetime from the database. |
|
Strip time zone for storing a datetime in the database. |
|
|
Create and initialize a new database. |
Classes¶
Database initialization failed. |
Class Inheritance Diagram¶
safir.dependencies.arq Module¶
A FastAPI dependency that supplies a Redis connection for arq.
Classes¶
A FastAPI dependency that maintains a Redis client for enqueing tasks to the worker pool. |
Variables¶
Singleton instance of |
Class Inheritance Diagram¶
safir.dependencies.db_session Module¶
Manage an async database session.
Classes¶
Manages an async per-request SQLAlchemy session. |
Variables¶
The dependency that will return the async session proxy. |
Class Inheritance Diagram¶
safir.dependencies.gafaelfawr Module¶
Gafaelfawr authentication dependencies.
Functions¶
|
Retrieve authentication information from HTTP headers. |
|
Logger bound to the authenticated user. |
safir.dependencies.http_client Module¶
HTTP client dependency for FastAPI.
Classes¶
Provides an |
Variables¶
Default timeout (in seconds) for outbound HTTP requests. |
|
The dependency that will return the HTTP client. |
Class Inheritance Diagram¶
safir.dependencies.logger Module¶
Logger dependency for FastAPI.
Provides a structlog
logger as a FastAPI dependency. The logger will
incorporate information from the request in its bound context.
Classes¶
Provides a structlog logger configured with request information. |
Variables¶
The dependency that will return the logger for the current request. |
Class Inheritance Diagram¶
safir.kubernetes Module¶
Utilities for configuring a Kubernetes client.
Functions¶
Load the Kubernetes configuration. |
Variables¶
safir.logging Module¶
Utilities for configuring structlog-based logging.
Functions¶
|
Add the log level to the event dict as |
|
Configure logging and structlog. |
Variables¶
Name of the configured global logger. |
safir.metadata Module¶
Standardized metadata for Roundtable HTTP services.
Functions¶
|
Retrieve metadata for the application. |
|
Get a specific URL from a package's |
Classes¶
|
Metadata about a package. |
Class Inheritance Diagram¶
safir.models Module¶
Standard models for FastAPI applications.
Examples
To reference the ErrorModel
model when returning an error message, use code
similar to this:
@router.get(
"/route/{foo}",
...,
responses={404: {"description": "Not found", "model": ErrorModel}},
)
async def route(foo: str) -> None:
...
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail=[
{"loc": ["path", "foo"], "msg": msg, "type": "invalid_foo"},
],
)
Notes
FastAPI does not appear to export its error response model in a usable form, so define a copy of it so that we can reference it in API definitions to generate good documentation.
Classes¶
|
The detail of the error message. |
|
A structured API error message. |
Class Inheritance Diagram¶
safir.middleware.ivoa Module¶
Middleware for IVOA services.
Classes¶
|
Make query parameter keys all lowercase. |
Class Inheritance Diagram¶
safir.middleware.x_forwarded Module¶
Update the request based on X-Forwarded-For
headers.
Classes¶
|
Middleware to update the request based on |
Class Inheritance Diagram¶
safir.testing.kubernetes Module¶
Mock Kubernetes API for testing.
Functions¶
Replace the Kubernetes API with a mock class. |
Classes¶
Mock Kubernetes API for testing. |