arpakitlib 1.8.192__py3-none-any.whl → 1.8.194__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/_arpakit_project_template_v_5/arpakitlib_project_template_info.json +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/common.py +53 -0
- arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/common.py +27 -1
- arpakitlib/ar_sqlalchemy_util.py +3 -2
- {arpakitlib-1.8.192.dist-info → arpakitlib-1.8.194.dist-info}/METADATA +1 -1
- {arpakitlib-1.8.192.dist-info → arpakitlib-1.8.194.dist-info}/RECORD +9 -9
- {arpakitlib-1.8.192.dist-info → arpakitlib-1.8.194.dist-info}/LICENSE +0 -0
- {arpakitlib-1.8.192.dist-info → arpakitlib-1.8.194.dist-info}/WHEEL +0 -0
- {arpakitlib-1.8.192.dist-info → arpakitlib-1.8.194.dist-info}/entry_points.txt +0 -0
@@ -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
|
arpakitlib/ar_sqlalchemy_util.py
CHANGED
@@ -77,6 +77,7 @@ class BaseDBM(DeclarativeBase):
|
|
77
77
|
include_sd_properties: Collection[str] | None = None,
|
78
78
|
exclude_sd_properties: Collection[str] | None = None,
|
79
79
|
include_columns_and_sd_properties: Collection[str] | None = None,
|
80
|
+
prefix: str = "sdp_",
|
80
81
|
kwargs: dict[str, Any] | None = None
|
81
82
|
) -> dict[str, Any]:
|
82
83
|
if exclude_columns is None:
|
@@ -99,10 +100,10 @@ class BaseDBM(DeclarativeBase):
|
|
99
100
|
|
100
101
|
if need_include_sd_properties:
|
101
102
|
for attr_name in dir(self):
|
102
|
-
if not attr_name.startswith(
|
103
|
+
if not attr_name.startswith(prefix) or not isinstance(getattr(type(self), attr_name, None), property):
|
103
104
|
continue
|
104
105
|
|
105
|
-
sd_property_name = attr_name.removeprefix(
|
106
|
+
sd_property_name = attr_name.removeprefix(prefix)
|
106
107
|
|
107
108
|
if (
|
108
109
|
include_columns_and_sd_properties is not None
|
@@ -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=
|
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
|
@@ -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=
|
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=
|
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
|
@@ -409,12 +409,12 @@ arpakitlib/ar_schedule_uust_api_client_util.py,sha256=rXI2_3OTaIBgR-GixM1Ti-Ue1f
|
|
409
409
|
arpakitlib/ar_settings_util.py,sha256=Y5wi_cmsjDjfJpM0VJHjbo0NoVPKfypKaD1USowwDtQ,1327
|
410
410
|
arpakitlib/ar_sleep_util.py,sha256=ggaj7ML6QK_ADsHMcyu6GUmUpQ_9B9n-SKYH17h-9lM,1045
|
411
411
|
arpakitlib/ar_sqladmin_util.py,sha256=SEoaowAPF3lhxPsNjwmOymNJ55Ty9rmzvsDm7gD5Ceo,861
|
412
|
-
arpakitlib/ar_sqlalchemy_util.py,sha256=
|
412
|
+
arpakitlib/ar_sqlalchemy_util.py,sha256=hiDh1GrFHmnqa6lJPMq4fb9m3_fs-eDKuRQzbFxIvFA,12330
|
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.
|
417
|
-
arpakitlib-1.8.
|
418
|
-
arpakitlib-1.8.
|
419
|
-
arpakitlib-1.8.
|
420
|
-
arpakitlib-1.8.
|
416
|
+
arpakitlib-1.8.194.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
|
417
|
+
arpakitlib-1.8.194.dist-info/METADATA,sha256=STtNdyIhDpdwoDnjUggO0fjMF6mWOlsCvV5Mb3Dndwk,3741
|
418
|
+
arpakitlib-1.8.194.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
419
|
+
arpakitlib-1.8.194.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
|
420
|
+
arpakitlib-1.8.194.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|