An extension library for FastAPI framework
use pip
to install the package:
pip install fastlab
Easy to log string to console, see more: https://docs.python.org/3/library/logging.html
from fastlab import logs
logs.warning('warn') # 2021-12-18 14:23:31.000 WARNING 88493 --- [ MainThread] test_logs : warn
logs.info('info') # 2021-12-18 14:23:31.000 INFO 88493 --- [ MainThread] test_logs : info
logs.error('error') # 2021-12-18 14:23:31.000 ERROR 88493 --- [ MainThread] test_logs : error
Common Models
from fastapi import FastAPI
from pydantic import BaseModel
from fastlab.models import Response
class Item(BaseModel):
name: str
version: str
app = FastAPI()
@app.get("/item", response_model=Response[Item])
async def item():
return Response(data=Item(name='fastlab', version='0.1.0'))
Get http://localhost:8080/item
response:
{
"code": 0,
"message": "",
"data": {
"name": "fastlab",
"version": "0.1.0"
}
}
from fastapi import FastAPI
from pydantic import BaseModel
from fastlab.models import Response, PageData
class Item(BaseModel):
name: str
version: str
app = FastAPI()
@app.get("/items", response_model=Response[PageData[Item]])
async def items(skip: int = 0, limit: int = 10):
total = 100
data = [Item(name=f'fastlab-{i}', version=f'0.1.{i}') for i in range(skip, skip + limit)]
return Response(data=PageData(skip=skip, limit=limit, total=total, has_more=total > skip + limit, data=data))
from fastlab.utils import TimeUtils
# Print now timestamp: 1639732030521
print(TimeUtils.timestamp())
API for health check, endpoint /health
.
from fastapi import FastAPI
from fastlab.routers import HealthRouter
app = FastAPI()
app.include_router(HealthRouter)
Log wrapper for measuring sync & async function execution times.
import asyncio
import time
from fastlab.decorators import LogExecTime, LogExecTimeAsync
@LogExecTime
def log_sleep():
time.sleep(1.5)
@LogExecTimeAsync
async def log_sleep_async():
await asyncio.sleep(1.5)
log_sleep()
asyncio.run(log_sleep_async())
Replace the configuration with system environment variables. Follows:
- Change the setting name to uppercase
- Prefix it with
prefix
setting - Escape any underscores (
_
) by duplicating them - Convert all periods (.) to underscores (
_
)
from fastlab.decorators import WithEnvConfig
@WithEnvConfig(prefix='FL_')
def load_config():
return {
'name': 'fastlab',
'version': '0.2.1',
'extra': {
'memory_lock': False
}
}
conf = load_config()
For example, FL_EXTRA_MEMORY__LOCK=true
transform conf['extra']['memory_lock']
as True
Install this package locally
python setup.py develop
Run test case
python tests/test_logs.py