arpakitlib 1.8.277__py3-none-any.whl → 1.8.279__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.

Potentially problematic release.


This version of arpakitlib might be problematic. Click here for more details.

@@ -1,8 +1,15 @@
1
1
  import asyncio
2
2
 
3
+ from arpakitlib.ar_pydantic_schema_from_sqlalchemy_model import _get_property_name_to_type_from_model_class
4
+ from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
5
+
3
6
 
4
7
  def __sandbox():
5
- pass
8
+ res = _get_property_name_to_type_from_model_class(
9
+ model_class=UserDBM
10
+ )
11
+ for a,b in res.items():
12
+ print(a, b)
6
13
 
7
14
 
8
15
  async def __async_sandbox():
@@ -1,6 +1,7 @@
1
1
  # arpakit
2
2
 
3
3
  from datetime import datetime, date
4
+ from zoneinfo import ZoneInfo
4
5
 
5
6
  import pytz
6
7
 
@@ -36,6 +37,18 @@ def birth_date_to_age(*, birth_date: date, raise_if_age_negative: bool = False)
36
37
  return res
37
38
 
38
39
 
40
+ def datetime_as_msk_str(datetime_: datetime | None) -> str | None:
41
+ if datetime_ is None:
42
+ return None
43
+ return datetime_.astimezone(ZoneInfo("Europe/Moscow")).strftime("%Y-%m-%d %H:%M:%S %Z%z")
44
+
45
+
46
+ def datetime_as_ufa_str(datetime_: datetime | None) -> str | None:
47
+ if datetime_ is None:
48
+ return None
49
+ return datetime_.astimezone(ZoneInfo("Asia/Yekaterinburg")).strftime("%Y-%m-%d %H:%M:%S %Z%z")
50
+
51
+
39
52
  def __example():
40
53
  pass
41
54
 
@@ -33,13 +33,24 @@ def _get_property_name_to_type_from_model_class(
33
33
  exclude_property_types: list[type] | None = None,
34
34
  ) -> dict[str, Any]:
35
35
  """
36
- Находит все @property в классе и вытаскивает их возвращаемый тип.
37
- Если тип не удаётся получить — подставляем Any.
36
+ Находит все @property в классе и его родителях, и вытаскивает их возвращаемый тип.
37
+ Если тип не удаётся получить — подставляем Any (в зависимости от skip_property_if_cannot_define_type).
38
38
  """
39
39
  exclude_property_names = set(exclude_property_names or [])
40
40
  props: dict[str, Any] = {}
41
- for property_name, attr in vars(model_class).items():
42
- if isinstance(attr, property):
41
+
42
+ for cls in reversed(model_class.__mro__):
43
+
44
+ if cls is object:
45
+ continue
46
+
47
+ for property_name, attr in cls.__dict__.items():
48
+ if not isinstance(attr, property):
49
+ continue
50
+
51
+ if property_name in exclude_property_names:
52
+ continue
53
+
43
54
  try:
44
55
  hints = get_type_hints(attr.fget) if attr.fget else {}
45
56
  ret_type = hints.get("return", Any)
