Cybersecurity-Projects/PROJECTS/intermediate/api-security-scanner/backend/models/Base.py

80 lines
1.8 KiB
Python

"""
ⒸAngelaMos | 2025
Base model class
Common fields and methods for all models
"""
from typing import Any
from sqlalchemy import (
Column,
DateTime,
Integer,
)
from datetime import datetime, UTC
from sqlalchemy.ext.declarative import declared_attr
from core.database import Base
class BaseModel(Base):
"""
Abstract base model with common fields and methods
All models inherit from this class
"""
__abstract__ = True
id = Column(
Integer,
primary_key = True,
index = True,
autoincrement = True
)
created_at = Column(
DateTime(timezone = True),
default = lambda: datetime.now(UTC)
)
updated_at = Column(
DateTime(timezone = True),
default = lambda: datetime.now(UTC),
onupdate = lambda: datetime.now(UTC),
)
@declared_attr
def __tablename__(cls) -> str:
"""
Auto-generate table name from class name
"""
return cls.__name__.lower()
def to_dict(self) -> dict[str, Any]:
"""
Convert model instance to dictionary
Returns:
dict: Dictionary representation of the model
"""
return {
column.name: getattr(self,
column.name)
for column in self.__table__.columns
}
def update(self, **kwargs: Any) -> None:
"""
Update model fields from keyword arguments
Args:
**kwargs: Field names and values to update
"""
for key, value in kwargs.items():
if hasattr(self, key):
setattr(self, key, value)
self.updated_at = datetime.now(UTC)
def __repr__(self) -> str:
"""
String representation of model
"""
return f"<{self.__class__.__name__}(id={self.id})>"