dycw-utilities 0.126.12__tar.gz → 0.127.1__tar.gz

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.
Files changed (230) hide show
  1. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/PKG-INFO +1 -1
  2. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/pyproject.toml +3 -2
  3. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_asyncio.py +44 -27
  4. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_sqlalchemy.py +1 -1
  5. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/__init__.py +1 -1
  6. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/asyncio.py +4 -15
  7. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/redis.py +1 -15
  8. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/slack_sdk.py +1 -10
  9. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/sqlalchemy.py +1 -10
  10. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/.gitignore +0 -0
  11. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/LICENSE +0 -0
  12. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/README.md +0 -0
  13. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/__init__.py +0 -0
  14. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/conftest.py +0 -0
  15. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/__init__.py +0 -0
  16. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_missing/__init__.py +0 -0
  17. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_missing/module.py +0 -0
  18. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_with/__init__.py +0 -0
  19. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_with/outer_1.py +0 -0
  20. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_with/outer_2.py +0 -0
  21. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  22. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  23. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  24. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  25. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_without/__init__.py +0 -0
  26. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_without/module_1.py +0 -0
  27. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_without/module_2.py +0 -0
  28. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/standalone.py +0 -0
  29. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/with_imports.py +0 -0
  30. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  31. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  32. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  33. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  34. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  35. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  36. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  37. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  38. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_altair.py +0 -0
  39. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_asyncio_classes/__init__.py +0 -0
  40. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_asyncio_classes/loopers.py +0 -0
  41. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_asyncio_classes/redis.py +0 -0
  42. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_atomicwrites.py +0 -0
  43. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_atools.py +0 -0
  44. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_cachetools.py +0 -0
  45. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_click.py +0 -0
  46. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_concurrent.py +0 -0
  47. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_contextlib.py +0 -0
  48. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_contextvars.py +0 -0
  49. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_cryptography.py +0 -0
  50. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_cvxpy.py +0 -0
  51. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_dataclasses.py +0 -0
  52. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_datetime.py +0 -0
  53. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_enum.py +0 -0
  54. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_errors.py +0 -0
  55. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_eventkit.py +0 -0
  56. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_fastapi.py +0 -0
  57. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_fpdf2.py +0 -0
  58. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_functions.py +0 -0
  59. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_functools.py +0 -0
  60. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_getpass.py +0 -0
  61. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_git.py +0 -0
  62. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_hashlib.py +0 -0
  63. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_http.py +0 -0
  64. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_hypothesis.py +0 -0
  65. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_importlib.py +0 -0
  66. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_ipython.py +0 -0
  67. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_iterables.py +0 -0
  68. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_jupyter.py +0 -0
  69. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_libcst.py +0 -0
  70. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_lightweight_charts.py +0 -0
  71. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_logging.py +0 -0
  72. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_loguru.py +0 -0
  73. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_luigi.py +0 -0
  74. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_math.py +0 -0
  75. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_memory_profiler.py +0 -0
  76. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_modules.py +0 -0
  77. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_more_itertools.py +0 -0
  78. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_numpy.py +0 -0
  79. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_operator.py +0 -0
  80. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_optuna.py +0 -0
  81. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_orjson.py +0 -0
  82. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_os.py +0 -0
  83. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_parse.py +0 -0
  84. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_pathlib.py +0 -0
  85. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_period.py +0 -0
  86. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_pickle.py +0 -0
  87. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_platform.py +0 -0
  88. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_polars.py +0 -0
  89. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_polars_ols.py +0 -0
  90. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_pottery.py +0 -0
  91. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_pqdm.py +0 -0
  92. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_psutil.py +0 -0
  93. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_pydantic.py +0 -0
  94. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_pyinstrument.py +0 -0
  95. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_pyrsistent.py +0 -0
  96. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_pytest.py +0 -0
  97. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_pytest_regressions.py +0 -0
  98. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_python_dotenv.py +0 -0
  99. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_random.py +0 -0
  100. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_re.py +0 -0
  101. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_redis.py +0 -0
  102. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_reprlib.py +0 -0
  103. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_scipy.py +0 -0
  104. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_sentinel.py +0 -0
  105. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_shelve.py +0 -0
  106. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_slack_sdk.py +0 -0
  107. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_socket.py +0 -0
  108. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_sqlalchemy_polars.py +0 -0
  109. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_statsmodel.py +0 -0
  110. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_streamlit.py +0 -0
  111. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_string.py +0 -0
  112. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_sys.py +0 -0
  113. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_tempfile.py +0 -0
  114. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_tenacity.py +0 -0
  115. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_text.py +0 -0
  116. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_threading.py +0 -0
  117. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_timer.py +0 -0
  118. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback.py +0 -0
  119. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/__init__.py +0 -0
  120. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/chain.py +0 -0
  121. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
  122. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
  123. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/error_bind.py +0 -0
  124. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/many.py +0 -0
  125. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/one.py +0 -0
  126. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/recursive.py +0 -0
  127. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
  128. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
  129. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/two.py +0 -0
  130. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/untraced.py +0 -0
  131. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_types.py +0 -0
  132. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_typing.py +0 -0
  133. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_typing_funcs/__init__.py +0 -0
  134. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_typing_funcs/no_future.py +0 -0
  135. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_typing_funcs/with_future.py +0 -0
  136. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_tzdata.py +0 -0
  137. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_tzlocal.py +0 -0
  138. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_uuid.py +0 -0
  139. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_version.py +0 -0
  140. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_warnings.py +0 -0
  141. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_whenever.py +0 -0
  142. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_zipfile.py +0 -0
  143. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_zoneinfo.py +0 -0
  144. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/altair.py +0 -0
  145. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/atomicwrites.py +0 -0
  146. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/atools.py +0 -0
  147. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/cachetools.py +0 -0
  148. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/click.py +0 -0
  149. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/concurrent.py +0 -0
  150. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/contextlib.py +0 -0
  151. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/contextvars.py +0 -0
  152. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/cryptography.py +0 -0
  153. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/cvxpy.py +0 -0
  154. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/dataclasses.py +0 -0
  155. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/datetime.py +0 -0
  156. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/enum.py +0 -0
  157. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/errors.py +0 -0
  158. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/eventkit.py +0 -0
  159. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/fastapi.py +0 -0
  160. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/fpdf2.py +0 -0
  161. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/functions.py +0 -0
  162. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/functools.py +0 -0
  163. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/getpass.py +0 -0
  164. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/git.py +0 -0
  165. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/hashlib.py +0 -0
  166. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/http.py +0 -0
  167. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/hypothesis.py +0 -0
  168. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/importlib.py +0 -0
  169. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/ipython.py +0 -0
  170. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/iterables.py +0 -0
  171. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/jupyter.py +0 -0
  172. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/libcst.py +0 -0
  173. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/lightweight_charts.py +0 -0
  174. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/logging.py +0 -0
  175. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/loguru.py +0 -0
  176. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/luigi.py +0 -0
  177. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/math.py +0 -0
  178. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/memory_profiler.py +0 -0
  179. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/modules.py +0 -0
  180. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/more_itertools.py +0 -0
  181. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/numpy.py +0 -0
  182. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/operator.py +0 -0
  183. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/optuna.py +0 -0
  184. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/orjson.py +0 -0
  185. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/os.py +0 -0
  186. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/parse.py +0 -0
  187. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/pathlib.py +0 -0
  188. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/period.py +0 -0
  189. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/pickle.py +0 -0
  190. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/platform.py +0 -0
  191. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/polars.py +0 -0
  192. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/polars_ols.py +0 -0
  193. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/pottery.py +0 -0
  194. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/pqdm.py +0 -0
  195. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/psutil.py +0 -0
  196. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/py.typed +0 -0
  197. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/pydantic.py +0 -0
  198. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/pyinstrument.py +0 -0
  199. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/pyrsistent.py +0 -0
  200. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/pytest.py +0 -0
  201. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/pytest_regressions.py +0 -0
  202. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/python_dotenv.py +0 -0
  203. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/random.py +0 -0
  204. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/re.py +0 -0
  205. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/reprlib.py +0 -0
  206. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/scipy.py +0 -0
  207. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/sentinel.py +0 -0
  208. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/shelve.py +0 -0
  209. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/socket.py +0 -0
  210. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/sqlalchemy_polars.py +0 -0
  211. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/statsmodels.py +0 -0
  212. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/streamlit.py +0 -0
  213. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/string.py +0 -0
  214. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/sys.py +0 -0
  215. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/tempfile.py +0 -0
  216. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/tenacity.py +0 -0
  217. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/text.py +0 -0
  218. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/threading.py +0 -0
  219. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/timer.py +0 -0
  220. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/traceback.py +0 -0
  221. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/types.py +0 -0
  222. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/typing.py +0 -0
  223. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/tzdata.py +0 -0
  224. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/tzlocal.py +0 -0
  225. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/uuid.py +0 -0
  226. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/version.py +0 -0
  227. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/warnings.py +0 -0
  228. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/whenever.py +0 -0
  229. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/zipfile.py +0 -0
  230. {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/zoneinfo.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dycw-utilities
3
- Version: 0.126.12
3
+ Version: 0.127.1
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -94,7 +94,7 @@ dependencies = [
94
94
  name = "dycw-utilities"
95
95
  readme = "README.md"
96
96
  requires-python = ">= 3.12"
97
- version = "0.126.12"
97
+ version = "0.127.1"
98
98
 
99
99
  [project.optional-dependencies]
100
100
  test = [
@@ -334,7 +334,7 @@ zzz-test-zoneinfo = [
334
334
  # bump-my-version
335
335
  [tool.bumpversion]
336
336
  allow_dirty = true
337
- current_version = "0.126.12"
337
+ current_version = "0.127.1"
338
338
 
339
339
  [[tool.bumpversion.files]]
340
340
  filename = "src/utilities/__init__.py"
@@ -375,6 +375,7 @@ data_file = ".coverage/data"
375
375
  omit = ["src/utilities/streamlit.py"]
376
376
  parallel = true
377
377
  plugins = ["coverage_conditional_plugin"]
378
+ source = ["src/utilities"]
378
379
 
379
380
  # hatch
380
381
  [tool.hatch]
@@ -15,13 +15,12 @@ from hypothesis.strategies import (
15
15
  booleans,
16
16
  data,
17
17
  integers,
18
- just,
19
18
  lists,
20
19
  none,
21
20
  permutations,
22
21
  sampled_from,
23
22
  )
24
- from pytest import LogCaptureFixture, mark, param, raises
23
+ from pytest import LogCaptureFixture, approx, mark, param, raises
25
24
 
26
25
  from tests.test_asyncio_classes.loopers import (
27
26
  _REL,
@@ -42,7 +41,6 @@ from utilities.asyncio import (
42
41
  InfiniteLooper,
43
42
  InfiniteQueueLooper,
44
43
  Looper,
45
- LooperTimeoutError,
46
44
  UniquePriorityQueue,
47
45
  UniqueQueue,
48
46
  _InfiniteLooperDefaultEventError,
@@ -72,6 +70,7 @@ from utilities.hypothesis import sentinels, text_ascii
72
70
  from utilities.iterables import one, unique_everseen
73
71
  from utilities.pytest import skipif_windows
74
72
  from utilities.sentinel import Sentinel, sentinel
73
+ from utilities.text import unique_str
75
74
  from utilities.timer import Timer
76
75
 
77
76
  if TYPE_CHECKING:
@@ -199,7 +198,6 @@ class TestEnhancedTaskGroup:
199
198
  assert looper.running
200
199
  assert not looper.running
201
200
 
202
- @mark.flaky
203
201
  async def test_max_tasks_disabled(self) -> None:
204
202
  with Timer() as timer:
205
203
  async with EnhancedTaskGroup() as tg:
@@ -626,7 +624,7 @@ class TestInfiniteLooper:
626
624
  ):
627
625
  raise _InfiniteLooperDefaultEventError(looper=looper)
628
626
 
629
- @given(logger=just("logger") | none())
627
+ @given(log=booleans())
630
628
  @mark.parametrize(("sleep_restart", "desc"), sleep_restart_cases)
631
629
  @settings(suppress_health_check={HealthCheck.function_scoped_fixture})
632
630
  async def test_error_upon_initialize(
@@ -634,7 +632,7 @@ class TestInfiniteLooper:
634
632
  *,
635
633
  sleep_restart: DurationOrEveryDuration,
636
634
  desc: str,
637
- logger: str | None,
635
+ log: bool,
638
636
  caplog: LogCaptureFixture,
639
637
  ) -> None:
640
638
  class CustomError(Exception): ...
@@ -651,15 +649,19 @@ class TestInfiniteLooper:
651
649
 
652
650
  async with (
653
651
  timeout(1.0),
654
- Example(sleep_core=0.1, sleep_restart=sleep_restart, logger=logger),
652
+ Example(
653
+ sleep_core=0.1,
654
+ sleep_restart=sleep_restart,
655
+ logger=unique_str() if log else None,
656
+ ),
655
657
  ):
656
658
  ...
657
- if logger is not None:
659
+ if log:
658
660
  message = caplog.messages[0]
659
661
  expected = f"'Example' encountered 'CustomError()' whilst initializing; sleeping {desc}..."
660
662
  assert message == expected
661
663
 
662
- @given(logger=just("logger") | none())
664
+ @given(log=booleans())
663
665
  @mark.parametrize(("sleep_restart", "desc"), sleep_restart_cases)
664
666
  @settings(suppress_health_check={HealthCheck.function_scoped_fixture})
665
667
  async def test_error_upon_core(
@@ -667,7 +669,7 @@ class TestInfiniteLooper:
667
669
  *,
668
670
  sleep_restart: DurationOrEveryDuration,
669
671
  desc: str,
670
- logger: str | None,
672
+ log: bool,
671
673
  caplog: LogCaptureFixture,
672
674
  ) -> None:
673
675
  class CustomError(Exception): ...
@@ -680,15 +682,19 @@ class TestInfiniteLooper:
680
682
 
681
683
  async with (
682
684
  timeout(1.0),
683
- Example(sleep_core=0.1, sleep_restart=sleep_restart, logger=logger),
685
+ Example(
686
+ sleep_core=0.1,
687
+ sleep_restart=sleep_restart,
688
+ logger=unique_str() if log else None,
689
+ ),
684
690
  ):
685
691
  ...
686
- if logger is not None:
692
+ if log:
687
693
  message = caplog.messages[0]
688
694
  expected = f"'Example' encountered 'CustomError()'; sleeping {desc}..."
689
695
  assert message == expected
690
696
 
691
- @given(logger=just("logger") | none())
697
+ @given(log=booleans())
692
698
  @mark.parametrize(("sleep_restart", "desc"), sleep_restart_cases)
693
699
  @settings(suppress_health_check={HealthCheck.function_scoped_fixture})
694
700
  async def test_error_upon_teardown(
@@ -696,7 +702,7 @@ class TestInfiniteLooper:
696
702
  *,
697
703
  sleep_restart: DurationOrEveryDuration,
698
704
  desc: str,
699
- logger: str | None,
705
+ log: bool,
700
706
  caplog: LogCaptureFixture,
701
707
  ) -> None:
702
708
  class Custom1Error(Exception): ...
@@ -725,14 +731,18 @@ class TestInfiniteLooper:
725
731
 
726
732
  async with (
727
733
  timeout(1.0),
728
- Example(sleep_core=0.1, sleep_restart=sleep_restart, logger=logger),
734
+ Example(
735
+ sleep_core=0.1,
736
+ sleep_restart=sleep_restart,
737
+ logger=unique_str() if log else None,
738
+ ),
729
739
  ):
730
740
  ...
731
- if logger is not None:
741
+ if log:
732
742
  expected = f"'Example' encountered 'Custom2Error()' whilst tearing down; sleeping {desc}..."
733
743
  assert expected in caplog.messages
734
744
 
735
- @given(logger=just("logger") | none())
745
+ @given(log=booleans())
736
746
  @mark.parametrize(("sleep_restart", "desc"), sleep_restart_cases)
737
747
  @settings(suppress_health_check={HealthCheck.function_scoped_fixture})
738
748
  async def test_error_group_upon_others(
@@ -740,7 +750,7 @@ class TestInfiniteLooper:
740
750
  *,
741
751
  sleep_restart: DurationOrEveryDuration,
742
752
  desc: str,
743
- logger: str | None,
753
+ log: bool,
744
754
  caplog: LogCaptureFixture,
745
755
  ) -> None:
746
756
  class CustomError(Exception): ...
@@ -771,10 +781,14 @@ class TestInfiniteLooper:
771
781
 
772
782
  async with (
773
783
  timeout(1.0),
774
- Example(sleep_core=0.05, sleep_restart=sleep_restart, logger=logger),
784
+ Example(
785
+ sleep_core=0.05,
786
+ sleep_restart=sleep_restart,
787
+ logger=unique_str() if log else None,
788
+ ),
775
789
  ):
776
790
  ...
777
- if logger is not None:
791
+ if log:
778
792
  message = caplog.messages[0]
779
793
  expected = f"""\
780
794
  'Example' encountered 1 error(s):
@@ -868,11 +882,10 @@ class TestInfiniteQueueLooper:
868
882
  await looper.run_until_empty(stop=True)
869
883
  assert looper.empty()
870
884
 
871
- @given(logger=just("logger") | none())
872
- @mark.flaky
885
+ @given(log=booleans())
873
886
  @settings(suppress_health_check={HealthCheck.function_scoped_fixture})
874
887
  async def test_error_process_items(
875
- self, *, logger: str | None, caplog: LogCaptureFixture
888
+ self, *, log: bool, caplog: LogCaptureFixture
876
889
  ) -> None:
877
890
  class CustomError(Exception): ...
878
891
 
@@ -884,9 +897,12 @@ class TestInfiniteQueueLooper:
884
897
  async def _process_queue(self) -> None:
885
898
  raise CustomError
886
899
 
887
- async with timeout(1.0), Example(sleep_core=0.05, logger=logger) as looper:
900
+ async with (
901
+ timeout(1.0),
902
+ Example(sleep_core=0.05, logger=unique_str() if log else None) as looper,
903
+ ):
888
904
  looper.put_left_nowait(1)
889
- if logger is not None:
905
+ if log:
890
906
  message = caplog.messages[0]
891
907
  expected = "'Example' encountered 'CustomError()'; sleeping for 0:01:00..."
892
908
  assert message == expected
@@ -1361,9 +1377,10 @@ class TestLooper:
1361
1377
 
1362
1378
  async def test_timeout(self) -> None:
1363
1379
  looper = CountingLooper(timeout=1.0)
1364
- async with looper:
1365
- with raises(LooperTimeoutError, match="Timeout"):
1380
+ with Timer() as timer:
1381
+ async with looper:
1366
1382
  await looper
1383
+ assert float(timer) == approx(1.0, rel=_REL)
1367
1384
  self._assert_stats_full(looper, stops=1)
1368
1385
 
1369
1386
  def test_with_auto_start(self) -> None:
@@ -170,7 +170,7 @@ class TestCheckEngine:
170
170
 
171
171
  class TestColumnwiseMinMax:
172
172
  @given(data=data(), values=sets(pairs(integers(0, 10) | none()), min_size=1))
173
- @settings_with_reduced_examples(phases={Phase.generate})
173
+ @settings(max_examples=1, phases={Phase.generate})
174
174
  async def test_main(
175
175
  self, *, data: DataObject, values: set[tuple[int | None, int | None]]
176
176
  ) -> None:
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.126.12"
3
+ __version__ = "0.127.1"
@@ -663,15 +663,6 @@ class InfiniteQueueLooper(InfiniteLooper[THashable], Generic[THashable, _T]):
663
663
  class LooperError(Exception): ...
664
664
 
665
665
 
666
- @dataclass(kw_only=True, slots=True)
667
- class LooperTimeoutError(LooperError):
668
- duration: Duration | None = None
669
-
670
- @override
671
- def __str__(self) -> str:
672
- return "Timeout" if self.duration is None else f"Timeout after {self.duration}"
673
-
674
-
675
666
  @dataclass(kw_only=True, slots=True)
676
667
  class _LooperNoTaskError(LooperError):
677
668
  looper: Looper
@@ -691,7 +682,6 @@ class Looper(Generic[_T]):
691
682
  empty_upon_exit: bool = field(default=False, repr=False)
692
683
  logger: str | None = field(default=None, repr=False)
693
684
  timeout: Duration | None = field(default=None, repr=False)
694
- timeout_error: type[Exception] = field(default=LooperTimeoutError, repr=False)
695
685
  # settings
696
686
  _backoff: float = field(init=False, repr=False)
697
687
  _debug: bool = field(default=False, repr=False)
@@ -757,7 +747,7 @@ class Looper(Generic[_T]):
757
747
  _ = await self._stack.enter_async_context(looper)
758
748
  if self.auto_start:
759
749
  _ = self._debug and self._logger.debug("%s: auto-starting...", self)
760
- with suppress(self.timeout_error):
750
+ with suppress(TimeoutError):
761
751
  await self._task
762
752
  case _ as never:
763
753
  assert_never(never)
@@ -893,7 +883,6 @@ class Looper(Generic[_T]):
893
883
  backoff: Duration | Sentinel = sentinel,
894
884
  logger: str | None | Sentinel = sentinel,
895
885
  timeout: Duration | None | Sentinel = sentinel,
896
- timeout_error: type[Exception] | Sentinel = sentinel,
897
886
  _debug: bool | Sentinel = sentinel,
898
887
  **kwargs: Any,
899
888
  ) -> Self:
@@ -906,7 +895,6 @@ class Looper(Generic[_T]):
906
895
  backoff=backoff,
907
896
  logger=logger,
908
897
  timeout=timeout,
909
- timeout_error=timeout_error,
910
898
  _debug=_debug,
911
899
  **kwargs,
912
900
  )
@@ -1029,7 +1017,7 @@ class Looper(Generic[_T]):
1029
1017
  async def run_looper(self) -> None:
1030
1018
  """Run the looper."""
1031
1019
  try:
1032
- async with timeout_dur(duration=self.timeout, error=self.timeout_error):
1020
+ async with timeout_dur(duration=self.timeout):
1033
1021
  while True:
1034
1022
  if self._is_stopped.is_set():
1035
1023
  _ = self._debug and self._logger.debug("%s: stopped", self)
@@ -1068,6 +1056,8 @@ class Looper(Generic[_T]):
1068
1056
  if error.args[0] == "generator didn't stop after athrow()":
1069
1057
  return
1070
1058
  raise
1059
+ except TimeoutError:
1060
+ pass
1071
1061
 
1072
1062
  async def run_until_empty(self) -> None:
1073
1063
  """Run until the queue is empty."""
@@ -1430,7 +1420,6 @@ __all__ = [
1430
1420
  "InfiniteQueueLooper",
1431
1421
  "Looper",
1432
1422
  "LooperError",
1433
- "LooperTimeoutError",
1434
1423
  "StreamCommandOutput",
1435
1424
  "UniquePriorityQueue",
1436
1425
  "UniqueQueue",
@@ -25,13 +25,7 @@ from typing import (
25
25
  from redis.asyncio import Redis
26
26
  from redis.typing import EncodableT
27
27
 
28
- from utilities.asyncio import (
29
- EnhancedQueue,
30
- InfiniteQueueLooper,
31
- Looper,
32
- LooperTimeoutError,
33
- timeout_dur,
34
- )
28
+ from utilities.asyncio import EnhancedQueue, InfiniteQueueLooper, Looper, timeout_dur
35
29
  from utilities.contextlib import suppress_super_object_attribute_error
36
30
  from utilities.datetime import (
37
31
  MILLISECOND,
@@ -702,9 +696,6 @@ class PublishServiceMixin(Generic[_T]):
702
696
  publish_service_empty_upon_exit: bool = field(default=False, repr=False)
703
697
  publish_service_logger: str | None = field(default=None, repr=False)
704
698
  publish_service_timeout: Duration | None = field(default=None, repr=False)
705
- publish_service_timeout_error: type[Exception] = field(
706
- default=LooperTimeoutError, repr=False
707
- )
708
699
  publish_service_debug: bool = field(default=False, repr=False)
709
700
  _is_pending_restart: Event = field(default_factory=Event, init=False, repr=False)
710
701
  # base - publish service
@@ -724,7 +715,6 @@ class PublishServiceMixin(Generic[_T]):
724
715
  empty_upon_exit=self.publish_service_empty_upon_exit,
725
716
  logger=self.publish_service_logger,
726
717
  timeout=self.publish_service_timeout,
727
- timeout_error=self.publish_service_timeout_error,
728
718
  _debug=self.publish_service_debug,
729
719
  # publish service
730
720
  redis=self.publish_service_redis,
@@ -986,9 +976,6 @@ class SubscribeServiceMixin(Generic[_T]):
986
976
  subscribe_service_empty_upon_exit: bool = field(default=False, repr=False)
987
977
  subscribe_service_logger: str | None = field(default=None, repr=False)
988
978
  subscribe_service_timeout: Duration | None = field(default=None, repr=False)
989
- subscribe_service_timeout_error: type[Exception] = field(
990
- default=LooperTimeoutError, repr=False
991
- )
992
979
  subscribe_service_debug: bool = field(default=False, repr=False)
993
980
  # base - looper
994
981
  subscribe_service_redis: Redis
@@ -1009,7 +996,6 @@ class SubscribeServiceMixin(Generic[_T]):
1009
996
  empty_upon_exit=self.subscribe_service_empty_upon_exit,
1010
997
  logger=self.subscribe_service_logger,
1011
998
  timeout=self.subscribe_service_timeout,
1012
- timeout_error=self.subscribe_service_timeout_error,
1013
999
  _debug=self.subscribe_service_debug,
1014
1000
  # subscribe service
1015
1001
  redis=self.subscribe_service_redis,
@@ -7,12 +7,7 @@ from typing import TYPE_CHECKING, Any, Self, override
7
7
 
8
8
  from slack_sdk.webhook.async_client import AsyncWebhookClient
9
9
 
10
- from utilities.asyncio import (
11
- InfiniteQueueLooper,
12
- Looper,
13
- LooperTimeoutError,
14
- timeout_dur,
15
- )
10
+ from utilities.asyncio import InfiniteQueueLooper, Looper, timeout_dur
16
11
  from utilities.datetime import MINUTE, SECOND, datetime_duration_to_float
17
12
  from utilities.functools import cache
18
13
  from utilities.math import safe_round
@@ -94,7 +89,6 @@ class SlackHandlerService(Handler, Looper[str]):
94
89
  backoff: Duration = SECOND,
95
90
  logger: str | None = None,
96
91
  timeout: Duration | None = None,
97
- timeout_error: type[Exception] = LooperTimeoutError,
98
92
  _debug: bool = False,
99
93
  level: int = NOTSET,
100
94
  sender: Callable[[str, str], Coroutine1[None]] = _send_adapter,
@@ -108,7 +102,6 @@ class SlackHandlerService(Handler, Looper[str]):
108
102
  backoff=backoff,
109
103
  logger=logger,
110
104
  timeout=timeout,
111
- timeout_error=timeout_error,
112
105
  _debug=_debug,
113
106
  )
114
107
  Looper.__post_init__(self)
@@ -144,7 +137,6 @@ class SlackHandlerService(Handler, Looper[str]):
144
137
  backoff: Duration | Sentinel = sentinel,
145
138
  logger: str | None | Sentinel = sentinel,
146
139
  timeout: Duration | None | Sentinel = sentinel,
147
- timeout_error: type[Exception] | Sentinel = sentinel,
148
140
  _debug: bool | Sentinel = sentinel,
149
141
  **kwargs: Any,
150
142
  ) -> Self:
@@ -157,7 +149,6 @@ class SlackHandlerService(Handler, Looper[str]):
157
149
  backoff=backoff,
158
150
  logger=logger,
159
151
  timeout=timeout,
160
- timeout_error=timeout_error,
161
152
  _debug=_debug,
162
153
  **kwargs,
163
154
  )
@@ -57,12 +57,7 @@ from sqlalchemy.orm import (
57
57
  from sqlalchemy.orm.exc import UnmappedClassError
58
58
  from sqlalchemy.pool import NullPool, Pool
59
59
 
60
- from utilities.asyncio import (
61
- InfiniteQueueLooper,
62
- Looper,
63
- LooperTimeoutError,
64
- timeout_dur,
65
- )
60
+ from utilities.asyncio import InfiniteQueueLooper, Looper, timeout_dur
66
61
  from utilities.contextlib import suppress_super_object_attribute_error
67
62
  from utilities.datetime import SECOND
68
63
  from utilities.functions import (
@@ -707,9 +702,6 @@ class UpsertServiceMixin:
707
702
  upsert_service_empty_upon_exit: bool = field(default=False, repr=False)
708
703
  upsert_service_logger: str | None = field(default=None, repr=False)
709
704
  upsert_service_timeout: Duration | None = field(default=None, repr=False)
710
- upsert_service_timeout_error: type[Exception] = field(
711
- default=LooperTimeoutError, repr=False
712
- )
713
705
  upsert_service_debug: bool = field(default=False, repr=False)
714
706
  # base - upsert service
715
707
  upsert_service_database: AsyncEngine
@@ -734,7 +726,6 @@ class UpsertServiceMixin:
734
726
  empty_upon_exit=self.upsert_service_empty_upon_exit,
735
727
  logger=self.upsert_service_logger,
736
728
  timeout=self.upsert_service_timeout,
737
- timeout_error=self.upsert_service_timeout_error,
738
729
  _debug=self.upsert_service_debug,
739
730
  # upsert service
740
731
  engine=self.upsert_service_database,