dycw-utilities 0.157.1__py3-none-any.whl → 0.157.2__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.157.1
3
+ Version: 0.157.2
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=aCEk399BQ2RGpGQ17jdGxjzeW08BgR-YI0pg_VvNlKM,60
1
+ utilities/__init__.py,sha256=4r65bgykd0Tf_s-OhMo8cbKy-69wDBJKBbpSfBl7DX0,60
2
2
  utilities/altair.py,sha256=92E2lCdyHY4Zb-vCw6rEJIsWdKipuu-Tu2ab1ufUfAk,9079
3
3
  utilities/asyncio.py,sha256=PUedzQ5deqlSECQ33sam9cRzI9TnygHz3FdOqWJWPTM,15288
4
4
  utilities/atomicwrites.py,sha256=tPo6r-Rypd9u99u66B9z86YBPpnLrlHtwox_8Z7T34Y,5790
@@ -14,7 +14,7 @@ utilities/dataclasses.py,sha256=MXrvIPSZHlpV4msRdVVDRZZo7MC3gX5C9jDUSoNOdpE,3247
14
14
  utilities/enum.py,sha256=5l6pwZD1cjSlVW4ss-zBPspWvrbrYrdtJWcg6f5_J5w,5781
15
15
  utilities/errors.py,sha256=mFlDGSM0LI1jZ1pbqwLAH3ttLZ2JVIxyZLojw8tGVZU,1479
16
16
  utilities/eventkit.py,sha256=ddoleSwW9zdc2tjX5Ge0pMKtYwV_JMxhHYOxnWX2AGM,12609
17
- utilities/fastapi.py,sha256=3wpd63Tw9paSyy7STpAD7GGe8fLkLaRC6TPCwIGm1BU,1361
17
+ utilities/fastapi.py,sha256=TqyKvBjiMS594sXPjrz-KRTLMb3l3D3rZ1zAYV7GfOk,1454
18
18
  utilities/fpdf2.py,sha256=HgM8JSvoioDXrjC0UR3HVLjnMnnb_mML7nL2EmkTwGI,1854
19
19
  utilities/functions.py,sha256=RNVAoLeT_sl-gXaBv2VI_U_EB-d-nSVosYR4gTeeojE,28261
20
20
  utilities/functools.py,sha256=I00ru2gQPakZw2SHVeKIKXfTv741655s6HI0lUoE0D4,1552
@@ -62,10 +62,10 @@ utilities/reprlib.py,sha256=ssYTcBW-TeRh3fhCJv57sopTZHF5FrPyyUg9yp5XBlo,3953
62
62
  utilities/scipy.py,sha256=wZJM7fEgBAkLSYYvSmsg5ac-QuwAI0BGqHVetw1_Hb0,947
63
63
  utilities/sentinel.py,sha256=A_p5jX2K0Yc5XBfoYHyBLqHsEWzE1ByOdDuzzA2pZnE,1434
64
64
  utilities/shelve.py,sha256=4OzjQI6kGuUbJciqf535rwnao-_IBv66gsT6tRGiUt0,759
65
- utilities/slack_sdk.py,sha256=ppFBvKgfg5IRWiIoKPtpTyzBtBF4XmwEvU3I5wLJikM,2140
65
+ utilities/slack_sdk.py,sha256=76-DYtcGiUhEvl-voMamc5OjfF7Y7nCq54Bys1arqzw,2233
66
66
  utilities/socket.py,sha256=K77vfREvzoVTrpYKo6MZakol0EYu2q1sWJnnZqL0So0,118
67
- utilities/sqlalchemy.py,sha256=wtbIp6XDjKwfrvl-wfoY4FQXo_a9vSoHq5K_dYeBBeY,40541
68
- utilities/sqlalchemy_polars.py,sha256=5Q9HReETYg0qB6E6WQhFh4QAZlKE-IWlogj2BVif_-w,14246
67
+ utilities/sqlalchemy.py,sha256=S3r_sc04wxpP9gCsSMsPZ8GlC_edATlwZd_WLa1Bl14,40619
68
+ utilities/sqlalchemy_polars.py,sha256=uaqUrFQQhHjhQWa1t03aNtvqeO8MsUZ9zchCQNF1Pq8,14454
69
69
  utilities/statsmodels.py,sha256=koyiBHvpMcSiBfh99wFUfSggLNx7cuAw3rwyfAhoKpQ,3410
