api: move transaction handlung to middleware; + config fixes
This commit is contained in:
parent
2b02de2012
commit
dc3acc5da5
5 changed files with 14 additions and 64 deletions
|
|
@ -1,61 +0,0 @@
|
|||
# py-scopes/apidemo/config.py
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
|
||||
class Settings(BaseSettings):
|
||||
model_config = SettingsConfigDict(env_file='.env', extra='ignore')
|
||||
#, env_prefix='SCOPES_')
|
||||
|
||||
base_url: str = 'https://test.cy7.eu'
|
||||
|
||||
log_file: str = 'log/scopes.log'
|
||||
log_level: str = 'INFO'
|
||||
log_format: str = '%(asctime)s %(levelname)s %(name)s %(message)s'
|
||||
log_dateformat: str = '%Y-%m-%dT%H:%M:%S'
|
||||
|
||||
dbengine: str = 'postgresql+psycopg'
|
||||
dbname: str = 'demo'
|
||||
dbuser: str = 'demo'
|
||||
dbpassword: str = 'secret'
|
||||
dbschema: str = 'demo'
|
||||
|
||||
settings = Settings()
|
||||
|
||||
from dotenv import load_dotenv
|
||||
import logging
|
||||
from os import getenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
base_url = settings.base_url
|
||||
|
||||
logging.basicConfig(filename=settings.log_file, level=settings.log_level,
|
||||
format=settings.log_format, datefmt=settings.log_dateformat)
|
||||
logging.getLogger('uvicorn.error').propagate = True
|
||||
|
||||
# storage settings
|
||||
from scopes.storage.db.postgres import StorageFactory
|
||||
dbengine = settings.dbengine
|
||||
dbname = settings.dbname
|
||||
dbuser = settings.dbuser
|
||||
dbpassword = settings.dbpassword
|
||||
dbschema = settings.dbschema
|
||||
|
||||
# authentication settings
|
||||
oidc_provider = getenv('OIDC_PROVIDER', 'https://a1.cy7.de')
|
||||
oidc_client_id = getenv('OIDC_CLIENT_ID', '12345')
|
||||
oidc_params = dict(
|
||||
op_config_url=oidc_provider + '/.well-known/openid-configuration',
|
||||
op_uris=None,
|
||||
op_keys=None,
|
||||
op_project_scope='urn:zitadel:iam:org:project:id:zitadel:aud',
|
||||
callback_url=getenv('OIDC_CALLBACK_URL', base_url + '/auth/callback'),
|
||||
client_id = oidc_client_id,
|
||||
cookie_name=getenv('OIDC_COOKIE_NAME', 'oidc_' + oidc_client_id),
|
||||
cookie_domain=getenv('OIDC_COOKIE_DOMAIN', None),
|
||||
cookie_lifetime=getenv('OIDC_COOKIE_LIFETIME', '86400'),
|
||||
cookie_crypt=getenv('OIDC_COOKIE_CRYPT', None),
|
||||
private_key_file=getenv('OIDC_SERVICE_USER_PRIVATE_KEY_FILE', '.private-key.json'),
|
||||
organization_id=getenv('OIDC_ORGANIZATION_ID', '12346'),
|
||||
project_id=getenv('OIDC_PROJECT_ID', None),
|
||||
)
|
||||
|
||||
|
|
@ -4,14 +4,25 @@ import sys
|
|||
if '' not in sys.path:
|
||||
sys.path = [''] + sys.path
|
||||
|
||||
from fastapi import FastAPI
|
||||
from fastapi import FastAPI, Request
|
||||
from fastapi.responses import HTMLResponse
|
||||
import transaction
|
||||
|
||||
from scopes.api import tracking
|
||||
|
||||
# app and routes
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
@app.middleware('http')
|
||||
async def handle_transactions(request: Request, call_next):
|
||||
response = await call_next(request)
|
||||
if response.status_code >= 400:
|
||||
transaction.abort()
|
||||
else:
|
||||
transaction.commit()
|
||||
return response
|
||||
|
||||
app.include_router(tracking.router)
|
||||
|
||||
@app.get('/')
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@ type Storage = Annotated[Storage, Depends(deps.storage)]
|
|||
async def get_tracks(storage: Storage):
|
||||
tracks = storage.create(tracking.Container)
|
||||
result = [tr.asDict() for tr in tracks.query()]
|
||||
transaction.commit()
|
||||
return result
|
||||
|
||||
@router.post('/tracks', response_model=Track)
|
||||
|
|
@ -38,6 +37,5 @@ async def post_track(track: Annotated[Track, Body()], storage: Storage):
|
|||
hd = track.head
|
||||
tr = tracking.Track(hd['taskId'], hd['userName'], data=track.data)
|
||||
tracks.save(tr)
|
||||
transaction.commit()
|
||||
return tr.asDict()
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
"""Tests for the fastapi- (and asyncio-) based stuff"""
|
||||
|
||||
from scopes import config
|
||||
config.settings = config.Settings(_env_file='tests/test.env')
|
||||
|
||||
import pytest
|
||||
from fastapi.testclient import TestClient
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
""" Tests for the (PostgreSQL) storage-related functionalities"""
|
||||
|
||||
from scopes import config
|
||||
config.settings = config.Settings(_env_file='tests/test.env')
|
||||
|
||||
from datetime import datetime
|
||||
import pytest
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue