dycw-utilities 0.125.13__py3-none-any.whl → 0.125.14__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.125.13.dist-info → dycw_utilities-0.125.14.dist-info}/METADATA +1 -1
- {dycw_utilities-0.125.13.dist-info → dycw_utilities-0.125.14.dist-info}/RECORD +6 -6
- utilities/__init__.py +1 -1
- utilities/asyncio.py +80 -25
- {dycw_utilities-0.125.13.dist-info → dycw_utilities-0.125.14.dist-info}/WHEEL +0 -0
- {dycw_utilities-0.125.13.dist-info → dycw_utilities-0.125.14.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
|
|
1
|
-
utilities/__init__.py,sha256=
|
1
|
+
utilities/__init__.py,sha256=FUi2dI2qq8_0UHJ0RQEHLRzzmOO3YY-SHiWkJPnb-P4,61
|
2
2
|
utilities/altair.py,sha256=Gpja-flOo-Db0PIPJLJsgzAlXWoKUjPU1qY-DQ829ek,9156
|
3
|
-
utilities/asyncio.py,sha256=
|
3
|
+
utilities/asyncio.py,sha256=UUcMb_QT4g4-EW0qIoiSENu8x6Fcjn5_X-vvbMrLBfE,50658
|
4
4
|
utilities/atomicwrites.py,sha256=geFjn9Pwn-tTrtoGjDDxWli9NqbYfy3gGL6ZBctiqSo,5393
|
5
5
|
utilities/atools.py,sha256=IYMuFSFGSKyuQmqD6v5IUtDlz8PPw0Sr87Cub_gRU3M,1168
|
6
6
|
utilities/cachetools.py,sha256=C1zqOg7BYz0IfQFK8e3qaDDgEZxDpo47F15RTfJM37Q,2910
|
@@ -88,7 +88,7 @@ utilities/warnings.py,sha256=un1LvHv70PU-LLv8RxPVmugTzDJkkGXRMZTE2-fTQHw,1771
|
|
88
88
|
utilities/whenever.py,sha256=jS31ZAY5OMxFxLja_Yo5Fidi87Pd-GoVZ7Vi_teqVDA,16743
|
89
89
|
utilities/zipfile.py,sha256=24lQc9ATcJxHXBPc_tBDiJk48pWyRrlxO2fIsFxU0A8,699
|
90
90
|
utilities/zoneinfo.py,sha256=-5j7IQ9nb7gR43rdgA7ms05im-XuqhAk9EJnQBXxCoQ,1874
|
91
|
-
dycw_utilities-0.125.
|
92
|
-
dycw_utilities-0.125.
|
93
|
-
dycw_utilities-0.125.
|
94
|
-
dycw_utilities-0.125.
|
91
|
+
dycw_utilities-0.125.14.dist-info/METADATA,sha256=ptsWeHCzCc0Tmvlmzovy3NZ4PLYMSEeT8VdauAv3b0k,12852
|
92
|
+
dycw_utilities-0.125.14.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
93
|
+
dycw_utilities-0.125.14.dist-info/licenses/LICENSE,sha256=gppZp16M6nSVpBbUBrNL6JuYfvKwZiKgV7XoKKsHzqo,1066
|
94
|
+
dycw_utilities-0.125.14.dist-info/RECORD,,
|
utilities/__init__.py
CHANGED
utilities/asyncio.py
CHANGED
@@ -825,7 +825,7 @@ class Looper(Generic[_T]):
|
|
825
825
|
"""Remove and return an item from the end of the queue without blocking."""
|
826
826
|
return self._queue.get_right_nowait()
|
827
827
|
|
828
|
-
async def initialize(self) -> Exception | None:
|
828
|
+
async def initialize(self, *, sleep_if_failure: bool) -> Exception | None:
|
829
829
|
"""Initialize the looper."""
|
830
830
|
match self._is_initializing.is_set():
|
831
831
|
case True:
|
@@ -840,14 +840,26 @@ class Looper(Generic[_T]):
|
|
840
840
|
try:
|
841
841
|
await self._initialize_core()
|
842
842
|
except Exception as error: # noqa: BLE001
|
843
|
-
_ = self._logger.warning(
|
844
|
-
"%s: encountered %s whilst initializing",
|
845
|
-
self,
|
846
|
-
repr_error(error),
|
847
|
-
)
|
848
843
|
async with self._lock:
|
849
844
|
self._initialization_failures += 1
|
850
845
|
ret = error
|
846
|
+
match sleep_if_failure:
|
847
|
+
case True:
|
848
|
+
_ = self._logger.warning(
|
849
|
+
"%s: encountered %s whilst initializing; sleeping for %s...",
|
850
|
+
self,
|
851
|
+
repr_error(error),
|
852
|
+
self.backoff,
|
853
|
+
)
|
854
|
+
await sleep(self._backoff)
|
855
|
+
case False:
|
856
|
+
_ = self._logger.warning(
|
857
|
+
"%s: encountered %s whilst initializing",
|
858
|
+
self,
|
859
|
+
repr_error(error),
|
860
|
+
)
|
861
|
+
case _ as never:
|
862
|
+
assert_never(never)
|
851
863
|
else:
|
852
864
|
_ = self._debug and self._logger.debug(
|
853
865
|
"%s: finished initializing", self
|
@@ -939,44 +951,75 @@ class Looper(Generic[_T]):
|
|
939
951
|
case _ as never:
|
940
952
|
assert_never(never)
|
941
953
|
|
942
|
-
async def restart(self) -> None:
|
954
|
+
async def restart(self, *, sleep_if_failure: bool) -> None:
|
943
955
|
"""Restart the looper."""
|
944
956
|
_ = self._debug and self._logger.debug("%s: restarting...", self)
|
945
957
|
self._is_pending_restart.clear()
|
946
958
|
async with self._lock:
|
947
959
|
self._restart_attempts += 1
|
948
|
-
tear_down = await self.tear_down()
|
949
|
-
initialization = await self.initialize()
|
950
|
-
match tear_down, initialization:
|
951
|
-
case None, None:
|
960
|
+
tear_down = await self.tear_down(sleep_if_failure=False)
|
961
|
+
initialization = await self.initialize(sleep_if_failure=False)
|
962
|
+
match tear_down, initialization, sleep_if_failure:
|
963
|
+
case None, None, bool():
|
952
964
|
_ = self._debug and self._logger.debug("%s: finished restarting", self)
|
953
965
|
async with self._lock:
|
954
966
|
self._restart_successes += 1
|
955
|
-
case Exception(), None:
|
967
|
+
case Exception(), None, True:
|
968
|
+
async with self._lock:
|
969
|
+
self._restart_failures += 1
|
956
970
|
_ = self._logger.warning(
|
957
|
-
"%s: encountered %s whilst restarting
|
971
|
+
"%s: encountered %s whilst restarting (tear down); sleeping for %s...",
|
958
972
|
self,
|
959
973
|
repr_error(tear_down),
|
974
|
+
self.backoff,
|
960
975
|
)
|
976
|
+
await sleep(self._backoff)
|
977
|
+
case Exception(), None, False:
|
961
978
|
async with self._lock:
|
962
979
|
self._restart_failures += 1
|
963
|
-
case None, Exception():
|
964
980
|
_ = self._logger.warning(
|
965
|
-
"%s: encountered %s whilst restarting
|
981
|
+
"%s: encountered %s whilst restarting (tear down)",
|
982
|
+
self,
|
983
|
+
repr_error(tear_down),
|
984
|
+
)
|
985
|
+
case None, Exception(), True:
|
986
|
+
async with self._lock:
|
987
|
+
self._restart_failures += 1
|
988
|
+
_ = self._logger.warning(
|
989
|
+
"%s: encountered %s whilst restarting (initialize); sleeping for %s...",
|
966
990
|
self,
|
967
991
|
repr_error(initialization),
|
992
|
+
self.backoff,
|
968
993
|
)
|
994
|
+
await sleep(self._backoff)
|
995
|
+
case None, Exception(), False:
|
969
996
|
async with self._lock:
|
970
997
|
self._restart_failures += 1
|
971
|
-
case Exception(), Exception():
|
972
998
|
_ = self._logger.warning(
|
973
|
-
"%s: encountered %s
|
999
|
+
"%s: encountered %s whilst restarting (initialize)",
|
1000
|
+
self,
|
1001
|
+
repr_error(initialization),
|
1002
|
+
)
|
1003
|
+
case Exception(), Exception(), True:
|
1004
|
+
async with self._lock:
|
1005
|
+
self._restart_failures += 1
|
1006
|
+
_ = self._logger.warning(
|
1007
|
+
"%s: encountered %s (tear down) and then %s (initialization) whilst restarting; sleeping for %s...",
|
974
1008
|
self,
|
975
1009
|
repr_error(tear_down),
|
976
1010
|
repr_error(initialization),
|
1011
|
+
self.backoff,
|
977
1012
|
)
|
1013
|
+
await sleep(self._backoff)
|
1014
|
+
case Exception(), Exception(), False:
|
978
1015
|
async with self._lock:
|
979
1016
|
self._restart_failures += 1
|
1017
|
+
_ = self._logger.warning(
|
1018
|
+
"%s: encountered %s (tear down) and then %s (initialization) whilst restarting",
|
1019
|
+
self,
|
1020
|
+
repr_error(tear_down),
|
1021
|
+
repr_error(initialization),
|
1022
|
+
)
|
980
1023
|
case _ as never:
|
981
1024
|
assert_never(never)
|
982
1025
|
|
@@ -992,9 +1035,9 @@ class Looper(Generic[_T]):
|
|
992
1035
|
):
|
993
1036
|
await self.stop()
|
994
1037
|
elif self._is_pending_restart.is_set():
|
995
|
-
await self.restart()
|
1038
|
+
await self.restart(sleep_if_failure=True)
|
996
1039
|
elif not self._is_initialized.is_set():
|
997
|
-
_ = await self.initialize()
|
1040
|
+
_ = await self.initialize(sleep_if_failure=True)
|
998
1041
|
else:
|
999
1042
|
_ = self._debug and self._logger.debug("%s: running core...", self)
|
1000
1043
|
async with self._lock:
|
@@ -1051,7 +1094,7 @@ class Looper(Generic[_T]):
|
|
1051
1094
|
case _ as never:
|
1052
1095
|
assert_never(never)
|
1053
1096
|
|
1054
|
-
async def tear_down(self) -> Exception | None:
|
1097
|
+
async def tear_down(self, *, sleep_if_failure: bool) -> Exception | None:
|
1055
1098
|
"""Tear down the looper."""
|
1056
1099
|
match self._is_tearing_down.is_set():
|
1057
1100
|
case True:
|
@@ -1065,14 +1108,26 @@ class Looper(Generic[_T]):
|
|
1065
1108
|
try:
|
1066
1109
|
await self._tear_down_core()
|
1067
1110
|
except Exception as error: # noqa: BLE001
|
1068
|
-
_ = self._logger.warning(
|
1069
|
-
"%s: encountered %s whilst tearing down",
|
1070
|
-
self,
|
1071
|
-
repr_error(error),
|
1072
|
-
)
|
1073
1111
|
async with self._lock:
|
1074
1112
|
self._tear_down_failures += 1
|
1075
1113
|
ret = error
|
1114
|
+
match sleep_if_failure:
|
1115
|
+
case True:
|
1116
|
+
_ = self._logger.warning(
|
1117
|
+
"%s: encountered %s whilst tearing down; sleeping for %s...",
|
1118
|
+
self,
|
1119
|
+
repr_error(error),
|
1120
|
+
self.backoff,
|
1121
|
+
)
|
1122
|
+
await sleep(self._backoff)
|
1123
|
+
case False:
|
1124
|
+
_ = self._logger.warning(
|
1125
|
+
"%s: encountered %s whilst tearing down",
|
1126
|
+
self,
|
1127
|
+
repr_error(error),
|
1128
|
+
)
|
1129
|
+
case _ as never:
|
1130
|
+
assert_never(never)
|
1076
1131
|
else:
|
1077
1132
|
_ = self._debug and self._logger.debug(
|
1078
1133
|
"%s: finished tearing down", self
|
File without changes
|
File without changes
|