70
70
  utilities/string.py,sha256=shmBK87zZwzGyixuNuXCiUbqzfeZ9xlrFwz6JTaRvDk,582
71
71
  utilities/tempfile.py,sha256=HxB2BF28CcecDJLQ3Bx2Ej-Pb6RJc6W9ngSpB9CnP4k,2018
@@ -87,8 +87,8 @@ utilities/zoneinfo.py,sha256=FBMcUQ4662Aq8SsuCL1OAhDQiyANmVjtb-C30DRrWoE,1966
87
87
  utilities/pytest_plugins/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
88
88
  utilities/pytest_plugins/pytest_randomly.py,sha256=B1qYVlExGOxTywq2r1SMi5o7btHLk2PNdY_b1p98dkE,409
89
89
  utilities/pytest_plugins/pytest_regressions.py,sha256=9v8kAXDM2ycIXJBimoiF4EgrwbUvxTycFWJiGR_GHhM,1466
90
- dycw_utilities-0.157.1.dist-info/METADATA,sha256=OvC7ucuMA0zBo4CHiaNRLyMYPjJgGjD7meIO_vUXdG4,1643
91
- dycw_utilities-0.157.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
92
- dycw_utilities-0.157.1.dist-info/entry_points.txt,sha256=BOD_SoDxwsfJYOLxhrSXhHP_T7iw-HXI9f2WVkzYxvQ,135
93
- dycw_utilities-0.157.1.dist-info/licenses/LICENSE,sha256=gppZp16M6nSVpBbUBrNL6JuYfvKwZiKgV7XoKKsHzqo,1066
94
- dycw_utilities-0.157.1.dist-info/RECORD,,
90
+ dycw_utilities-0.157.2.dist-info/METADATA,sha256=H3bdmvntWyzOrtEtLSw_OxEMIe1vcs21otdOrEst-tA,1643
91
+ dycw_utilities-0.157.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
92
+ dycw_utilities-0.157.2.dist-info/entry_points.txt,sha256=BOD_SoDxwsfJYOLxhrSXhHP_T7iw-HXI9f2WVkzYxvQ,135
93
+ dycw_utilities-0.157.2.dist-info/licenses/LICENSE,sha256=gppZp16M6nSVpBbUBrNL6JuYfvKwZiKgV7XoKKsHzqo,1066
94
+ dycw_utilities-0.157.2.dist-info/RECORD,,
utilities/__init__.py CHANGED
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.157.1"
3
+ __version__ = "0.157.2"
utilities/fastapi.py CHANGED
@@ -13,7 +13,7 @@ from utilities.whenever import get_now_local
13
13
  if TYPE_CHECKING:
14
14
  from collections.abc import AsyncIterator
15
15
 
16
- from utilities.types import Delta
16
+ from utilities.types import Delta, MaybeType
17
17
 
18
18
 
19
19
  _TASKS: list[Task[None]] = []
@@ -35,14 +35,19 @@ class _PingerReceiverApp(FastAPI):
35
35
 
36
36
  @enhanced_async_context_manager
37
37
  async def yield_ping_receiver(
38
- port: int, /, *, host: str = "localhost", timeout: Delta | None = None
38
+ port: int,
39
+ /,
40
+ *,
41
+ host: str = "localhost",
42
+ timeout: Delta | None = None,
43
+ error: MaybeType[BaseException] = TimeoutError,
39
44
  ) -> AsyncIterator[None]:
40
45
  """Yield the ping receiver."""
41
46
  app = _PingerReceiverApp() # skipif-ci
42
47
  server = Server(Config(app, host=host, port=port)) # skipif-ci
43
48
  _TASKS.append(create_task(server.serve())) # skipif-ci
44
49
  try: # skipif-ci
45
- async with timeout_td(timeout):
50
+ async with timeout_td(timeout, error=error):
46
51
  yield
