Skip to main content

A simple FastAPI webserver with a bunch of useful resources.

Project description

FastAPI WebServer

This is a wrapper of a FAST API application with some additional features that might be useful for quick web development.

It features:

  • Powerful environment and settings handling with dynamic module import like Django;
  • Local Key-Value Cache database, powered by SQLite;
  • Better logging configuration via commons.logging;
  • Powerful database tools:
    • A Database Adapter to connect to any database on-the-fly;
    • A Data Migration Tool, to run .sql files, or migrate json data that runs automagically on server startup;
    • A FastAPI Dependency for the database (webserver.core.ServerDatabase)
    • A SQLite Cache Database + FastAPI dependency (webserver.core.ServerCache)
  • An SMTP service, implemented on top of fastapi-mail;
  • Internationalization (i18n) on top of Babel:
    • A FastAPI Dependency that discovers the locale based on HTTP Header Accept-Language (webserver.core.AvailableLocale)
  • Front-end tools:
    • SASS Compiler (webserver.frontend.css);
    • Server-Side Rendering via Jinja2Template;
  • Static Files provider;
  • CORS Support;
  • TLS Support + mkcert certificates (local/development only)
  • Content Proxies (webserver.extras.proxies):
    • Gravatar
    • GIPHY

Roadmap

The following features are expected to be implemented in the future. Contribution is welcome.

  • OCI-Compliant Image for Docker/Podman
  • Logging and Tracing API (via OpenTelemetry)
  • Authentication and Authorization
  • Traffic Analyzer
    • (AI) Bot detector
    • VPN detector
    • Rate limiter
    • IP-based Access-Control List (ACL)
  • Content Providers (HTTP client and proxy)
    • Google Fonts API> ⚠️ This is under active development and might not be ready for production environments.

Testing

coverage run -m unittest && coverage html -d tests/coverage/html

Build

uv build && twine upload dist/*

Getting Started

Optionally, set up the environment variables. All environment variables can be found on .env file in the root of this repository.

import webserver
from fastapi import APIRouter, FastAPI

router: APIRouter = APIRouter()
app: FastAPI = webserver.app


@router.get("/")
def index():
  return {"Hello World": f"from {webserver.settings.APP_NAME}"}


app.include_router(router)

if __name__ == "__main__":
  webserver.start()

This enables both local execution through main method as well as fastapi (dev|run) commands.

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

fastapi_webserver-0.4.13.tar.gz (15.9 kB view details)

Uploaded Source

Built Distribution

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

fastapi_webserver-0.4.13-py3-none-any.whl (17.2 kB view details)

Uploaded Python 3

File details

Details for the file fastapi_webserver-0.4.13.tar.gz.

File metadata

  • Download URL: fastapi_webserver-0.4.13.tar.gz
  • Upload date:
  • Size: 15.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for fastapi_webserver-0.4.13.tar.gz
Algorithm Hash digest
SHA256 d27bc7608f1edd09e734f214eb1a7ac458213f8b6969cce997781a1323f50430
MD5 12516002f9238083127c9dfa9cd9690f
BLAKE2b-256 c7913a568f28e1781aa4b4e355906cc4edde40e1850a36503b4e69acef17cd74

See more details on using hashes here.

File details

Details for the file fastapi_webserver-0.4.13-py3-none-any.whl.

File metadata

File hashes

Hashes for fastapi_webserver-0.4.13-py3-none-any.whl
Algorithm Hash digest
SHA256 83f542eaa770bcaf9465318e24fc6abb64a8e2c7b72de92352a65b745b3146dd
MD5 3ac5d84dfbd4f2e78865e8ef1f03a6f5
BLAKE2b-256 0fbf8f8f92d0acbf47c24f9d80790f7a12f55c6c33e4df1fedddaf5f2112e2f6

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