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.
@@ -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(model_class: type) -> dict[str, Any]:
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 name, attr in vars(model_class).items():
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
- props[name] = ret_type
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(sqlalchemy_model)
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:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: arpakitlib
3
- Version: 1.8.255
3
+ Version: 1.8.256
4
4
  Summary: arpakitlib
5
5
  License: Apache-2.0
6
6
  Keywords: arpakitlib,arpakit,arpakit-company,arpakitcompany,arpakit_company
@@ -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=-cygl5zkbQuKQ1vp3RSbyLka7w9uackcGIsuCbq7jxU,9728
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.255.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
434
- arpakitlib-1.8.255.dist-info/METADATA,sha256=UzSoTiAnAf8JvaX4DOOPyfHzUnH3fk4EwFfh4zvVMnA,3919
435
- arpakitlib-1.8.255.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
436
- arpakitlib-1.8.255.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
437
- arpakitlib-1.8.255.dist-info/RECORD,,
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,,