dycw-utilities 0.131.2__tar.gz → 0.131.3__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 (220) hide show
  1. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/PKG-INFO +4 -45
  2. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/pyproject.toml +9 -49
  3. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_tzlocal.py +5 -1
  4. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_whenever2.py +0 -6
  5. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/__init__.py +1 -1
  6. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/altair.py +1 -4
  7. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/fastapi.py +2 -3
  8. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/fpdf2.py +2 -2
  9. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/hypothesis.py +2 -4
  10. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/lightweight_charts.py +1 -2
  11. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/logging.py +2 -4
  12. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/orjson.py +0 -2
  13. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/pickle.py +2 -2
  14. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/pydantic.py +2 -2
  15. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/pyinstrument.py +1 -2
  16. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/pytest.py +1 -2
  17. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/traceback.py +3 -7
  18. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/tzlocal.py +6 -1
  19. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/whenever2.py +2 -20
  20. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/zoneinfo.py +2 -2
  21. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/.gitignore +0 -0
  22. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/LICENSE +0 -0
  23. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/README.md +0 -0
  24. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/__init__.py +0 -0
  25. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/conftest.py +0 -0
  26. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/modules/__init__.py +0 -0
  27. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/modules/package_missing/__init__.py +0 -0
  28. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/modules/package_missing/module.py +0 -0
  29. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/modules/package_with/__init__.py +0 -0
  30. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/modules/package_with/outer_1.py +0 -0
  31. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/modules/package_with/outer_2.py +0 -0
  32. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  33. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  34. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  35. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  36. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/modules/package_without/__init__.py +0 -0
  37. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/modules/package_without/module_1.py +0 -0
  38. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/modules/package_without/module_2.py +0 -0
  39. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/modules/standalone.py +0 -0
  40. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/modules/with_imports.py +0 -0
  41. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  42. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  43. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  44. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  45. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  46. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  47. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  48. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  49. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_aiolimiter.py +0 -0
  50. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_altair.py +0 -0
  51. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_asyncio.py +0 -0
  52. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_asyncio_classes/__init__.py +0 -0
  53. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_asyncio_classes/loopers.py +0 -0
  54. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_asyncio_classes/redis.py +0 -0
  55. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_atomicwrites.py +0 -0
  56. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_atools.py +0 -0
  57. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_cachetools.py +0 -0
  58. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_click.py +0 -0
  59. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_concurrent.py +0 -0
  60. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_contextlib.py +0 -0
  61. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_contextvars.py +0 -0
  62. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_cryptography.py +0 -0
  63. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_cvxpy.py +0 -0
  64. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_dataclasses.py +0 -0
  65. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_datetime.py +0 -0
  66. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_enum.py +0 -0
  67. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_errors.py +0 -0
  68. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_eventkit.py +0 -0
  69. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_fastapi.py +0 -0
  70. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_fpdf2.py +0 -0
  71. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_functions.py +0 -0
  72. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_functools.py +0 -0
  73. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_getpass.py +0 -0
  74. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_git.py +0 -0
  75. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_hashlib.py +0 -0
  76. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_http.py +0 -0
  77. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_hypothesis.py +0 -0
  78. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_importlib.py +0 -0
  79. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_inflect.py +0 -0
  80. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_ipython.py +0 -0
  81. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_iterables.py +0 -0
  82. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_jupyter.py +0 -0
  83. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_libcst.py +0 -0
  84. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_lightweight_charts.py +0 -0
  85. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_logging.py +0 -0
  86. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_luigi.py +0 -0
  87. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_math.py +0 -0
  88. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_memory_profiler.py +0 -0
  89. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_modules.py +0 -0
  90. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_more_itertools.py +0 -0
  91. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_numpy.py +0 -0
  92. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_operator.py +0 -0
  93. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_optuna.py +0 -0
  94. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_orjson.py +0 -0
  95. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_os.py +0 -0
  96. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_parse.py +0 -0
  97. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_pathlib.py +0 -0
  98. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_period.py +0 -0
  99. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_pickle.py +0 -0
  100. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_platform.py +0 -0
  101. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_polars.py +0 -0
  102. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_polars_ols.py +0 -0
  103. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_pottery.py +0 -0
  104. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_pqdm.py +0 -0
  105. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_psutil.py +0 -0
  106. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_pydantic.py +0 -0
  107. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_pyinstrument.py +0 -0
  108. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_pyrsistent.py +0 -0
  109. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_pytest.py +0 -0
  110. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_pytest_regressions.py +0 -0
  111. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_python_dotenv.py +0 -0
  112. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_random.py +0 -0
  113. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_re.py +0 -0
  114. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_redis.py +0 -0
  115. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_reprlib.py +0 -0
  116. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_scipy.py +0 -0
  117. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_sentinel.py +0 -0
  118. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_shelve.py +0 -0
  119. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_slack_sdk.py +0 -0
  120. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_socket.py +0 -0
  121. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_sqlalchemy.py +0 -0
  122. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_sqlalchemy_polars.py +0 -0
  123. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_statsmodel.py +0 -0
  124. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_streamlit.py +0 -0
  125. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_string.py +0 -0
  126. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_tempfile.py +0 -0
  127. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_tenacity.py +0 -0
  128. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_text.py +0 -0
  129. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_threading.py +0 -0
  130. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_timer.py +0 -0
  131. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_traceback.py +0 -0
  132. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_types.py +0 -0
  133. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_typing.py +0 -0
  134. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_typing_funcs/__init__.py +0 -0
  135. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_typing_funcs/no_future.py +0 -0
  136. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_typing_funcs/with_future.py +0 -0
  137. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_tzdata.py +0 -0
  138. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_uuid.py +0 -0
  139. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_version.py +0 -0
  140. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_warnings.py +0 -0
  141. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_whenever.py +0 -0
  142. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_zipfile.py +0 -0
  143. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/tests/test_zoneinfo.py +0 -0
  144. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/aiolimiter.py +0 -0
  145. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/asyncio.py +0 -0
  146. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/atomicwrites.py +0 -0
  147. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/atools.py +0 -0
  148. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/cachetools.py +0 -0
  149. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/click.py +0 -0
  150. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/concurrent.py +0 -0
  151. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/contextlib.py +0 -0
  152. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/contextvars.py +0 -0
  153. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/cryptography.py +0 -0
  154. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/cvxpy.py +0 -0
  155. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/dataclasses.py +0 -0
  156. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/datetime.py +0 -0
  157. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/enum.py +0 -0
  158. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/errors.py +0 -0
  159. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/eventkit.py +0 -0
  160. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/functions.py +0 -0
  161. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/functools.py +0 -0
  162. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/getpass.py +0 -0
  163. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/git.py +0 -0
  164. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/hashlib.py +0 -0
  165. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/http.py +0 -0
  166. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/importlib.py +0 -0
  167. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/inflect.py +0 -0
  168. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/ipython.py +0 -0
  169. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/iterables.py +0 -0
  170. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/jupyter.py +0 -0
  171. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/libcst.py +0 -0
  172. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/luigi.py +0 -0
  173. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/math.py +0 -0
  174. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/memory_profiler.py +0 -0
  175. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/modules.py +0 -0
  176. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/more_itertools.py +0 -0
  177. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/numpy.py +0 -0
  178. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/operator.py +0 -0
  179. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/optuna.py +0 -0
  180. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/os.py +0 -0
  181. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/parse.py +0 -0
  182. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/pathlib.py +0 -0
  183. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/period.py +0 -0
  184. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/platform.py +0 -0
  185. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/polars.py +0 -0
  186. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/polars_ols.py +0 -0
  187. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/pottery.py +0 -0
  188. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/pqdm.py +0 -0
  189. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/psutil.py +0 -0
  190. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/py.typed +0 -0
  191. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/pyrsistent.py +0 -0
  192. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/pytest_regressions.py +0 -0
  193. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/python_dotenv.py +0 -0
  194. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/random.py +0 -0
  195. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/re.py +0 -0
  196. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/redis.py +0 -0
  197. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/reprlib.py +0 -0
  198. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/scipy.py +0 -0
  199. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/sentinel.py +0 -0
  200. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/shelve.py +0 -0
  201. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/slack_sdk.py +0 -0
  202. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/socket.py +0 -0
  203. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/sqlalchemy.py +0 -0
  204. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/sqlalchemy_polars.py +0 -0
  205. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/statsmodels.py +0 -0
  206. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/streamlit.py +0 -0
  207. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/string.py +0 -0
  208. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/tempfile.py +0 -0
  209. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/tenacity.py +0 -0
  210. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/text.py +0 -0
  211. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/threading.py +0 -0
  212. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/timer.py +0 -0
  213. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/types.py +0 -0
  214. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/typing.py +0 -0
  215. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/tzdata.py +0 -0
  216. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/uuid.py +0 -0
  217. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/version.py +0 -0
  218. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/warnings.py +0 -0
  219. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/whenever.py +0 -0
  220. {dycw_utilities-0.131.2 → dycw_utilities-0.131.3}/src/utilities/zipfile.py +0 -0
