Edit on GitHub

src.db.models.yoomoney

  1from datetime import datetime
  2
  3from fastui.components.display import DisplayLookup
  4from fastui.events import GoToEvent
  5from pydantic import BaseModel, Field, model_validator
  6
  7
  8class YoomoneyOperation(BaseModel):
  9    """Модель операции YooMoney.
 10
 11    Эта модель представляет собой структуру данных для хранения информации
 12    об операциях YooMoney.
 13    """
 14
 15    __tablename__ = "yoomoney"
 16
 17    operation_id: str
 18    """Уникальный идентификатор операции."""
 19
 20    status: str
 21    """Статус операции."""
 22
 23    datetime: datetime
 24    """Дата и время операции."""
 25
 26    title: str
 27    """Заголовок операции."""
 28
 29    pattern_id: str | None = None
 30    """Идентификатор шаблона операции (по умолчанию None)."""
 31
 32    direction: str
 33    """Направление операции (например, 'incoming' или 'outgoing')."""
 34
 35    amount: float
 36    """Сумма операции."""
 37
 38    label: str
 39    """Метка операции."""
 40
 41    type: str
 42    """Тип операции."""
 43
 44    site_datetime: str = Field(init=False, title="Datetime", default="00:00")
 45    """Строковое представление даты и времени операции (не инициализируется при создании)."""
 46
 47    @model_validator(mode="after")
 48    def set_date(cls, values: BaseModel):
 49        """Устанавливает строковое представление даты операции.
 50
 51        Args:
 52            cls: Класс схемы.
 53            values (BaseModel): Значения для валидации.
 54
 55        Returns:
 56            BaseModel: Обновленные значения.
 57        """
 58        if hasattr(values, "datetime"):
 59            values.site_datetime = values.datetime.astimezone().ctime()
 60        return values
 61
 62
 63class YoomoneyOperationDetails(BaseModel):
 64    """Модель деталей операции YooMoney.
 65
 66    Эта модель представляет собой структуру данных для хранения подробной информации
 67    об операциях YooMoney.
 68    """
 69
 70    operation_id: str
 71    """Уникальный идентификатор операции."""
 72
 73    status: str
 74    """Статус операции."""
 75
 76    pattern_id: str | None = None
 77    """Идентификатор шаблона операции (по умолчанию None)."""
 78
 79    direction: str
 80    """Направление операции (например, 'incoming' или 'outgoing')."""
 81
 82    amount: float
 83    """Сумма операции."""
 84
 85    amount_due: str | None = None
 86    """Сумма, подлежащая оплате (по умолчанию None)."""
 87
 88    fee: float | None = None
 89    """Комиссия за операцию (по умолчанию None)."""
 90
 91    answer_datetime: datetime | None = None
 92    """Дата и время ответа (по умолчанию None)."""
 93
 94    datetime: datetime
 95    """Дата и время операции."""
 96
 97    title: str
 98    """Заголовок операции."""
 99
