dycw-utilities 0.138.14__py3-none-any.whl → 0.138.15__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dycw-utilities
3
- Version: 0.138.14
3
+ Version: 0.138.15
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -1,4 +1,4 @@
1
- utilities/__init__.py,sha256=cONkI_IFNfSqcsGihpBZx7cXfo2yNGxHqPOWbR64rSs,61
1
+ utilities/__init__.py,sha256=truMbrEMkwTgWjlGtWBTO0md1YlF6g_-gFSBi6iu0N0,61
2
2
  utilities/aiolimiter.py,sha256=mD0wEiqMgwpty4XTbawFpnkkmJS6R4JRsVXFUaoitSU,628
3
3
  utilities/altair.py,sha256=HeZBVUocjkrTNwwKrClppsIqgNFF-ykv05HfZSoHYno,9104
4
4
  utilities/asyncio.py,sha256=dcGeKQzjLBXxKzZkVIk5oZsFXEcynVbRB9iNB5XEDZk,38526
@@ -78,18 +78,18 @@ utilities/threading.py,sha256=GvBOp4CyhHfN90wGXZuA2VKe9fGzMaEa7oCl4f3nnPU,1009
78
78
  utilities/timer.py,sha256=oXfTii6ymu57niP0BDGZjFD55LEHi2a19kqZKiTgaFQ,2588
79
79
  utilities/traceback.py,sha256=YPD_MYNWc7k3vWF-YDWw4YUCZQyVR3ZLp6M1FAQR9Xw,8878
80
80
  utilities/typed_settings.py,sha256=C2i2VK62us_Z5jjca9NLmDFiT3_mkoSCwgU6FDtDhMI,4501
81
- utilities/types.py,sha256=-_pXQvmpJhTgEbI13N_zZWINdt0ODBpZ3WdJQUML9GA,17397
81
+ utilities/types.py,sha256=WAdSOIGhnDOHIIggV8As8oOY9QrT06k3aIRC-yhgEH8,17489
82
82
  utilities/typing.py,sha256=Z-_XDaWyT_6wIo3qfNK-hvRlzxP2Jxa9PgXzm5rDYRA,13790
83
83
  utilities/tzdata.py,sha256=fgNVj66yUbCSI_-vrRVzSD3gtf-L_8IEJEPjP_Jel5Y,266
84
84
  utilities/tzlocal.py,sha256=KyCXEgCTjqGFx-389JdTuhMRUaT06U1RCMdWoED-qro,728
85
85
  utilities/uuid.py,sha256=32p7DGHGM2Btx6PcBvCZvERSWbpupMXqx6FppPoSoTU,612
86
86
  utilities/version.py,sha256=ufhJMmI6KPs1-3wBI71aj5wCukd3sP_m11usLe88DNA,5117
87
87
  utilities/warnings.py,sha256=un1LvHv70PU-LLv8RxPVmugTzDJkkGXRMZTE2-fTQHw,1771
88
- utilities/whenever.py,sha256=WicmnXSFuZ64kemfULZGcV8Pt8-h6VBHJcObMHugSEo,22760
88
+ utilities/whenever.py,sha256=Ftf-7neIyKjC_sGnQmFtac4BxPMNB547eHv4tenhwQo,23226
89
89
  utilities/zipfile.py,sha256=24lQc9ATcJxHXBPc_tBDiJk48pWyRrlxO2fIsFxU0A8,699
90
90
  utilities/zoneinfo.py,sha256=oEH-nL3t4h9uawyZqWDtNtDAl6M-CLpLYGI_nI6DulM,1971
91
- dycw_utilities-0.138.14.dist-info/METADATA,sha256=mFTnGB2iv53YtekLXrv-Zc1Zh1HVuwHpU9ZHrd30YXE,1639
92
- dycw_utilities-0.138.14.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
93
- dycw_utilities-0.138.14.dist-info/entry_points.txt,sha256=uLj5QWWVXv8tnMaRX3ZGYpt7w1xzLWU6LxbFhELEpkc,68
94
- dycw_utilities-0.138.14.dist-info/licenses/LICENSE,sha256=gppZp16M6nSVpBbUBrNL6JuYfvKwZiKgV7XoKKsHzqo,1066
95
- dycw_utilities-0.138.14.dist-info/RECORD,,
91
+ dycw_utilities-0.138.15.dist-info/METADATA,sha256=sO2p6FGX2-yznzkykDtCaS1X5ngWFddPkyE16Ho-36g,1639
92
+ dycw_utilities-0.138.15.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
93
+ dycw_utilities-0.138.15.dist-info/entry_points.txt,sha256=uLj5QWWVXv8tnMaRX3ZGYpt7w1xzLWU6LxbFhELEpkc,68
94
+ dycw_utilities-0.138.15.dist-info/licenses/LICENSE,sha256=gppZp16M6nSVpBbUBrNL6JuYfvKwZiKgV7XoKKsHzqo,1066
95
+ dycw_utilities-0.138.15.dist-info/RECORD,,
utilities/__init__.py CHANGED
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.138.14"
3
+ __version__ = "0.138.15"
utilities/types.py CHANGED
@@ -88,6 +88,10 @@ class Dataclass(Protocol):
88
88
  __dataclass_fields__: ClassVar[dict[str, Any]]
89
89
 
90
90
 
91
+ # datetime
92
+ type MonthInt = Literal[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
93
+
94
+
91
95
  # enum
92
96
  type EnumLike[E: Enum] = MaybeStr[E]
93
97
 
@@ -270,6 +274,7 @@ __all__ = [
270
274
  "MaybeStr",
271
275
  "MaybeType",
272
276
  "MonthDayLike",
277
+ "MonthInt",
273
278
  "Number",
274
279
  "OpenMode",
275
280
  "OptExcInfo",
utilities/whenever.py CHANGED
@@ -126,6 +126,21 @@ YEAR = DateDelta(years=1)
126
126
  ##
127
127
 
128
128
 
129
+ def add_year_month(x: YearMonth, /, *, years: int = 0, months: int = 0) -> YearMonth:
130
+ """Add to a year-month."""
131
+ y = x.on_day(1) + DateDelta(years=years, months=months)
132
+ return y.year_month()
133
+
134
+
135
+ def sub_year_month(x: YearMonth, /, *, years: int = 0, months: int = 0) -> YearMonth:
136
+ """Subtract from a year-month."""
137
+ y = x.on_day(1) - DateDelta(years=years, months=months)
138
+ return y.year_month()
139
+
140
+
141
+ ##
142
+
143
+
129
144
  def datetime_utc(
130
145
  year: int,
131
146
  month: int,
@@ -853,6 +868,7 @@ __all__ = [
853
868
  "ToNanosError",
854
869
  "ToPyTimeDeltaError",
855
870
  "WheneverLogRecord",
871
+ "add_year_month",
856
872
  "datetime_utc",
857
873
  "diff_year_month",
858
874
  "format_compact",
@@ -865,6 +881,7 @@ __all__ = [
865
881
  "get_today_local",
866
882
  "mean_datetime",
867
883
  "min_max_date",
884
+ "sub_year_month",
868
885
  "to_date",
869
886
  "to_date_time_delta",
870
887
  "to_days",