Coverage for src / idx_api / models / base.py: 100%

9 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2025-12-28 11:09 -0700

1"""Base model with common functionality.""" 

2 

3from datetime import datetime, timezone 

4from typing import Any 

5 

6from sqlalchemy import DateTime 

7from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column 

8 

9 

10class Base(DeclarativeBase): 

11 """Base class for all models.""" 

12 

13 pass 

14 

15 

16class TimestampMixin: 

17 """Mixin for created_at and updated_at timestamps.""" 

18 

19 created_at: Mapped[datetime] = mapped_column( 

20 DateTime(timezone=True), 

21 nullable=False, 

22 default=lambda: datetime.now(timezone.utc), 

23 ) 

24 updated_at: Mapped[datetime] = mapped_column( 

25 DateTime(timezone=True), 

26 nullable=False, 

27 default=lambda: datetime.now(timezone.utc), 

28 onupdate=lambda: datetime.now(timezone.utc), 

29 )