@@ -1,15 +1,15 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dycw-utilities
3
- Version: 0.131.2
3
+ Version: 0.131.3
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
7
+ Requires-Dist: atomicwrites<1.5,>=1.4.1
7
8
  Requires-Dist: typing-extensions<4.15,>=4.14.0
9
+ Requires-Dist: tzlocal<5.4,>=5.3.1
10
+ Requires-Dist: whenever<0.9,>=0.8.5
8
11
  Provides-Extra: logging
9
- Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'logging'
10
12
  Requires-Dist: coloredlogs<15.1,>=15.0.1; extra == 'logging'
11
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'logging'
12
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'logging'
13
13
  Provides-Extra: test
14
14
  Requires-Dist: dycw-pytest-only<2.2,>=2.1.1; extra == 'test'
15
15
  Requires-Dist: hypothesis<6.136,>=6.135.2; extra == 'test'
@@ -28,14 +28,11 @@ Provides-Extra: zzz-test-aiolimiter
28
28
  Requires-Dist: aiolimiter<1.3,>=1.2.1; extra == 'zzz-test-aiolimiter'
29
29
  Provides-Extra: zzz-test-altair
30
30
  Requires-Dist: altair<5.6,>=5.5.0; extra == 'zzz-test-altair'
31
- Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-altair'
32
31
  Requires-Dist: img2pdf<0.7,>=0.6.0; extra == 'zzz-test-altair'
33
32
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-altair'
34
33
  Requires-Dist: vl-convert-python<1.9,>=1.8.0; extra == 'zzz-test-altair'
35
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-altair'
36
34
  Provides-Extra: zzz-test-asyncio
37
35
  Provides-Extra: zzz-test-atomicwrites
38
- Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-atomicwrites'
39
36
  Provides-Extra: zzz-test-atools
40
37
  Requires-Dist: atools<0.15,>=0.14.2; extra == 'zzz-test-atools'
41
38
  Provides-Extra: zzz-test-cachetools
@@ -43,7 +40,6 @@ Requires-Dist: cachetools<5.6,>=5.5.2; extra == 'zzz-test-cachetools'
43
40
  Provides-Extra: zzz-test-click
44
41
  Requires-Dist: click<8.3,>=8.2.1; extra == 'zzz-test-click'
45
42
  Requires-Dist: sqlalchemy<2.1,>=2.0.41; extra == 'zzz-test-click'
46
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-click'
47
43
  Provides-Extra: zzz-test-contextlib
48
44
  Provides-Extra: zzz-test-contextvars
49
45
  Provides-Extra: zzz-test-cryptography