100    sender: str | None = None
101    """Отправитель операции (по умолчанию None)."""
102
103    recipient: str | None = None
104    """Получатель операции (по умолчанию None)."""
105
106    recipient_type: str | None = None
107    """Тип получателя (по умолчанию None)."""
108
109    message: str | None = None
110    """Сообщение, связанное с операцией (по умолчанию None)."""
111
112    comment: str | None = None
113    """Комментарий к операции (по умолчанию None)."""
114
115    codepro: bool | None = None
116    """Указывает, защищена ли операция с помощью CodePro (по умолчанию None)."""
117
118    protection_code: str | None = None
119    """Код защиты операции (по умолчанию None)."""
120
121    expires: str | None = None
122    """Срок действия операции (по умолчанию None)."""
123
124    label: str
125    """Метка операции."""
126
127    details: str | None = None
128    """Дополнительные детали операции (по умолчанию None)."""
129
130    type: str
131    """Тип операции."""
132
133    digital_goods: str | None = None
134    """Цифровые товары, связанные с операцией (по умолчанию None)."""
135
136    @model_validator(mode="before")
137    def convert_ints_to_str(cls, values):
138        """Преобразует целые числа в строки.
139
140        Args:
141            cls: Класс схемы.
142            values: Значения для валидации.
143
144        Returns:
145            dict: Обновленные значения.
146        """
147        return {
148            k: str(v) if isinstance(v, int) else v for k, v in values.__dict__.items()
149        }
150
151    site_datetime: str = Field(init=False, title="Datetime", default="00:00")
152    """Строковое представление даты и времени операции (не инициализируется при создании)."""
153
154    @model_validator(mode="after")
155    def set_date(cls, values: BaseModel):
156        """Устанавливает строковое представление даты операции.
157
158        Args:
159            cls: Класс схемы.
160            values (BaseModel): Значения для валидации.
161
162        Returns:
163            BaseModel: Обновленные значения.
164        """
165        if hasattr(values, "datetime"):
166            values.site_datetime = values.datetime.astimezone().ctime()
167        return values
168
169
170yoomoney_site_display: list = [
171    DisplayLookup(
172        field="operation_id",
173        on_click=GoToEvent(url="/bot/tables/yoomoney/?operation_id={operation_id}"),
174    ),
175    DisplayLookup(field="status"),
176    DisplayLookup(field="site_datetime"),
177    DisplayLookup(field="title"),
178    DisplayLookup(field="amount"),
179    DisplayLookup(field="label"),
180]
181"""list: Отображение операций YooMoney на сайте."""
class YoomoneyOperation(pydantic.main.BaseModel):
 9class YoomoneyOperation(BaseModel):
10    """Модель операции YooMoney.
11
12    Эта модель представляет собой структуру данных для хранения информации
13    об операциях YooMoney.
14    """
15
16    __tablename__ = "yoomoney"
17
18    operation_id: str
19    """Уникальный идентификатор операции."""
20
21    status: str
22    """Статус операции."""
23
24    datetime: datetime
25    """Дата и время операции."""
26
27    title: str
28    """Заголовок операции."""
29
30    pattern_id: str | None = None
31    """Идентификатор шаблона операции (по умолчанию None)."""
32
33    direction: str
34    """Направление операции (например, 'incoming' или 'outgoing')."""
35
36    amount: float
37    """Сумма операции."""
38
39    label: str
40    """Метка операции."""
41
42    type: str
43    """Тип операции."""
44
45    site_datetime: str = Field(init=False, title="Datetime", default="00:00")
46    """Строковое представление даты и времени операции (не инициализируется при создании)."""
47
48    @model_validator(mode="after")
49    def set_date(cls, values: BaseModel):
50        """Устанавливает строковое представление даты операции.
51
52        Args:
53            cls: Класс схемы.
54            values (BaseModel): Значения для валидации.
55
56        Returns:
57            BaseModel: Обновленные значения.
58        """
59        if hasattr(values, "datetime"):
60            values.site_datetime = values.datetime.astimezone().ctime()
61        return values

Модель операции YooMoney.

Эта модель представляет собой структуру данных для хранения информации об операциях YooMoney.

operation_id: str

Уникальный идентификатор операции.

status: str

Статус операции.

datetime: datetime.datetime

Дата и время операции.

title: str

Заголовок операции.

pattern_id: str | None

Идентификатор шаблона операции (по умолчанию None).

direction: str

Направление операции (например, 'incoming' или 'outgoing').

amount: float

Сумма операции.

label: str

Метка операции.

type: str

Тип операции.

site_datetime: str

Строковое представление даты и времени операции (не инициализируется при создании).

@model_validator(mode='after')
def set_date(cls, values: pydantic.main.BaseModel):
48    @model_validator(mode="after")
49    def set_date(cls, values: BaseModel):
50        """Устанавливает строковое представление даты операции.
51
52        Args:
53            cls: Класс схемы.
54            values (BaseModel): Значения для валидации.
55
56        Returns:
57            BaseModel: Обновленные значения.
58        """
59        if hasattr(values, "datetime"):
60            values.site_datetime = values.datetime.astimezone().ctime()
61        return values

Устанавливает строковое представление даты операции.

Arguments:
  • cls: Класс схемы.
  • values (BaseModel): Значения для валидации.
Returns:

BaseModel: Обновленные значения.

