arpakitlib 1.8.25__py3-none-any.whl → 1.8.28__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.
@@ -1,3 +1,4 @@
1
1
  {
2
- "arpakitlib_project_template_version": "5_1"
2
+ "arpakitlib_project_template_version": "5_2",
3
+ "arpakitlib_project_template_subversion": "3"
3
4
  }
@@ -52,6 +52,7 @@ def create_api_exception_handler(
52
52
  )
53
53
 
54
54
  if isinstance(exception, APIException):
55
+ status_code = exception.status_code
55
56
  old_error_data = error_common_so.error_data
56
57
  error_common_so = exception.error_common_so
57
58
  error_common_so.error_data = combine_dicts(old_error_data, error_common_so.error_data)
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import datetime as dt
4
+ from typing import Any
4
5
 
5
6
  from project.api.schema.common import BaseSO
6
7
  from project.sqlalchemy_db_.sqlalchemy_model import SimpleDBM
@@ -11,6 +12,8 @@ class SimpleDBMAdminSO(BaseSO):
11
12
  long_id: str
12
13
  slug: str | None
13
14
  creation_dt: dt.datetime
15
+ extra_data: dict[str, Any]
16
+ entity_name: str
14
17
 
15
18
  @classmethod
16
19
  def from_dbm(cls, *, simple_dbm: SimpleDBM) -> SimpleDBMAdminSO:
@@ -17,6 +17,8 @@ class OperationAdminSO(SimpleDBMAdminSO):
17
17
  output_data: dict[str, Any]
18
18
  error_data: dict[str, Any]
19
19
  duration_total_seconds: float | None
20
+ allowed_statuses: list[str]
21
+ allowed_types: list[str]
20
22
 
21
23
  @classmethod
22
24
  def from_dbm(cls, *, simple_dbm: OperationDBM) -> OperationAdminSO:
@@ -11,6 +11,7 @@ class SimpleDBMClientSO(BaseSO):
11
11
  long_id: str
12
12
  slug: str | None
13
13
  creation_dt: dt.datetime
14
+ entity_name: str
14
15
 
15
16
  @classmethod
16
17
  def from_dbm(cls, *, simple_dbm: SimpleDBM) -> SimpleDBMClientSO:
@@ -0,0 +1,18 @@
1
+ from __future__ import annotations
2
+
3
+ import datetime as dt
4
+
5
+ from project.api.schema.common import BaseSO
6
+ from project.sqlalchemy_db_.sqlalchemy_model import SimpleDBM
7
+
8
+
9
+ class SimpleDBMGeneralSO(BaseSO):
10
+ id: int
11
+ long_id: str
12
+ slug: str | None
13
+ creation_dt: dt.datetime
14
+ entity_name: str
15
+
16
+ @classmethod
17
+ def from_dbm(cls, *, simple_dbm: SimpleDBM) -> SimpleDBMGeneralSO:
18
+ return cls.model_validate(simple_dbm.simple_dict_with_sd_properties())
@@ -42,11 +42,11 @@ class SimpleDBM(BaseDBM):
42
42
  sort_order=-100,
43
43
  nullable=False
44
44
  )