@@ -53,10 +49,7 @@ Requires-Dist: cvxpy<1.7,>=1.6.5; extra == 'zzz-test-cvxpy'
53
49
  Provides-Extra: zzz-test-dataclasses
54
50
  Requires-Dist: orjson<3.11,>=3.10.15; extra == 'zzz-test-dataclasses'
55
51
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-dataclasses'
56
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-dataclasses'
57
52
  Provides-Extra: zzz-test-datetime
58
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-datetime'
59
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-datetime'
60
53
  Provides-Extra: zzz-test-enum
61
54
  Provides-Extra: zzz-test-errors
62
55
  Provides-Extra: zzz-test-eventkit
@@ -67,7 +60,6 @@ Requires-Dist: httpx<0.29,>=0.28.1; extra == 'zzz-test-fastapi'
67
60
  Requires-Dist: uvicorn<0.35,>=0.34.1; extra == 'zzz-test-fastapi'
68
61
  Provides-Extra: zzz-test-fpdf2
69
62
  Requires-Dist: fpdf2<2.9,>=2.8.3; extra == 'zzz-test-fpdf2'
70
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-fpdf2'
71
63
  Provides-Extra: zzz-test-functions
72
64
  Provides-Extra: zzz-test-functools
73
65
  Provides-Extra: zzz-test-getpass
@@ -75,11 +67,8 @@ Provides-Extra: zzz-test-git
75
67
  Provides-Extra: zzz-test-hashlib
76
68
  Requires-Dist: orjson<3.11,>=3.10.15; extra == 'zzz-test-hashlib'
77
69
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-hashlib'
78
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-hashlib'
79
70
  Provides-Extra: zzz-test-http
80
- Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-http'
81
71
  Requires-Dist: orjson<3.11,>=3.10.18; extra == 'zzz-test-http'
82
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-http'
83
72
  Provides-Extra: zzz-test-hypothesis
84
73
  Requires-Dist: aiosqlite<0.22,>=0.21.0; extra == 'zzz-test-hypothesis'
85
74
  Requires-Dist: asyncpg<0.31,>=0.30.0; extra == 'zzz-test-hypothesis'
@@ -91,27 +80,20 @@ Requires-Dist: pathvalidate<3.3,>=3.2.3; extra == 'zzz-test-hypothesis'
91
80
  Requires-Dist: redis<6.3,>=6.2.0; extra == 'zzz-test-hypothesis'
92
81
  Requires-Dist: sqlalchemy<2.1,>=2.0.41; extra == 'zzz-test-hypothesis'
93
82
  Requires-Dist: tenacity<9.0,>=8.5.0; extra == 'zzz-test-hypothesis'
94
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-hypothesis'
95
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-hypothesis'
96
83
  Provides-Extra: zzz-test-ipython
97
84
  Requires-Dist: ipython<9.1,>=9.0.1; extra == 'zzz-test-ipython'
98
85
  Provides-Extra: zzz-test-iterables
99
86
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-iterables'
100
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-iterables'
101
87
  Provides-Extra: zzz-test-jupyter
102
88
  Requires-Dist: jupyterlab<4.3,>=4.2.0; extra == 'zzz-test-jupyter'
103
89
  Requires-Dist: pandas<2.4,>=2.3.0; extra == 'zzz-test-jupyter'
104
90
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-jupyter'
105
91
  Provides-Extra: zzz-test-logging
106
- Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-logging'
107
92
  Requires-Dist: coloredlogs<15.1,>=15.0.1; extra == 'zzz-test-logging'
108
93
  Requires-Dist: rich<14.1,>=14.0.0; extra == 'zzz-test-logging'
109
94
  Requires-Dist: tomlkit<0.14,>=0.13.2; extra == 'zzz-test-logging'
110
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-logging'
111
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-logging'
112
95
  Provides-Extra: zzz-test-luigi
113
96
  Requires-Dist: luigi<3.7,>=3.6.0; extra == 'zzz-test-luigi'
114
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-luigi'
115
97
  Provides-Extra: zzz-test-math
116
98
  Requires-Dist: numpy<2.4,>=2.3.0; extra == 'zzz-test-math'
117
99
  Provides-Extra: zzz-test-memory-profiler
@@ -123,43 +105,32 @@ Provides-Extra: zzz-test-numpy
123
105
  Requires-Dist: numpy<2.4,>=2.3.0; extra == 'zzz-test-numpy'
124
106
  Provides-Extra: zzz-test-operator
125
107
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-operator'
126
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-operator'
127
108
  Provides-Extra: zzz-test-optuna
128
109
  Requires-Dist: optuna<4.4,>=4.3.0; extra == 'zzz-test-optuna'
129
110
  Provides-Extra: zzz-test-orjson
130
111
  Requires-Dist: orjson<3.11,>=3.10.15; extra == 'zzz-test-orjson'
131
112
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-orjson'
132
113
  Requires-Dist: rich<14.1,>=14.0.0; extra == 'zzz-test-orjson'
133
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-orjson'
134
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-orjson'
135
114
  Provides-Extra: zzz-test-os
136
115
  Provides-Extra: zzz-test-pathlib
137
116
  Provides-Extra: zzz-test-pickle
138
- Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-pickle'
139
117
  Provides-Extra: zzz-test-platform
140
118
  Provides-Extra: zzz-test-polars
141
119
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-polars'
142
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-polars'
143
120
  Provides-Extra: zzz-test-pqdm
144
121
  Requires-Dist: pqdm<0.3,>=0.2.0; extra == 'zzz-test-pqdm'
145
122
  Provides-Extra: zzz-test-pydantic
146
- Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-pydantic'
147
123
  Requires-Dist: pydantic<2.12,>=2.11.4; extra == 'zzz-test-pydantic'
148
124
  Provides-Extra: zzz-test-pyinstrument
