arpakitlib 1.8.255__py3-none-any.whl → 1.8.256__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_pydantic_schema_from_sqlalchemy_model.py +25 -4
- {arpakitlib-1.8.255.dist-info → arpakitlib-1.8.256.dist-info}/METADATA +1 -1
- {arpakitlib-1.8.255.dist-info → arpakitlib-1.8.256.dist-info}/RECORD +6 -6
- {arpakitlib-1.8.255.dist-info → arpakitlib-1.8.256.dist-info}/LICENSE +0 -0
- {arpakitlib-1.8.255.dist-info → arpakitlib-1.8.256.dist-info}/WHEEL +0 -0
- {arpakitlib-1.8.255.dist-info → arpakitlib-1.8.256.dist-info}/entry_points.txt +0 -0
@@ -44,20 +44,35 @@ def _python_type_from_col(col) -> type | str:
|
|
44
44
|
return Any
|
45
45
|
|
46
46
|
|
47
|
-
def _get_property_name_to_type_from_model_class(
|
47
|
+
def _get_property_name_to_type_from_model_class(
|
48
|
+
*,
|
49
|
+
model_class: type,
|
50
|
+
skip_property_if_cannot_define_type: bool = True,
|
51
|
+
exclude_property_names: list[str] | None = None,
|
52
|
+
exclude_property_types: list[type] | None = None,
|
53
|
+
) -> dict[str, Any]:
|
48
54
|
"""
|
49
55
|
Находит все @property в классе и вытаскивает их возвращаемый тип.
|
50
56
|
Если тип не удаётся получить — подставляем Any.
|
51
57
|
"""
|
58
|
+
exclude_property_names = set(exclude_property_names or [])
|
52
59
|
props: dict[str, Any] = {}
|
53
|
-
for
|
60
|
+
for property_name, attr in vars(model_class).items():
|
54
61
|
if isinstance(attr, property):
|
55
62
|
try:
|
56
63
|
hints = get_type_hints(attr.fget) if attr.fget else {}
|
57
64
|
ret_type = hints.get("return", Any)
|
58
65
|
except Exception:
|
66
|
+
if skip_property_if_cannot_define_type:
|
67
|
+
continue
|
59
68
|
ret_type = Any
|
60
|
-
|
69
|
+
if exclude_property_names:
|
70
|
+
if property_name in exclude_property_names:
|
71
|
+
continue
|
72
|
+
if exclude_property_types:
|
73
|
+
if not _type_matches(type_=ret_type, allowed_types=exclude_property_types):
|
74
|
+
continue
|
75
|
+
props[property_name] = ret_type
|
61
76
|
return props
|
62
77
|
|
63
78
|
|
@@ -107,6 +122,7 @@ def pydantic_schema_from_sqlalchemy_model(
|
|
107
122
|
exclude_property_types: list[type] | None = None,
|
108
123
|
filter_property_prefixes: list[str] | None = None,
|
109
124
|
remove_property_prefixes: list[str] | None = None,
|
125
|
+
skip_property_if_cannot_define_type: bool = True
|
110
126
|
) -> type[BaseModel]:
|
111
127
|
"""
|
112
128
|
Генерирует Pydantic-модель из колонок SQLAlchemy-модели и (опционально) из @property.
|
@@ -159,7 +175,12 @@ def pydantic_schema_from_sqlalchemy_model(
|
|
159
175
|
|
160
176
|
# 2) Свойства (@property)
|
161
177
|
if include_properties:
|
162
|
-
property_name_to_type = _get_property_name_to_type_from_model_class(
|
178
|
+
property_name_to_type = _get_property_name_to_type_from_model_class(
|
179
|
+
model_class=sqlalchemy_model,
|
180
|
+
skip_property_if_cannot_define_type=skip_property_if_cannot_define_type,
|
181
|
+
exclude_property_names=list(exclude_property_names),
|
182
|
+
exclude_property_types=exclude_property_types
|
183
|
+
)
|
163
184
|
|
164
185
|
# (НОВОЕ) фильтр по типам, если задан
|
165
186
|
if include_property_types:
|
@@ -414,7 +414,7 @@ arpakitlib/ar_need_type_util.py,sha256=XmY1kswz8j9oo5f9CxRu0_zgfvxWrXPYKOj6MM04s
|
|
414
414
|
arpakitlib/ar_openai_api_client_util.py,sha256=dWgsSPXtxNBxS5VRi_NharGQrUXF_YjIfhU3Bj5cW9M,5651
|
415
415
|
arpakitlib/ar_parse_command.py,sha256=1WTdQoWVshoDZ1jDaKeTzajfqaYHP3FNO0-REyo1aMY,3003
|
416
416
|
arpakitlib/ar_postgresql_util.py,sha256=1AuLjEaa1Lg4pzn-ukCVnDi35Eg1k91APRTqZhIJAdo,945
|
417
|
-
arpakitlib/ar_pydantic_schema_from_sqlalchemy_model.py,sha256
|
417
|
+
arpakitlib/ar_pydantic_schema_from_sqlalchemy_model.py,sha256=qk439Ii9WFo8vqESt6w93HkRe5XvjOiy-PGa0wXazVg,10677
|
418
418
|
arpakitlib/ar_raise_own_exception_if_exception.py,sha256=A6TuNSBk1pHaQ_qxnUmE2LgsNGA1IGqX26b1_HEA4Nc,5978
|
419
419
|
arpakitlib/ar_rat_func_util.py,sha256=Ca10o3RJwyx_DJLxjTxgHDO6NU3M6CWgUR4bif67OE4,2006
|
420
420
|
arpakitlib/ar_really_validate_email.py,sha256=HBfhyiDB3INI6Iq6hR2WOMKA5wVWWRl0Qun-x__OZ9o,1201
|
@@ -430,8 +430,8 @@ arpakitlib/ar_sqlalchemy_util.py,sha256=FDva9onjtCPrYZYIHHb93NMwD1WlmaORjiWgPRJQ
|
|
430
430
|
arpakitlib/ar_str_util.py,sha256=2lGpnXDf2h1cBZpVf5i1tX_HCv5iBd6IGnrCw4QWWlY,4350
|
431
431
|
arpakitlib/ar_type_util.py,sha256=Cs_tef-Fc5xeyAF54KgISCsP11NHyzIsglm4S3Xx7iM,4049
|
432
432
|
arpakitlib/ar_yookassa_api_client_util.py,sha256=VozuZeCJjmLd1zj2BdC9WfiAQ3XYOrIMsdpNK-AUlm0,5347
|
433
|
-
arpakitlib-1.8.
|
434
|
-
arpakitlib-1.8.
|
435
|
-
arpakitlib-1.8.
|
436
|
-
arpakitlib-1.8.
|
437
|
-
arpakitlib-1.8.
|
433
|
+
arpakitlib-1.8.256.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
|
434
|
+
arpakitlib-1.8.256.dist-info/METADATA,sha256=9PSap0kkeDfMLn2Zv9uffEhxTtP5Y68sT5-eoerWx7M,3919
|
435
|
+
arpakitlib-1.8.256.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
436
|
+
arpakitlib-1.8.256.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
|
437
|
+
arpakitlib-1.8.256.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|