Coverage for dibbler / models / TransactionType.py: 100%

17 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-12 18:53 +0000

1from enum import StrEnum, auto 

2 

3from sqlalchemy import Enum as SQLEnum 

4 

5 

6class TransactionType(StrEnum): 

7 """ 

8 Enum for transaction types. 

9 """ 

10 

11 ADD_PRODUCT = auto() 

12 ADJUST_BALANCE = auto() 

13 ADJUST_INTEREST = auto() 

14 ADJUST_PENALTY = auto() 

15 ADJUST_STOCK = auto() 

16 BUY_PRODUCT = auto() 

17 JOINT = auto() 

18 JOINT_BUY_PRODUCT = auto() 

19 THROW_PRODUCT = auto() 

20 TRANSFER = auto() 

21 

22 def as_literal_column(self): 

23 """ 

24 Return the transaction type as a SQL literal column. 

25 

26 This is useful to avoid too many `?` bind parameters in SQL queries, 

27 when the input value is known to be safe. 

28 """ 

29 from sqlalchemy import literal_column 

30 

31 return literal_column(f"'{self.value}'") 

32 

33 

34TransactionTypeSQL = SQLEnum( 

35 TransactionType, 

36 native_enum=True, 

37 create_constraint=True, 

38 validate_strings=True, 

39 values_callable=lambda x: [i.value for i in x], 

40)