model_config: ClassVar[pydantic.config.ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, pydantic.fields.FieldInfo]] = {'operation_id': FieldInfo(annotation=str, required=True), 'status': FieldInfo(annotation=str, required=True), 'datetime': FieldInfo(annotation=datetime, required=True), 'title': FieldInfo(annotation=str, required=True), 'pattern_id': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'direction': FieldInfo(annotation=str, required=True), 'amount': FieldInfo(annotation=float, required=True), 'label': FieldInfo(annotation=str, required=True), 'type': FieldInfo(annotation=str, required=True), 'site_datetime': FieldInfo(annotation=str, required=False, default='00:00', title='Datetime', init=False)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

model_computed_fields: ClassVar[Dict[str, pydantic.fields.ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

class YoomoneyOperationDetails(pydantic.main.BaseModel):
 64class YoomoneyOperationDetails(BaseModel):
 65    """Модель деталей операции YooMoney.
 66
 67    Эта модель представляет собой структуру данных для хранения подробной информации
 68    об операциях YooMoney.
 69    """
 70
 71    operation_id: str
 72    """Уникальный идентификатор операции."""
 73
 74    status: str
 75    """Статус операции."""
 76
 77    pattern_id: str | None = None
 78    """Идентификатор шаблона операции (по умолчанию None)."""
 79
 80    direction: str
 81    """Направление операции (например, 'incoming' или 'outgoing')."""
 82
 83    amount: float
 84    """Сумма операции."""
 85
 86    amount_due: str | None = None
 87    """Сумма, подлежащая оплате (по умолчанию None)."""
 88
 89    fee: float | None = None
 90    """Комиссия за операцию (по умолчанию None)."""
 91
 92    answer_datetime: datetime | None = None
 93    """Дата и время ответа (по умолчанию None)."""
 94
 95    datetime: datetime
 96    """Дата и время операции."""
 97
 98    title: str
 99    """Заголовок операции."""
100
101    sender: str | None = None
102    """Отправитель операции (по умолчанию None)."""
103
104    recipient: str | None = None
105    """Получатель операции (по умолчанию None)."""
106
107    recipient_type: str | None = None
108    """Тип получателя (по умолчанию None)."""
109
110    message: str | None = None
111    """Сообщение, связанное с операцией (по умолчанию None)."""
112
113    comment: str | None = None
114    """Комментарий к операции (по умолчанию None)."""
115
116    codepro: bool | None = None
117    """Указывает, защищена ли операция с помощью CodePro (по умолчанию None)."""
118
119    protection_code: str | None = None
120    """Код защиты операции (по умолчанию None)."""
121
122    expires: str | None = None
123    """Срок действия операции (по умолчанию None)."""
124
125    label: str
126    """Метка операции."""
127
128    details: str | None = None
129    """Дополнительные детали операции (по умолчанию None)."""
130
131    type: str
132    """Тип операции."""
133
134    digital_goods: str | None = None
135    """Цифровые товары, связанные с операцией (по умолчанию None)."""
136
137    @model_validator(mode="before")
138    def convert_ints_to_str(cls, values):
139        """Преобразует целые числа в строки.
140
141        Args:
142            cls: Класс схемы.
143            values: Значения для валидации.
144
145        Returns:
146            dict: Обновленные значения.
147        """
148        return {
149            k: str(v) if isinstance(v, int) else v for k, v in values.__dict__.items()
150        }
151
152    site_datetime: str = Field(init=False, title="Datetime", default="00:00")
153    """Строковое представление даты и времени операции (не инициализируется при создании)."""
154
155    @model_validator(mode="after")
156    def set_date(cls, values: BaseModel):
157        """Устанавливает строковое представление даты операции.
158
159        Args:
160            cls: Класс схемы.
161            values (BaseModel): Значения для валидации.
162
163        Returns:
164            BaseModel: Обновленные значения.
165        """
166        if hasattr(values, "datetime"):
167            values.site_datetime = values.datetime.astimezone().ctime()
168        return values

Модель деталей операции YooMoney.

Эта модель представляет собой структуру данных для хранения подробной информации об операциях YooMoney.

operation_id: str

Уникальный идентификатор операции.

status: str

Статус операции.

pattern_id: str | None

Идентификатор шаблона операции (по умолчанию None).

direction: str

Направление операции (например, 'incoming' или 'outgoing').

amount: float

Сумма операции.

amount_due: str | None

Сумма, подлежащая оплате (по умолчанию None).

fee: float | None

Комиссия за операцию (по умолчанию None).

answer_datetime: datetime.datetime | None

Дата и время ответа (по умолчанию None).

datetime: datetime.datetime

Дата и время операции.

title: str

Заголовок операции.

sender: str | None

Отправитель операции (по умолчанию None).

recipient: str | None

Получатель операции (по умолчанию None).

recipient_type: str | None

Тип получателя (по умолчанию None).

message: str | None

Сообщение, связанное с операцией (по умолчанию None).

comment: str | None

Комментарий к операции (по умолчанию None).

codepro: bool | None

Указывает, защищена ли операция с помощью CodePro (по умолчанию None).

protection_code: str | None

Код защиты операции (по умолчанию None).

expires: str | None

Срок действия операции (по умолчанию None).

label: str

Метка операции.

details: str | None

Дополнительные детали операции (по умолчанию None).

type: str

Тип операции.

digital_goods: str | None

Цифровые товары, связанные с операцией (по умолчанию None).

@model_validator(mode='before')
def convert_ints_to_str(cls, values):
137    @model_validator(mode="before")
138    def convert_ints_to_str(cls, values):
139        """Преобразует целые числа в строки.
140
141        Args:
142            cls: Класс схемы.
143            values: Значения для валидации.
144
145        Returns:
146            dict: Обновленные значения.
147        """
148        return {
149            k: str(v) if isinstance(v, int) else v for k, v in values.__dict__.items()
150        }

Преобразует целые числа в строки.

Arguments:
  • cls: Класс схемы.
  • values: Значения для валидации.
Returns:

dict: Обновленные значения.

site_datetime: str

Строковое представление даты и времени операции (не инициализируется при создании).

@model_validator(mode='after')
def set_date(cls, values: pydantic.main.BaseModel):
155    @model_validator(mode="after")
156    def set_date(cls, values: BaseModel):
157        """Устанавливает строковое представление даты операции.
158
159        Args:
160            cls: Класс схемы.
161            values (BaseModel): Значения для валидации.
162
163        Returns:
164            BaseModel: Обновленные значения.
165        """
166        if hasattr(values, "datetime"):
167            values.site_datetime = values.datetime.astimezone().ctime()
168        return values

Устанавливает строковое представление даты операции.

Arguments:
  • cls: Класс схемы.
  • values (BaseModel): Значения для валидации.
Returns:

BaseModel: Обновленные значения.

model_config: ClassVar[pydantic.config.ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, pydantic.fields.FieldInfo]] = {'operation_id': FieldInfo(annotation=str, required=True), 'status': FieldInfo(annotation=str, required=True), 'pattern_id': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'direction': FieldInfo(annotation=str, required=True), 'amount': FieldInfo(annotation=float, required=True), 'amount_due': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'fee': FieldInfo(annotation=Union[float, NoneType], required=False, default=None), 'answer_datetime': FieldInfo(annotation=Union[datetime, NoneType], required=False, default=None), 'datetime': FieldInfo(annotation=datetime, required=True), 'title': FieldInfo(annotation=str, required=True), 'sender': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'recipient': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'recipient_type': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'message': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'comment': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'codepro': FieldInfo(annotation=Union[bool, NoneType], required=False, default=None), 'protection_code': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'expires': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'label': FieldInfo(annotation=str, required=True), 'details': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'type': FieldInfo(annotation=str, required=True), 'digital_goods': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'site_datetime': FieldInfo(annotation=str, required=False, default='00:00', title='Datetime', init=False)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

model_computed_fields: ClassVar[Dict[str, pydantic.fields.ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

yoomoney_site_display: list = [DisplayLookup(mode=None, title=None, on_click=GoToEvent(url='/bot/tables/yoomoney/?operation_id={operation_id}', query=None, target=None, type='go-to'), field='operation_id', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='status', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='site_datetime', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='title', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='amount', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='label', table_width_percent=None)]

list: Отображение операций YooMoney на сайте.