Coverage for opt/mealie/lib/python3.12/site-packages/mealie/db/models/_model_base.py: 100%

21 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-11-25 17:29 +0000

1from datetime import datetime 1a

2 

3from sqlalchemy import Integer 1a

4from sqlalchemy.orm import DeclarativeBase, Mapped, declared_attr, mapped_column, synonym 1a

5from text_unidecode import unidecode 1a

6 

7from ._model_utils.datetime import NaiveDateTime, get_utc_now 1a

8 

9 

10class SqlAlchemyBase(DeclarativeBase): 1a

11 id: Mapped[int] = mapped_column(Integer, primary_key=True) 1a

12 created_at: Mapped[datetime | None] = mapped_column(NaiveDateTime, default=get_utc_now, index=True) 1a

13 update_at: Mapped[datetime | None] = mapped_column(NaiveDateTime, default=get_utc_now, onupdate=get_utc_now) 1a

14 

15 @declared_attr 1a

16 def updated_at(cls) -> Mapped[datetime | None]: 1a

17 return synonym("update_at") 1a

18 

19 @classmethod 1a

20 def normalize(cls, val: str) -> str: 1a

21 # We cap the length to 255 to prevent indexes from being too long; see: 

22 # https://www.postgresql.org/docs/current/btree.html 

23 return unidecode(val).lower().strip()[:255] 1opqrshbtuivcjkwxyzAdBeCfDEFGHIJKLMNg

24 

25 

26class BaseMixins: 1a

27 """ 

28 `self.update` method which directly passing arguments to the `__init__` 

29 """ 

30 

31 def update(self, *args, **kwargs): 1a

32 self.__init__(*args, **kwargs) 1lmnhbicjkdefg

33 

34 # sqlalchemy doesn't like this method to remove all instances of a 1:many relationship, 

35 # so we explicitly check for that here 

36 for k, v in kwargs.items(): 1lmnhbicjkdefg

37 if hasattr(self, k) and v == []: 1lmnhbicjkdefg

38 setattr(self, k, v) 1lbcdefg