dycw-utilities 0.150.14__py3-none-any.whl → 0.151.0__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.
- {dycw_utilities-0.150.14.dist-info → dycw_utilities-0.151.0.dist-info}/METADATA +1 -1
- {dycw_utilities-0.150.14.dist-info → dycw_utilities-0.151.0.dist-info}/RECORD +8 -8
- utilities/__init__.py +1 -1
- utilities/polars.py +22 -4
- utilities/sqlalchemy_polars.py +8 -8
- {dycw_utilities-0.150.14.dist-info → dycw_utilities-0.151.0.dist-info}/WHEEL +0 -0
- {dycw_utilities-0.150.14.dist-info → dycw_utilities-0.151.0.dist-info}/entry_points.txt +0 -0
- {dycw_utilities-0.150.14.dist-info → dycw_utilities-0.151.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,4 +1,4 @@
|
|
1
|
-
utilities/__init__.py,sha256=
|
1
|
+
utilities/__init__.py,sha256=71XmySqRGuPBb5b0QQ5iiwm2oq_xL_zqjQqp5Yu5GX0,60
|
2
2
|
utilities/altair.py,sha256=92E2lCdyHY4Zb-vCw6rEJIsWdKipuu-Tu2ab1ufUfAk,9079
|
3
3
|
utilities/asyncio.py,sha256=2m2a2C-Qgc6OHTTHL332-t66A7xDITt_SORT7a1DJWo,16792
|
4
4
|
utilities/atomicwrites.py,sha256=xcOWenTBRS0oat3kg7Sqe51AohNThMQ2ixPL7QCG8hw,5795
|
@@ -47,7 +47,7 @@ utilities/pathlib.py,sha256=FnteXeVeMOSc6QTN7oF6UrobjOX9gXv_5tG1slg83W8,8496
|
|
47
47
|
utilities/period.py,sha256=hsHdAKAstfMzB2Ar5EbxjkbMff3CA-B5wtYNVZOXVXI,10127
|
48
48
|
utilities/pickle.py,sha256=MBT2xZCsv0pH868IXLGKnlcqNx2IRVKYNpRcqiQQqxw,653
|
49
49
|
utilities/platform.py,sha256=Ue9LSxYvg9yUXGKuz5aZoy_qkUEXde-v6B09exgSctU,2813
|
50
|
-
utilities/polars.py,sha256=
|
50
|
+
utilities/polars.py,sha256=wusyiQTHMxcPrRzsjWWt975rgcMQBRcaY4cJgkNUzw4,72501
|
51
51
|
utilities/polars_ols.py,sha256=Uc9V5kvlWZ5cU93lKZ-cfAKdVFFw81tqwLW9PxtUvMs,5618
|
52
52
|
utilities/postgres.py,sha256=48km6Mb6hRUb1-0FWg7FKEfrW75z8-7AY1jahtdu_KY,12406
|
53
53
|
utilities/pottery.py,sha256=u0uvyGgYyujxftEMlsv6ppYTKQoVVjHt5jnVxxYz9s4,6596
|
@@ -67,7 +67,7 @@ utilities/shelve.py,sha256=4OzjQI6kGuUbJciqf535rwnao-_IBv66gsT6tRGiUt0,759
|
|
67
67
|
utilities/slack_sdk.py,sha256=ppFBvKgfg5IRWiIoKPtpTyzBtBF4XmwEvU3I5wLJikM,2140
|
68
68
|
utilities/socket.py,sha256=K77vfREvzoVTrpYKo6MZakol0EYu2q1sWJnnZqL0So0,118
|
69
69
|
utilities/sqlalchemy.py,sha256=QbCFKefrkkqL23iDF5WdOKRfISMj6c-SyrI3rvBATE4,39641
|
70
|
-
utilities/sqlalchemy_polars.py,sha256=
|
70
|
+
utilities/sqlalchemy_polars.py,sha256=TqNLQz85ow3gMjf17T_3WKL0MWYgSi0sXOgMYMxdNSU,14249
|
71
71
|
utilities/statsmodels.py,sha256=koyiBHvpMcSiBfh99wFUfSggLNx7cuAw3rwyfAhoKpQ,3410
|
72
72
|
utilities/string.py,sha256=MB0X6UPTUc06JdAdj-PctZ238IXeCjE5dAJibNw6ZrU,587
|
73
73
|
utilities/tempfile.py,sha256=HxB2BF28CcecDJLQ3Bx2Ej-Pb6RJc6W9ngSpB9CnP4k,2018
|
@@ -89,8 +89,8 @@ utilities/zoneinfo.py,sha256=oEH-nL3t4h9uawyZqWDtNtDAl6M-CLpLYGI_nI6DulM,1971
|
|
89
89
|
utilities/pytest_plugins/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
|
90
90
|
utilities/pytest_plugins/pytest_randomly.py,sha256=NXzCcGKbpgYouz5yehKb4jmxmi2SexKKpgF4M65bi10,414
|
91
91
|
utilities/pytest_plugins/pytest_regressions.py,sha256=Iwhfv_OJH7UCPZCfoh7ugZ2Xjqjil-BBBsOb8sDwiGI,1471
|
92
|
-
dycw_utilities-0.
|
93
|
-
dycw_utilities-0.
|
94
|
-
dycw_utilities-0.
|
95
|
-
dycw_utilities-0.
|
96
|
-
dycw_utilities-0.
|
92
|
+
dycw_utilities-0.151.0.dist-info/METADATA,sha256=I4nTKjthEa7fGAT86M6MJEZ2a-yLC_9wAu9X6WQYrrE,1696
|
93
|
+
dycw_utilities-0.151.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
94
|
+
dycw_utilities-0.151.0.dist-info/entry_points.txt,sha256=BOD_SoDxwsfJYOLxhrSXhHP_T7iw-HXI9f2WVkzYxvQ,135
|
95
|
+
dycw_utilities-0.151.0.dist-info/licenses/LICENSE,sha256=gppZp16M6nSVpBbUBrNL6JuYfvKwZiKgV7XoKKsHzqo,1066
|
96
|
+
dycw_utilities-0.151.0.dist-info/RECORD,,
|
utilities/__init__.py
CHANGED
utilities/polars.py
CHANGED
@@ -1097,7 +1097,7 @@ def _dataclass_to_schema_datetime(
|
|
1097
1097
|
) -> PolarsDataType:
|
1098
1098
|
if field.value.tzinfo is None:
|
1099
1099
|
return Datetime
|
1100
|
-
return
|
1100
|
+
return zoned_datetime_dtype(time_zone=ensure_time_zone(field.value.tzinfo))
|
1101
1101
|
|
1102
1102
|
|
1103
1103
|
def _dataclass_to_schema_one(
|
@@ -2259,7 +2259,7 @@ def _struct_from_dataclass_one(
|
|
2259
2259
|
if ann is dt.datetime:
|
2260
2260
|
if time_zone is None:
|
2261
2261
|
raise _StructFromDataClassTimeZoneMissingError
|
2262
|
-
return
|
2262
|
+
return zoned_datetime_dtype(time_zone=time_zone)
|
2263
2263
|
if is_dataclass_class(ann):
|
2264
2264
|
return struct_from_dataclass(ann, time_zone=time_zone)
|
2265
2265
|
if (isinstance(ann, type) and issubclass(ann, enum.Enum)) or (
|
@@ -2388,13 +2388,30 @@ def week_num(column: IntoExprColumn, /, *, start: WeekDay = "mon") -> Expr | Ser
|
|
2388
2388
|
##
|
2389
2389
|
|
2390
2390
|
|
2391
|
-
def
|
2391
|
+
def zoned_datetime_dtype(
|
2392
2392
|
*, time_unit: TimeUnit = "us", time_zone: TimeZoneLike = UTC
|
2393
2393
|
) -> Datetime:
|
2394
2394
|
"""Create a zoned datetime data type."""
|
2395
2395
|
return Datetime(time_unit=time_unit, time_zone=get_time_zone_name(time_zone))
|
2396
2396
|
|
2397
2397
|
|
2398
|
+
def zoned_datetime_period_dtype(
|
2399
|
+
*,
|
2400
|
+
time_unit: TimeUnit = "us",
|
2401
|
+
time_zone: TimeZoneLike | tuple[TimeZoneLike, TimeZoneLike] = UTC,
|
2402
|
+
) -> Struct:
|
2403
|
+
"""Create a zoned datetime period data type."""
|
2404
|
+
match time_zone:
|
2405
|
+
case start, end:
|
2406
|
+
return struct_dtype(
|
2407
|
+
start=zoned_datetime_dtype(time_unit=time_unit, time_zone=start),
|
2408
|
+
end=zoned_datetime_dtype(time_unit=time_unit, time_zone=end),
|
2409
|
+
)
|
2410
|
+
case _:
|
2411
|
+
dtype = zoned_datetime_dtype(time_unit=time_unit, time_zone=time_zone)
|
2412
|
+
return struct_dtype(start=dtype, end=dtype)
|
2413
|
+
|
2414
|
+
|
2398
2415
|
__all__ = [
|
2399
2416
|
"BooleanValueCountsError",
|
2400
2417
|
"CheckPolarsDataFrameError",
|
@@ -2470,5 +2487,6 @@ __all__ = [
|
|
2470
2487
|
"unique_element",
|
2471
2488
|
"write_dataframe",
|
2472
2489
|
"write_series",
|
2473
|
-
"
|
2490
|
+
"zoned_datetime_dtype",
|
2491
|
+
"zoned_datetime_period_dtype",
|
2474
2492
|
]
|
utilities/sqlalchemy_polars.py
CHANGED
@@ -35,7 +35,7 @@ from utilities.iterables import (
|
|
35
35
|
chunked,
|
36
36
|
one,
|
37
37
|
)
|
38
|
-
from utilities.polars import
|
38
|
+
from utilities.polars import zoned_datetime_dtype
|
39
39
|
from utilities.reprlib import get_repr
|
40
40
|
from utilities.sqlalchemy import (
|
41
41
|
CHUNK_SIZE_FRAC,
|
@@ -65,7 +65,7 @@ if TYPE_CHECKING:
|
|
65
65
|
from sqlalchemy.sql.base import ReadOnlyColumnCollection
|
66
66
|
from whenever import TimeDelta
|
67
67
|
|
68
|
-
from utilities.types import MaybeType, TimeZoneLike
|
68
|
+
from utilities.types import Delta, MaybeType, TimeZoneLike
|
69
69
|
|
70
70
|
|
71
71
|
async def insert_dataframe(
|
@@ -228,7 +228,7 @@ async def select_to_dataframe(
|
|
228
228
|
in_clauses: tuple[Column[Any], Iterable[Any]] | None = None,
|
229
229
|
in_clauses_chunk_size: int | None = None,
|
230
230
|
chunk_size_frac: float = CHUNK_SIZE_FRAC,
|
231
|
-
timeout:
|
231
|
+
timeout: Delta | None = None,
|
232
232
|
**kwargs: Any,
|
233
233
|
) -> DataFrame: ...
|
234
234
|
@overload
|
@@ -243,7 +243,7 @@ async def select_to_dataframe(
|
|
243
243
|
in_clauses: None = None,
|
244
244
|
in_clauses_chunk_size: int | None = None,
|
245
245
|
chunk_size_frac: float = CHUNK_SIZE_FRAC,
|
246
|
-
timeout:
|
246
|
+
timeout: Delta | None = None,
|
247
247
|
**kwargs: Any,
|
248
248
|
) -> Iterable[DataFrame]: ...
|
249
249
|
@overload
|
@@ -258,7 +258,7 @@ async def select_to_dataframe(
|
|
258
258
|
in_clauses: tuple[Column[Any], Iterable[Any]],
|
259
259
|
in_clauses_chunk_size: int | None = None,
|
260
260
|
chunk_size_frac: float = CHUNK_SIZE_FRAC,
|
261
|
-
timeout:
|
261
|
+
timeout: Delta | None = None,
|
262
262
|
**kwargs: Any,
|
263
263
|
) -> AsyncIterable[DataFrame]: ...
|
264
264
|
@overload
|
@@ -273,7 +273,7 @@ async def select_to_dataframe(
|
|
273
273
|
in_clauses: tuple[Column[Any], Iterable[Any]] | None = None,
|
274
274
|
in_clauses_chunk_size: int | None = None,
|
275
275
|
chunk_size_frac: float = CHUNK_SIZE_FRAC,
|
276
|
-
timeout:
|
276
|
+
timeout: Delta | None = None,
|
277
277
|
**kwargs: Any,
|
278
278
|
) -> DataFrame | Iterable[DataFrame] | AsyncIterable[DataFrame]: ...
|
279
279
|
async def select_to_dataframe(
|
@@ -287,7 +287,7 @@ async def select_to_dataframe(
|
|
287
287
|
in_clauses: tuple[Column[Any], Iterable[Any]] | None = None,
|
288
288
|
in_clauses_chunk_size: int | None = None,
|
289
289
|
chunk_size_frac: float = CHUNK_SIZE_FRAC,
|
290
|
-
timeout:
|
290
|
+
timeout: Delta | None = None,
|
291
291
|
error: MaybeType[BaseException] = TimeoutError,
|
292
292
|
**kwargs: Any,
|
293
293
|
) -> DataFrame | Iterable[DataFrame] | AsyncIterable[DataFrame]:
|
@@ -390,7 +390,7 @@ def _select_to_dataframe_map_table_column_type_to_dtype(
|
|
390
390
|
return pl.Date
|
391
391
|
if is_subclass_gen(py_type, dt.datetime):
|
392
392
|
has_tz: bool = type_use.timezone
|
393
|
-
return
|
393
|
+
return zoned_datetime_dtype(time_zone=time_zone) if has_tz else Datetime()
|
394
394
|
if issubclass(py_type, dt.time):
|
395
395
|
return Time
|
396
396
|
if issubclass(py_type, dt.timedelta):
|
File without changes
|
File without changes
|
File without changes
|