Coverage for app/core/base/base_entity.py: 100%

14 statements  

« prev     ^ index     » next       coverage.py v7.6.10, created at 2025-01-15 01:44 +0000

1from abc import ABCMeta, abstractmethod 

2 

3from pydantic.alias_generators import to_camel 

4from sqlmodel import SQLModel 

5from sqlmodel._compat import SQLModelConfig 

6 

7 

8class BaseEntity(SQLModel, metaclass=ABCMeta): 

9 model_config = SQLModelConfig( 

10 populate_by_name=True, # 名前とエイリアスの入力の両方を許容する 

11 alias_generator=to_camel, # キャメルケースのエイリアスを作る 

12 validate_assignment=True, # 更新時にvalidationを行う設定 

13 ) 

14 

15 @abstractmethod 

16 def _id(self) -> str | int: 

17 """IDの取得方法を必ず設計する.""" 

18 raise NotImplementedError 

19 

20 # IDで比較するロジック 

21 def __eq__(self, other: object)->bool: 

22 if not isinstance(other, self.__class__): # isinstance を使用 

23 return False 

24 return self._id() == other._id() 

25 def __ne__(self, other: object)->bool: 

26 return not self.__eq__(other) 

27 

28