mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-05 02:41:56 +00:00
About 35,000 fixes ruff marks safe across 32 rules (UP006/UP045/UP007 modern annotations, UP032 f-strings, SIM114/SIM118, RET501, and friends), removal of the 1,296 typing imports the rewrite orphaned, and hand fixes for what the fixers could not see: five star-import freeloaders of typing names, two F823 late-import annotations, the /get/config/list introspection crash on types.UnionType, redundant function-local RoleMappings imports in ui_sso.py that shadowed the module-level name once the annotation lost its quotes, and one FURB168 tautology. B009/B010/PIE804/RUF019 are excluded on purpose: their safe fixes rewrite getattr/setattr/**-splat/key-in-dict escape hatches into forms basedpyright then rejects (283 new errors measured), so their budgets stay at base values. ruff-strict-budget.json drops by 39,579 this commit (39,968 across the branch) with 28 rules at an actual 0 and 9 more sharply down. type-discipline-budget.json ratchets LIT002/LIT006/LIT009 down; LIT001 moves to the now-honest total: the checker matches the spelling `set` but not the alias `Set`, so the 160 typing.Set annotations rewritten to set[...] were always mutable-set annotations and only now count.
38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
"""
|
|
Base model class for domain models.
|
|
"""
|
|
|
|
from datetime import datetime
|
|
from typing import Any
|
|
|
|
from pydantic import BaseModel, ConfigDict
|
|
|
|
|
|
class DomainModel(BaseModel):
|
|
"""Base class for all domain models."""
|
|
|
|
model_config = ConfigDict(
|
|
from_attributes=True,
|
|
protected_namespaces=(),
|
|
extra="ignore",
|
|
)
|
|
|
|
created_at: datetime | None = None
|
|
updated_at: datetime | None = None
|
|
|
|
@classmethod
|
|
def from_db_record(cls, record: Any) -> "DomainModel":
|
|
"""Create a domain model from a database record."""
|
|
if record is None:
|
|
raise ValueError("Cannot create domain model from None record")
|
|
if isinstance(record, dict):
|
|
return cls(**record)
|
|
if hasattr(record, "model_dump") and callable(record.model_dump):
|
|
return cls(**record.model_dump())
|
|
if hasattr(record, "dict") and callable(record.dict):
|
|
return cls(**record.dict())
|
|
return cls(**dict(record))
|
|
|
|
def to_db_dict(self, exclude_unset: bool = False) -> dict[str, Any]:
|
|
"""Convert domain model to a dictionary for database operations."""
|
|
return self.model_dump(exclude_none=True, exclude_unset=exclude_unset)
|