47
52
  finally: # skipif-ci
48
53
  await server.shutdown()
utilities/slack_sdk.py CHANGED
@@ -15,7 +15,7 @@ if TYPE_CHECKING:
15
15
  from slack_sdk.webhook import WebhookResponse
16
16
  from whenever import TimeDelta
17
17
 
18
- from utilities.types import Delta
18
+ from utilities.types import Delta, MaybeType
19
19
 
20
20
 
21
21
  _TIMEOUT: Delta = MINUTE
@@ -39,11 +39,16 @@ def _get_client(url: str, /, *, timeout: Delta = _TIMEOUT) -> WebhookClient:
39
39
 
40
40
 
41
41
  async def send_to_slack_async(
42
- url: str, text: str, /, *, timeout: TimeDelta = _TIMEOUT
42
+ url: str,
43
+ text: str,
44
+ /,
45
+ *,
46
+ timeout: TimeDelta = _TIMEOUT,
47
+ error: MaybeType[BaseException] = TimeoutError,
43
48
  ) -> None:
44
49
  """Send a message via Slack."""
45
50
  client = _get_async_client(url, timeout=timeout)
46
- async with timeout_td(timeout):
51
+ async with timeout_td(timeout, error=error):
47
52
  response = await client.send(text=text)
48
53
  if response.status_code != HTTPStatus.OK: # pragma: no cover
49
54
  raise SendToSlackError(text=text, response=response)
utilities/sqlalchemy.py CHANGED
@@ -134,11 +134,15 @@ def check_connect(engine: Engine, /) -> bool:
134
134
 
135
135
 
136
136
  async def check_connect_async(
137
- engine: AsyncEngine, /, *, timeout: Delta | None = None
137
+ engine: AsyncEngine,
138
+ /,
139
+ *,
140
+ timeout: Delta | None = None,
141
+ error: MaybeType[BaseException] = TimeoutError,
138
142
  ) -> bool:
139
143
  """Check if an engine can connect."""
140
144
  try:
141
- async with timeout_td(timeout), engine.connect() as conn:
145
+ async with timeout_td(timeout, error=error), engine.connect() as conn:
142
146
  return bool((await conn.execute(_SELECT)).scalar_one())
143
147
  except (
144
148
  gaierror,
@@ -229,6 +229,7 @@ async def select_to_dataframe(
229
229
  in_clauses_chunk_size: int | None = None,
230
230
  chunk_size_frac: float = CHUNK_SIZE_FRAC,
231
231
  timeout: Delta | None = None,
232
+ error: MaybeType[BaseException] = TimeoutError,
232
233
  **kwargs: Any,
233
234
  ) -> DataFrame: ...
234
235
  @overload
@@ -244,6 +245,7 @@ async def select_to_dataframe(
244
245
  in_clauses_chunk_size: int | None = None,
245
246
  chunk_size_frac: float = CHUNK_SIZE_FRAC,
246
247
  timeout: Delta | None = None,
248
+ error: MaybeType[BaseException] = TimeoutError,
247
249
  **kwargs: Any,
248
250
  ) -> Iterable[DataFrame]: ...
249
251
  @overload
@@ -259,6 +261,7 @@ async def select_to_dataframe(
259
261
  in_clauses_chunk_size: int | None = None,
260
262
  chunk_size_frac: float = CHUNK_SIZE_FRAC,
261
263
  timeout: Delta | None = None,
264
+ error: MaybeType[BaseException] = TimeoutError,
262
265
  **kwargs: Any,
263
266
  ) -> AsyncIterable[DataFrame]: ...
264
267
  @overload
@@ -274,6 +277,7 @@ async def select_to_dataframe(
274
277
  in_clauses_chunk_size: int | None = None,
275
278
  chunk_size_frac: float = CHUNK_SIZE_FRAC,
276
279
  timeout: Delta | None = None,
280
+ error: MaybeType[BaseException] = TimeoutError,
277
281
  **kwargs: Any,
278
282
  ) -> DataFrame | Iterable[DataFrame] | AsyncIterable[DataFrame]: ...
279
283
  async def select_to_dataframe(