dycw-utilities 0.157.0__tar.gz → 0.157.2__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 (209) hide show
  1. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/PKG-INFO +1 -1
  2. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/pyproject.toml +2 -2
  3. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_eventkit.py +3 -7
  4. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_logging.py +1 -7
  5. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/__init__.py +1 -1
  6. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/eventkit.py +2 -5
  7. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/fastapi.py +8 -3
  8. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/logging.py +4 -12
  9. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/slack_sdk.py +8 -3
  10. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/sqlalchemy.py +6 -2
  11. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/sqlalchemy_polars.py +4 -0
  12. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/.gitignore +0 -0
  13. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/LICENSE +0 -0
  14. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/README.md +0 -0
  15. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/__init__.py +0 -0
  16. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/conftest.py +0 -0
  17. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/__init__.py +0 -0
  18. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_missing/__init__.py +0 -0
  19. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_missing/module.py +0 -0
  20. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_with/__init__.py +0 -0
  21. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_with/outer_1.py +0 -0
  22. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_with/outer_2.py +0 -0
  23. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  24. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  25. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  26. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  27. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_without/__init__.py +0 -0
  28. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_without/module_1.py +0 -0
  29. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_without/module_2.py +0 -0
  30. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/standalone.py +0 -0
  31. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/with_imports.py +0 -0
  32. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  33. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  34. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  35. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  36. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  37. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  38. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  39. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  40. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_altair.py +0 -0
  41. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_asyncio.py +0 -0
  42. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_atomicwrites.py +0 -0
  43. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_atools.py +0 -0
  44. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_cachetools.py +0 -0
  45. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_click.py +0 -0
  46. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_concurrent.py +0 -0
  47. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_contextlib.py +0 -0
  48. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_contextvars.py +0 -0
  49. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_cryptography.py +0 -0
  50. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_cvxpy.py +0 -0
  51. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_dataclasses.py +0 -0
  52. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_enum.py +0 -0
  53. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_errors.py +0 -0
  54. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_fastapi.py +0 -0
  55. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_fpdf2.py +0 -0
  56. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_functions.py +0 -0
  57. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_functools.py +0 -0
  58. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_getpass.py +0 -0
  59. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_gzip.py +0 -0
  60. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_hashlib.py +0 -0
  61. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_http.py +0 -0
  62. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_hypothesis.py +0 -0
  63. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_importlib.py +0 -0
  64. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_inflect.py +0 -0
  65. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_ipython.py +0 -0
  66. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_iterables.py +0 -0
  67. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_json.py +0 -0
  68. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_jupyter.py +0 -0
  69. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_libcst.py +0 -0
  70. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_lightweight_charts.py +0 -0
  71. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_math.py +0 -0
  72. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_memory_profiler.py +0 -0
  73. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_modules.py +0 -0
  74. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_more_itertools.py +0 -0
  75. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_numpy.py +0 -0
  76. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_objects/__init__.py +0 -0
  77. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_objects/objects.py +0 -0
  78. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_operator.py +0 -0
  79. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_optuna.py +0 -0
  80. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_orjson.py +0 -0
  81. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_os.py +0 -0
  82. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_parse.py +0 -0
  83. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_pathlib.py +0 -0
  84. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_pickle.py +0 -0
  85. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_platform.py +0 -0
  86. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_polars.py +0 -0
  87. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_polars_ols.py +0 -0
  88. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_postgres.py +0 -0
  89. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_pottery.py +0 -0
  90. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_pqdm.py +0 -0
  91. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_psutil.py +0 -0
  92. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_pyinstrument.py +0 -0
  93. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_pytest.py +0 -0
  94. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_pytest_randomly.py +0 -0
  95. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_pytest_regressions.py +0 -0
  96. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_random.py +0 -0
  97. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_re.py +0 -0
  98. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_redis.py +0 -0
  99. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_reprlib.py +0 -0
  100. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_scipy.py +0 -0
  101. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_sentinel.py +0 -0
  102. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_shelve.py +0 -0
  103. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_slack_sdk.py +0 -0
  104. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_socket.py +0 -0
  105. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_sqlalchemy.py +0 -0
  106. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_sqlalchemy_polars.py +0 -0
  107. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_statsmodels.py +0 -0
  108. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_string.py +0 -0
  109. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_tempfile.py +0 -0
  110. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_text.py +0 -0
  111. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_threading.py +0 -0
  112. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_timer.py +0 -0
  113. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_traceback.py +0 -0
  114. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_typed_settings.py +0 -0
  115. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_types.py +0 -0
  116. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_typing.py +0 -0
  117. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_typing_funcs/__init__.py +0 -0
  118. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_typing_funcs/no_future.py +0 -0
  119. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_typing_funcs/with_future.py +0 -0
  120. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_tzdata.py +0 -0
  121. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_tzlocal.py +0 -0
  122. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_uuid.py +0 -0
  123. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_version.py +0 -0
  124. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_warnings.py +0 -0
  125. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_whenever.py +0 -0
  126. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_zipfile.py +0 -0
  127. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_zoneinfo.py +0 -0
  128. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/altair.py +0 -0
  129. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/asyncio.py +0 -0
  130. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/atomicwrites.py +0 -0
  131. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/atools.py +0 -0
  132. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/cachetools.py +0 -0
  133. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/click.py +0 -0
  134. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/concurrent.py +0 -0
  135. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/contextlib.py +0 -0
  136. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/contextvars.py +0 -0
  137. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/cryptography.py +0 -0
  138. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/cvxpy.py +0 -0
  139. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/dataclasses.py +0 -0
  140. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/enum.py +0 -0
  141. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/errors.py +0 -0
  142. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/fpdf2.py +0 -0
  143. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/functions.py +0 -0
  144. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/functools.py +0 -0
  145. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/getpass.py +0 -0
  146. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/gzip.py +0 -0
  147. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/hashlib.py +0 -0
  148. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/http.py +0 -0
  149. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/hypothesis.py +0 -0
  150. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/importlib.py +0 -0
  151. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/inflect.py +0 -0
  152. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/ipython.py +0 -0
  153. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/iterables.py +0 -0
  154. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/json.py +0 -0
  155. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/jupyter.py +0 -0
  156. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/libcst.py +0 -0
  157. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/lightweight_charts.py +0 -0
  158. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/math.py +0 -0
  159. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/memory_profiler.py +0 -0
  160. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/modules.py +0 -0
  161. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/more_itertools.py +0 -0
  162. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/numpy.py +0 -0
  163. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/operator.py +0 -0
  164. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/optuna.py +0 -0
  165. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/orjson.py +0 -0
  166. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/os.py +0 -0
  167. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/parse.py +0 -0
  168. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pathlib.py +0 -0
  169. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pickle.py +0 -0
  170. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/platform.py +0 -0
  171. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/polars.py +0 -0
  172. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/polars_ols.py +0 -0
  173. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/postgres.py +0 -0
  174. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pottery.py +0 -0
  175. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pqdm.py +0 -0
  176. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/psutil.py +0 -0
  177. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/py.typed +0 -0
  178. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pyinstrument.py +0 -0
  179. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pytest.py +0 -0
  180. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pytest_plugins/__init__.py +0 -0
  181. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
  182. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
  183. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pytest_regressions.py +0 -0
  184. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/random.py +0 -0
  185. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/re.py +0 -0
  186. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/redis.py +0 -0
  187. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/reprlib.py +0 -0
  188. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/scipy.py +0 -0
  189. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/sentinel.py +0 -0
  190. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/shelve.py +0 -0
  191. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/socket.py +0 -0
  192. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/statsmodels.py +0 -0
  193. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/string.py +0 -0
  194. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/tempfile.py +0 -0
  195. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/text.py +0 -0
  196. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/threading.py +0 -0
  197. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/timer.py +0 -0
  198. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/traceback.py +0 -0
  199. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/typed_settings.py +0 -0
  200. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/types.py +0 -0
  201. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/typing.py +0 -0
  202. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/tzdata.py +0 -0
  203. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/tzlocal.py +0 -0
  204. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/uuid.py +0 -0
  205. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/version.py +0 -0
  206. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/warnings.py +0 -0
  207. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/whenever.py +0 -0
  208. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/zipfile.py +0 -0
  209. {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/zoneinfo.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dycw-utilities
3
- Version: 0.157.0
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
@@ -227,7 +227,7 @@ dependencies = [
227
227
  name = "dycw-utilities"
228
228
  readme = "README.md"
229
229
  requires-python = ">= 3.12"
230
- version = "0.157.0"
230
+ version = "0.157.2"
231
231
 
232
232
  [project.entry-points.pytest11]
233
233
  pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
@@ -259,7 +259,7 @@ test = [
259
259
  # bump-my-version
260
260
  [tool.bumpversion]
261
261
  allow_dirty = true
262
- current_version = "0.157.0"
262
+ current_version = "0.157.2"
263
263
 
264
264
  [[tool.bumpversion.files]]
265
265
  filename = "src/utilities/__init__.py"
@@ -65,17 +65,13 @@ class TestAddListener:
65
65
 
66
66
  def listener_sync() -> None: ...
67
67
 
68
- _ = add_listener(
69
- event, listener_sync, logger=str(root), logger_allow_pytest=True
70
- )
68
+ _ = add_listener(event, listener_sync, logger=str(root))
71
69
  case "async":
72
70
 
73
71
  async def listener_async() -> None:
74
72
  await sleep(0.01)
75
73
 
76
- _ = add_listener(
77
- event, listener_async, logger=str(root), logger_allow_pytest=True
78
- )
74
+ _ = add_listener(event, listener_async, logger=str(root))
79
75
 
80
76
  event.emit(None)
81
77
  await sleep(0.01)
@@ -237,7 +233,7 @@ class TestLiftListener:
237
233
  LiftListenerError,
238
234
  match="Synchronous listener .* cannot be paired with an asynchronous error handler .*",
239
235
  ):
240
- _ = lift_listener(listener, Event(), error=error, logger_allow_pytest=True)
236
+ _ = lift_listener(listener, Event(), error=error)
241
237
 
242
238
 
243
239
  class TestLiftedEvent:
@@ -78,7 +78,7 @@ class TestBasicConfig:
78
78
  ) -> None:
79
79
  name = unique_str()
80
80
  with set_log_factory:
81
- basic_config(obj=name, filters=filters, plain=plain, allow_pytest=True)
81
+ basic_config(obj=name, filters=filters, plain=plain)
82
82
  getLogger(name).warning("message")
83
83
  record = one(r for r in caplog.records if r.name == name)
84
84
  assert record.message == "message"
@@ -535,11 +535,5 @@ class TestToLogger:
535
535
  name = unique_str()
536
536
  assert to_logger(name).name == name
537
537
 
538
- @mark.parametrize(("allow_pytest", "expected"), [param(False, 1), param(True, 0)])
539
- def test_allow_pytest(self, *, allow_pytest: bool, expected: int) -> None:
540
- name = unique_str()
541
- logger = to_logger(name, allow_pytest=allow_pytest)
542
- assert len(logger.filters) == expected
543
-
544
538
  def test_none(self) -> None:
545
539
  assert to_logger(None).name == "root"
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.157.0"
3
+ __version__ = "0.157.2"
@@ -48,7 +48,6 @@ def add_listener[E: Event, F: Callable](
48
48
  error: Callable[[Event, BaseException], MaybeCoro[None]] | None = None,
49
49
  ignore: TypeLike[BaseException] | None = None,
50
50
  logger: LoggerLike | None = None,
51
- logger_allow_pytest: bool = False,
52
51
  decorators: MaybeIterable[Callable[[F], F]] | None = None,
53
52
  done: Callable[..., MaybeCoro[None]] | None = None,
54
53
  keep_ref: bool = False,
@@ -60,7 +59,6 @@ def add_listener[E: Event, F: Callable](
60
59
  error=error,
61
60
  ignore=ignore,
62
61
  logger=logger,
63
- logger_allow_pytest=logger_allow_pytest,
64
62
  decorators=decorators,
65
63
  )
66
64
  return cast("E", event.connect(lifted, done=done, keep_ref=keep_ref))
@@ -286,7 +284,6 @@ def lift_listener[F1: Callable[..., MaybeCoro[None]], F2: Callable](
286
284
  error: Callable[[Event, BaseException], MaybeCoro[None]] | None = None,
287
285
  ignore: TypeLike[BaseException] | None = None,
288
286
  logger: LoggerLike | None = None,
289
- logger_allow_pytest: bool = False,
290
287
  decorators: MaybeIterable[Callable[[F2], F2]] | None = None,
291
288
  ) -> F1:
292
289
  match error, bool(iscoroutinefunction(listener)):
@@ -300,7 +297,7 @@ def lift_listener[F1: Callable[..., MaybeCoro[None]], F2: Callable](
300
297
  except Exception as exc: # noqa: BLE001
301
298
  if (ignore is not None) and isinstance(exc, ignore):
302
299
  return
303
- to_logger(logger, allow_pytest=logger_allow_pytest).exception("")
300
+ to_logger(logger).exception("")
304
301
 
305
302
  lifted = listener_no_error_sync
306
303
 
@@ -314,7 +311,7 @@ def lift_listener[F1: Callable[..., MaybeCoro[None]], F2: Callable](
314
311
  except Exception as exc: # noqa: BLE001
315
312
  if (ignore is not None) and isinstance(exc, ignore):
316
313
  return
317
- to_logger(logger, allow_pytest=logger_allow_pytest).exception("")
314
+ to_logger(logger).exception("")
318
315
 
319
316
  lifted = listener_no_error_async
320
317
  case _, _:
@@ -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()
@@ -37,7 +37,6 @@ from utilities.atomicwrites import move_many
37
37
  from utilities.dataclasses import replace_non_sentinel
38
38
  from utilities.errors import ImpossibleCaseError
39
39
  from utilities.iterables import OneEmptyError, always_iterable, one
40
- from utilities.os import is_pytest
41
40
  from utilities.pathlib import ensure_suffix, to_path
42
41
  from utilities.re import (
43
42
  ExtractGroupError,
@@ -96,7 +95,6 @@ def basic_config(
96
95
  filters: MaybeIterable[_FilterType] | None = None,
97
96
  plain: bool = False,
98
97
  color_field_styles: Mapping[str, _FieldStyleKeys] | None = None,
99
- allow_pytest: bool = False,
100
98
  ) -> None:
101
99
  """Do the basic config."""
102
100
  match obj:
@@ -122,7 +120,7 @@ def basic_config(
122
120
  )
123
121
  case str() as name:
124
122
  basic_config(
125
- obj=to_logger(name, allow_pytest=allow_pytest),
123
+ obj=to_logger(name),
126
124
  format_=format_,
127
125
  prefix=prefix,
128
126
  hostname=hostname,
@@ -262,7 +260,6 @@ def setup_logging(
262
260
  console_level: LogLevel = "INFO",
263
261
  console_prefix: str = "❯", # noqa: RUF001
264
262
  console_filters: MaybeIterable[_FilterType] | None = None,
265
- allow_pytest: bool = False,
266
263
  files_dir: MaybeCallablePathLike = Path.cwd,
267
264
  files_max_bytes: int = _DEFAULT_MAX_BYTES,
268
265
  files_when: _When = _DEFAULT_WHEN,
@@ -279,7 +276,7 @@ def setup_logging(
279
276
  level=console_level,
280
277
  filters=console_filters,
281
278
  )
282
- logger_use = to_logger(logger, allow_pytest=allow_pytest)
279
+ logger_use = to_logger(logger)
283
280
  name = logger_use.name
284
281
  levels: list[LogLevel] = ["DEBUG", "INFO", "ERROR"]
285
282
  for level in levels:
@@ -578,18 +575,13 @@ class _Rotation:
578
575
  ##
579
576
 
580
577
 
581
- def to_logger(
582
- logger: LoggerLike | None = None, /, *, allow_pytest: bool = False
583
- ) -> Logger:
578
+ def to_logger(logger: LoggerLike | None = None, /) -> Logger:
584
579
  """Convert to a logger."""
585
580
  match logger:
586
581
  case Logger():
587
582
  return logger
588
583
  case str() | None:
589
- logger = getLogger(logger)
590
- if not allow_pytest:
591
- _ = logger.addFilter(lambda _: not is_pytest())
592
- return logger
584
+ return getLogger(logger)
593
585
  case never:
594
586
  assert_never(never)
595
587
 
@@ -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)
@@ -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(