@@ -48,13 +59,12 @@ def _get_property_name_to_type_from_model_class(
48
59
  ret_type = Any
49
60
  else:
50
61
  raise
51
- if exclude_property_names:
52
- if property_name in exclude_property_names:
53
- continue
54
- if exclude_property_types:
55
- if _type_matches(type_=ret_type, allowed_types=exclude_property_types):
56
- continue
62
+
63
+ if exclude_property_types and _type_matches(type_=ret_type, allowed_types=exclude_property_types):
64
+ continue
65
+
57
66
  props[property_name] = ret_type
67
+
58
68
  return props
59
69
 
60
70
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arpakitlib
3
- Version: 1.8.277
3
+ Version: 1.8.279
4
4
  Summary: arpakitlib
5
5
  License: Apache-2.0
6
6
  License-File: LICENSE
@@ -238,7 +238,7 @@ arpakitlib/_arpakit_project_template_v_5/project/sandbox/__init__.py,sha256=47DE
238
238
  arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_1.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
239
239
  arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_2.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
240
240
  arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_3.py,sha256=CIv4vQfBLhlIh92fiLhmyTXSZXjDovxTFZtUBDnWyFY,427
241
- arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_4.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
241
+ arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_4.py,sha256=Oalf7__usi-AkxjoeKQgrbdvaK7Mevh6i92u0Upoq50,460
242
242
  arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_5.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
243
243
  arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_6.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
244
244
  arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_7.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
@@ -389,7 +389,7 @@ arpakitlib/ar_blank_util.py,sha256=qFUdY8usL_pRYamz8Rw1fW3fzNIgrLmpdYP8q-_PQvw,2
389
389
  arpakitlib/ar_cache_file_util.py,sha256=Fo2pH-Zqm966KWFBHG_pbiySGZvhIFCYqy7k1weRfJ0,3476
390
390
  arpakitlib/ar_class_util.py,sha256=i76pQW_7k_S2m_DlQh6xNjtggv9Col3WSx9W_bwk98E,722
391
391
  arpakitlib/ar_clone_pydantic_model_fields.py,sha256=5i77NGEjnY2ppk_Ot179egQGNDvg7zre8NBl5Es1nkg,1453
392
- arpakitlib/ar_datetime_util.py,sha256=Xe1NiT9oPQzNSG7RVRkhukhbg4i-hhS5ImmV7sPUc8o,971
392
+ arpakitlib/ar_datetime_util.py,sha256=flEtvHaBDvAw1YSSZ1PEj71cZF31akl4NzqpoVdgrQw,1424
393
393
  arpakitlib/ar_dict_util.py,sha256=oet-9AJEjQZfG_EI82BuYW0jdW2NQxKjPXol_nfTXjw,447
394
394
  arpakitlib/ar_dream_ai_api_client_util.py,sha256=Z1oii_XSsgunYx17SdcHl54S4KPQti7-MJs0xXZ8vL0,2830
395
395
  arpakitlib/ar_encrypt_decrypt_util.py,sha256=GhWnp7HHkbhwFVVCzO1H07m-5gryr4yjWsXjOaNQm1Y,520
@@ -415,7 +415,7 @@ arpakitlib/ar_need_type_util.py,sha256=XmY1kswz8j9oo5f9CxRu0_zgfvxWrXPYKOj6MM04s
415
415
  arpakitlib/ar_openai_api_client_util.py,sha256=dWgsSPXtxNBxS5VRi_NharGQrUXF_YjIfhU3Bj5cW9M,5651
416
416
  arpakitlib/ar_parse_command.py,sha256=1WTdQoWVshoDZ1jDaKeTzajfqaYHP3FNO0-REyo1aMY,3003
417
417
  arpakitlib/ar_postgresql_util.py,sha256=1AuLjEaa1Lg4pzn-ukCVnDi35Eg1k91APRTqZhIJAdo,945
418
- arpakitlib/ar_pydantic_schema_from_sqlalchemy_model.py,sha256=jUa9i3UWqK0Qyfq8jMcnwTUCoI3e_N4W36aEcxdLXBA,10388
418
+ arpakitlib/ar_pydantic_schema_from_sqlalchemy_model.py,sha256=SddmsEdRdVbmdZ5aSuwy6DfGYmYx_JO6lKzuEJeBAV8,10553
419
419
  arpakitlib/ar_raise_own_exception_if_exception.py,sha256=A6TuNSBk1pHaQ_qxnUmE2LgsNGA1IGqX26b1_HEA4Nc,5978
420
420
  arpakitlib/ar_rat_func_util.py,sha256=Ca10o3RJwyx_DJLxjTxgHDO6NU3M6CWgUR4bif67OE4,2006
421
421
  arpakitlib/ar_really_validate_email.py,sha256=HBfhyiDB3INI6Iq6hR2WOMKA5wVWWRl0Qun-x__OZ9o,1201
@@ -431,8 +431,8 @@ arpakitlib/ar_sqlalchemy_drop_check_constraints.py,sha256=XEqnMrIwSYasW_UOJ8xU-J
431
431
  arpakitlib/ar_sqlalchemy_util.py,sha256=nUDCxhu0l8P0eBCdLyXej3_yLvBlB3LrGhMWzAekm5E,16532
432
432
  arpakitlib/ar_str_util.py,sha256=2lGpnXDf2h1cBZpVf5i1tX_HCv5iBd6IGnrCw4QWWlY,4350
433
433
  arpakitlib/ar_type_util.py,sha256=Cs_tef-Fc5xeyAF54KgISCsP11NHyzIsglm4S3Xx7iM,4049
434
- arpakitlib-1.8.277.dist-info/METADATA,sha256=Uh-XN7yxfKBLv5wEA2Q26Pd_5cLiC7aT-0Kklj408Cs,4060
435
- arpakitlib-1.8.277.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
436
- arpakitlib-1.8.277.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
437
- arpakitlib-1.8.277.dist-info/licenses/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
438
- arpakitlib-1.8.277.dist-info/RECORD,,
434
+ arpakitlib-1.8.279.dist-info/METADATA,sha256=LWeDE5H1IvN_JcyhF_vlSFjb-wXTxw_B8Y3diOk6lWk,4060
435
+ arpakitlib-1.8.279.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
436
+ arpakitlib-1.8.279.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
437
+ arpakitlib-1.8.279.dist-info/licenses/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
438
+ arpakitlib-1.8.279.dist-info/RECORD,,