dycw-utilities 0.147.0__tar.gz → 0.147.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 (211) hide show
  1. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/PKG-INFO +1 -1
  2. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/pyproject.toml +2 -2
  3. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_traceback.py +13 -6
  4. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/__init__.py +1 -1
  5. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/pottery.py +3 -1
  6. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/slack_sdk.py +1 -1
  7. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/traceback.py +13 -3
  8. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/.gitignore +0 -0
  9. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/LICENSE +0 -0
  10. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/README.md +0 -0
  11. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/__init__.py +0 -0
  12. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/conftest.py +0 -0
  13. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/modules/__init__.py +0 -0
  14. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/modules/package_missing/__init__.py +0 -0
  15. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/modules/package_missing/module.py +0 -0
  16. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/modules/package_with/__init__.py +0 -0
  17. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/modules/package_with/outer_1.py +0 -0
  18. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/modules/package_with/outer_2.py +0 -0
  19. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  20. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  21. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  22. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  23. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/modules/package_without/__init__.py +0 -0
  24. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/modules/package_without/module_1.py +0 -0
  25. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/modules/package_without/module_2.py +0 -0
  26. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/modules/standalone.py +0 -0
  27. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/modules/with_imports.py +0 -0
  28. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  29. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  30. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  31. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  32. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  33. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  34. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  35. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  36. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_altair.py +0 -0
  37. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_asyncio.py +0 -0
  38. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_atomicwrites.py +0 -0
  39. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_atools.py +0 -0
  40. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_cachetools.py +0 -0
  41. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_click.py +0 -0
  42. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_concurrent.py +0 -0
  43. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_contextlib.py +0 -0
  44. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_contextvars.py +0 -0
  45. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_cryptography.py +0 -0
  46. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_cvxpy.py +0 -0
  47. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_dataclasses.py +0 -0
  48. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_enum.py +0 -0
  49. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_errors.py +0 -0
  50. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_eventkit.py +0 -0
  51. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_fastapi.py +0 -0
  52. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_fpdf2.py +0 -0
  53. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_functions.py +0 -0
  54. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_functools.py +0 -0
  55. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_getpass.py +0 -0
  56. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_gzip.py +0 -0
  57. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_hashlib.py +0 -0
  58. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_http.py +0 -0
  59. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_hypothesis.py +0 -0
  60. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_importlib.py +0 -0
  61. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_inflect.py +0 -0
  62. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_ipython.py +0 -0
  63. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_iterables.py +0 -0
  64. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_json.py +0 -0
  65. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_jupyter.py +0 -0
  66. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_libcst.py +0 -0
  67. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_lightweight_charts.py +0 -0
  68. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_logging.py +0 -0
  69. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_math.py +0 -0
  70. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_memory_profiler.py +0 -0
  71. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_modules.py +0 -0
  72. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_more_itertools.py +0 -0
  73. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_numpy.py +0 -0
  74. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_objects/__init__.py +0 -0
  75. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_objects/objects.py +0 -0
  76. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_operator.py +0 -0
  77. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_optuna.py +0 -0
  78. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_orjson.py +0 -0
  79. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_os.py +0 -0
  80. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_parse.py +0 -0
  81. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_pathlib.py +0 -0
  82. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_period.py +0 -0
  83. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_pickle.py +0 -0
  84. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_platform.py +0 -0
  85. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_polars.py +0 -0
  86. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_polars_ols.py +0 -0
  87. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_postgres.py +0 -0
  88. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_pottery.py +0 -0
  89. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_pqdm.py +0 -0
  90. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_psutil.py +0 -0
  91. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_pyinstrument.py +0 -0
  92. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_pytest.py +0 -0
  93. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_pytest_randomly.py +0 -0
  94. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_pytest_regressions.py +0 -0
  95. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_random.py +0 -0
  96. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_re.py +0 -0
  97. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_redis.py +0 -0
  98. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_reprlib.py +0 -0
  99. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_scipy.py +0 -0
  100. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_sentinel.py +0 -0
  101. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_shelve.py +0 -0
  102. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_slack_sdk.py +0 -0
  103. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_socket.py +0 -0
  104. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_sqlalchemy.py +0 -0
  105. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_sqlalchemy_polars.py +0 -0
  106. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_statsmodels.py +0 -0
  107. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_string.py +0 -0
  108. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_tempfile.py +0 -0
  109. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_text.py +0 -0
  110. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_threading.py +0 -0
  111. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_timer.py +0 -0
  112. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_typed_settings.py +0 -0
  113. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_types.py +0 -0
  114. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_typing.py +0 -0
  115. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_typing_funcs/__init__.py +0 -0
  116. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_typing_funcs/no_future.py +0 -0
  117. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_typing_funcs/with_future.py +0 -0
  118. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_tzdata.py +0 -0
  119. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_tzlocal.py +0 -0
  120. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_uuid.py +0 -0
  121. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_version.py +0 -0
  122. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_warnings.py +0 -0
  123. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_whenever.py +0 -0
  124. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_zipfile.py +0 -0
  125. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/tests/test_zoneinfo.py +0 -0
  126. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/altair.py +0 -0
  127. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/asyncio.py +0 -0
  128. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/atomicwrites.py +0 -0
  129. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/atools.py +0 -0
  130. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/cachetools.py +0 -0
  131. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/click.py +0 -0
  132. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/concurrent.py +0 -0
  133. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/contextlib.py +0 -0
  134. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/contextvars.py +0 -0
  135. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/cryptography.py +0 -0
  136. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/cvxpy.py +0 -0
  137. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/dataclasses.py +0 -0
  138. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/enum.py +0 -0
  139. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/errors.py +0 -0
  140. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/eventkit.py +0 -0
  141. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/fastapi.py +0 -0
  142. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/fpdf2.py +0 -0
  143. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/functions.py +0 -0
  144. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/functools.py +0 -0
  145. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/getpass.py +0 -0
  146. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/gzip.py +0 -0
  147. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/hashlib.py +0 -0
  148. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/http.py +0 -0
  149. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/hypothesis.py +0 -0
  150. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/importlib.py +0 -0
  151. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/inflect.py +0 -0
  152. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/ipython.py +0 -0
  153. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/iterables.py +0 -0
  154. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/json.py +0 -0
  155. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/jupyter.py +0 -0
  156. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/libcst.py +0 -0
  157. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/lightweight_charts.py +0 -0
  158. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/logging.py +0 -0
  159. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/math.py +0 -0
  160. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/memory_profiler.py +0 -0
  161. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/modules.py +0 -0
  162. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/more_itertools.py +0 -0
  163. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/numpy.py +0 -0
  164. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/operator.py +0 -0
  165. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/optuna.py +0 -0
  166. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/orjson.py +0 -0
  167. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/os.py +0 -0
  168. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/parse.py +0 -0
  169. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/pathlib.py +0 -0
  170. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/period.py +0 -0
  171. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/pickle.py +0 -0
  172. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/platform.py +0 -0
  173. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/polars.py +0 -0
  174. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/polars_ols.py +0 -0
  175. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/postgres.py +0 -0
  176. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/pqdm.py +0 -0
  177. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/psutil.py +0 -0
  178. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/py.typed +0 -0
  179. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/pyinstrument.py +0 -0
  180. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/pytest.py +0 -0
  181. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/pytest_plugins/__init__.py +0 -0
  182. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
  183. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
  184. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/pytest_regressions.py +0 -0
  185. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/random.py +0 -0
  186. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/re.py +0 -0
  187. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/redis.py +0 -0
  188. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/reprlib.py +0 -0
  189. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/scipy.py +0 -0
  190. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/sentinel.py +0 -0
  191. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/shelve.py +0 -0
  192. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/socket.py +0 -0
  193. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/sqlalchemy.py +0 -0
  194. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/sqlalchemy_polars.py +0 -0
  195. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/statsmodels.py +0 -0
  196. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/string.py +0 -0
  197. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/tempfile.py +0 -0
  198. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/text.py +0 -0
  199. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/threading.py +0 -0
  200. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/timer.py +0 -0
  201. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/typed_settings.py +0 -0
  202. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/types.py +0 -0
  203. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/typing.py +0 -0
  204. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/tzdata.py +0 -0
  205. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/tzlocal.py +0 -0
  206. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/uuid.py +0 -0
  207. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/version.py +0 -0
  208. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/warnings.py +0 -0
  209. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/whenever.py +0 -0
  210. {dycw_utilities-0.147.0 → dycw_utilities-0.147.2}/src/utilities/zipfile.py +0 -0
  211. {dycw_utilities-0.147.0 → dycw_utilities-0.147.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.147.0
3
+ Version: 0.147.2
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -102,7 +102,7 @@ dependencies = [
102
102
  name = "dycw-utilities"
103
103
  readme = "README.md"
104
104
  requires-python = ">= 3.12"
105
- version = "0.147.0"
105
+ version = "0.147.2"
106
106
 
107
107
  [project.entry-points.pytest11]
108
108
  pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
@@ -135,7 +135,7 @@ test = [
135
135
  # bump-my-version
136
136
  [tool.bumpversion]
137
137
  allow_dirty = true
138
- current_version = "0.147.0"
138
+ current_version = "0.147.2"
139
139
 
140
140
  [[tool.bumpversion.files]]
141
141
  filename = "src/utilities/__init__.py"
@@ -8,7 +8,7 @@ from typing import TYPE_CHECKING
8
8
 
9
9
  from hypothesis import given
10
10
  from hypothesis.strategies import sampled_from
11
- from pytest import CaptureFixture, raises
11
+ from pytest import CaptureFixture, mark, param, raises
12
12
 
13
13
  from utilities.iterables import one
14
14
  from utilities.traceback import (
@@ -17,10 +17,14 @@ from utilities.traceback import (
17
17
  format_exception_stack,
18
18
  make_except_hook,
19
19
  )
20
+ from utilities.tzlocal import LOCAL_TIME_ZONE_NAME
21
+ from utilities.whenever import get_now
20
22
 
21
23
  if TYPE_CHECKING:
22
24
  from collections.abc import Iterable
23
25
 
26
+ from utilities.types import MaybeCallableZonedDateTime
27
+
24
28
 
25
29
  class TestFormatExceptionStack:
26
30
  @classmethod
@@ -41,15 +45,18 @@ class TestFormatExceptionStack:
41
45
  result = format_exception_stack(error).splitlines()
42
46
  self._assert_lines(result)
43
47
 
44
- def test_header(self) -> None:
48
+ @mark.parametrize("start", [param(get_now), param(None)])
49
+ def test_header(self, *, start: MaybeCallableZonedDateTime) -> None:
45
50
  try:
46
51
  _ = self.func(1, 2, 3, 4, c=5, d=6, e=7)
47
52
  except AssertionError as error:
48
- result = format_exception_stack(error, header=True).splitlines()
53
+ result = format_exception_stack(
54
+ error, header=True, start=start
55
+ ).splitlines()
49
56
  patterns = [
50
- r"^Date/time \| .+$",
51
- r"^Started \| .+$",
52
- r"^Duration \| .+$",
57
+ rf"^Date/time \| \d{{8}}T\d{{6}}\[{LOCAL_TIME_ZONE_NAME}\]$",
58
+ rf"^Started \| (\d{{8}}T\d{{6}}\[{LOCAL_TIME_ZONE_NAME}\]|)$",
59
+ r"^Duration \| (-?PT\d+\.\d+S|)$",
53
60
  r"^User \| .+$",
54
61
  r"^Host \| .+$",
55
62
  r"^Process ID \| \d+$",
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.147.0"
3
+ __version__ = "0.147.2"
@@ -175,7 +175,9 @@ async def _get_first_available_lock(
175
175
  )
176
176
  async with timeout_td(timeout, error=error): # skipif-ci-and-not-linux
177
177
  while True:
178
- if (result := await _get_first_available_lock_if_any(locks)) is not None:
178
+ if (
179
+ (result := await _get_first_available_lock_if_any(locks)) is not None
180
+ ) and (await result.locked() > 0.0):
179
181
  return result
180
182
  await sleep_td(sleep)
181
183
 
@@ -66,7 +66,7 @@ class SendToSlackError(Exception):
66
66
  def __str__(self) -> str:
67
67
  code = self.response.status_code # pragma: no cover
68
68
  phrase = HTTPStatus(code).phrase # pragma: no cover
69
- return f"Error sending to Slack:\n\n{self.text}\n\n{code}: {phrase}" # pragma: no cover
69
+ return f"Error sending to Slack; got error code {code} ({phrase})" # pragma: no cover
70
70
 
71
71
 
72
72
  __all__ = ["SendToSlackError", "send_to_slack", "send_to_slack_async"]
@@ -6,6 +6,7 @@ from dataclasses import dataclass
6
6
  from functools import partial
7
7
  from getpass import getuser
8
8
  from itertools import repeat
9
+ from logging import exception
9
10
  from os import getpid
10
11
  from pathlib import Path
11
12
  from socket import gethostname
@@ -26,6 +27,7 @@ from utilities.reprlib import (
26
27
  RICH_MAX_WIDTH,
27
28
  yield_mapping_repr,
28
29
  )
30
+ from utilities.tzlocal import LOCAL_TIME_ZONE_NAME
29
31
  from utilities.version import get_version
30
32
  from utilities.whenever import (
31
33
  format_compact,
@@ -98,7 +100,10 @@ def _yield_header_lines(
98
100
  now = get_now_local()
99
101
  start_use = to_zoned_date_time(date_time=start)
100
102
  yield f"Date/time | {format_compact(now)}"
101
- start_str = "" if start_use is None else format_compact(start_use)
103
+ if start_use is None:
104
+ start_str = ""
105
+ else:
106
+ start_str = format_compact(start_use.to_tz(LOCAL_TIME_ZONE_NAME))
102
107
  yield f"Started | {start_str}"
103
108
  delta = None if start_use is None else (now - start_use)
104
109
  delta_str = "" if delta is None else delta.format_common_iso()
@@ -277,9 +282,14 @@ def _make_except_hook_inner(
277
282
  with writer(path, overwrite=True) as temp:
278
283
  _ = temp.write_text(full)
279
284
  if slack_url is not None: # pragma: no cover
280
- from utilities.slack_sdk import send_to_slack
285
+ from utilities.slack_sdk import SendToSlackError, send_to_slack
286
+
287
+ try:
288
+ send_to_slack(slack_url, f"```{slim}```")
289
+ except SendToSlackError as error:
290
+ msg = str(error)
291
+ exception(msg) # noqa: LOG015
281
292
 
282
- send_to_slack(slack_url, f"```{slim}```")
283
293
  if to_bool(bool_=pudb): # pragma: no cover
284
294
  from pudb import post_mortem
285
295