dycw-utilities 0.131.19__tar.gz → 0.132.0__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.19 → dycw_utilities-0.132.0}/PKG-INFO +1 -1
  2. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/pyproject.toml +3 -3
  3. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/conftest.py +1 -1
  4. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_aiolimiter.py +1 -1
  5. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_altair.py +4 -4
  6. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_asyncio.py +1 -1
  7. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_asyncio_classes/loopers.py +1 -1
  8. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_atools.py +1 -1
  9. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_cachetools.py +3 -5
  10. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_click.py +30 -27
  11. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_fastapi.py +1 -1
  12. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_functions.py +1 -1
  13. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_http.py +1 -1
  14. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_hypothesis.py +65 -79
  15. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_logging.py +6 -11
  16. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_luigi.py +2 -2
  17. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_objects/objects.py +13 -15
  18. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_operator.py +13 -15
  19. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_orjson.py +9 -9
  20. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_parse.py +10 -10
  21. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_period.py +29 -44
  22. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_platform.py +12 -2
  23. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_polars.py +4 -4
  24. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_pottery.py +1 -1
  25. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_psutil.py +1 -1
  26. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_redis.py +1 -1
  27. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_slack_sdk.py +1 -1
  28. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_sqlalchemy.py +1 -1
  29. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_sqlalchemy_polars.py +2 -2
  30. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_timer.py +1 -1
  31. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_typed_settings.py +14 -26
  32. dycw_utilities-0.131.19/src/tests/test_whenever2.py → dycw_utilities-0.132.0/src/tests/test_whenever.py +143 -31
  33. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_zoneinfo.py +2 -2
  34. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/__init__.py +1 -1
  35. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/asyncio.py +1 -1
  36. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/click.py +6 -6
  37. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/fastapi.py +1 -1
  38. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/fpdf2.py +1 -1
  39. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/hypothesis.py +49 -53
  40. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/logging.py +1 -6
  41. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/orjson.py +1 -1
  42. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/platform.py +18 -0
  43. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/pottery.py +1 -1
  44. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/psutil.py +1 -1
  45. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/pyinstrument.py +1 -1
  46. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/pytest.py +1 -1
  47. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/redis.py +1 -1
  48. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/slack_sdk.py +1 -1
  49. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/sqlalchemy.py +1 -1
  50. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/timer.py +1 -1
  51. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/traceback.py +1 -1
  52. dycw_utilities-0.131.19/src/utilities/whenever2.py → dycw_utilities-0.132.0/src/utilities/whenever.py +152 -14
  53. dycw_utilities-0.131.19/src/tests/test_datetime.py +0 -161
  54. dycw_utilities-0.131.19/src/utilities/datetime.py +0 -222
  55. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/.gitignore +0 -0
  56. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/LICENSE +0 -0
  57. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/README.md +0 -0
  58. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/__init__.py +0 -0
  59. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/__init__.py +0 -0
  60. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_missing/__init__.py +0 -0
  61. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_missing/module.py +0 -0
  62. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_with/__init__.py +0 -0
  63. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_with/outer_1.py +0 -0
  64. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_with/outer_2.py +0 -0
  65. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  66. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  67. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  68. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  69. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_without/__init__.py +0 -0
  70. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_without/module_1.py +0 -0
  71. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_without/module_2.py +0 -0
  72. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/standalone.py +0 -0
  73. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/with_imports.py +0 -0
  74. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  75. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  76. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  77. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  78. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  79. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  80. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  81. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  82. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_asyncio_classes/__init__.py +0 -0
  83. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_asyncio_classes/redis.py +0 -0
  84. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_atomicwrites.py +0 -0
  85. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_concurrent.py +0 -0
  86. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_contextlib.py +0 -0
  87. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_contextvars.py +0 -0
  88. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_cryptography.py +0 -0
  89. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_cvxpy.py +0 -0
  90. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_dataclasses.py +0 -0
  91. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_enum.py +0 -0
  92. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_errors.py +0 -0
  93. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_eventkit.py +0 -0
  94. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_fpdf2.py +0 -0
  95. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_functools.py +0 -0
  96. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_getpass.py +0 -0
  97. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_git.py +0 -0
  98. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_hashlib.py +0 -0
  99. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_importlib.py +0 -0
  100. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_inflect.py +0 -0
  101. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_ipython.py +0 -0
  102. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_iterables.py +0 -0
  103. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_jupyter.py +0 -0
  104. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_libcst.py +0 -0
  105. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_lightweight_charts.py +0 -0
  106. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_math.py +0 -0
  107. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_memory_profiler.py +0 -0
  108. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_modules.py +0 -0
  109. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_more_itertools.py +0 -0
  110. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_numpy.py +0 -0
  111. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_objects/__init__.py +0 -0
  112. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_optuna.py +0 -0
  113. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_os.py +0 -0
  114. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_pathlib.py +0 -0
  115. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_pickle.py +0 -0
  116. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_polars_ols.py +0 -0
  117. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_pqdm.py +0 -0
  118. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_pydantic.py +0 -0
  119. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_pyinstrument.py +0 -0
  120. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_pyrsistent.py +0 -0
  121. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_pytest.py +0 -0
  122. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_pytest_regressions.py +0 -0
  123. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_python_dotenv.py +0 -0
  124. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_random.py +0 -0
  125. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_re.py +0 -0
  126. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_reprlib.py +0 -0
  127. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_scipy.py +0 -0
  128. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_sentinel.py +0 -0
  129. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_shelve.py +0 -0
  130. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_socket.py +0 -0
  131. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_statsmodel.py +0 -0
  132. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_streamlit.py +0 -0
  133. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_string.py +0 -0
  134. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_tempfile.py +0 -0
  135. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_text.py +0 -0
  136. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_threading.py +0 -0
  137. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_traceback.py +0 -0
  138. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_types.py +0 -0
  139. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_typing.py +0 -0
  140. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_typing_funcs/__init__.py +0 -0
  141. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_typing_funcs/no_future.py +0 -0
  142. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_typing_funcs/with_future.py +0 -0
  143. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_tzdata.py +0 -0
  144. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_tzlocal.py +0 -0
  145. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_uuid.py +0 -0
  146. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_version.py +0 -0
  147. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_warnings.py +0 -0
  148. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_zipfile.py +0 -0
  149. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/aiolimiter.py +0 -0
  150. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/altair.py +0 -0
  151. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/atomicwrites.py +0 -0
  152. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/atools.py +0 -0
  153. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/cachetools.py +0 -0
  154. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/concurrent.py +0 -0
  155. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/contextlib.py +0 -0
  156. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/contextvars.py +0 -0
  157. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/cryptography.py +0 -0
  158. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/cvxpy.py +0 -0
  159. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/dataclasses.py +0 -0
  160. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/enum.py +0 -0
  161. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/errors.py +0 -0
  162. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/eventkit.py +0 -0
  163. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/functions.py +0 -0
  164. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/functools.py +0 -0
  165. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/getpass.py +0 -0
  166. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/git.py +0 -0
  167. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/hashlib.py +0 -0
  168. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/http.py +0 -0
  169. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/importlib.py +0 -0
  170. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/inflect.py +0 -0
  171. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/ipython.py +0 -0
  172. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/iterables.py +0 -0
  173. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/jupyter.py +0 -0
  174. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/libcst.py +0 -0
  175. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/lightweight_charts.py +0 -0
  176. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/luigi.py +0 -0
  177. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/math.py +0 -0
  178. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/memory_profiler.py +0 -0
  179. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/modules.py +0 -0
  180. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/more_itertools.py +0 -0
  181. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/numpy.py +0 -0
  182. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/operator.py +0 -0
  183. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/optuna.py +0 -0
  184. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/os.py +0 -0
  185. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/parse.py +0 -0
  186. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/pathlib.py +0 -0
  187. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/period.py +0 -0
  188. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/pickle.py +0 -0
  189. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/polars.py +0 -0
  190. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/polars_ols.py +0 -0
  191. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/pqdm.py +0 -0
  192. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/py.typed +0 -0
  193. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/pydantic.py +0 -0
  194. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/pyrsistent.py +0 -0
  195. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/pytest_regressions.py +0 -0
  196. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/python_dotenv.py +0 -0
  197. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/random.py +0 -0
  198. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/re.py +0 -0
  199. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/reprlib.py +0 -0
  200. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/scipy.py +0 -0
  201. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/sentinel.py +0 -0
  202. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/shelve.py +0 -0
  203. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/socket.py +0 -0
  204. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/sqlalchemy_polars.py +0 -0
  205. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/statsmodels.py +0 -0
  206. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/streamlit.py +0 -0
  207. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/string.py +0 -0
  208. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/tempfile.py +0 -0
  209. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/text.py +0 -0
  210. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/threading.py +0 -0
  211. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/typed_settings.py +0 -0
  212. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/types.py +0 -0
  213. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/typing.py +0 -0
  214. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/tzdata.py +0 -0
  215. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/tzlocal.py +0 -0
  216. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/uuid.py +0 -0
  217. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/version.py +0 -0
  218. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/warnings.py +0 -0
  219. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/zipfile.py +0 -0
  220. {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/zoneinfo.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dycw-utilities
3
- Version: 0.131.19
3
+ Version: 0.132.0
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -14,7 +14,7 @@ dev = [
14
14
  "altair >= 5.5.0, < 5.6",
15
15
  "asyncpg >= 0.30.0, < 0.31", # for sqlalchemy async
16
16
  "atools >= 0.14.2, < 0.15",
17
- "cachetools >= 5.5.2, < 5.6",
17
+ "cachetools >= 5.5.2, < 5.6", # blocked by streamlit
18
18
  "click >= 8.2.1, < 8.3",
19
19
  "coloredlogs >= 15.0.1, < 15.1",
20
20
  "cryptography >= 45.0.4, < 45.1",
@@ -94,7 +94,7 @@ dependencies = [
94
94
  name = "dycw-utilities"
95
95
  readme = "README.md"
96
96
  requires-python = ">= 3.12"
97
- version = "0.131.19"
97
+ version = "0.132.0"
98
98
 
99
99
  [project.optional-dependencies]
100
100
  logging = [
@@ -121,7 +121,7 @@ test = [
121
121
  # bump-my-version
122
122
  [tool.bumpversion]
123
123
  allow_dirty = true
124
- current_version = "0.131.19"
124
+ current_version = "0.132.0"
125
125
 
126
126
  [[tool.bumpversion.files]]
127
127
  filename = "src/utilities/__init__.py"
@@ -14,7 +14,7 @@ from whenever import PlainDateTime
14
14
  from utilities.platform import IS_NOT_LINUX, IS_WINDOWS
15
15
  from utilities.re import ExtractGroupError, extract_group
16
16
  from utilities.tzlocal import LOCAL_TIME_ZONE_NAME
17
- from utilities.whenever2 import MINUTE, get_now
17
+ from utilities.whenever import MINUTE, get_now
18
18
 
19
19
  if TYPE_CHECKING:
20
20
  from collections.abc import Iterator, Sequence
@@ -6,7 +6,7 @@ from typing import ClassVar
6
6
  from utilities.aiolimiter import get_async_limiter
7
7
  from utilities.text import unique_str
8
8
  from utilities.timer import Timer
9
- from utilities.whenever2 import SECOND
9
+ from utilities.whenever import SECOND
10
10
 
11
11
 
12
12
  class TestGetAsyncLimiter:
@@ -27,10 +27,10 @@ from utilities.altair import (
27
27
  vconcat_charts,
28
28
  )
29
29
  from utilities.functions import ensure_class
30
- from utilities.hypothesis import dates_whenever, text_ascii, zoned_datetimes_whenever
30
+ from utilities.hypothesis import dates, text_ascii, zoned_datetimes
31
31
  from utilities.polars import DatetimeUTC, zoned_datetime
32
32
  from utilities.tzdata import HongKong, Tokyo
33
- from utilities.whenever2 import get_now
33
+ from utilities.whenever import get_now
34
34
  from utilities.zoneinfo import UTC
35
35
 
36
36
  if TYPE_CHECKING:
@@ -105,7 +105,7 @@ class TestPlotDataFrames:
105
105
  expected = dt.datetime(2000, 1, 1, 12, tzinfo=time_zone).replace(tzinfo=None)
106
106
  assert datetime == expected
107
107
 
108
- @given(data=lists(tuples(dates_whenever(), floats(-10, 10))))
108
+ @given(data=lists(tuples(dates(), floats(-10, 10))))
109
109
  def test_tooltip_format_date(
110
110
  self, *, data: list[tuple[whenever.Date, float]]
111
111
  ) -> None:
@@ -116,7 +116,7 @@ class TestPlotDataFrames:
116
116
  )
117
117
  _ = plot_dataframes(df, x="index", y="value")
118
118
 
119
- @given(data=lists(tuples(zoned_datetimes_whenever(), floats(-10, 10))))
119
+ @given(data=lists(tuples(zoned_datetimes(), floats(-10, 10))))
120
120
  def test_tooltip_format_date_time(
121
121
  self, *, data: list[tuple[ZonedDateTime, float]]
122
122
  ) -> None:
@@ -63,7 +63,7 @@ from utilities.iterables import one, unique_everseen
63
63
  from utilities.pytest import skipif_windows
64
64
  from utilities.sentinel import Sentinel, sentinel
65
65
  from utilities.timer import Timer
66
- from utilities.whenever2 import SECOND, get_now
66
+ from utilities.whenever import SECOND, get_now
67
67
 
68
68
  if TYPE_CHECKING:
69
69
  from collections.abc import AsyncIterator
@@ -8,7 +8,7 @@ from pytest import approx
8
8
  from tests.conftest import IS_CI
9
9
  from utilities.asyncio import Looper
10
10
  from utilities.contextlib import suppress_super_object_attribute_error
11
- from utilities.whenever2 import SECOND
11
+ from utilities.whenever import SECOND
12
12
 
13
13
  if TYPE_CHECKING:
14
14
  from collections.abc import Iterator
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from utilities.asyncio import sleep_td
4
4
  from utilities.atools import call_memoized
5
- from utilities.whenever2 import SECOND
5
+ from utilities.whenever import SECOND
6
6
 
7
7
 
8
8
  class TestCallMemoized:
@@ -7,8 +7,8 @@ from hypothesis.strategies import integers, none
7
7
 
8
8
  from utilities.asyncio import sleep_td
9
9
  from utilities.cachetools import TTLSet, cache
10
- from utilities.hypothesis import time_deltas_whenever
11
- from utilities.whenever2 import SECOND
10
+ from utilities.hypothesis import time_deltas
11
+ from utilities.whenever import SECOND
12
12
 
13
13
  if TYPE_CHECKING:
14
14
  from whenever import TimeDelta
@@ -21,9 +21,7 @@ class TestCache:
21
21
  @example(max_size=1, max_duration=SECOND)
22
22
  @given(
23
23
  max_size=integers(1, 10) | none(),
24
- max_duration=time_deltas_whenever(
25
- min_value=0.1 * SECOND, max_value=10.0 * SECOND
26
- )
24
+ max_duration=time_deltas(min_value=0.1 * SECOND, max_value=10.0 * SECOND)
27
25
  | none(),
28
26
  )
29
27
  def test_main(self, *, max_size: int, max_duration: TimeDelta) -> None:
@@ -21,6 +21,8 @@ from hypothesis.strategies import (
21
21
  )
22
22
  from pytest import mark, param
23
23
 
24
+ import utilities
25
+ import utilities.whenever
24
26
  from utilities.click import (
25
27
  CONTEXT_SETTINGS_HELP_OPTION_NAMES,
26
28
  Date,
@@ -42,18 +44,17 @@ from utilities.click import (
42
44
  TimeDelta,
43
45
  ZonedDateTime,
44
46
  )
45
- from utilities.datetime import serialize_month
46
47
  from utilities.hypothesis import (
47
- date_deltas_whenever,
48
- date_time_deltas_whenever,
49
- dates_whenever,
48
+ date_deltas,
49
+ date_time_deltas,
50
+ dates,
50
51
  months,
51
52
  pairs,
52
- plain_datetimes_whenever,
53
+ plain_datetimes,
53
54
  text_ascii,
54
- time_deltas_whenever,
55
- times_whenever,
56
- zoned_datetimes_whenever,
55
+ time_deltas,
56
+ times,
57
+ zoned_datetimes,
57
58
  )
58
59
  from utilities.text import join_strs, strip_and_dedent
59
60
 
@@ -183,30 +184,28 @@ class TestParameters:
183
184
  @mark.parametrize(
184
185
  ("param", "exp_repr", "strategy", "serialize", "failable"),
185
186
  [
186
- param(
187
- Date(), "DATE", dates_whenever(), whenever.Date.format_common_iso, True
188
- ),
189
- param(
190
- Enum(_ExampleEnum),
191
- "ENUM[_ExampleEnum]",
192
- sampled_from(_ExampleEnum),
193
- attrgetter("name"),
194
- True,
195
- ),
187
+ param(Date(), "DATE", dates(), whenever.Date.format_common_iso, True),
196
188
  param(
197
189
  DateDelta(),
198
190
  "DATE DELTA",
199
- date_deltas_whenever(parsable=True),
191
+ date_deltas(parsable=True),
200
192
  whenever.DateDelta.format_common_iso,
201
193
  True,
202
194
  ),
203
195
  param(
204
196
  DateTimeDelta(),
205
197
  "DATE-TIME DELTA",
206
- date_time_deltas_whenever(parsable=True),
198
+ date_time_deltas(parsable=True),
207
199
  whenever.DateTimeDelta.format_common_iso,
208
200
  True,
209
201
  ),
202
+ param(
203
+ Enum(_ExampleEnum),
204
+ "ENUM[_ExampleEnum]",
205
+ sampled_from(_ExampleEnum),
206
+ attrgetter("name"),
207
+ True,
208
+ ),
210
209
  param(
211
210
  FrozenSetChoices(["a", "b", "c"]),
212
211
  "FROZENSET[Choice(['a', 'b', 'c'])]",
@@ -235,28 +234,32 @@ class TestParameters:
235
234
  _lift_serializer(attrgetter("name")),
236
235
  True,
237
236
  ),
238
- param(Month(), "MONTH", months(), serialize_month, True),
237
+ param(
238
+ Month(),
239
+ "MONTH",
240
+ months(),
241
+ utilities.whenever.Month.format_common_iso,
242
+ True,
243
+ ),
239
244
  param(
240
245
  PlainDateTime(),
241
246
  "PLAIN DATE-TIME",
242
- plain_datetimes_whenever(),
247
+ plain_datetimes(),
243
248
  whenever.PlainDateTime.format_common_iso,
244
249
  True,
245
250
  ),
246
- param(
247
- Time(), "TIME", times_whenever(), whenever.Time.format_common_iso, True
248
- ),
251
+ param(Time(), "TIME", times(), whenever.Time.format_common_iso, True),
249
252
  param(
250
253
  TimeDelta(),
251
254
  "TIME-DELTA",
252
- time_deltas_whenever(),
255
+ time_deltas(),
253
256
  whenever.TimeDelta.format_common_iso,
254
257
  True,
255
258
  ),
256
259
  param(
257
260
  ZonedDateTime(),
258
261
  "ZONED DATE-TIME",
259
- zoned_datetimes_whenever(),
262
+ zoned_datetimes(),
260
263
  whenever.ZonedDateTime.format_common_iso,
261
264
  True,
262
265
  ),
@@ -5,7 +5,7 @@ from re import search
5
5
 
6
6
  from tests.conftest import SKIPIF_CI
7
7
  from utilities.fastapi import PingReceiver
8
- from utilities.whenever2 import SECOND
8
+ from utilities.whenever import SECOND
9
9
 
10
10
 
11
11
  class TestPingReceiver:
@@ -95,7 +95,7 @@ from utilities.functions import (
95
95
  yield_object_properties,
96
96
  )
97
97
  from utilities.sentinel import sentinel
98
- from utilities.whenever2 import NOW_UTC, ZERO_TIME, get_now, get_today
98
+ from utilities.whenever import NOW_UTC, ZERO_TIME, get_now, get_today
99
99
 
100
100
  if TYPE_CHECKING:
101
101
  import datetime as dt
@@ -4,7 +4,7 @@ from ipaddress import IPv4Address
4
4
 
5
5
  from utilities.http import get_public_ip, yield_connection
6
6
  from utilities.pytest import throttle
7
- from utilities.whenever2 import MINUTE
7
+ from utilities.whenever import MINUTE
8
8
 
9
9
 
10
10
  class TestGetPublicIP:
@@ -5,7 +5,7 @@ from pathlib import Path
5
5
  from re import search
6
6
  from typing import TYPE_CHECKING, Any, cast
7
7
 
8
- from hypothesis import HealthCheck, Phase, assume, given, settings
8
+ from hypothesis import Phase, assume, given, settings
9
9
  from hypothesis.errors import InvalidArgument
10
10
  from hypothesis.extra.numpy import array_shapes
11
11
  from hypothesis.strategies import (
@@ -36,11 +36,6 @@ from whenever import (
36
36
  ZonedDateTime,
37
37
  )
38
38
 
39
- from utilities.datetime import (
40
- MAX_DATE_TWO_DIGIT_YEAR,
41
- MIN_DATE_TWO_DIGIT_YEAR,
42
- parse_two_digit_year,
43
- )
44
39
  from utilities.functions import ensure_int
45
40
  from utilities.hypothesis import (
46
41
  Shape,
@@ -48,10 +43,9 @@ from utilities.hypothesis import (
48
43
  _Draw2InputResolvedToSentinelError,
49
44
  assume_does_not_raise,
50
45
  bool_arrays,
51
- date_deltas_whenever,
52
- date_time_deltas_whenever,
53
- dates_two_digit_year,
54
- dates_whenever,
46
+ date_deltas,
47
+ date_time_deltas,
48
+ dates,
55
49
  draw2,
56
50
  float32s,
57
51
  float64s,
@@ -68,7 +62,7 @@ from utilities.hypothesis import (
68
62
  numbers,
69
63
  pairs,
70
64
  paths,
71
- plain_datetimes_whenever,
65
+ plain_datetimes,
72
66
  random_states,
73
67
  sentinels,
74
68
  sets_fixed_length,
@@ -84,13 +78,13 @@ from utilities.hypothesis import (
84
78
  text_clean,
85
79
  text_digits,
86
80
  text_printable,
87
- time_deltas_whenever,
88
- times_whenever,
81
+ time_deltas,
82
+ times,
89
83
  triples,
90
84
  uint32s,
91
85
  uint64s,
92
86
  versions,
93
- zoned_datetimes_whenever,
87
+ zoned_datetimes,
94
88
  )
95
89
  from utilities.math import (
96
90
  MAX_FLOAT32,
@@ -110,14 +104,19 @@ from utilities.os import temp_environ
110
104
  from utilities.platform import maybe_yield_lower_case
111
105
  from utilities.sentinel import Sentinel
112
106
  from utilities.version import Version
113
- from utilities.whenever2 import to_days, to_nanos
107
+ from utilities.whenever import (
108
+ DATE_TWO_DIGIT_YEAR_MAX,
109
+ DATE_TWO_DIGIT_YEAR_MIN,
110
+ Month,
111
+ to_days,
112
+ to_nanos,
113
+ )
114
114
 
115
115
  if TYPE_CHECKING:
116
116
  from collections.abc import Iterable
117
117
  from collections.abc import Set as AbstractSet
118
118
  from zoneinfo import ZoneInfo
119
119
 
120
- from utilities.datetime import Month
121
120
  from utilities.tempfile import TemporaryDirectory
122
121
  from utilities.types import Number
123
122
 
@@ -165,16 +164,14 @@ class TestBoolArrays:
165
164
  assert array.shape == shape
166
165
 
167
166
 
168
- class TestDateDeltasWhenever:
167
+ class TestDateDeltas:
169
168
  @given(data=data(), parsable=booleans())
170
169
  def test_main(self, *, data: DataObject, parsable: bool) -> None:
171
- min_value = data.draw(date_deltas_whenever() | none())
172
- max_value = data.draw(date_deltas_whenever() | none())
170
+ min_value = data.draw(date_deltas() | none())
171
+ max_value = data.draw(date_deltas() | none())
173
172
  with assume_does_not_raise(InvalidArgument):
174
173
  delta = data.draw(
175
- date_deltas_whenever(
176
- min_value=min_value, max_value=max_value, parsable=parsable
177
- )
174
+ date_deltas(min_value=min_value, max_value=max_value, parsable=parsable)
178
175
  )
179
176
  assert isinstance(delta, DateDelta)
180
177
  days = to_days(delta)
@@ -186,14 +183,14 @@ class TestDateDeltasWhenever:
186
183
  assert DateDelta.parse_common_iso(delta.format_common_iso()) == delta
187
184
 
188
185
 
189
- class TestDateTimeDeltasWhenever:
186
+ class TestDateTimeDeltas:
190
187
  @given(data=data(), parsable=booleans())
191
188
  def test_main(self, *, data: DataObject, parsable: bool) -> None:
192
- min_value = data.draw(date_time_deltas_whenever() | none())
193
- max_value = data.draw(date_time_deltas_whenever() | none())
189
+ min_value = data.draw(date_time_deltas() | none())
190
+ max_value = data.draw(date_time_deltas() | none())
194
191
  with assume_does_not_raise(InvalidArgument):
195
192
  delta = data.draw(
196
- date_time_deltas_whenever(
193
+ date_time_deltas(
197
194
  min_value=min_value, max_value=max_value, parsable=parsable
198
195
  )
199
196
  )
@@ -207,34 +204,23 @@ class TestDateTimeDeltasWhenever:
207
204
  assert DateTimeDelta.parse_common_iso(delta.format_common_iso()) == delta
208
205
 
209
206
 
210
- class TestDatesTwoDigitYear:
211
- @given(data=data())
212
- def test_main(self, *, data: DataObject) -> None:
213
- min_value, max_value = data.draw(pairs(dates_two_digit_year(), sorted=True))
214
- date = data.draw(dates_two_digit_year(min_value=min_value, max_value=max_value))
215
- assert (
216
- max(min_value, MIN_DATE_TWO_DIGIT_YEAR)
217
- <= date
218
- <= min(max_value, MAX_DATE_TWO_DIGIT_YEAR)
219
- )
220
- year = f"{date:%y}"
221
- parsed = parse_two_digit_year(year)
222
- assert date.year == parsed
223
-
224
-
225
- class TestDatesWhenever:
226
- @given(data=data())
227
- def test_main(self, *, data: DataObject) -> None:
228
- min_value = data.draw(dates_whenever() | none())
229
- max_value = data.draw(dates_whenever() | none())
207
+ class TestDates:
208
+ @given(data=data(), two_digit=booleans())
209
+ def test_main(self, *, data: DataObject, two_digit: bool) -> None:
210
+ min_value = data.draw(dates() | none())
211
+ max_value = data.draw(dates() | none())
230
212
  with assume_does_not_raise(InvalidArgument):
231
- date = data.draw(dates_whenever(min_value=min_value, max_value=max_value))
213
+ date = data.draw(
214
+ dates(min_value=min_value, max_value=max_value, two_digit=two_digit)
215
+ )
232
216
  assert isinstance(date, Date)
233
217
  assert Date.parse_common_iso(date.format_common_iso()) == date
234
218
  if min_value is not None:
235
219
  assert date >= min_value
236
220
  if max_value is not None:
237
221
  assert date <= max_value
222
+ if two_digit:
223
+ assert DATE_TWO_DIGIT_YEAR_MIN <= date <= DATE_TWO_DIGIT_YEAR_MAX
238
224
 
239
225
 
240
226
  class TestDraw2:
@@ -579,18 +565,23 @@ class TestListsFixedLength:
579
565
 
580
566
 
581
567
  class TestMonths:
582
- @given(data=data())
583
- def test_main(self, *, data: DataObject) -> None:
584
- _ = data.draw(months())
585
-
586
- @given(data=data(), min_value=months(), max_value=months())
587
- @settings(suppress_health_check={HealthCheck.filter_too_much})
588
- def test_min_and_max_value(
589
- self, *, data: DataObject, min_value: Month, max_value: Month
590
- ) -> None:
591
- _ = assume(min_value <= max_value)
592
- month = data.draw(months(min_value=min_value, max_value=max_value))
593
- assert min_value <= month <= max_value
568
+ @given(data=data(), two_digit=booleans())
569
+ def test_main(self, *, data: DataObject, two_digit: bool) -> None:
570
+ min_value = data.draw(months() | none())
571
+ max_value = data.draw(months() | none())
572
+ with assume_does_not_raise(InvalidArgument):
573
+ month = data.draw(
574
+ months(min_value=min_value, max_value=max_value, two_digit=two_digit)
575
+ )
576
+ assert isinstance(month, Month)
577
+ assert Month.parse_common_iso(month.format_common_iso()) == month
578
+ if min_value is not None:
579
+ assert month >= min_value
580
+ if max_value is not None:
581
+ assert month <= max_value
582
+ if two_digit:
583
+ assert month.to_date() >= DATE_TWO_DIGIT_YEAR_MIN
584
+ assert month.to_date() <= DATE_TWO_DIGIT_YEAR_MAX
594
585
 
595
586
 
596
587
  class TestNamespaceMixins:
@@ -651,14 +642,14 @@ class TestPaths:
651
642
  validate_filepath(str(path))
652
643
 
653
644
 
654
- class TestPlainDateTimesWhenever:
645
+ class TestPlainDateTimes:
655
646
  @given(data=data())
656
647
  def test_main(self, *, data: DataObject) -> None:
657
- min_value = data.draw(plain_datetimes_whenever() | none())
658
- max_value = data.draw(plain_datetimes_whenever() | none())
648
+ min_value = data.draw(plain_datetimes() | none())
649
+ max_value = data.draw(plain_datetimes() | none())
659
650
  with assume_does_not_raise(InvalidArgument):
660
651
  datetime = data.draw(
661
- plain_datetimes_whenever(min_value=min_value, max_value=max_value)
652
+ plain_datetimes(min_value=min_value, max_value=max_value)
662
653
  )
663
654
  assert isinstance(datetime, PlainDateTime)
664
655
  assert PlainDateTime.parse_common_iso(datetime.format_common_iso()) == datetime
@@ -897,12 +888,10 @@ class TestTextPrintable:
897
888
  class TestTimeDeltas:
898
889
  @given(data=data())
899
890
  def test_main(self, *, data: DataObject) -> None:
900
- min_value = data.draw(time_deltas_whenever() | none())
901
- max_value = data.draw(time_deltas_whenever() | none())
891
+ min_value = data.draw(time_deltas() | none())
892
+ max_value = data.draw(time_deltas() | none())
902
893
  with assume_does_not_raise(InvalidArgument):
903
- delta = data.draw(
904
- time_deltas_whenever(min_value=min_value, max_value=max_value)
905
- )
894
+ delta = data.draw(time_deltas(min_value=min_value, max_value=max_value))
906
895
  assert isinstance(delta, TimeDelta)
907
896
  assert TimeDelta.parse_common_iso(delta.format_common_iso()) == delta
908
897
  if min_value is not None:
@@ -914,10 +903,10 @@ class TestTimeDeltas:
914
903
  class TestTimes:
915
904
  @given(data=data())
916
905
  def test_main(self, *, data: DataObject) -> None:
917
- min_value = data.draw(times_whenever() | none())
918
- max_value = data.draw(times_whenever() | none())
906
+ min_value = data.draw(times() | none())
907
+ max_value = data.draw(times() | none())
919
908
  with assume_does_not_raise(InvalidArgument):
920
- time = data.draw(times_whenever(min_value=min_value, max_value=max_value))
909
+ time = data.draw(times(min_value=min_value, max_value=max_value))
921
910
  assert isinstance(time, Time)
922
911
  assert Time.parse_common_iso(time.format_common_iso()) == time
923
912
  if min_value is not None:
@@ -967,15 +956,14 @@ class TestVersions:
967
956
  assert version.suffix is None
968
957
 
969
958
 
970
- class TestZonedDateTimesWhenever:
959
+ class TestZonedDateTimes:
971
960
  @given(data=data(), time_zone=timezones())
972
- @settings(suppress_health_check={HealthCheck.filter_too_much})
973
961
  def test_main(self, *, data: DataObject, time_zone: ZoneInfo) -> None:
974
- min_value = data.draw(zoned_datetimes_whenever() | none())
975
- max_value = data.draw(zoned_datetimes_whenever() | none())
962
+ min_value = data.draw(zoned_datetimes() | none())
963
+ max_value = data.draw(zoned_datetimes() | none())
976
964
  with assume_does_not_raise(InvalidArgument):
977
965
  datetime = data.draw(
978
- zoned_datetimes_whenever(
966
+ zoned_datetimes(
979
967
  min_value=min_value, max_value=max_value, time_zone=time_zone
980
968
  )
981
969
  )
@@ -992,7 +980,5 @@ class TestZonedDateTimesWhenever:
992
980
  def test_examples(self, *, data: DataObject, time_zone: ZoneInfo) -> None:
993
981
  with assume_does_not_raise(TimeZoneNotFoundError):
994
982
  max_value = ZonedDateTime(1, 1, 2, tz=time_zone.key)
995
- datetime = data.draw(
996
- zoned_datetimes_whenever(max_value=max_value, time_zone=time_zone)
997
- )
983
+ datetime = data.draw(zoned_datetimes(max_value=max_value, time_zone=time_zone))
998
984
  _ = datetime.py_datetime()
@@ -17,7 +17,7 @@ from utilities.hypothesis import (
17
17
  pairs,
18
18
  temp_paths,
19
19
  text_ascii,
20
- zoned_datetimes_whenever,
20
+ zoned_datetimes,
21
21
  )
22
22
  from utilities.iterables import one
23
23
  from utilities.logging import (
@@ -38,7 +38,7 @@ from utilities.logging import (
38
38
  from utilities.text import unique_str
39
39
  from utilities.types import LogLevel
40
40
  from utilities.typing import get_args
41
- from utilities.whenever2 import format_compact, get_now
41
+ from utilities.whenever import format_compact, get_now
42
42
 
43
43
  if TYPE_CHECKING:
44
44
  from collections.abc import Mapping
@@ -315,7 +315,7 @@ class TestRotatingLogFile:
315
315
  assert result.start is None
316
316
  assert result.end is None
317
317
 
318
- @given(index=integers(min_value=1), end=zoned_datetimes_whenever())
318
+ @given(index=integers(min_value=1), end=zoned_datetimes())
319
319
  def test_from_path_with_index_and_end(
320
320
  self, *, index: int, end: ZonedDateTime
321
321
  ) -> None:
@@ -328,10 +328,7 @@ class TestRotatingLogFile:
328
328
  assert result.start is None
329
329
  assert result.end == end.round()
330
330
 
331
- @given(
332
- index=integers(min_value=1),
333
- datetimes=pairs(zoned_datetimes_whenever(), sorted=True),
334
- )
331
+ @given(index=integers(min_value=1), datetimes=pairs(zoned_datetimes(), sorted=True))
335
332
  def test_from_path_with_index_start_and_end(
336
333
  self, *, index: int, datetimes: tuple[ZonedDateTime, ZonedDateTime]
337
334
  ) -> None:
@@ -359,9 +356,7 @@ class TestRotatingLogFile:
359
356
  file = _RotatingLogFile(directory=root, stem="log", suffix=".txt", index=index)
360
357
  assert file.path == root.joinpath(f"log.{index}.txt")
361
358
 
362
- @given(
363
- root=temp_paths(), index=integers(min_value=1), end=zoned_datetimes_whenever()
364
- )
359
+ @given(root=temp_paths(), index=integers(min_value=1), end=zoned_datetimes())
365
360
  def test_path_with_index_and_end(
366
361
  self, *, root: Path, index: int, end: ZonedDateTime
367
362
  ) -> None:
@@ -373,7 +368,7 @@ class TestRotatingLogFile:
373
368
  @given(
374
369
  root=temp_paths(),
375
370
  index=integers(min_value=1),
376
- datetimes=pairs(zoned_datetimes_whenever(), sorted=True),
371
+ datetimes=pairs(zoned_datetimes(), sorted=True),
377
372
  )
378
373
  def test_path_with_index_start_and_end(
379
374
  self, *, root: Path, index: int, datetimes: tuple[ZonedDateTime, ZonedDateTime]
@@ -8,7 +8,7 @@ from hypothesis.strategies import booleans
8
8
  from luigi import BoolParameter, Task
9
9
  from pytest import mark, param
10
10
 
11
- from utilities.hypothesis import namespace_mixins, temp_paths, zoned_datetimes_whenever
11
+ from utilities.hypothesis import namespace_mixins, temp_paths, zoned_datetimes
12
12
  from utilities.luigi import (
13
13
  ExternalFile,
14
14
  ExternalTask,
@@ -31,7 +31,7 @@ class TestBuild:
31
31
 
32
32
 
33
33
  class TestDateTimeParameter:
34
- @given(datetime=zoned_datetimes_whenever())
34
+ @given(datetime=zoned_datetimes())
35
35
  @mark.parametrize("type_", [param("datetime"), param("str")])
36
36
  def test_main(
37
37
  self, *, datetime: ZonedDateTime, type_: Literal["datetime", "str"]