149
- Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-pyinstrument'
150
125
  Requires-Dist: pyinstrument<5.1,>=5.0.2; extra == 'zzz-test-pyinstrument'
151
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-pyinstrument'
152
126
  Provides-Extra: zzz-test-pyrsistent
153
127
  Requires-Dist: pyrsistent<0.21,>=0.20.0; extra == 'zzz-test-pyrsistent'
154
128
  Provides-Extra: zzz-test-pytest
155
- Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-pytest'
156
129
  Requires-Dist: orjson<3.11,>=3.10.18; extra == 'zzz-test-pytest'
157
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-pytest'
158
130
  Provides-Extra: zzz-test-pytest-regressions
159
131
  Requires-Dist: pytest-regressions<2.9,>=2.8.0; extra == 'zzz-test-pytest-regressions'
160
132
  Provides-Extra: zzz-test-python-dotenv
161
133
  Requires-Dist: python-dotenv<1.2,>=1.1.0; extra == 'zzz-test-python-dotenv'
162
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-python-dotenv'
163
134
  Provides-Extra: zzz-test-random
164
135
  Provides-Extra: zzz-test-re
165
136
  Provides-Extra: zzz-test-redis
@@ -168,8 +139,6 @@ Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-redis'
168
139
  Requires-Dist: redis<6.3,>=6.2.0; extra == 'zzz-test-redis'
169
140
  Requires-Dist: rich<14.1,>=14.0.0; extra == 'zzz-test-redis'
170
141
  Requires-Dist: tenacity<9.0,>=8.5.0; extra == 'zzz-test-redis'
171
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-redis'
172
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-redis'
173
142
  Provides-Extra: zzz-test-rich
174
143
  Requires-Dist: rich<14.1,>=14.0.0; extra == 'zzz-test-rich'
175
144
  Provides-Extra: zzz-test-scipy
@@ -195,15 +164,11 @@ Requires-Dist: nest-asyncio<1.7,>=1.6.0; extra == 'zzz-test-sqlalchemy-polars'
195
164
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-sqlalchemy-polars'
196
165
  Requires-Dist: sqlalchemy<2.1,>=2.0.41; extra == 'zzz-test-sqlalchemy-polars'
197
166
  Requires-Dist: tenacity<9.0,>=8.5.0; extra == 'zzz-test-sqlalchemy-polars'
198
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-sqlalchemy-polars'
199
167
  Provides-Extra: zzz-test-streamlit
200
168
  Requires-Dist: streamlit<1.46,>=1.45.0; extra == 'zzz-test-streamlit'
201
169
  Provides-Extra: zzz-test-sys
202
- Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-sys'
203
170
  Requires-Dist: rich<14.1,>=14.0.0; extra == 'zzz-test-sys'
204
171
  Requires-Dist: tomlkit<0.14,>=0.13.2; extra == 'zzz-test-sys'
205
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-sys'
206
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-sys'
207
172
  Provides-Extra: zzz-test-tempfile
208
173
  Provides-Extra: zzz-test-tenacity
209
174
  Requires-Dist: tenacity<9.0,>=8.5.0; extra == 'zzz-test-tenacity'
@@ -213,24 +178,18 @@ Provides-Extra: zzz-test-timer
213
178
  Provides-Extra: zzz-test-traceback
214
179
  Requires-Dist: rich<14.1,>=14.0.0; extra == 'zzz-test-traceback'
215
180
  Requires-Dist: tomlkit<0.14,>=0.13.2; extra == 'zzz-test-traceback'
216
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-traceback'
217
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-traceback'
218
181
  Provides-Extra: zzz-test-types
219
182
  Provides-Extra: zzz-test-typing
220
183
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-typing'
221
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-typing'
222
184
  Provides-Extra: zzz-test-tzlocal
223
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-tzlocal'
224
185
  Provides-Extra: zzz-test-uuid
225
186
  Provides-Extra: zzz-test-version
226
187
  Requires-Dist: tomlkit<0.14,>=0.13.2; extra == 'zzz-test-version'
227
188
  Provides-Extra: zzz-test-warnings
228
189
  Provides-Extra: zzz-test-whenever
229
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-whenever'
230
190
  Provides-Extra: zzz-test-zipfile
231
191
  Provides-Extra: zzz-test-zoneinfo
232
192
  Requires-Dist: tzdata<2025.3,>=2025.2; extra == 'zzz-test-zoneinfo'
233
- Requires-Dist: whenever<0.9,>=0.8.5; extra == 'zzz-test-zoneinfo'
234
193
  Description-Content-Type: text/markdown
235
194
 
