dycw-utilities 0.125.5__tar.gz → 0.125.7__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 (223) hide show
  1. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/PKG-INFO +4 -4
  2. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/pyproject.toml +8 -9
  3. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_asyncio.py +50 -1
  4. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/__init__.py +1 -1
  5. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/asyncio.py +25 -6
  6. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/errors.py +2 -2
  7. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/.gitignore +0 -0
  8. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/LICENSE +0 -0
  9. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/README.md +0 -0
  10. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/__init__.py +0 -0
  11. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/conftest.py +0 -0
  12. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/__init__.py +0 -0
  13. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_missing/__init__.py +0 -0
  14. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_missing/module.py +0 -0
  15. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_with/__init__.py +0 -0
  16. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_with/outer_1.py +0 -0
  17. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_with/outer_2.py +0 -0
  18. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  19. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  20. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  21. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  22. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_without/__init__.py +0 -0
  23. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_without/module_1.py +0 -0
  24. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_without/module_2.py +0 -0
  25. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/standalone.py +0 -0
  26. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/with_imports.py +0 -0
  27. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  28. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  29. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  30. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  31. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  32. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  33. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  34. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  35. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_altair.py +0 -0
  36. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_atomicwrites.py +0 -0
  37. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_atools.py +0 -0
  38. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_cachetools.py +0 -0
  39. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_click.py +0 -0
  40. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_concurrent.py +0 -0
  41. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_contextlib.py +0 -0
  42. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_contextvars.py +0 -0
  43. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_cryptography.py +0 -0
  44. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_cvxpy.py +0 -0
  45. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_dataclasses.py +0 -0
  46. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_datetime.py +0 -0
  47. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_enum.py +0 -0
  48. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_errors.py +0 -0
  49. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_eventkit.py +0 -0
  50. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_fastapi.py +0 -0
  51. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_fpdf2.py +0 -0
  52. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_functions.py +0 -0
  53. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_functools.py +0 -0
  54. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_getpass.py +0 -0
  55. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_git.py +0 -0
  56. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_hashlib.py +0 -0
  57. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_http.py +0 -0
  58. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_hypothesis.py +0 -0
  59. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_importlib.py +0 -0
  60. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_ipython.py +0 -0
  61. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_iterables.py +0 -0
  62. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_jupyter.py +0 -0
  63. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_libcst.py +0 -0
  64. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_lightweight_charts.py +0 -0
  65. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_logging.py +0 -0
  66. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_loguru.py +0 -0
  67. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_luigi.py +0 -0
  68. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_math.py +0 -0
  69. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_memory_profiler.py +0 -0
  70. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_modules.py +0 -0
  71. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_more_itertools.py +0 -0
  72. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_numpy.py +0 -0
  73. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_operator.py +0 -0
  74. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_optuna.py +0 -0
  75. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_orjson.py +0 -0
  76. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_os.py +0 -0
  77. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_parse.py +0 -0
  78. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_pathlib.py +0 -0
  79. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_period.py +0 -0
  80. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_pickle.py +0 -0
  81. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_platform.py +0 -0
  82. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_polars.py +0 -0
  83. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_polars_ols.py +0 -0
  84. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_pqdm.py +0 -0
  85. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_pydantic.py +0 -0
  86. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_pyinstrument.py +0 -0
  87. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_pyrsistent.py +0 -0
  88. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_pytest.py +0 -0
  89. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_pytest_regressions.py +0 -0
  90. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_python_dotenv.py +0 -0
  91. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_random.py +0 -0
  92. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_re.py +0 -0
  93. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_redis.py +0 -0
  94. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_reprlib.py +0 -0
  95. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_rich.py +0 -0
  96. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_scipy.py +0 -0
  97. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_sentinel.py +0 -0
  98. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_shelve.py +0 -0
  99. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_slack_sdk.py +0 -0
  100. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_socket.py +0 -0
  101. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_sqlalchemy.py +0 -0
  102. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_sqlalchemy_polars.py +0 -0
  103. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_statsmodel.py +0 -0
  104. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_streamlit.py +0 -0
  105. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_sys.py +0 -0
  106. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_tempfile.py +0 -0
  107. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_tenacity.py +0 -0
  108. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_text.py +0 -0
  109. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_threading.py +0 -0
  110. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_timer.py +0 -0
  111. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback.py +0 -0
  112. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/__init__.py +0 -0
  113. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/chain.py +0 -0
  114. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
  115. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
  116. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/error_bind.py +0 -0
  117. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/many.py +0 -0
  118. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/one.py +0 -0
  119. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/recursive.py +0 -0
  120. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
  121. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
  122. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/two.py +0 -0
  123. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/untraced.py +0 -0
  124. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_types.py +0 -0
  125. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_typing.py +0 -0
  126. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_typing_funcs/__init__.py +0 -0
  127. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_typing_funcs/no_future.py +0 -0
  128. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_typing_funcs/with_future.py +0 -0
  129. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_tzdata.py +0 -0
  130. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_tzlocal.py +0 -0
  131. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_uuid.py +0 -0
  132. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_version.py +0 -0
  133. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_warnings.py +0 -0
  134. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_whenever.py +0 -0
  135. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_zipfile.py +0 -0
  136. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_zoneinfo.py +0 -0
  137. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/altair.py +0 -0
  138. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/atomicwrites.py +0 -0
  139. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/atools.py +0 -0
  140. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/cachetools.py +0 -0
  141. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/click.py +0 -0
  142. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/concurrent.py +0 -0
  143. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/contextlib.py +0 -0
  144. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/contextvars.py +0 -0
  145. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/cryptography.py +0 -0
  146. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/cvxpy.py +0 -0
  147. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/dataclasses.py +0 -0
  148. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/datetime.py +0 -0
  149. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/enum.py +0 -0
  150. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/eventkit.py +0 -0
  151. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/fastapi.py +0 -0
  152. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/fpdf2.py +0 -0
  153. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/functions.py +0 -0
  154. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/functools.py +0 -0
  155. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/getpass.py +0 -0
  156. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/git.py +0 -0
  157. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/hashlib.py +0 -0
  158. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/http.py +0 -0
  159. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/hypothesis.py +0 -0
  160. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/importlib.py +0 -0
  161. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/ipython.py +0 -0
  162. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/iterables.py +0 -0
  163. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/jupyter.py +0 -0
  164. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/libcst.py +0 -0
  165. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/lightweight_charts.py +0 -0
  166. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/logging.py +0 -0
  167. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/loguru.py +0 -0
  168. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/luigi.py +0 -0
  169. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/math.py +0 -0
  170. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/memory_profiler.py +0 -0
  171. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/modules.py +0 -0
  172. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/more_itertools.py +0 -0
  173. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/numpy.py +0 -0
  174. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/operator.py +0 -0
  175. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/optuna.py +0 -0
  176. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/orjson.py +0 -0
  177. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/os.py +0 -0
  178. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/parse.py +0 -0
  179. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/pathlib.py +0 -0
  180. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/period.py +0 -0
  181. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/pickle.py +0 -0
  182. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/platform.py +0 -0
  183. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/polars.py +0 -0
  184. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/polars_ols.py +0 -0
  185. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/pqdm.py +0 -0
  186. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/py.typed +0 -0
  187. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/pydantic.py +0 -0
  188. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/pyinstrument.py +0 -0
  189. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/pyrsistent.py +0 -0
  190. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/pytest.py +0 -0
  191. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/pytest_regressions.py +0 -0
  192. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/python_dotenv.py +0 -0
  193. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/random.py +0 -0
  194. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/re.py +0 -0
  195. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/redis.py +0 -0
  196. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/reprlib.py +0 -0
  197. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/rich.py +0 -0
  198. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/scipy.py +0 -0
  199. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/sentinel.py +0 -0
  200. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/shelve.py +0 -0
  201. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/slack_sdk.py +0 -0
  202. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/socket.py +0 -0
  203. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/sqlalchemy.py +0 -0
  204. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/sqlalchemy_polars.py +0 -0
  205. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/statsmodels.py +0 -0
  206. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/streamlit.py +0 -0
  207. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/sys.py +0 -0
  208. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/tempfile.py +0 -0
  209. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/tenacity.py +0 -0
  210. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/text.py +0 -0
  211. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/threading.py +0 -0
  212. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/timer.py +0 -0
  213. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/traceback.py +0 -0
  214. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/types.py +0 -0
  215. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/typing.py +0 -0
  216. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/tzdata.py +0 -0
  217. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/tzlocal.py +0 -0
  218. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/uuid.py +0 -0
  219. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/version.py +0 -0
  220. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/warnings.py +0 -0
  221. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/whenever.py +0 -0
  222. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/zipfile.py +0 -0
  223. {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/zoneinfo.py +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dycw-utilities
3
- Version: 0.125.5
3
+ Version: 0.125.7
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
7
7
  Requires-Dist: typing-extensions<4.14,>=4.13.1
8
8
  Provides-Extra: test
9
9
  Requires-Dist: hypothesis<6.132,>=6.131.28; extra == 'test'
10
- Requires-Dist: pytest-asyncio<0.27,>=0.26.0; extra == 'test'
10
+ Requires-Dist: pytest-asyncio<1.1,>=1.0.0; extra == 'test'
11
11
  Requires-Dist: pytest-cov<6.2,>=6.1.1; extra == 'test'
12
12
  Requires-Dist: pytest-instafail<0.6,>=0.5.0; extra == 'test'
13
13
  Requires-Dist: pytest-lazy-fixtures<1.2,>=1.1.3; extra == 'test'
@@ -17,7 +17,7 @@ Requires-Dist: pytest-regressions<2.8,>=2.7.0; extra == 'test'
17
17
  Requires-Dist: pytest-rerunfailures<16,>=15.1; extra == 'test'
18
18
  Requires-Dist: pytest-rng<1.1,>=1.0.0; extra == 'test'
19
19
  Requires-Dist: pytest-timeout<2.5,>=2.4.0; extra == 'test'
20
- Requires-Dist: pytest-xdist<3.7,>=3.6.1; extra == 'test'
20
+ Requires-Dist: pytest-xdist<3.8,>=3.7.0; extra == 'test'
21
21
  Requires-Dist: pytest<8.4,>=8.3.5; extra == 'test'
22
22
  Requires-Dist: setuptools>=78.0.2; extra == 'test'
23
23
  Provides-Extra: zzz-test-altair
@@ -174,7 +174,7 @@ Requires-Dist: scipy<1.16,>=1.15.3; extra == 'zzz-test-scipy'
174
174
  Provides-Extra: zzz-test-sentinel
175
175
  Provides-Extra: zzz-test-shelve
176
176
  Provides-Extra: zzz-test-slack-sdk
177
- Requires-Dist: aiohttp<3.13,>=3.12.0; extra == 'zzz-test-slack-sdk'
177
+ Requires-Dist: aiohttp<3.12.1,>=3.12.0; extra == 'zzz-test-slack-sdk'
178
178
  Requires-Dist: slack-sdk<3.36,>=3.35.0; extra == 'zzz-test-slack-sdk'
179
179
  Provides-Extra: zzz-test-socket
180
180
  Provides-Extra: zzz-test-sqlalchemy
@@ -8,7 +8,7 @@ requires = ["hatchling"]
8
8
  # dependency groups
9
9
  [dependency-groups]
10
10
  dev = [
11
- "aiohttp >= 3.12.0, < 3.13", # for slack
11
+ "aiohttp >= 3.12.0, < 3.12.1", # for slack
12
12
  "aiosqlite >= 0.21.0, < 0.22",
13
13
  "altair >= 5.5.0, < 5.6",
14
14
  "asyncpg >= 0.30.0, < 0.31", # for sqlalchemy async
@@ -69,7 +69,7 @@ dev = [
69
69
  "whenever >= 0.8.2, < 0.9",
70
70
  # test
71
71
  "coverage-conditional-plugin >= 0.9.0, < 0.10",
72
- "pytest-asyncio >= 0.26.0, < 0.27",
72
+ "pytest-asyncio >= 1.0.0, < 1.1",
73
73
  "pytest-cov >= 6.1.1, < 6.2",
74
74
  "pytest-instafail >= 0.5.0, < 0.6",
75
75
  "pytest-lazy-fixtures >= 1.1.3, < 1.2",
@@ -78,7 +78,7 @@ dev = [
78
78
  "pytest-rerunfailures >= 15.1, < 16",
79
79
  "pytest-rng >= 1.0.0, < 1.1",
80
80
  "pytest-timeout >= 2.4.0, < 2.5",
81
- "pytest-xdist >= 3.6.1, < 3.7",
81
+ "pytest-xdist >= 3.7.0, < 3.8",
82
82
  # CI
83
83
  "win32_setctime >= 1.2.0, < 1.3", # https://github.com/Delgan/loguru/issues/147
84
84
  "setuptools >= 78.1.0", # https://github.com/theY4Kman/pytest-only/issues/14
@@ -93,13 +93,13 @@ dependencies = [
93
93
  name = "dycw-utilities"
94
94
  readme = "README.md"
95
95
  requires-python = ">= 3.12"
96
- version = "0.125.5"
96
+ version = "0.125.7"
97
97
 
98
98
  [project.optional-dependencies]
99
99
  test = [
100
100
  "hypothesis >= 6.131.28, < 6.132",
101
101
  "pytest >= 8.3.5, < 8.4",
102
- "pytest-asyncio >= 0.26.0, < 0.27",
102
+ "pytest-asyncio >= 1.0.0, < 1.1",
103
103
  "pytest-cov >= 6.1.1, < 6.2",
104
104
  "pytest-instafail >= 0.5.0, < 0.6",
105
105
  "pytest-lazy-fixtures >= 1.1.3, < 1.2",
@@ -109,7 +109,7 @@ test = [
109
109
  "pytest-rerunfailures >= 15.1, < 16",
110
110
  "pytest-rng >= 1.0.0, < 1.1",
111
111
  "pytest-timeout >= 2.4.0, < 2.5",
112
- "pytest-xdist >= 3.6.1, < 3.7",
112
+ "pytest-xdist >= 3.7.0, < 3.8",
113
113
  "setuptools >= 78.0.2", # https://github.com/theY4Kman/pytest-only/issues/14
114
114
  ]
115
115
  zzz-test-altair = [
@@ -270,7 +270,7 @@ zzz-test-scipy = ["scipy >= 1.15.3, < 1.16"]
270
270
  zzz-test-sentinel = []
271
271
  zzz-test-shelve = []
272
272
  zzz-test-slack-sdk = [
273
- "aiohttp >= 3.12.0, < 3.13", # for slack
273
+ "aiohttp >= 3.12.0, < 3.12.1", # for slack
274
274
  "slack-sdk >= 3.35.0, < 3.36",
275
275
  ]
276
276
  zzz-test-socket = []
@@ -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.125.5"
337
+ current_version = "0.125.7"
338
338
 
339
339
  [[tool.bumpversion.files]]
340
340
  filename = "src/utilities/__init__.py"
@@ -436,7 +436,6 @@ addopts = [
436
436
  "--strict-markers",
437
437
  "--timeout=300",
438
438
  ]
439
- asyncio_default_fixture_loop_scope = "function"
440
439
  asyncio_mode = "auto"
441
440
  filterwarnings = [
442
441
  "error",
@@ -322,6 +322,27 @@ class TestInfiniteLooper:
322
322
  assert 0 <= looper.counter <= 5
323
323
  assert 3 <= looper.teardowns <= 5
324
324
 
325
+ async def test_blacklisted_errors(self) -> None:
326
+ class CustomError(Exception): ...
327
+
328
+ @dataclass(kw_only=True)
329
+ class Example(InfiniteLooper[None]):
330
+ counter: int = 0
331
+
332
+ @override
333
+ async def _core(self) -> None:
334
+ self.counter += 1
335
+ if self.counter >= 5:
336
+ raise CustomError
337
+
338
+ @override
339
+ def _yield_blacklisted_errors(self) -> Iterator[type[Exception]]:
340
+ yield CustomError
341
+
342
+ with raises(CustomError):
343
+ async with Example(sleep_core=0.05):
344
+ ...
345
+
325
346
  async def test_cancelled_error(self) -> None:
326
347
  @dataclass(kw_only=True)
327
348
  class Example(InfiniteLooper[None]):
@@ -417,7 +438,7 @@ class TestInfiniteLooper:
417
438
  self._set_event(event=n % 2 == 0)
418
439
 
419
440
  @override
420
- def _error_upon_core(self, error: Exception, /) -> None:
441
+ def _error_upon_core(self, error: BaseException, /) -> None:
421
442
  if isinstance(error, TrueError):
422
443
  self.true_counter += 1
423
444
  elif isinstance(error, FalseError):
@@ -440,6 +461,34 @@ class TestInfiniteLooper:
440
461
  assert looper.true_counter == 0
441
462
  assert looper.false_counter >= 1
442
463
 
464
+ async def test_whitelisted_errors(self) -> None:
465
+ class CustomError(BaseException): ...
466
+
467
+ @dataclass(kw_only=True)
468
+ class Example(InfiniteLooper[None]):
469
+ initializations: int = 0
470
+ counter: int = 0
471
+
472
+ @override
473
+ async def _initialize(self) -> None:
474
+ self.initializations += 1
475
+ self.counter = 0
476
+
477
+ @override
478
+ async def _core(self) -> None:
479
+ self.counter += 1
480
+ if self.counter >= 5:
481
+ raise CustomError
482
+
483
+ @override
484
+ def _yield_whitelisted_errors(self) -> Iterator[type[BaseException]]:
485
+ yield CustomError
486
+
487
+ async with timeout(1.0), Example(sleep_core=0.05, sleep_restart=0.05) as looper:
488
+ ...
489
+ assert 3 <= looper.initializations <= 7
490
+ assert 0 <= looper.counter <= 8
491
+
443
492
  async def test_with_coroutine_self_set_event(self) -> None:
444
493
  external: int = 0
445
494
 
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.125.5"
3
+ __version__ = "0.125.7"
@@ -400,6 +400,8 @@ class InfiniteLooper(ABC, Generic[THashable]):
400
400
 
401
401
  async def _run_looper_by_itself(self) -> None:
402
402
  """Run the looper by itself."""
403
+ whitelisted = tuple(self._yield_whitelisted_errors())
404
+ blacklisted = tuple(self._yield_blacklisted_errors())
403
405
  while True:
404
406
  try:
405
407
  self._reset_events()
@@ -423,12 +425,21 @@ class InfiniteLooper(ABC, Generic[THashable]):
423
425
  self._raise_error(event)
424
426
  except InfiniteLooperError:
425
427
  raise
426
- except Exception as error: # noqa: BLE001
427
- self._error_upon_core(error)
428
+ except BaseException as error1:
429
+ match error1:
430
+ case Exception():
431
+ if isinstance(error1, blacklisted):
432
+ raise
433
+ case BaseException():
434
+ if not isinstance(error1, whitelisted):
435
+ raise
436
+ case _ as never:
437
+ assert_never(never)
438
+ self._error_upon_core(error1)
428
439
  try:
429
440
  await self._teardown()
430
- except Exception as error: # noqa: BLE001
431
- self._error_upon_teardown(error)
441
+ except BaseException as error2: # noqa: BLE001
442
+ self._error_upon_teardown(error2)
432
443
  finally:
433
444
  await self._run_sleep(self.sleep_restart)
434
445
 
@@ -471,7 +482,7 @@ class InfiniteLooper(ABC, Generic[THashable]):
471
482
  self._sleep_restart_desc,
472
483
  )
473
484
 
474
- def _error_upon_core(self, error: Exception, /) -> None:
485
+ def _error_upon_core(self, error: BaseException, /) -> None:
475
486
  """Handle any errors upon running the core function."""
476
487
  if self.logger is not None:
477
488
  getLogger(name=self.logger).error(
@@ -481,7 +492,7 @@ class InfiniteLooper(ABC, Generic[THashable]):
481
492
  self._sleep_restart_desc,
482
493
  )
483
494
 
484
- def _error_upon_teardown(self, error: Exception, /) -> None:
495
+ def _error_upon_teardown(self, error: BaseException, /) -> None:
485
496
  """Handle any errors upon tearing down the looper."""
486
497
  if self.logger is not None:
487
498
  getLogger(name=self.logger).error(
@@ -561,6 +572,14 @@ class InfiniteLooper(ABC, Generic[THashable]):
561
572
  """Yield any other loopers which must also be run."""
562
573
  yield from []
563
574
 
575
+ def _yield_blacklisted_errors(self) -> Iterator[type[Exception]]:
576
+ """Yield any exceptions which the looper ought to catch terminate upon."""
577
+ yield from []
578
+
579
+ def _yield_whitelisted_errors(self) -> Iterator[type[BaseException]]:
580
+ """Yield any exceptions which the looper ought to catch and allow running."""
581
+ yield from []
582
+
564
583
 
565
584
  @dataclass(kw_only=True, slots=True)
566
585
  class InfiniteLooperError(Exception):
@@ -20,10 +20,10 @@ class ImpossibleCaseError(Exception):
20
20
  ##
21
21
 
22
22
 
23
- def repr_error(error: MaybeType[Exception], /) -> str:
23
+ def repr_error(error: MaybeType[BaseException], /) -> str:
24
24
  """Get a string representation of an error."""
25
25
  match error:
26
- case Exception() as error_obj:
26
+ case BaseException() as error_obj:
27
27
  return f"{error_obj.__class__.__name__}({error_obj})"
28
28
  case type() as error_cls:
29
29
  return error_cls.__name__