Исправлены ошибки в ходе раскатки
This commit is contained in:
@@ -22,10 +22,11 @@ from sqlalchemy.ext.asyncio import (
|
||||
AsyncEngine,
|
||||
AsyncSession,
|
||||
async_sessionmaker,
|
||||
create_async_engine,
|
||||
)
|
||||
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
|
||||
|
||||
from app.postgres import create_postgres_engine
|
||||
|
||||
SCHEMA = "han_app"
|
||||
|
||||
|
||||
@@ -347,7 +348,7 @@ class EntityExternalMapping(Base):
|
||||
|
||||
class Database:
|
||||
def __init__(self, url: str) -> None:
|
||||
self.engine: AsyncEngine = create_async_engine(url, pool_pre_ping=True)
|
||||
self.engine: AsyncEngine = create_postgres_engine(url, pool_pre_ping=True)
|
||||
self.sessions = async_sessionmaker(self.engine, expire_on_commit=False)
|
||||
|
||||
async def session(self) -> AsyncIterator[AsyncSession]:
|
||||
|
||||
@@ -101,7 +101,7 @@ async def refresh_settings_cache(app: FastAPI) -> None:
|
||||
async with app.state.db.sessions() as db:
|
||||
app.state.snapshot = await load_settings(db)
|
||||
except Exception:
|
||||
log.warning("settings.refresh_failed", event="settings.refresh_failed")
|
||||
log.warning("settings.refresh_failed")
|
||||
await asyncio.sleep(30)
|
||||
|
||||
|
||||
@@ -126,12 +126,12 @@ async def lifespan(app: FastAPI):
|
||||
async with app.state.db.sessions() as db:
|
||||
app.state.snapshot = await load_settings(db)
|
||||
except Exception:
|
||||
structlog.get_logger().warning("settings_warmup_failed", event="settings.warmup_failed")
|
||||
structlog.get_logger().warning("settings.warmup_failed")
|
||||
settings_task = asyncio.create_task(refresh_settings_cache(app))
|
||||
try:
|
||||
await app.state.jwks.refresh()
|
||||
except Exception:
|
||||
structlog.get_logger().warning("jwks_warmup_failed", event="jwks.warmup_failed")
|
||||
structlog.get_logger().warning("jwks.warmup_failed")
|
||||
yield
|
||||
settings_task.cancel()
|
||||
with suppress(asyncio.CancelledError):
|
||||
@@ -211,7 +211,6 @@ async def request_context(request: Request, call_next: Any) -> Response:
|
||||
response.headers["Cache-Control"] = response.headers.get("Cache-Control", "no-store")
|
||||
log.info(
|
||||
"request.complete",
|
||||
event="request.complete",
|
||||
status_code=response.status_code,
|
||||
duration_ms=round((time.monotonic() - request.state.started_at) * 1000, 2),
|
||||
)
|
||||
@@ -262,7 +261,7 @@ async def http_error(request: Request, exc: StarletteHTTPException):
|
||||
|
||||
@app.exception_handler(Exception)
|
||||
async def unhandled_error(request: Request, exc: Exception):
|
||||
log.exception("request.failed", event="request.failed", error_code="internal_error")
|
||||
log.exception("request.failed", error_code="internal_error")
|
||||
return error_response(request, "internal_error", "Internal server error", 500)
|
||||
|
||||
|
||||
@@ -622,7 +621,7 @@ async def dialogs_create(
|
||||
},
|
||||
)
|
||||
except Exception:
|
||||
log.warning("idempotency.cache_write_failed", event="idempotency.cache_write_failed")
|
||||
log.warning("idempotency.cache_write_failed")
|
||||
return JSONResponse(json.loads(json.dumps(body, default=str)), status_code=status)
|
||||
|
||||
|
||||
@@ -792,7 +791,7 @@ async def message_create(
|
||||
},
|
||||
)
|
||||
except Exception:
|
||||
log.warning("idempotency.cache_write_failed", event="idempotency.cache_write_failed")
|
||||
log.warning("idempotency.cache_write_failed")
|
||||
return result
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
import asyncpg
|
||||
from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine
|
||||
|
||||
|
||||
def asyncpg_dsn(url: str) -> str:
|
||||
if url.startswith("postgresql+asyncpg://"):
|
||||
return url.replace("postgresql+asyncpg://", "postgresql://", 1)
|
||||
return url
|
||||
|
||||
|
||||
def create_postgres_engine(url: str, **engine_options: Any) -> AsyncEngine:
|
||||
dsn = asyncpg_dsn(url)
|
||||
|
||||
async def connect():
|
||||
return await asyncpg.connect(dsn=dsn)
|
||||
|
||||
return create_async_engine(
|
||||
"postgresql+asyncpg://",
|
||||
async_creator=connect,
|
||||
**engine_options,
|
||||
)
|
||||
Reference in New Issue
Block a user