x
This commit is contained in:
35
backend/app/db_json.py
Normal file
35
backend/app/db_json.py
Normal file
@@ -0,0 +1,35 @@
|
||||
"""asyncpg Record → JSON-serializovatelný dict."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import date, datetime, timezone
|
||||
from decimal import Decimal
|
||||
from typing import Any
|
||||
from uuid import UUID
|
||||
|
||||
import asyncpg
|
||||
|
||||
|
||||
def record_to_dict(r: asyncpg.Record) -> dict[str, Any]:
|
||||
out: dict[str, Any] = {}
|
||||
for k in r.keys():
|
||||
v = r[k]
|
||||
if v is None:
|
||||
out[k] = None
|
||||
elif isinstance(v, datetime):
|
||||
if v.tzinfo is None:
|
||||
v = v.replace(tzinfo=timezone.utc)
|
||||
out[k] = v.isoformat()
|
||||
elif isinstance(v, date):
|
||||
out[k] = v.isoformat()
|
||||
elif isinstance(v, Decimal):
|
||||
out[k] = float(v)
|
||||
elif isinstance(v, UUID):
|
||||
out[k] = str(v)
|
||||
elif isinstance(v, (dict, list, str, int, float, bool)):
|
||||
out[k] = v
|
||||
elif isinstance(v, (bytes, memoryview)):
|
||||
out[k] = bytes(v).decode("utf-8", errors="replace")
|
||||
else:
|
||||
out[k] = str(v)
|
||||
return out
|
||||
Reference in New Issue
Block a user