Unzip budget-app v7 into repo root
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
from decimal import Decimal
|
||||
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from .models import AuditEntry, User
|
||||
|
||||
|
||||
def _plain(value):
|
||||
if isinstance(value, Decimal):
|
||||
return str(value.normalize()) if value == value.to_integral() else str(value)
|
||||
return value
|
||||
|
||||
|
||||
def snapshot(obj, fields: list[str]) -> dict:
|
||||
return {f: _plain(getattr(obj, f)) for f in fields}
|
||||
|
||||
|
||||
def diff(before: dict, after: dict) -> dict:
|
||||
return {k: [before.get(k), after.get(k)] for k in after if before.get(k) != after.get(k)}
|
||||
|
||||
|
||||
def record(db: Session, user: User | None, entity: str, entity_id: int | None, action: str,
|
||||
summary: str = "", changes: dict | None = None, year_id: int | None = None) -> None:
|
||||
db.add(AuditEntry(user_id=user.id if user else None, entity=entity, entity_id=entity_id,
|
||||
action=action, summary=summary[:500], changes=changes, year_id=year_id))
|
||||
Reference in New Issue
Block a user