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
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-12 18:53 +0000
1from enum import StrEnum, auto
3from sqlalchemy import Enum as SQLEnum
6class TransactionType(StrEnum):
7 """
8 Enum for transaction types.
9 """
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()
22 def as_literal_column(self):
23 """
24 Return the transaction type as a SQL literal column.
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
31 return literal_column(f"'{self.value}'")
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)