ezKit 1.11.6__tar.gz → 1.11.8__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {ezkit-1.11.6/ezKit.egg-info → ezkit-1.11.8}/PKG-INFO +1 -1
- {ezkit-1.11.6 → ezkit-1.11.8}/ezKit/utils.py +40 -40
- {ezkit-1.11.6 → ezkit-1.11.8/ezKit.egg-info}/PKG-INFO +1 -1
- {ezkit-1.11.6 → ezkit-1.11.8}/setup.py +1 -1
- {ezkit-1.11.6 → ezkit-1.11.8}/LICENSE +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/MANIFEST.in +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/README.md +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/ezKit/__init__.py +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/ezKit/_file.py +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/ezKit/bottle.py +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/ezKit/bottle_extensions.py +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/ezKit/cipher.py +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/ezKit/database.py +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/ezKit/http.py +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/ezKit/mongo.py +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/ezKit/qywx.py +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/ezKit/redis.py +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/ezKit/sendemail.py +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/ezKit/token.py +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/ezKit/xftp.py +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/ezKit.egg-info/SOURCES.txt +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/ezKit.egg-info/dependency_links.txt +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/ezKit.egg-info/requires.txt +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/ezKit.egg-info/top_level.txt +0 -0
- {ezkit-1.11.6 → ezkit-1.11.8}/setup.cfg +0 -0
@@ -1,6 +1,5 @@
|
|
1
1
|
"""Utils"""
|
2
2
|
import csv
|
3
|
-
import datetime
|
4
3
|
import hashlib
|
5
4
|
import json
|
6
5
|
import os
|
@@ -9,6 +8,7 @@ import time
|
|
9
8
|
import tomllib
|
10
9
|
from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor
|
11
10
|
from copy import deepcopy
|
11
|
+
from datetime import date, datetime, timedelta, timezone
|
12
12
|
from itertools import islice
|
13
13
|
from pathlib import Path
|
14
14
|
from shutil import rmtree
|
@@ -73,11 +73,11 @@ def check_arguments(data: list) -> bool:
|
|
73
73
|
|
74
74
|
try:
|
75
75
|
if not isTrue(data, list):
|
76
|
-
logger.error("argument error: data")
|
76
|
+
logger.error(f"argument type error: data {type(data)}")
|
77
77
|
return False
|
78
78
|
for arg, arg_type, arg_name in data:
|
79
79
|
if not isTrue(arg, arg_type):
|
80
|
-
logger.error(f"argument error: {arg_name}")
|
80
|
+
logger.error(f"argument type error: {arg_name} {type(arg)}")
|
81
81
|
return False
|
82
82
|
return True
|
83
83
|
except Exception as e:
|
@@ -806,20 +806,20 @@ def retry(func: Callable, times: int = 3, **kwargs) -> Any:
|
|
806
806
|
|
807
807
|
|
808
808
|
def date_to_datetime(
|
809
|
-
date_object: datetime
|
810
|
-
) -> datetime
|
809
|
+
date_object: datetime
|
810
|
+
) -> datetime | None:
|
811
811
|
"""'日期'转换为'日期时间'"""
|
812
812
|
# https://stackoverflow.com/a/1937636
|
813
813
|
try:
|
814
|
-
return datetime.
|
814
|
+
return datetime.combine(date_object, datetime.min.time())
|
815
815
|
except Exception as e:
|
816
816
|
logger.exception(e)
|
817
817
|
return None
|
818
818
|
|
819
819
|
|
820
820
|
def datetime_to_date(
|
821
|
-
datetime_instance: datetime
|
822
|
-
) ->
|
821
|
+
datetime_instance: datetime
|
822
|
+
) -> date | None:
|
823
823
|
"""'日期时间'转换为'日期'"""
|
824
824
|
# https://stackoverflow.com/a/3743240
|
825
825
|
try:
|
@@ -831,25 +831,25 @@ def datetime_to_date(
|
|
831
831
|
|
832
832
|
def local_timezone():
|
833
833
|
"""获取当前时区"""
|
834
|
-
return datetime.
|
834
|
+
return datetime.now(timezone.utc).astimezone().tzinfo
|
835
835
|
|
836
836
|
|
837
|
-
def datetime_now(**kwargs) -> datetime
|
837
|
+
def datetime_now(**kwargs) -> datetime | None:
|
838
838
|
"""获取当前日期和时间"""
|
839
839
|
utc = kwargs.pop("utc", False)
|
840
840
|
try:
|
841
841
|
if isTrue(utc, bool):
|
842
|
-
return datetime.
|
843
|
-
return datetime.
|
842
|
+
return datetime.now(timezone.utc)
|
843
|
+
return datetime.now(**kwargs)
|
844
844
|
except Exception as e:
|
845
845
|
logger.exception(e)
|
846
846
|
return None
|
847
847
|
|
848
848
|
|
849
849
|
def datetime_offset(
|
850
|
-
datetime_instance: datetime
|
850
|
+
datetime_instance: datetime | None = None,
|
851
851
|
**kwargs
|
852
|
-
) -> datetime
|
852
|
+
) -> datetime | None:
|
853
853
|
"""
|
854
854
|
获取 '向前或向后特定日期时间' 的日期和时间
|
855
855
|
|
@@ -857,13 +857,13 @@ def datetime_offset(
|
|
857
857
|
"""
|
858
858
|
_utc = kwargs.pop("utc", False)
|
859
859
|
try:
|
860
|
-
if isinstance(datetime_instance, datetime
|
861
|
-
return datetime_instance +
|
860
|
+
if isinstance(datetime_instance, datetime):
|
861
|
+
return datetime_instance + timedelta(**kwargs)
|
862
862
|
|
863
863
|
if _utc is True:
|
864
|
-
return datetime.
|
864
|
+
return datetime.now(timezone.utc) + timedelta(**kwargs)
|
865
865
|
|
866
|
-
return datetime.
|
866
|
+
return datetime.now() + timedelta(**kwargs)
|
867
867
|
|
868
868
|
except Exception as e:
|
869
869
|
logger.exception(e)
|
@@ -871,21 +871,21 @@ def datetime_offset(
|
|
871
871
|
|
872
872
|
|
873
873
|
def datetime_to_string(
|
874
|
-
datetime_instance: datetime
|
874
|
+
datetime_instance: datetime,
|
875
875
|
string_format: str = '%Y-%m-%d %H:%M:%S'
|
876
876
|
) -> str | None:
|
877
877
|
"""'日期时间'转换为'字符串'"""
|
878
878
|
try:
|
879
|
-
if not isTrue(datetime_instance, datetime
|
879
|
+
if not isTrue(datetime_instance, datetime):
|
880
880
|
return None
|
881
|
-
return datetime.
|
881
|
+
return datetime.strftime(datetime_instance, string_format)
|
882
882
|
except Exception as e:
|
883
883
|
logger.exception(e)
|
884
884
|
return None
|
885
885
|
|
886
886
|
|
887
887
|
def datetime_to_timestamp(
|
888
|
-
datetime_instance: datetime
|
888
|
+
datetime_instance: datetime,
|
889
889
|
utc: bool = False
|
890
890
|
) -> int | None:
|
891
891
|
"""
|
@@ -894,43 +894,43 @@ def datetime_to_timestamp(
|
|
894
894
|
UTC datetime 需要先替换 timezone 再转换为 Unix Timestamp
|
895
895
|
"""
|
896
896
|
try:
|
897
|
-
if not isTrue(datetime_instance, datetime
|
897
|
+
if not isTrue(datetime_instance, datetime):
|
898
898
|
return None
|
899
|
-
return int(datetime_instance.replace(tzinfo=
|
899
|
+
return int(datetime_instance.replace(tzinfo=timezone.utc).timestamp()) if utc is True else int(datetime_instance.timestamp())
|
900
900
|
except Exception as e:
|
901
901
|
logger.exception(e)
|
902
902
|
return None
|
903
903
|
|
904
904
|
|
905
905
|
def datetime_local_to_timezone(
|
906
|
-
datetime_instance: datetime
|
907
|
-
tz:
|
908
|
-
) -> datetime
|
906
|
+
datetime_instance: datetime,
|
907
|
+
tz: timezone = timezone.utc
|
908
|
+
) -> datetime | None:
|
909
909
|
"""
|
910
910
|
Local datetime to TimeZone datetime(默认转换为 UTC datetime)
|
911
911
|
replace(tzinfo=None) 移除结尾的时区信息
|
912
912
|
"""
|
913
913
|
try:
|
914
|
-
if not isTrue(datetime_instance, datetime
|
914
|
+
if not isTrue(datetime_instance, datetime):
|
915
915
|
return None
|
916
|
-
return (datetime.
|
916
|
+
return (datetime.fromtimestamp(datetime_instance.timestamp(), tz=tz)).replace(tzinfo=None)
|
917
917
|
except Exception as e:
|
918
918
|
logger.exception(e)
|
919
919
|
return None
|
920
920
|
|
921
921
|
|
922
922
|
def datetime_utc_to_timezone(
|
923
|
-
datetime_instance: datetime
|
924
|
-
tz: Any = datetime.
|
925
|
-
) -> datetime
|
923
|
+
datetime_instance: datetime,
|
924
|
+
tz: Any = datetime.now(timezone.utc).astimezone().tzinfo
|
925
|
+
) -> datetime | None:
|
926
926
|
"""
|
927
927
|
UTC datetime to TimeZone datetime(默认转换为 Local datetime)
|
928
928
|
replace(tzinfo=None) 移除结尾的时区信息
|
929
929
|
"""
|
930
930
|
try:
|
931
|
-
if not isTrue(datetime_instance, datetime
|
931
|
+
if not isTrue(datetime_instance, datetime):
|
932
932
|
return None
|
933
|
-
return datetime_instance.replace(tzinfo=
|
933
|
+
return datetime_instance.replace(tzinfo=timezone.utc).astimezone(tz).replace(tzinfo=None)
|
934
934
|
|
935
935
|
except Exception as e:
|
936
936
|
logger.exception(e)
|
@@ -939,13 +939,13 @@ def datetime_utc_to_timezone(
|
|
939
939
|
|
940
940
|
def timestamp_to_datetime(
|
941
941
|
timestamp: int,
|
942
|
-
tz:
|
943
|
-
) -> datetime
|
942
|
+
tz: timezone = timezone.utc
|
943
|
+
) -> datetime | None:
|
944
944
|
"""Unix Timestamp 转换为 Datatime"""
|
945
945
|
try:
|
946
946
|
if not isTrue(timestamp, int):
|
947
947
|
return None
|
948
|
-
return (datetime.
|
948
|
+
return (datetime.fromtimestamp(timestamp, tz=tz)).replace(tzinfo=None)
|
949
949
|
except Exception as e:
|
950
950
|
logger.exception(e)
|
951
951
|
return None
|
@@ -954,12 +954,12 @@ def timestamp_to_datetime(
|
|
954
954
|
def datetime_string_to_datetime(
|
955
955
|
datetime_string: str,
|
956
956
|
datetime_format: str = '%Y-%m-%d %H:%M:%S'
|
957
|
-
) -> datetime
|
957
|
+
) -> datetime | None:
|
958
958
|
"""datetime string to datetime"""
|
959
959
|
try:
|
960
960
|
if not isTrue(datetime_string, str):
|
961
961
|
return None
|
962
|
-
return datetime.
|
962
|
+
return datetime.strptime(datetime_string, datetime_format)
|
963
963
|
except Exception as e:
|
964
964
|
logger.exception(e)
|
965
965
|
return None
|
@@ -980,7 +980,7 @@ def datetime_string_to_timestamp(
|
|
980
980
|
|
981
981
|
|
982
982
|
def datetime_object(
|
983
|
-
date_time: datetime
|
983
|
+
date_time: datetime
|
984
984
|
) -> dict | None:
|
985
985
|
"""datetime object"""
|
986
986
|
try:
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|