45
- extra_data: Mapped[dict[str, Any] | None] = mapped_column(
45
+ extra_data: Mapped[dict[str, Any]] = mapped_column(
46
46
  sqlalchemy.JSON,
47
47
  index=False,
48
- nullable=True,
49
- insert_default=None,
48
+ nullable=False,
49
+ insert_default={},
50
50
  server_default="{}",
51
51
  sort_order=1000,
52
52
  )
@@ -56,6 +56,14 @@ class SimpleDBM(BaseDBM):
56
56
  return f"{self.__class__.__name__.removesuffix('DBM')} (id={self.id})"
57
57
  return f"{self.__class__.__name__.removesuffix('DBM')} (id={self.id}, slug={self.slug})"
58
58
 
59
+ @property
60
+ def entity_name(self) -> str:
61
+ return self.__class__.__name__.removesuffix("DBM")
62
+
63
+ @property
64
+ def sdp_entity_name(self) -> str:
65
+ return self.entity_name
66
+
59
67
 
60
68
  def get_simple_dbm_class() -> type[SimpleDBM]:
61
69
  from project.sqlalchemy_db_.sqlalchemy_model import SimpleDBM
@@ -97,3 +97,11 @@ class OperationDBM(SimpleDBM):
97
97
  То есть префикс sdp_ и даёт этот бонус.
98
98
  """
99
99
  return self.duration_total_seconds
100
+
101
+ @property
102
+ def sdp_allowed_statuses(self) -> list[str]:
103
+ return self.Statuses.values_list()
104
+
105
+ @property
106
+ def sdp_allowed_types(self) -> list[str]:
107
+ return self.Types.values_list()
@@ -6,8 +6,8 @@ import sqlalchemy
6
6
  from aiogram import BaseMiddleware
7
7
  from aiogram.types import TelegramObject
8
8
 
9
+ from arpakitlib.ar_datetime_util import now_utc_dt
9
10
  from project.core.settings import get_cached_settings
10
- from project.core.util import now_local_dt
11
11
  from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
12
12
  from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
13
13
  from project.tg_bot.middleware.common import MiddlewareDataTgBot
@@ -43,7 +43,7 @@ class InitUserTgBotMiddleware(BaseMiddleware):
43
43
  middleware_data_tg_bot.additional_data["tg_user_was_found"] = tg_user
44
44
  middleware_data_tg_bot.additional_data["found_tg_user_id"] = tg_user.id
45
45
 
46
- now_local_dt_ = now_local_dt()
46
+ now_utc_dt_ = now_utc_dt()
47
47
 
48
48
  if tg_user is not None and get_cached_sqlalchemy_db() is not None:
49
49
  async with get_cached_sqlalchemy_db().new_async_session() as async_session:
@@ -55,11 +55,11 @@ class InitUserTgBotMiddleware(BaseMiddleware):
55
55
  if tg_user.id in get_cached_settings().tg_bot_admin_tg_ids:
56
56
  roles.append(UserDBM.Roles.admin)
57
57
  middleware_data_tg_bot.user_dbm = UserDBM(
58
- creation_dt=now_local_dt_,
58
+ creation_dt=now_utc_dt_,
59
59
  roles=roles,
60
60
  tg_id=tg_user.id,
61
61
  tg_data=tg_user.model_dump(mode="json"),
62
- tg_bot_last_action_dt=now_local_dt_
62
+ tg_bot_last_action_dt=now_utc_dt_
63
63
  )
64
64
  async_session.add(middleware_data_tg_bot.user_dbm)
65
65
  await async_session.commit()
@@ -68,7 +68,7 @@ class InitUserTgBotMiddleware(BaseMiddleware):
68
68
  _logger.info(f"user_dbm was added, {middleware_data_tg_bot.user_dbm}")
69
69
  else:
70
70
  middleware_data_tg_bot.user_dbm.tg_data = tg_user.model_dump(mode="json")
71
- middleware_data_tg_bot.user_dbm.tg_bot_last_action_dt = now_local_dt_
71
+ middleware_data_tg_bot.user_dbm.tg_bot_last_action_dt = now_utc_dt_
72
72
  if (
73
73
  tg_user.id in get_cached_settings().tg_bot_admin_tg_ids
74
74
  and UserDBM.Roles.admin not in middleware_data_tg_bot.user_dbm.roles
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: arpakitlib
3
- Version: 1.8.25
3
+ Version: 1.8.28
4
4
  Summary: arpakitlib
5
5
  License: Apache-2.0
6
6
  Keywords: arpakitlib,arpakit,arpakit-company,arpakitcompany,arpakit_company
@@ -8,7 +8,7 @@ arpakitlib/_arpakit_project_template_v_5_1/alembic/env.py,sha256=Qesmnj5A2kB-Doe
8
8
  arpakitlib/_arpakit_project_template_v_5_1/alembic/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635
9
9
  arpakitlib/_arpakit_project_template_v_5_1/alembic/versions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  arpakitlib/_arpakit_project_template_v_5_1/alembic.ini,sha256=8fuyeEvGBiPGbxEFy8ISBV3xX_fgVmuhEGpB10_B5Uo,3733
11
- arpakitlib/_arpakit_project_template_v_5_1/arpakitlib_project_template_info.json,sha256=mpl217vxjKE2HUKTtW8EIgYqW7oLU6hg_HLavmvLPfA,50
11
+ arpakitlib/_arpakit_project_template_v_5_1/arpakitlib_project_template_info.json,sha256=WtF1ajvE3KZWYKpcV9BePD-2v3bo3jaro_sA9pHfA40,99
12
12
  arpakitlib/_arpakit_project_template_v_5_1/command/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  arpakitlib/_arpakit_project_template_v_5_1/command/alembic_history.sh,sha256=OMnDNtHIksGh9iavWnzbtxcudZW4vjdcISsBXvzZSPw,22
14
14
  arpakitlib/_arpakit_project_template_v_5_1/command/alembic_revision_autogenerate.sh,sha256=yW2i-SBOtBx15Ya0poVQqKkJM5t2JZp06r9AEW-DmGE,46
@@ -87,7 +87,7 @@ arpakitlib/_arpakit_project_template_v_5_1/project/api/const.py,sha256=J9bqaRRiI
87
87
  arpakitlib/_arpakit_project_template_v_5_1/project/api/create_api_app.py,sha256=C7VhAh7cTYLUBg8HyEgNTCdzvRlAC6hGYKdDrweWq6I,2327
88
88
  arpakitlib/_arpakit_project_template_v_5_1/project/api/event.py,sha256=xKfJ3UnOx_g1s7KNZjWRp0eZbVRTsSlyJhT3wkfwT6k,2414
89
89
  arpakitlib/_arpakit_project_template_v_5_1/project/api/exception.py,sha256=cNZaI2DacGLl8Hyn1qIfFpVjvQzOQjwXWsVW4auBrCo,1280
90
- arpakitlib/_arpakit_project_template_v_5_1/project/api/exception_handler.py,sha256=Uyt0gB_8QnMFcZuNoUaEiAAJEjziWQpsXY1OM36e3YU,11125
90
+ arpakitlib/_arpakit_project_template_v_5_1/project/api/exception_handler.py,sha256=X5vC3kIAN1wXR0Q_iCsQWapKqaNK29q37M2WeFcIt8s,11173
91
91
  arpakitlib/_arpakit_project_template_v_5_1/project/api/openapi_ui.py,sha256=PLhH-W6zDViO-75AGCs8Vq3IoyHChdqwBYAqLvdQN0U,904
92
92
  arpakitlib/_arpakit_project_template_v_5_1/project/api/response.py,sha256=xZMymP2BuQaRNVWLeIp3UgUUo-MFN8MJnsn9Al4vOb8,1028
93
93
  arpakitlib/_arpakit_project_template_v_5_1/project/api/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -122,12 +122,12 @@ arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/in_/general/__init
122
122
  arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/in_/general/common.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
123
123
  arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
124
  arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
- arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/admin/common.py,sha256=b0s5VdLcH-sBvD9WFaVg-cek299ItBH8W0xn7JWaV78,445
126
- arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/admin/operation.py,sha256=8oPqCofV5KJMB6JB-Cozi_5l-2t8EPSvfossT0wIZBM,699
125
+ arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/admin/common.py,sha256=sKZ5cFZ-Orpw0jD7Whs6OLwz2LXCC6q_og4_ABaqJ1w,520
126
+ arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/admin/operation.py,sha256=xDZe7xgkGp2rv2LBZv5iGuNIgoqjv9OALe7FIK-1gUQ,760
127
127
  arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/admin/story_log.py,sha256=EenBUvs9qENEGuCpZrBRSd4TNVjR-ER55g44QGPLAzY,482
128
128
  arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
129
  arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/client/api_key.py,sha256=opXOQvpC3turivtLkf-BOJ9Octq5HW8HaM-oRTLhrX0,429
130
- arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/client/common.py,sha256=cm7FAsZf5GlGAcR_w0tr2fR9gUMNcY--ifqE-BuFGpU,447
130
+ arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/client/common.py,sha256=xh5FaklPcc1HX5XL5FRWC8l1ev_IlvF_MK0ULpWjjOk,468
131
131
  arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/client/user.py,sha256=S93SizBPg5evgycr3Y_AF0Ds0M5gvO2o_W2VsDZXFeY,629
132
132
  arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/client/user_token.py,sha256=XRUs3ieMDZGGnMMst-QXptBWXqBL-qPQa25NJVbSI9I,436
133
133
  arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -135,7 +135,7 @@ arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/common/datetim
135
135
  arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/common/error.py,sha256=C8oaHotxmxBnN7Lr1qT7T5Mk0SIU2Ha7_tPDpgiR6M8,286
136
136
  arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/common/raw_data.py,sha256=F0CGmdqDAqnpoJW1q_yaRa4OsaSI4UbsCXavCxxDZVQ,132
137
137
  arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/general/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
- arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/general/common.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
+ arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/general/common.py,sha256=0I4hOs9ihpd4BS0M8P_BLXH7TxDLQtV4HQb-h9pz1uA,470
139
139
  arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/general/errors_info_general.py,sha256=meZ3lxkbgEZegN4bV_DlnR7sK-lw6ef0lAs0smPADC4,168
140
140
  arpakitlib/_arpakit_project_template_v_5_1/project/api/schema/out/general/healthcheck.py,sha256=H8YkH3BYj7J1qTX1Ur2c4EGTSmLZygV86dlqvMx7QFM,106
141
141
  arpakitlib/_arpakit_project_template_v_5_1/project/api/util.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -219,8 +219,8 @@ arpakitlib/_arpakit_project_template_v_5_1/project/sqlalchemy_db_/const.py,sha25
219
219
  arpakitlib/_arpakit_project_template_v_5_1/project/sqlalchemy_db_/sqlalchemy_db.py,sha256=1y3FaMFzm_5UM2poqtBve_UP_mh1vjs--krq6yO8PsA,742
220
220
  arpakitlib/_arpakit_project_template_v_5_1/project/sqlalchemy_db_/sqlalchemy_model/__init__.py,sha256=btSjCQ7RJqomeXzYs9HePCu1dZHs0z6-RuboYKG89_8,598
221
221
  arpakitlib/_arpakit_project_template_v_5_1/project/sqlalchemy_db_/sqlalchemy_model/api_key.py,sha256=RVkfa6kuhdv1D_3Qindh4bucapqz5MZa5gNkiYuwC14,1096
222
- arpakitlib/_arpakit_project_template_v_5_1/project/sqlalchemy_db_/sqlalchemy_model/common.py,sha256=St2jp3kvVbz4iE9ZEiJNGUGsVSzW1LaVokpBo0X2VB0,1905
223
- arpakitlib/_arpakit_project_template_v_5_1/project/sqlalchemy_db_/sqlalchemy_model/operation.py,sha256=xm_0X5DNoLtw_2HkDVd386cleOFBeA-Ll7Cr2hw-fgk,3288
222
+ arpakitlib/_arpakit_project_template_v_5_1/project/sqlalchemy_db_/sqlalchemy_model/common.py,sha256=xhMxNea8ndjmdsNwp_a9L_VUkkRb8jjVLhczxDasNss,2090
223
+ arpakitlib/_arpakit_project_template_v_5_1/project/sqlalchemy_db_/sqlalchemy_model/operation.py,sha256=0uhlkE95_lX8Nmgl2n5oJ7lty558Y6ZOoQc6lfuSyCY,3496
224
224
  arpakitlib/_arpakit_project_template_v_5_1/project/sqlalchemy_db_/sqlalchemy_model/story_log.py,sha256=uB7nKEqvUKJyE_xybJUjXIJtVXh0IKyoPDnDUogq8lE,1306
225
225
  arpakitlib/_arpakit_project_template_v_5_1/project/sqlalchemy_db_/sqlalchemy_model/user.py,sha256=GaOJkxsQ6B3B4pO43_MOOrJSUE8d7VzXyYLQcoEvCCw,2355
226
226
  arpakitlib/_arpakit_project_template_v_5_1/project/sqlalchemy_db_/sqlalchemy_model/user_token.py,sha256=AtFEPQZlYl_fr0WgYkS8ToiHluNomXV02HDuD0nVjZw,1398
@@ -267,7 +267,7 @@ arpakitlib/_arpakit_project_template_v_5_1/project/tg_bot/kb/static_/client/hell
267
267
  arpakitlib/_arpakit_project_template_v_5_1/project/tg_bot/kb/static_/common.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
268
268
  arpakitlib/_arpakit_project_template_v_5_1/project/tg_bot/middleware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
269
269
  arpakitlib/_arpakit_project_template_v_5_1/project/tg_bot/middleware/common.py,sha256=DbUyWtk3zmWJx28QmJLX9keTNBUhI9ZJJjEnjrgxhgs,390
270
- arpakitlib/_arpakit_project_template_v_5_1/project/tg_bot/middleware/init_user.py,sha256=dtr7ZuGiU0rYNtYKqp3nkGm-WYgqeocPARxJVblOaxE,3829
270
+ arpakitlib/_arpakit_project_template_v_5_1/project/tg_bot/middleware/init_user.py,sha256=0hsU0PBXhYdsTpTVq8dds7SPw96oGykTh14SEAyesAc,3827
271
271
  arpakitlib/_arpakit_project_template_v_5_1/project/tg_bot/middleware/middleware.py,sha256=66v3pHu8nhJ8pJayXaHNKjmPVK4fKUCNWilOM0yzNKg,319
272
272
  arpakitlib/_arpakit_project_template_v_5_1/project/tg_bot/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
273
273
  arpakitlib/_arpakit_project_template_v_5_1/project/tg_bot/router/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -357,8 +357,8 @@ arpakitlib/ar_type_util.py,sha256=Cs_tef-Fc5xeyAF54KgISCsP11NHyzIsglm4S3Xx7iM,40
357
357
  arpakitlib/ar_wata_api_client.py,sha256=gdHOqDbuqxhTjVDtRW1DvkRJLdDofCrOq51GTctzLns,242
358
358
  arpakitlib/ar_yookassa_api_client_util.py,sha256=VozuZeCJjmLd1zj2BdC9WfiAQ3XYOrIMsdpNK-AUlm0,5347
359
359
  arpakitlib/ar_zabbix_api_client_util.py,sha256=Q-VR4MvoZ9aHwZeYZr9G3LwN-ANx1T5KFmF6pvPM-9M,6402
360
- arpakitlib-1.8.25.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
361
- arpakitlib-1.8.25.dist-info/METADATA,sha256=QLOmp4KFpk-_QVtGg324rH_E39mO86R_dRAK_s7V0vA,3434
362
- arpakitlib-1.8.25.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
363
- arpakitlib-1.8.25.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
364
- arpakitlib-1.8.25.dist-info/RECORD,,
360
+ arpakitlib-1.8.28.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
361
+ arpakitlib-1.8.28.dist-info/METADATA,sha256=t9RUXfOVchKgDsRMh5ssroG0uk7RYb2cBwsDF2oT4qQ,3434
362
+ arpakitlib-1.8.28.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
363
+ arpakitlib-1.8.28.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
364
+ arpakitlib-1.8.28.dist-info/RECORD,,