arpakitlib 1.7.211__py3-none-any.whl → 1.7.213__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- arpakitlib/ar_settings_util.py +10 -2
- arpakitlib/ar_sqlalchemy_model_util.py +5 -6
- {arpakitlib-1.7.211.dist-info → arpakitlib-1.7.213.dist-info}/METADATA +1 -1
- {arpakitlib-1.7.211.dist-info → arpakitlib-1.7.213.dist-info}/RECORD +7 -7
- {arpakitlib-1.7.211.dist-info → arpakitlib-1.7.213.dist-info}/LICENSE +0 -0
- {arpakitlib-1.7.211.dist-info → arpakitlib-1.7.213.dist-info}/WHEEL +0 -0
- {arpakitlib-1.7.211.dist-info → arpakitlib-1.7.213.dist-info}/entry_points.txt +0 -0
arpakitlib/ar_settings_util.py
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# arpakit
|
2
2
|
|
3
|
-
from typing import Union
|
3
|
+
from typing import Union, Any
|
4
4
|
|
5
|
-
from pydantic import ConfigDict, field_validator
|
5
|
+
from pydantic import ConfigDict, field_validator, model_validator
|
6
6
|
from pydantic_core import PydanticUndefined
|
7
7
|
from pydantic_settings import BaseSettings
|
8
8
|
|
@@ -31,6 +31,14 @@ class SimpleSettings(BaseSettings):
|
|
31
31
|
|
32
32
|
mode_type: str = ModeTypes.not_prod
|
33
33
|
|
34
|
+
@model_validator(mode="before")
|
35
|
+
@classmethod
|
36
|
+
def validate_all_fields(cls, values: dict[str, Any]) -> dict[str, Any]:
|
37
|
+
for key, value in values.items():
|
38
|
+
if isinstance(value, str) and value.lower().strip() in {"null", "none", "nil"}:
|
39
|
+
values[key] = None
|
40
|
+
return values
|
41
|
+
|
34
42
|
@field_validator("mode_type")
|
35
43
|
@classmethod
|
36
44
|
def validate_mode_type(cls, v: str):
|
@@ -4,8 +4,7 @@ from datetime import datetime, timedelta
|
|
4
4
|
from typing import Any
|
5
5
|
from uuid import uuid4
|
6
6
|
|
7
|
-
from sqlalchemy import inspect, INTEGER, TEXT, TIMESTAMP, func
|
8
|
-
from sqlalchemy.dialects.postgresql import JSONB
|
7
|
+
from sqlalchemy import inspect, INTEGER, TEXT, TIMESTAMP, func, JSON
|
9
8
|
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
|
10
9
|
|
11
10
|
from arpakitlib.ar_datetime_util import now_utc_dt
|
@@ -103,7 +102,7 @@ class StoryLogDBM(SimpleDBM):
|
|
103
102
|
)
|
104
103
|
title: Mapped[str | None] = mapped_column(TEXT, index=True, default=None, nullable=True)
|
105
104
|
data: Mapped[dict[str, Any]] = mapped_column(
|
106
|
-
|
105
|
+
JSON, insert_default={}, server_default="{}", index=True, nullable=False
|
107
106
|
)
|
108
107
|
|
109
108
|
|
@@ -131,13 +130,13 @@ class OperationDBM(SimpleDBM):
|
|
131
130
|
execution_start_dt: Mapped[datetime | None] = mapped_column(TIMESTAMP(timezone=True), nullable=True)
|
132
131
|
execution_finish_dt: Mapped[datetime | None] = mapped_column(TIMESTAMP(timezone=True), nullable=True)
|
133
132
|
input_data: Mapped[dict[str, Any]] = mapped_column(
|
134
|
-
|
133
|
+
JSON,
|
135
134
|
insert_default={},
|
136
135
|
server_default="{}",
|
137
136
|
nullable=False
|
138
137
|
)
|
139
|
-
output_data: Mapped[dict[str, Any]] = mapped_column(
|
140
|
-
error_data: Mapped[dict[str, Any]] = mapped_column(
|
138
|
+
output_data: Mapped[dict[str, Any]] = mapped_column(JSON, insert_default={}, server_default="{}", nullable=False)
|
139
|
+
error_data: Mapped[dict[str, Any]] = mapped_column(JSON, insert_default={}, server_default="{}", nullable=False)
|
141
140
|
|
142
141
|
def raise_if_executed_with_error(self):
|
143
142
|
if self.status == self.Statuses.executed_with_error:
|
@@ -173,18 +173,18 @@ arpakitlib/ar_parse_command.py,sha256=-s61xcATIsfw1eV_iD3xi-grsitbGzSDoAFc5V0OFy
|
|
173
173
|
arpakitlib/ar_postgresql_util.py,sha256=1AuLjEaa1Lg4pzn-ukCVnDi35Eg1k91APRTqZhIJAdo,945
|
174
174
|
arpakitlib/ar_run_cmd_util.py,sha256=D_rPavKMmWkQtwvZFz-Io5Ak8eSODHkcFeLPzNVC68g,1072
|
175
175
|
arpakitlib/ar_schedule_uust_api_client_util.py,sha256=0Ns0mMEXYEkVmP6YTAXHyNcrhNsvCJ8X-G_5XwILhJ4,6855
|
176
|
-
arpakitlib/ar_settings_util.py,sha256=
|
176
|
+
arpakitlib/ar_settings_util.py,sha256=rnoTqbRuhiq7294D4crD5kbnU8-gNWJbwGU_Ls2gJoU,2199
|
177
177
|
arpakitlib/ar_sleep_util.py,sha256=OaLtRaJQWMkGjfj_mW1RB2P4RaSWsAIH8LUoXqsH0zM,1061
|
178
178
|
arpakitlib/ar_sqladmin_util.py,sha256=6Nv9VQssk9PB0piyuss__soYKdjVhdbIeXIv4AgUxmQ,2660
|
179
|
-
arpakitlib/ar_sqlalchemy_model_util.py,sha256=
|
179
|
+
arpakitlib/ar_sqlalchemy_model_util.py,sha256=DGbXcqD2hukzAiO0aQDUkJ5xOvi3yYnMKzI5y0pMXzs,6217
|
180
180
|
arpakitlib/ar_sqlalchemy_util.py,sha256=Hcg1THrDsSR_-8dsY1CG3NWPEv0FqCbkPXFXLtjlSJ0,4207
|
181
181
|
arpakitlib/ar_ssh_runner_util.py,sha256=e9deuUdBW7Eh0Exx2nTBhk57SaOZYaJaSjNk8q6dbJk,6804
|
182
182
|
arpakitlib/ar_str_util.py,sha256=yU5gOwNXUQaH5b_tM5t6fXUn9oUcv5EQbVnq2wXXIpQ,3378
|
183
183
|
arpakitlib/ar_type_util.py,sha256=9C3ErtUVs0tAUqtK-foFzjJOykfBOntfCz2IogDOgfA,4134
|
184
184
|
arpakitlib/ar_yookassa_api_client_util.py,sha256=sh4fcUkAkdOetFn9JYoTvjcSXP-M1wU04KEY-ECLfLg,5137
|
185
185
|
arpakitlib/ar_zabbix_api_client_util.py,sha256=Q-VR4MvoZ9aHwZeYZr9G3LwN-ANx1T5KFmF6pvPM-9M,6402
|
186
|
-
arpakitlib-1.7.
|
187
|
-
arpakitlib-1.7.
|
188
|
-
arpakitlib-1.7.
|
189
|
-
arpakitlib-1.7.
|
190
|
-
arpakitlib-1.7.
|
186
|
+
arpakitlib-1.7.213.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
|
187
|
+
arpakitlib-1.7.213.dist-info/METADATA,sha256=PD-0jkrhtKX-qudtRkX1Nriikr5NLTAoWF0tqHqy84I,3176
|
188
|
+
arpakitlib-1.7.213.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
|
189
|
+
arpakitlib-1.7.213.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
|
190
|
+
arpakitlib-1.7.213.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|