hexfrost-toolbox - batteries for FastAPI projects
Open source library with useful utils for fast development
Installation
pip install hexfrost-toolbox
Usage
Test Client
from toolbox.testing import debug_client
app = FastAPI()
async with debug_client(app) as client:
response = await client.get('/')
assert response.status_code == 200
You can use app with this client for debug code like as django.testclient
Test Database
The function will create a new database with a prefix next to the one specified in the settings.
- The original settings file will be overwritten so that in all tests queries will go to the new database.
POSTGRES_DB = "postgres" # will overwrite -> "test_postgres"
You can use one database settings file for all tests, without worrying that the original database will be overwritten
from toolbox.testing import temporary_database
from toolbox.sqlalchemy.connection import DatabaseConnectionSettings
from your_project.alchemy_models import BaseModel
@pytest.fixture(autouse=True)
def db_settings():
data = DatabaseConnectionSettings(
POSTGRES_USER="postgres", # Required
POSTGRES_PASSWORD = "postgres", # Required
POSTGRES_HOST = "0.0.0.0", # Required
POSTGRES_PORT = "5432", # Required
POSTGRES_DB = "postgres" # Required
)
return data
@pytest.fixture(autouse=True)
async def temp_db(db_settings):
async with temporary_database(
settings=db_settings,
base_model=BaseModel,
# db_prefix = "test" # optional
):
yield
pass
Database Connect
from fastapi import Depends, FastAPI
from toolbox.sqlalchemy.connection import DatabaseConnectionManager, DatabaseConnectionSettings
settings = DatabaseConnectionSettings(
POSTGRES_USER="postgres", # Required
POSTGRES_PASSWORD = "postgres", # Required
POSTGRES_HOST = "0.0.0.0", # Required
POSTGRES_PORT = "5432", # Required
POSTGRES_DB = "postgres" # Required
)
get_db_conn = DatabaseConnectionManager(settings=settings)
app = FastAPI()
@app.get("/")
async def index(database_conn = Depends(get_db_conn)):
...
Auth Middleware
FastAPI
from toolbox.auth.middlewares.fastapi_ import BearerTokenMiddleware, BearerTokenMiddlewareSettings
class TokenStorage:
async def __call__(self, token: str) -> bool:
...
token_validator = TokenStorage()
settings = BearerTokenMiddlewareSettings(
token_validator=token_validator, # Required
exclude_paths=["/docs"] # Required
)
BearerTokenMiddleware.set_settings(settings)
app = FastAPI()
app.add_middleware(BearerTokenMiddleware)
Sensetive Fields in Pydantic Models
import os
from toolbox.schemes import SensitiveDataScheme
from toolbox.cipher import CipherSuiteManager, CipherSuiteSettings
settings = CipherSuiteSettings(
MASTER_KEY=os.getenv("MASTER_KEY") # Required
)
cipher_suite = CipherSuiteManager.set_settings(settings)
SensitiveDataScheme.set_cipher_suite_manager(cipher_suite)
class OpenAPIToken(SensitiveDataScheme):
_sensitive_attributes = ["token"]
default_model: str
token: str | bytes
new_token = OpenAPIToken(
default_model = "o3-mini",
token = "sk-12fefx33k34h1v4h1cl14c"
).encrypt_fields()
unsafe_data = new_token.decrypt_fields()
Tools
That's it! Enjoy! 🚀
Metadata
Release files for hexfrost-toolbox 0.1.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| hexfrost_toolbox-0.1.6.tar.gz | 10.8 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hexfrost_toolbox-0.1.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 20.5 kB
Release files / hexfrost_toolbox-0.1.6.tar.gz
| Download URL | hexfrost_toolbox-0.1.6.tar.gz |
|---|---|
| Size | 10.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
646cc0f99c4886bf13c364dc7cf1e8d7bd2ce6e80e504efa0cf391c5e6f81979
|
|
BLAKE2b-256 checksum How to use checksums |
25f500b7cb4c59ccb54bfbe189e6c8610991eec36923faa4655961ed845bfd16
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.1.3 CPython/3.13.3 Linux/6.11.0-1014-azure
|
Release files / hexfrost_toolbox-0.1.6-py3-none-any.whl
| Download URL | hexfrost_toolbox-0.1.6-py3-none-any.whl |
|---|---|
| Size | 9.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6279e70fd3851718ebf0930675855d9944d99f133043a1f1107833d27a50ef99
|
|
BLAKE2b-256 checksum How to use checksums |
32aa5e12785b53bf6e9487c50023c2deeb859216d5897c23e3846afc21e8b0ca
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.1.3 CPython/3.13.3 Linux/6.11.0-1014-azure
|
Security for hexfrost-toolbox 0.1.6
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.