236
195
  [![PyPI version](https://badge.fury.io/py/dycw-utilities.svg)](https://badge.fury.io/py/dycw-utilities)
@@ -13,7 +13,6 @@ dev = [
13
13
  "aiosqlite >= 0.21.0, < 0.22",
14
14
  "altair >= 5.5.0, < 5.6",
15
15
  "asyncpg >= 0.30.0, < 0.31", # for sqlalchemy async
16
- "atomicwrites >= 1.4.1, < 1.5",
17
16
  "atools >= 0.14.2, < 0.15",
18
17
  "cachetools >= 5.5.2, < 5.6",
19
18
  "click >= 8.2.1, < 8.3",
@@ -63,12 +62,10 @@ dev = [
63
62
  "tenacity >= 8.5.0, < 9.0", # limited by luigi
64
63
  "tomlkit >= 0.13.2, < 0.14",
65
64
  "tzdata >= 2025.2, < 2025.3",
66
- "tzlocal >= 5.3.1, < 5.4",
67
65
  "uvicorn >= 0.34.1, < 0.35",
68
66
  "vegafusion >= 2.0.2, < 2.1",
69
67
  "vegafusion-python-embed >= 1.6.9, < 1.7",
70
68
  "vl-convert-python >= 1.8.0, < 1.9",
71
- "whenever >= 0.8.5, < 0.9",
72
69
  # test
73
70
  "coverage-conditional-plugin >= 0.9.0, < 0.10",
74
71
  "dycw-pytest-only >= 2.1.1, < 2.2",
@@ -89,19 +86,19 @@ dev = [
89
86
  [project]
90
87
  authors = [{name = "Derek Wan", email = "d.wan@icloud.com"}]
91
88
  dependencies = [
89
+ "atomicwrites >= 1.4.1, < 1.5",
92
90
  "typing-extensions >= 4.14.0, < 4.15",
91
+ "tzlocal >= 5.3.1, < 5.4",
92
+ "whenever >= 0.8.5, < 0.9",
93
93
  ]
94
94
  name = "dycw-utilities"
95
95
  readme = "README.md"
96
96
  requires-python = ">= 3.12"
97
- version = "0.131.2"
97
+ version = "0.131.3"
98
98
 
99
99
  [project.optional-dependencies]
100
100
  logging = [
101
- "atomicwrites >= 1.4.1, < 1.5",
102
101
  "coloredlogs >= 15.0.1, < 15.1",
103
- "tzlocal >= 5.3.1, < 5.4",
104
- "whenever >= 0.8.5, < 0.9",
105
102
  ]
106
103
  test = [
107
104
  "dycw-pytest-only >= 2.1.1, < 2.2",
@@ -123,14 +120,12 @@ zzz-test-aiolimiter = [
123
120
  ]
124
121
  zzz-test-altair = [
125
122
  "altair >= 5.5.0, < 5.6",
126
- "atomicwrites >= 1.4.1, < 1.5",
127
123
  "img2pdf >= 0.6.0, < 0.7",
128
124
  "polars-lts-cpu >= 1.30.0, < 1.31",
129
125
  "vl-convert-python >= 1.8.0, < 1.9",
130
- "whenever >= 0.8.5, < 0.9",
131
126
  ]
132
127
  zzz-test-asyncio = []
133
- zzz-test-atomicwrites = ["atomicwrites >= 1.4.1, < 1.5"]
128
+ zzz-test-atomicwrites = []
134
129
  zzz-test-atools = [
135
130
  "atools >= 0.14.2, < 0.15",
136
131
  ]
@@ -138,7 +133,6 @@ zzz-test-cachetools = ["cachetools >= 5.5.2, < 5.6"]
138
133
  zzz-test-click = [
139
134
  "click >= 8.2.1, < 8.3",
140
135
  "sqlalchemy >= 2.0.41, < 2.1",
141
- "whenever >= 0.8.5, < 0.9",
142
136
  ]
143
137
  zzz-test-contextlib = []
144
138
  zzz-test-contextvars = []
@@ -147,11 +141,8 @@ zzz-test-cvxpy = ["cvxpy >= 1.6.5, < 1.7"]
147
141
  zzz-test-dataclasses = [
148
142
  "orjson >= 3.10.15, < 3.11",
149
143
  "polars-lts-cpu >= 1.30.0, < 1.31",
150
- "whenever >= 0.8.5, < 0.9",
151
144
  ]
152
145
  zzz-test-datetime = [
153
- "tzlocal >= 5.3.1, < 5.4",
154
- "whenever >= 0.8.5, < 0.9",
155
146
  ]
156
147
  zzz-test-enum = []
157
148
  zzz-test-errors = []
@@ -163,7 +154,6 @@ zzz-test-fastapi = [
163
154
  ]
164
155
  zzz-test-fpdf2 = [
165
156
  "fpdf2 >= 2.8.3, < 2.9",
166
- "tzlocal >= 5.3.1, < 5.4",
167
157
  ]
168
158
  zzz-test-functions = []
169
159
  zzz-test-functools = []
@@ -172,12 +162,9 @@ zzz-test-git = []
172
162
  zzz-test-hashlib = [
173
163
  "polars-lts-cpu >= 1.30.0, < 1.31",
174
164
  "orjson >= 3.10.15, < 3.11",
175
- "whenever >= 0.8.5, < 0.9",
176
165
  ]
177
166
  zzz-test-http = [
178
- "atomicwrites >= 1.4.1, < 1.5",
179
167
  "orjson >= 3.10.18, < 3.11",
180
- "whenever >= 0.8.5, < 0.9",
181
168
  ]
182
169
  zzz-test-hypothesis = [
183
170
  "aiosqlite >= 0.21.0, < 0.22",
@@ -190,13 +177,10 @@ zzz-test-hypothesis = [
190
177
  "redis >= 6.2.0, < 6.3",
191
178
  "sqlalchemy >= 2.0.41, < 2.1",
192
179
  "tenacity >= 8.5.0, < 9.0", # limited by luigi
193
- "tzlocal >= 5.3.1, < 5.4",
194
- "whenever >= 0.8.5, < 0.9",
195
180
  ]
196
181
  zzz-test-ipython = ["ipython >= 9.0.1, < 9.1"]
197
182
  zzz-test-iterables = [
198
183
  "polars-lts-cpu >= 1.30.0, < 1.31",
199
- "whenever >= 0.8.5, < 0.9",
200
184
  ]
201
185
  zzz-test-jupyter = [
202
186
  "jupyterlab >= 4.2.0, < 4.3",
@@ -204,16 +188,12 @@ zzz-test-jupyter = [
204
188
  "polars-lts-cpu >= 1.30.0, < 1.31",
205
189
  ]
206
190
  zzz-test-logging = [
207
- "atomicwrites >= 1.4.1, < 1.5",
208
191
  "coloredlogs >= 15.0.1, < 15.1",
209
192
  "rich >= 14.0.0, < 14.1",
210
193
  "tomlkit >= 0.13.2, < 0.14",
211
- "tzlocal >= 5.3.1, < 5.4",
212
- "whenever >= 0.8.5, < 0.9",
213
194
  ]
214
195
  zzz-test-luigi = [
215
196
  "luigi >= 3.6.0, < 3.7",
216
- "whenever >= 0.8.5, < 0.9",
217
197
  ]
218
198
  zzz-test-math = ["numpy >= 2.3.0, < 2.4"]
219
199
  zzz-test-memory-profiler = ["memory-profiler >= 0.61.0, < 0.62"]
@@ -222,44 +202,34 @@ zzz-test-more-itertools = ["more-itertools >= 10.7.0, < 10.8"]
222
202
  zzz-test-numpy = ["numpy >= 2.3.0, < 2.4"]
223
203
  zzz-test-operator = [
224
204
  "polars-lts-cpu >= 1.30.0, < 1.31",
225
- "whenever >= 0.8.5, < 0.9",
226
205
  ]
227
206
  zzz-test-optuna = ["optuna >= 4.3.0, < 4.4"]
228
207
  zzz-test-orjson = [
229
208
  "orjson >= 3.10.15, < 3.11",
230
209
  "polars-lts-cpu >= 1.30.0, < 1.31",
231
210
  "rich >= 14.0.0, < 14.1",
232
- "tzlocal >= 5.3.1, < 5.4",
233
- "whenever >= 0.8.5, < 0.9",
234
211
  ]
235
212
  zzz-test-os = []
236
213
  zzz-test-pathlib = []
237
- zzz-test-pickle = ["atomicwrites >= 1.4.1, < 1.5"]
214
+ zzz-test-pickle = []
238
215
  zzz-test-platform = []
239
216
  zzz-test-polars = [
240
217
  "polars-lts-cpu >= 1.30.0, < 1.31",
241
- "whenever >= 0.8.5, < 0.9",
242
218
  ]
243
219
  zzz-test-pqdm = ["pqdm >= 0.2.0, < 0.3"]
244
220
  zzz-test-pydantic = [
245
- "atomicwrites >= 1.4.1, < 1.5",
246
221
  "pydantic >= 2.11.4, < 2.12",
247
222
  ]
248
223
  zzz-test-pyinstrument = [
249
- "atomicwrites >= 1.4.1, < 1.5",
250
224
  "pyinstrument >= 5.0.2, < 5.1",
251
- "tzlocal >= 5.3.1, < 5.4",
252
225
  ]
253
226
  zzz-test-pyrsistent = ["pyrsistent >= 0.20.0, < 0.21"]
254
227
  zzz-test-pytest = [
255
- "atomicwrites >= 1.4.1, < 1.5",
256
228
  "orjson >= 3.10.18, < 3.11",
257
- "whenever >= 0.8.5, < 0.9",
258
229
  ]
259
230
  zzz-test-pytest-regressions = ["pytest-regressions >= 2.8.0, < 2.9"]
260
231
  zzz-test-python-dotenv = [
261
232
  "python-dotenv >= 1.1.0, < 1.2",
262
- "whenever >= 0.8.5, < 0.9",
263
233
  ]
264
234
  zzz-test-random = []
265
235
  zzz-test-re = []
@@ -269,8 +239,6 @@ zzz-test-redis = [
269
239
  "redis >= 6.2.0, < 6.3",
270
240
  "rich >= 14.0.0, < 14.1",
271
241
  "tenacity >= 8.5.0, < 9.0", # limited by luigi
272
- "tzlocal >= 5.3.1, < 5.4",
273
- "whenever >= 0.8.5, < 0.9",
274
242
  ]
275
243
  zzz-test-rich = ["rich >= 14.0.0, < 14.1"]
276
244
  zzz-test-scipy = ["scipy >= 1.15.3, < 1.16"]
@@ -297,15 +265,11 @@ zzz-test-sqlalchemy-polars = [
297
265
  "polars-lts-cpu >= 1.30.0, < 1.31",
298
266
  "sqlalchemy >= 2.0.41, < 2.1",
299
267
  "tenacity >= 8.5.0, < 9.0", # limited by luigi
300
- "whenever >= 0.8.5, < 0.9",
301
268
  ]
302
269
  zzz-test-streamlit = ["streamlit >= 1.45.0, < 1.46"]
303
270
  zzz-test-sys = [
304
- "atomicwrites >= 1.4.1, < 1.5",
305
271
  "rich >= 14.0.0, < 14.1",
306
272
  "tomlkit >= 0.13.2, < 0.14",
307
- "tzlocal >= 5.3.1, < 5.4",
308
- "whenever >= 0.8.5, < 0.9",
309
273
  ]
310
274
  zzz-test-tempfile = []
311
275
  zzz-test-tenacity = [
@@ -317,23 +281,19 @@ zzz-test-timer = []
317
281
  zzz-test-traceback = [
318
282
  "rich >= 14.0.0, < 14.1",
319
283
  "tomlkit >= 0.13.2, < 0.14",
320
- "tzlocal >= 5.3.1, < 5.4",
321
- "whenever >= 0.8.5, < 0.9",
322
284
  ]
323
285
  zzz-test-types = []
324
286
  zzz-test-typing = [
325
287
  "polars-lts-cpu >= 1.30.0, < 1.31",
326
- "whenever >= 0.8.5, < 0.9",
327
288
  ]
328
- zzz-test-tzlocal = ["tzlocal >= 5.3.1, < 5.4"]
289
+ zzz-test-tzlocal = []
329
290
  zzz-test-uuid = []
330
291
  zzz-test-version = ["tomlkit >= 0.13.2, < 0.14"]
331
292
  zzz-test-warnings = []
332
- zzz-test-whenever = ["whenever >= 0.8.5, < 0.9"]
293
+ zzz-test-whenever = []
333
294
  zzz-test-zipfile = []
334
295
  zzz-test-zoneinfo = [
335
296
  "tzdata >= 2025.2, < 2025.3",
336
- "whenever >= 0.8.5, < 0.9",
337
297
  ]
338
298
 
339
299
  [project.scripts]
@@ -341,7 +301,7 @@ zzz-test-zoneinfo = [
341
301
  # bump-my-version
342
302
  [tool.bumpversion]
343
303
  allow_dirty = true
344
- current_version = "0.131.2"
304
+ current_version = "0.131.3"
345
305
 
346
306
  [[tool.bumpversion.files]]
347
307
  filename = "src/utilities/__init__.py"
@@ -5,6 +5,7 @@ from zoneinfo import ZoneInfo
5
5
 
6
6
  from utilities.tzdata import HongKong, Tokyo
7
7
  from utilities.tzlocal import (
8
+ LOCAL_TIME_ZONE,
8
9
  NOW_LOCAL,
9
10
  TODAY_LOCAL,
10
11
  get_local_time_zone,
@@ -15,10 +16,13 @@ from utilities.zoneinfo import UTC
15
16
 
16
17
 
17
18
  class TestGetLocalTimeZone:
18
- def test_main(self) -> None:
19
+ def test_function(self) -> None:
19
20
  time_zone = get_local_time_zone()
20
21
  assert isinstance(time_zone, ZoneInfo)
21
22
 
23
+ def test_constant(self) -> None:
24
+ assert isinstance(LOCAL_TIME_ZONE, ZoneInfo)
25
+
22
26
 
23
27
  class TestGetNowLocal:
24
28
  def test_function(self) -> None:
@@ -186,9 +186,3 @@ class TestWheneverLogRecord:
186
186
 
187
187
  def test_get_length(self) -> None:
188
188
  assert isinstance(WheneverLogRecord._get_length(), int)
189
-
190
- def test_get_time_zone(self) -> None:
191
- assert isinstance(WheneverLogRecord._get_time_zone(), ZoneInfo)
192
-
193
- def test_get_time_zone_key(self) -> None:
194
- assert isinstance(WheneverLogRecord._get_time_zone_key(), str)
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.131.2"
3
+ __version__ = "0.131.3"
@@ -23,6 +23,7 @@ from altair import (
23
23
  )
24
24
  from altair.utils.schemapi import Undefined
25
25
 
26
+ from utilities.atomicwrites import writer
26
27
  from utilities.functions import ensure_bytes, ensure_number
27
28
  from utilities.iterables import always_iterable
28
29
  from utilities.tempfile import TemporaryDirectory
@@ -265,8 +266,6 @@ def save_chart(
265
266
  chart: _ChartLike, path: PathLike, /, *, overwrite: bool = False
266
267
  ) -> None:
267
268
  """Atomically save a chart to disk."""
268
- from utilities.atomicwrites import writer
269
-
270
269
  with writer(path, overwrite=overwrite) as temp:
271
270
  chart.save(str(temp), format="png")
272
271
 
@@ -280,8 +279,6 @@ def save_charts_as_pdf(
280
279
  """Atomically save a chart/set of charts to disk."""
281
280
  from img2pdf import convert
282
281
 
283
- from utilities.atomicwrites import writer
284
-
285
282
  with TemporaryDirectory() as temp_dir:
286
283
  temp_paths = [temp_dir.joinpath(f"{i}.png") for i in range(len(charts))]
287
284
  for chart, temp_path in zip(charts, temp_paths, strict=True):
@@ -9,6 +9,8 @@ from uvicorn import Config, Server
9
9
 
10
10
  from utilities.asyncio import Looper
11
11
  from utilities.datetime import SECOND, datetime_duration_to_float
12
+ from utilities.tzlocal import get_now_local # skipif-ci
13
+ from utilities.whenever import serialize_zoned_datetime # skipif-ci
12
14
 
13
15
  if TYPE_CHECKING:
14
16
  from types import TracebackType
@@ -29,9 +31,6 @@ class _PingerReceiverApp(FastAPI):
29
31
 
30
32
  @self.get("/ping") # skipif-ci
31
33
  def ping() -> str:
32
- from utilities.tzlocal import get_now_local # skipif-ci
33
- from utilities.whenever import serialize_zoned_datetime # skipif-ci
34
-
35
34
  now = serialize_zoned_datetime(get_now_local()) # skipif-ci
36
35
  return f"pong @ {now}" # skipif-ci
37
36
 
@@ -6,6 +6,8 @@ from typing import TYPE_CHECKING, override
6
6
  from fpdf import FPDF
7
7
  from fpdf.enums import XPos, YPos
8
8
 
9
+ from utilities.tzlocal import get_now_local
10
+
9
11
  if TYPE_CHECKING:
10
12
  from collections.abc import Iterator
11
13
 
@@ -43,8 +45,6 @@ def yield_pdf(*, header: str | None = None) -> Iterator[_BasePDF]:
43
45
 
44
46
  @override
45
47
  def footer(self) -> None:
46
- from utilities.tzlocal import get_now_local
47
-
48
48
  self.set_y(-15)
49
49
  self.set_font(family="Helvetica", style="I", size=8)
50
50
  page_no, now = self.page_no(), get_now_local()
@@ -47,7 +47,7 @@ from hypothesis.strategies import (
47
47
  uuids,
48
48
  )
49
49
  from hypothesis.utils.conventions import not_set
50
- from whenever import Date, DateDelta
50
+ from whenever import Date, DateDelta, PlainDateTime
51
51
 
52
52
  from utilities.datetime import (
53
53
  DATETIME_MAX_NAIVE,
@@ -97,7 +97,7 @@ if TYPE_CHECKING:
97
97
 
98
98
  from hypothesis.database import ExampleDatabase
99
99
  from numpy.random import RandomState
100
- from whenever import PlainDateTime, ZonedDateTime
100
+ from whenever import ZonedDateTime
101
101
 
102
102
  from utilities.numpy import NDArrayB, NDArrayF, NDArrayI, NDArrayO
103
103
  from utilities.types import Duration, Number, RoundMode, TimeZoneLike
@@ -1050,8 +1050,6 @@ def plain_datetimes_whenever(
1050
1050
  max_value: MaybeSearchStrategy[PlainDateTime | None] = None,
1051
1051
  ) -> PlainDateTime:
1052
1052
  """Strategy for generating plain datetimes."""
1053
- from whenever import PlainDateTime
1054
-
1055
1053
  from utilities.whenever2 import PLAIN_DATE_TIME_MAX, PLAIN_DATE_TIME_MIN
1056
1054
 
1057
1055
  min_value_, max_value_ = [draw2(draw, v) for v in [min_value, max_value]]
@@ -4,6 +4,7 @@ from contextlib import asynccontextmanager
4
4
  from dataclasses import dataclass
5
5
  from typing import TYPE_CHECKING, override
6
6
 
7
+ from utilities.atomicwrites import writer # pragma: no cover
7
8
  from utilities.iterables import OneEmptyError, OneNonUniqueError, one
8
9
  from utilities.reprlib import get_repr
9
10
 
@@ -23,8 +24,6 @@ if TYPE_CHECKING:
23
24
 
24
25
  def save_chart(chart: Chart, path: PathLike, /, *, overwrite: bool = False) -> None:
25
26
  """Atomically save a chart to disk."""
26
- from utilities.atomicwrites import writer # pragma: no cover
27
-
28
27
  chart.show(block=False) # pragma: no cover
29
28
  with ( # pragma: no cover
30
29
  writer(path, overwrite=overwrite) as temp,
@@ -32,6 +32,7 @@ from typing import (
32
32
  override,
33
33
  )
34
34
 
35
+ from utilities.atomicwrites import move_many
35
36
  from utilities.dataclasses import replace_non_sentinel
36
37
  from utilities.datetime import (
37
38
  SECOND,
@@ -43,6 +44,7 @@ from utilities.errors import ImpossibleCaseError
43
44
  from utilities.iterables import OneEmptyError, always_iterable, one
44
45
  from utilities.pathlib import ensure_suffix, get_path
45
46
  from utilities.sentinel import Sentinel, sentinel
47
+ from utilities.tzlocal import get_now_local
46
48
 
47
49
  if TYPE_CHECKING:
48
50
  from collections.abc import Callable, Iterable, Mapping
@@ -426,8 +428,6 @@ def _compute_rollover_actions(
426
428
  patterns: _RolloverPatterns | None = None,
427
429
  backup_count: int = 1,
428
430
  ) -> _RolloverActions:
429
- from utilities.tzlocal import get_now_local
430
-
431
431
  patterns = (
432
432
  _compute_rollover_patterns(stem, suffix) if patterns is None else patterns
433
433
  )
@@ -470,8 +470,6 @@ class _RolloverActions:
470
470
  rotations: set[_Rotation] = field(default_factory=set)
471
471
 
472
472
  def do(self) -> None:
473
- from utilities.atomicwrites import move_many
474
-
475
473
  for deletion in self.deletions:
476
474
  deletion.delete()
477
475
  move_many(*((r.file.path, r.destination) for r in self.rotations))
@@ -742,8 +742,6 @@ class OrjsonFormatter(Formatter):
742
742
 
743
743
  @override
744
744
  def format(self, record: LogRecord) -> str:
745
- from utilities.tzlocal import get_local_time_zone
746
-
747
745
  extra = {
748
746
  k: v
749
747
  for k, v in record.__dict__.items()
@@ -4,6 +4,8 @@ import gzip
4
4
  from pickle import dump, load
5
5
  from typing import TYPE_CHECKING, Any
6
6
 
7
+ from utilities.atomicwrites import writer
8
+
7
9
  if TYPE_CHECKING:
8
10
  from utilities.types import PathLike
9
11
 
@@ -16,8 +18,6 @@ def read_pickle(path: PathLike, /) -> Any:
16
18
 
17
19
  def write_pickle(obj: Any, path: PathLike, /, *, overwrite: bool = False) -> None:
18
20
  """Write an object to disk."""
19
- from utilities.atomicwrites import writer
20
-
21
21
  with writer(path, overwrite=overwrite) as temp, gzip.open(temp, mode="wb") as gz:
22
22
  dump(obj, gz)
23
23
 
@@ -6,6 +6,8 @@ from typing import TYPE_CHECKING, TypeVar, override
6
6
 
7
7
  from pydantic import BaseModel
8
8
 
9
+ from utilities.atomicwrites import writer
10
+
9
11
  if TYPE_CHECKING:
10
12
  from utilities.types import PathLike
11
13
 
@@ -52,8 +54,6 @@ class _LoadModelIsADirectoryError(LoadModelError):
52
54
 
53
55
 
54
56
  def save_model(model: BaseModel, path: PathLike, /, *, overwrite: bool = False) -> None:
55
- from utilities.atomicwrites import writer
56
-
57
57
  with writer(path, overwrite=overwrite) as temp, temp.open(mode="w") as fh:
58
58
  _ = fh.write(model.model_dump_json())
59
59
 
@@ -6,6 +6,7 @@ from typing import TYPE_CHECKING
6
6
 
7
7
  from pyinstrument.profiler import Profiler
8
8
 
9
+ from utilities.atomicwrites import writer
9
10
  from utilities.datetime import serialize_compact
10
11
  from utilities.pathlib import get_path
11
12
  from utilities.tzlocal import get_now_local
@@ -19,8 +20,6 @@ if TYPE_CHECKING:
19
20
  @contextmanager
20
21
  def profile(*, path: MaybeCallablePathLike | None = Path.cwd) -> Iterator[None]:
21
22
  """Profile the contents of a block."""
22
- from utilities.atomicwrites import writer
23
-
24
23
  with Profiler() as profiler:
25
24
  yield
26
25
  filename = get_path(path=path).joinpath(