Skip to content

API reference

Every public name, grouped by what it is for. Import everything from slowfw unless noted.

Application

SlowAPI(
    *,
    title="SlowAPI Application", version="0.1.0", description="",
    debug=False,
    middlewares=(), modules=(), providers=(), controllers=(),
    template_dir=None, template_engine="builtin",
    docs_url="/docs", redoc_url="/redoc", openapi_url="/openapi.json",
    root_path="", max_body_size=16 * 1024 * 1024,
    auto_serialize=True, request_id_header="X-Request-ID",
    on_startup=(), on_shutdown=(), logger=None,
)
Method Purpose
.get/.post/.put/.patch/.delete/.head/.options(path, **meta) Register a route
.route(path, methods=..., **meta) Several methods, or a class
.add_route(path, handler, methods, **meta) Programmatic registration
.use(*middlewares) Add application middleware
.include_router(router, prefix="") Merge a router
.register_controller(cls, prefix=None, ...) Register a controller
.register_module(cls) Register a module and its imports
.provide(token, value=None) Register a provider
.mount_static(path, directory, **options) Serve a directory
.configure_templates(directory, engine=..., ...) Enable res.render
.exception_handler(type_or_status) Decorator: custom error response
.on_event("startup" / "shutdown") Decorator: lifecycle hook
.url_for(name, **params) Reverse a route
.openapi() The generated document
.run(host, port, **options) Development server
await .startup() / await .shutdown() Lifecycle, run by adapters
Attribute
.routes Every registered Route
.router The Router
.container The DI Container
.state Application-wide dict
.logger The application logger
.wsgi_app / .asgi_app Explicit protocol entry points

Route metadata accepted by every registration method: name, middlewares, summary, description, tags, deprecated, include_in_schema, response_model, status_code, responses.

Routing

Router(prefix="", *, middlewares=(), tags=())

.get/.post/...(path, **meta), .route(path, methods=...), .add(route), .include(other, prefix=""), .match(method, path), .url_path_for(name, **p), .routes.

From slowfw.routing: Route, Convertor, CONVERTORS, compile_path, HTTP_METHODS.

Request

Metadata .method .path .url .scheme .http_version .root_path
Inputs .headers .query_params (.query) .path_params (.params) .cookies
Client .client .ip
Body (async) await .body() .text() .json() .form() .stream()
Body (sync) .body_sync() .text_sync() .json_sync() .form_sync() .stream_sync()
Content .content_type .charset
Helpers .get(header, default) .is_(type) .accepts(type)
Scratch .state .scope .app .request_id

Response

Content .send() .json() .text() .html() .end() .render()
Status .status(code) .status_code .status_line
Headers .set() (.header()) .append() .type() .vary() .headers
Caching .cache(seconds, ...) .no_cache() .etag(value=None, weak=False)
Cookies .cookie(...) .clear_cookie(...)
Navigation .redirect(location, status=302)
Files .attachment(filename=None)
Streaming .stream(iterable, media_type=None) .is_streaming
Other .background

Classes: Response, JSONResponse, HTMLResponse, PlainTextResponse, RedirectResponse, StreamingResponse, FileResponse, NoContentResponse.

Parameters

Query, Path, Header, Cookie, Body, Form, File, Depends, Inject, Req, Res, Ctx.

Common arguments: default, default_factory, alias, title, description, ge, gt, le, lt, min_length, max_length, pattern, examples, deprecated, include_in_schema, explode.

Header(..., convert_underscores=True). Body(..., embed=False, media_type=...). Depends(fn=None, use_cache=True). Inject(token=None).

Dependency injection

Container, Provider, InjectionToken, injectable(scope=...).

Provider(token, use_class=..., ...), Provider.value(token, value), Provider.factory(token, fn, inject=(), scope=...), Provider.klass(token, impl, scope=...).

Scopes: "singleton", "request", "transient". Hooks: on_module_init, on_module_destroy.

Controllers and modules

controller(prefix, *, tags=(), version=None), module(*, imports=(), controllers=(), providers=(), exports=(), middlewares=(), prefix=""), Get, Post, Put, Patch, Delete, Head, Options, route(methods, path), http_code(code), set_metadata(key, value), version(tag).

Guards, interceptors, pipes

use_guards(*guards), roles(*names), public, ExecutionContext. From slowfw.guards: AllowAll, DenyAll, RequireHeader.

use_interceptors(*interceptors), Interceptor. From slowfw.interceptors: TimingInterceptor, EnvelopeInterceptor, CacheInterceptor.

use_pipes(*pipes), Pipe. From slowfw.pipes: TrimPipe, LowercasePipe, ParseIntPipe, DefaultValuePipe, ClampPipe, NotEmptyPipe.

ExecutionContext: .request .response .route .container .app .handler .controller .metadata .get(key, default) .state await .resolve(token).

Serialization

expose(groups=(), alias=None, transform=None), hidden(write_only=True), serialize(value, groups=(), include=None, exclude=None, exclude_none=False), serialize_with(...). From slowfw.serialization: SerializerInterceptor, FieldOptions.

Middleware

From slowfw.middleware: CORSMiddleware, SecurityHeadersMiddleware, TrustedHostMiddleware, GZipMiddleware, ProxyHeadersMiddleware, RateLimitMiddleware, MemoryRateLimitStore, RateLimitStore, SessionMiddleware, Session, RequestIDMiddleware, AccessLogMiddleware, ErrorMiddleware, ExceptionHandlers, Middleware, Executor, SyncExecutor, AsyncExecutor, build_chain, adapt.

Exceptions

SlowAPIErrorConfigurationError, HTTPException, WebSocketDisconnect.

HTTPExceptionBadRequest (400), Unauthorized (401), Forbidden (403), NotFound (404), MethodNotAllowed (405), PayloadTooLarge (413), UnsupportedMediaType (415), ValidationError (422), TooManyRequests (429).

Configuration and logging

Settings, Settings.load(), from_env(model, prefix=""), load_dotenv(path=".env", override=False).

From slowfw.logging: configure_logging(level, json_output=False, service=None, version=None), get_logger(name), JSONFormatter, ConsoleFormatter.

Testing

From slowfw.testing: TestClient(app, protocol="wsgi"|"asgi", base_url=..., headers=..., follow_cookies=True), TestResponse.

Data structures

Headers, QueryParams, UploadFile, URL, State. From slowfw.datastructures: MultiDict, MutableHeaders, FormData, Address.

Concurrency

From slowfw.concurrency: drive(coro), is_async_callable(obj), run_in_threadpool(fn, *a), run_coroutine_sync(coro, loop=None), maybe_await(value), call_maybe_async(fn, *a), shutdown_loop_thread().

Other

StaticFiles(directory, ...), slowfw.templating.TemplateEngine, slowfw.templating.Markup, slowfw.signing.Signer, slowfw.validation.coerce/json_schema_for/FieldError, slowfw.openapi.generate/swagger_html/redoc_html, slowfw.server.run/detect_server.