arpakitlib 1.8.191__py3-none-any.whl → 1.8.193__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,4 +1,4 @@
1
1
  {
2
2
  "arpakitlib_project_template_version": "5",
3
- "arpakitlib_project_template_subversion": "46"
3
+ "arpakitlib_project_template_subversion": "48"
4
4
  }
@@ -2,7 +2,7 @@ from datetime import timedelta
2
2
  from typing import Any, Callable
3
3
 
4
4
  from pydantic import ConfigDict
5
- from pydantic.v1 import BaseModel
5
+ from pydantic import BaseModel
6
6
 
7
7
  from project.operation_execution.util import every_timedelta_is_time_func
8
8
  from project.sqlalchemy_db_.sqlalchemy_model import OperationDBM
@@ -17,25 +17,25 @@ class ScheduledOperation(BaseModel):
17
17
  timeout_after_creation: timedelta | None = None
18
18
 
19
19
 
20
- healthcheck_every_0_01_seconds_scheduled_operation = ScheduledOperation(
20
+ healthcheck_every_0_01_seconds_so = ScheduledOperation(
21
21
  type=OperationDBM.Types.healthcheck_,
22
22
  input_data={"healthcheck": "healthcheck"},
23
23
  is_time_func=every_timedelta_is_time_func(td=timedelta(seconds=0.01))
24
24
  )
25
25
 
26
- healthcheck_every_3_seconds_scheduled_operation = ScheduledOperation(
26
+ healthcheck_every_3_seconds_so = ScheduledOperation(
27
27
  type=OperationDBM.Types.healthcheck_,
28
28
  input_data={"healthcheck": "healthcheck"},
29
29
  is_time_func=every_timedelta_is_time_func(td=timedelta(seconds=3))
30
30
  )
31
31
 
32
- healthcheck_every_24_hours_scheduled_operation = ScheduledOperation(
32
+ healthcheck_every_24_hours_so = ScheduledOperation(
33
33
  type=OperationDBM.Types.healthcheck_,
34
34
  input_data={"healthcheck": "healthcheck"},
35
35
  is_time_func=every_timedelta_is_time_func(td=timedelta(hours=24))
36
36
  )
37
37
 
38
- raise_fake_error_every_3_seconds_scheduled_operation = ScheduledOperation(
38
+ raise_fake_error_every_3_seconds_so = ScheduledOperation(
39
39
  type=OperationDBM.Types.raise_fake_error_,
40
40
  input_data={"raise_fake_error": "raise_fake_error"},
41
41
  is_time_func=every_timedelta_is_time_func(td=timedelta(seconds=3))
@@ -44,6 +44,6 @@ raise_fake_error_every_3_seconds_scheduled_operation = ScheduledOperation(
44
44
 
45
45
  def get_scheduled_operations() -> list[ScheduledOperation]:
46
46
  res = []
47
- res.append(healthcheck_every_3_seconds_scheduled_operation)
48
- res.append(healthcheck_every_24_hours_scheduled_operation)
47
+ res.append(healthcheck_every_3_seconds_so)
48
+ res.append(healthcheck_every_24_hours_so)
49
49
  return res
@@ -8,6 +8,8 @@ from openpyxl import Workbook
8
8
  from sqladmin import ModelView
9
9
 
10
10
  from arpakitlib.ar_datetime_util import now_utc_dt
11
+ from project.sqladmin_.util.etc import format_json_for_preview_, format_datetime_, format_json_
12
+ from project.sqlalchemy_db_.sqlalchemy_model import SimpleDBM
11
13
 
12
14
 
13
15
  class SimpleMV(ModelView):
@@ -23,6 +25,57 @@ class SimpleMV(ModelView):
23
25
  export_types = ["xlsx"]
24
26
  form_include_pk = True
25
27
 
28
+ column_default_sort = [
29
+ (SimpleDBM.ColumnNames.creation_dt, True)
30
+ ]
31
+
32
+ @classmethod
33
+ def get_default_column_searchable_list(cls) -> list[str]:
34
+ from project.sqlalchemy_db_.sqlalchemy_model import SimpleDBM
35
+ return [SimpleDBM.ColumnNames.id, SimpleDBM.ColumnNames.long_id, SimpleDBM.ColumnNames.uuid]
36
+
37
+ @classmethod
38
+ def get_default_column_list(cls) -> list[str]:
39
+ from project.sqlalchemy_db_.sqlalchemy_model import SimpleDBM
40
+ return SimpleDBM.get_mapped_column_names()
41
+
42
+ @classmethod
43
+ def get_default_column_details_list(cls) -> list[str]:
44
+ from project.sqlalchemy_db_.sqlalchemy_model import SimpleDBM
45
+ return SimpleDBM.get_mapped_column_names()
46
+
47
+ @classmethod
48
+ def get_default_form_columns(cls) -> list[str]:
49
+ from project.sqlalchemy_db_.sqlalchemy_model import SimpleDBM
50
+ res = SimpleDBM.get_mapped_column_names()
51
+ if SimpleDBM.ColumnNames.id in res:
52
+ res.remove(SimpleDBM.ColumnNames.id)
53
+ if SimpleDBM.ColumnNames.long_id in res:
54
+ res.remove(SimpleDBM.ColumnNames.long_id)
55
+ if SimpleDBM.ColumnNames.uuid in res:
56
+ res.remove(SimpleDBM.ColumnNames.uuid)
57
+ if SimpleDBM.ColumnNames.slug in res:
58
+ res.remove(SimpleDBM.ColumnNames.slug)
59
+ if SimpleDBM.ColumnNames.creation_dt in res:
60
+ res.remove(SimpleDBM.ColumnNames.creation_dt)
61
+ return res
62
+
63
+ @classmethod
64
+ def get_default_column_formatters(cls) -> dict[Any, Any]:
65
+ return {
66
+ SimpleDBM.ColumnNames.creation_dt: lambda m, _: format_datetime_(m.creation_dt),
67
+ SimpleDBM.ColumnNames.detail_data: lambda m, a: format_json_for_preview_(m.detail_data),
68
+ SimpleDBM.ColumnNames.extra_data: lambda m, a: format_json_for_preview_(m.extra_data),
69
+ }
70
+
71
+ @classmethod
72
+ def get_default_column_formatters_detail(cls) -> dict[Any, Any]:
73
+ return {
74
+ SimpleDBM.ColumnNames.creation_dt: lambda m, _: format_datetime_(m.creation_dt),
75
+ SimpleDBM.ColumnNames.detail_data: lambda m, a: format_json_(m.detail_data),
76
+ SimpleDBM.ColumnNames.extra_data: lambda m, a: format_json_(m.extra_data),
77
+ }
78
+
26
79
  async def export_data(
27
80
  self,
28
81
  data: List[Any],
@@ -1,8 +1,9 @@
1
+ import uuid
1
2
  from datetime import datetime
2
3
  from typing import Any
3
4
  from uuid import uuid4
4
5
 
5
- import sqlalchemy
6
+ import sqlalchemy.dialects.postgresql
6
7
  from sqlalchemy import func
7
8
  from sqlalchemy.orm import mapped_column, Mapped, validates
8
9
 
@@ -28,6 +29,15 @@ def make_slug_from_string(string: str) -> str:
28
29
  class SimpleDBM(BaseDBM):
29
30
  __abstract__ = True
30
31
 
32
+ class ColumnNames:
33
+ id = "id"
34
+ long_id = "long_id"
35
+ uuid = "uuid"
36
+ slug = "slug"
37
+ creation_dt = "creation_dt"
38
+ detail_data = "detail_data"
39
+ extra_data = "extra_data"
40
+
31
41
  id: Mapped[int] = mapped_column(
32
42
  sqlalchemy.BIGINT,
33
43
  nullable=False,
@@ -43,6 +53,14 @@ class SimpleDBM(BaseDBM):
43
53
  server_default=func.gen_random_uuid(),
44
54
  sort_order=-102,
45
55
  )
56
+ uuid: Mapped[sqlalchemy.dialects.postgresql.UUID] = mapped_column(
57
+ sqlalchemy.UUID(as_uuid=True),
58
+ nullable=False,
59
+ unique=True,
60
+ insert_default=uuid.uuid4,
61
+ server_default=func.gen_random_uuid(),
62
+ sort_order=-102,
63
+ )
46
64
  slug: Mapped[str | None] = mapped_column(
47
65
  sqlalchemy.TEXT,
48
66
  nullable=True,
@@ -99,6 +117,14 @@ class SimpleDBM(BaseDBM):
99
117
  def entity_name(self) -> str:
100
118
  return self.__class__.__name__.removesuffix("DBM")
101
119
 
120
+ @property
121
+ def uuid_as_str(self) -> str:
122
+ return str(self.uuid)
123
+
124
+ @classmethod
125
+ def get_mapped_column_names(cls) -> list[str]:
126
+ return [k for k, v in SimpleDBM.__dict__.items() if isinstance(v, Mapped)]
127
+
102
128
  # ---SDP---
103
129
 
104
130
  @property
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: arpakitlib
3
- Version: 1.8.191
3
+ Version: 1.8.193
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/alembic/env.py,sha256=Qesmnj5A2kB-Doeuf
8
8
  arpakitlib/_arpakit_project_template_v_5/alembic/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635
9
9
  arpakitlib/_arpakit_project_template_v_5/alembic/versions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  arpakitlib/_arpakit_project_template_v_5/alembic.ini,sha256=8fuyeEvGBiPGbxEFy8ISBV3xX_fgVmuhEGpB10_B5Uo,3733
11
- arpakitlib/_arpakit_project_template_v_5/arpakitlib_project_template_info.json,sha256=GUwpn6VLQB618HdTf74tKA5xJ4O7qzo9pOfNQ6w9suw,98
11
+ arpakitlib/_arpakit_project_template_v_5/arpakitlib_project_template_info.json,sha256=nOUaX-jQTf_-6LEz8gh0OAvYNYmtEoMPAzb6Ix3xfQI,98
12
12
  arpakitlib/_arpakit_project_template_v_5/command/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  arpakitlib/_arpakit_project_template_v_5/command/alembic_history.sh,sha256=OMnDNtHIksGh9iavWnzbtxcudZW4vjdcISsBXvzZSPw,22
14
14
  arpakitlib/_arpakit_project_template_v_5/command/alembic_revision_autogenerate.sh,sha256=yW2i-SBOtBx15Ya0poVQqKkJM5t2JZp06r9AEW-DmGE,46
@@ -195,7 +195,7 @@ arpakitlib/_arpakit_project_template_v_5/project/operation_execution/__init__.py
195
195
  arpakitlib/_arpakit_project_template_v_5/project/operation_execution/const.py,sha256=dcvj5C9E2F2KCsGZPBBncQf_EvVJAC1qQgnyD8P4ZEw,6
196
196
  arpakitlib/_arpakit_project_template_v_5/project/operation_execution/operation_executor_worker.py,sha256=GlJYHw63RONeTfQa6goLoFSlcLp0m7CcAYai-1RtSl0,12130
197
197
  arpakitlib/_arpakit_project_template_v_5/project/operation_execution/scheduled_operation_creator_worker.py,sha256=WzZC6r0GVSwOpphsxqpRZIdeewK_wzi3YshjLOutYGA,4524
198
- arpakitlib/_arpakit_project_template_v_5/project/operation_execution/scheduled_operations.py,sha256=WZyRWzrLvGre_1TjWy0I8V7WfKFZJ0f_8LuZZNrzgy8,1712
198
+ arpakitlib/_arpakit_project_template_v_5/project/operation_execution/scheduled_operations.py,sha256=4Wo-tuC2AbeCYTa5_snMJ2EkXwASCe08vXNnM5feJos,1607
199
199
  arpakitlib/_arpakit_project_template_v_5/project/operation_execution/util.py,sha256=sqHF2AU5Y5IurYHcIH2bu3-JbS1amLO3GD13Zvy8epM,923
200
200
  arpakitlib/_arpakit_project_template_v_5/project/resource/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
201
201
  arpakitlib/_arpakit_project_template_v_5/project/resource/static/1,sha256=IIO7Wvjwlr2-LPSQ7Y8O35hcI6t0_s8zqITDxkYCO8I,11
@@ -248,7 +248,7 @@ arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/create_sqladmin_app.p
248
248
  arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/event.py,sha256=LjAUYNlsX9Sj_QLMzYuTQbbYYbIMHhbsSjTXt-G7lOE,849
249
249
  arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/__init__.py,sha256=aKX6k2bEVvfXa9dATYts-sUoWgf4MV3H_PiiUceejr4,596
250
250
  arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/api_key.py,sha256=VTpepKLCKrPnftGD-8Ibp75S0dwUrLlUytRfcXDDcKg,1597
251
- arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/common.py,sha256=s8mmdwb5eRcdNM_lZpj2UOhvc1ckRhUubjniQ-dDIK0,2504
251
+ arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/common.py,sha256=vI9yDb2344l5dNfXTZYrjfGCSDbA4EvXqW9yaKEwjAQ,4879
252
252
  arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/operation.py,sha256=3jvDgLyOJe7U1UmJFgYOh6tlATM60PCCnIJDSFUW4tk,3595
253
253
  arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/story_log.py,sha256=KTyvMty9bozjnC0bSDoTtK1H4LTFfbX_MwqP72Ip5D0,2194
254
254
  arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/user.py,sha256=AhK-2YocK1dM2wMxX_xF0qnsMiI5Pu0Arj5yfDe8Noo,2669
@@ -262,7 +262,7 @@ arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/const.py,sha256=
262
262
  arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_db.py,sha256=1y3FaMFzm_5UM2poqtBve_UP_mh1vjs--krq6yO8PsA,742
263
263
  arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/__init__.py,sha256=7PQqeYThEBXRrXwJZjuH7yAFu25DVr_IneuMwEF3kUE,731
264
264
  arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/api_key.py,sha256=2X6VPkf1TKq-0319J0tL-rPMvgmkBCjim3Si1dZboMQ,1969
265
- arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/common.py,sha256=y3g0j0vBs2ICuX4rHlqBbDO0C39q4LMirk9o6NFbrRU,3246
265
+ arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/common.py,sha256=OsnGHOmco4FsQOe8MfGPFTbwCohXXB-eINNsDh43wzs,3997
266
266
  arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/operation.py,sha256=emIo83GUEoywgh4fGv2xDGIkCtSUPq_2ujRlLEc5woM,5930
267
267
  arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/story_log.py,sha256=CiNec-x5_z0Pr5Mt-RZXJ1tKJMRn_TAKIaOioG4NK7U,2489
268
268
  arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user.py,sha256=22TE8y2Vm9byLLkIE6RVAMa29d9ILCVg1e1QYi4ONIQ,7898
@@ -413,8 +413,8 @@ arpakitlib/ar_sqlalchemy_util.py,sha256=vdhSLtSNVrWejDzR2XEfwNSXgR4QJ-IqaJryEp1a
413
413
  arpakitlib/ar_str_util.py,sha256=2lGpnXDf2h1cBZpVf5i1tX_HCv5iBd6IGnrCw4QWWlY,4350
414
414
  arpakitlib/ar_type_util.py,sha256=Cs_tef-Fc5xeyAF54KgISCsP11NHyzIsglm4S3Xx7iM,4049
415
415
  arpakitlib/ar_yookassa_api_client_util.py,sha256=VozuZeCJjmLd1zj2BdC9WfiAQ3XYOrIMsdpNK-AUlm0,5347
416
- arpakitlib-1.8.191.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
417
- arpakitlib-1.8.191.dist-info/METADATA,sha256=R9QrtPOqAvYAJuoZCN4n0kf8UwfGn0ITv2ToqNQdTQ8,3741
418
- arpakitlib-1.8.191.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
419
- arpakitlib-1.8.191.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
420
- arpakitlib-1.8.191.dist-info/RECORD,,
416
+ arpakitlib-1.8.193.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
417
+ arpakitlib-1.8.193.dist-info/METADATA,sha256=y8q-Osr4a4Bm4b_aQPmeIaHYA-f1wL7sykYt7LExuek,3741
418
+ arpakitlib-1.8.193.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
419
+ arpakitlib-1.8.193.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
420
+ arpakitlib-1.8.193.dist-info/RECORD,,