arpakitlib 1.8.281__py3-none-any.whl → 1.8.283__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.
- arpakitlib/ar_datetime_util.py +2 -2
- arpakitlib/ar_list_util.py +32 -1
- {arpakitlib-1.8.281.dist-info → arpakitlib-1.8.283.dist-info}/METADATA +1 -1
- {arpakitlib-1.8.281.dist-info → arpakitlib-1.8.283.dist-info}/RECORD +7 -7
- {arpakitlib-1.8.281.dist-info → arpakitlib-1.8.283.dist-info}/WHEEL +0 -0
- {arpakitlib-1.8.281.dist-info → arpakitlib-1.8.283.dist-info}/entry_points.txt +0 -0
- {arpakitlib-1.8.281.dist-info → arpakitlib-1.8.283.dist-info}/licenses/LICENSE +0 -0
arpakitlib/ar_datetime_util.py
CHANGED
|
@@ -40,13 +40,13 @@ def birth_date_to_age(*, birth_date: date, raise_if_age_negative: bool = False)
|
|
|
40
40
|
def datetime_as_msk_str(datetime_: datetime | None) -> str | None:
|
|
41
41
|
if datetime_ is None:
|
|
42
42
|
return None
|
|
43
|
-
return datetime_.astimezone(ZoneInfo("Europe/Moscow")).strftime("%Y-%m-%d %H:%M:%S %p %Z%z")
|
|
43
|
+
return datetime_.astimezone(ZoneInfo("Europe/Moscow")).strftime("%Y-%m-%d %H:%M:%S %p %Z %z")
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
def datetime_as_ufa_str(datetime_: datetime | None) -> str | None:
|
|
47
47
|
if datetime_ is None:
|
|
48
48
|
return None
|
|
49
|
-
return datetime_.astimezone(ZoneInfo("Asia/Yekaterinburg")).strftime("%Y-%m-%d %H:%M:%S %p %Z%z")
|
|
49
|
+
return datetime_.astimezone(ZoneInfo("Asia/Yekaterinburg")).strftime("%Y-%m-%d %H:%M:%S %p %Z %z")
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
def __example():
|
arpakitlib/ar_list_util.py
CHANGED
|
@@ -20,8 +20,39 @@ def group_list(list_: list[Any], n: int):
|
|
|
20
20
|
return list(iter_group_list(list_=list_, n=n))
|
|
21
21
|
|
|
22
22
|
|
|
23
|
+
def remove_from_list_if_left(*, list_: list[Any], values: list[Any]) -> list[Any]:
|
|
24
|
+
"""
|
|
25
|
+
Удаляет из list_ все элементы, чьи значения перечислены в values,
|
|
26
|
+
НО только если после удаления в list_ останется хотя бы один элемент.
|
|
27
|
+
|
|
28
|
+
Всегда возвращает сам список list_ (после возможной модификации in-place).
|
|
29
|
+
"""
|
|
30
|
+
if not values:
|
|
31
|
+
return list_
|
|
32
|
+
|
|
33
|
+
targets = set(values)
|
|
34
|
+
# кандидат на новое содержимое
|
|
35
|
+
filtered = [x for x in list_ if x not in targets]
|
|
36
|
+
|
|
37
|
+
# если нечего удалять — оставляем как есть
|
|
38
|
+
if len(filtered) == len(list_):
|
|
39
|
+
return list_
|
|
40
|
+
|
|
41
|
+
# удаляем только если список не опустеет
|
|
42
|
+
if len(filtered) == 0:
|
|
43
|
+
return list_
|
|
44
|
+
|
|
45
|
+
# применяем изменения in-place
|
|
46
|
+
list_[:] = filtered
|
|
47
|
+
return list_
|
|
48
|
+
|
|
49
|
+
|
|
23
50
|
def __example():
|
|
24
|
-
|
|
51
|
+
a = remove_from_list_if_left(
|
|
52
|
+
list_=[1,2,2,2,2,2,3,3,3,3,3,3],
|
|
53
|
+
values=[1,2,3]
|
|
54
|
+
)
|
|
55
|
+
print(a)
|
|
25
56
|
|
|
26
57
|
|
|
27
58
|
if __name__ == '__main__':
|
|
@@ -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=
|
|
392
|
+
arpakitlib/ar_datetime_util.py,sha256=3Pw8ljsBKkkEUCmu1PsnJqNeG5bVLqtpsUGaztJF8jQ,1432
|
|
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
|
|
@@ -408,7 +408,7 @@ arpakitlib/ar_json_db_util.py,sha256=5nELpAY1_5_iTN4nMcutQtJQ5Nt52-xiKELxEH65RkY
|
|
|
408
408
|
arpakitlib/ar_json_util.py,sha256=jnVfpQ6QSDq8NgIlh_6ZzXDveOiybr7QSQkXutE7d2s,2676
|
|
409
409
|
arpakitlib/ar_jwt_util.py,sha256=Rhm4ywoTAn6yOV8NLjDASfAtAtheROxxDP40G3XjnuQ,761
|
|
410
410
|
arpakitlib/ar_list_of_dicts_to_xlsx.py,sha256=MyjEl4Jl4beLVZqLVQMMv0-XDtBD3Xh4Z_ZPDJeFu04,745
|
|
411
|
-
arpakitlib/ar_list_util.py,sha256=
|
|
411
|
+
arpakitlib/ar_list_util.py,sha256=Ol0fVN8BGTg3wT8PN-fUOQwAchqsc0AWLjySCY8zVTg,1578
|
|
412
412
|
arpakitlib/ar_logging_util.py,sha256=CvKvaKqsl1UucgwL28cWadK9f6t5vaF2DmwbZMa8FmU,1681
|
|
413
413
|
arpakitlib/ar_mongodb_util.py,sha256=2ECkTnGAZ92qxioL-fmN6R4yZOSr3bXdXLWTzT1C3vk,4038
|
|
414
414
|
arpakitlib/ar_need_type_util.py,sha256=XmY1kswz8j9oo5f9CxRu0_zgfvxWrXPYKOj6MM04sGk,2604
|
|
@@ -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.
|
|
435
|
-
arpakitlib-1.8.
|
|
436
|
-
arpakitlib-1.8.
|
|
437
|
-
arpakitlib-1.8.
|
|
438
|
-
arpakitlib-1.8.
|
|
434
|
+
arpakitlib-1.8.283.dist-info/METADATA,sha256=_yX8P8IL_S2i2w3m1m_YBEGV24OW8Q-gU2g77gWrnJs,4060
|
|
435
|
+
arpakitlib-1.8.283.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
436
|
+
arpakitlib-1.8.283.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
|
|
437
|
+
arpakitlib-1.8.283.dist-info/licenses/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
|
|
438
|
+
arpakitlib-1.8.283.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|