dycw-utilities 0.136.10__tar.gz → 0.137.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 (216) hide show
  1. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/PKG-INFO +1 -1
  2. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/pyproject.toml +2 -2
  3. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_logging.py +6 -6
  4. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_sqlalchemy.py +2 -3
  5. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_whenever.py +8 -0
  6. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/__init__.py +1 -1
  7. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/fpdf2.py +2 -2
  8. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/logging.py +8 -3
  9. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/pyinstrument.py +2 -2
  10. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/traceback.py +4 -3
  11. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/whenever.py +10 -1
  12. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/.gitignore +0 -0
  13. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/LICENSE +0 -0
  14. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/README.md +0 -0
  15. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/__init__.py +0 -0
  16. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/conftest.py +0 -0
  17. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/modules/__init__.py +0 -0
  18. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/modules/package_missing/__init__.py +0 -0
  19. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/modules/package_missing/module.py +0 -0
  20. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/modules/package_with/__init__.py +0 -0
  21. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/modules/package_with/outer_1.py +0 -0
  22. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/modules/package_with/outer_2.py +0 -0
  23. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  24. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  25. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  26. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  27. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/modules/package_without/__init__.py +0 -0
  28. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/modules/package_without/module_1.py +0 -0
  29. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/modules/package_without/module_2.py +0 -0
  30. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/modules/standalone.py +0 -0
  31. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/modules/with_imports.py +0 -0
  32. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  33. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  34. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  35. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  36. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  37. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  38. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  39. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  40. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_aiolimiter.py +0 -0
  41. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_altair.py +0 -0
  42. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_asyncio.py +0 -0
  43. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_asyncio_classes/__init__.py +0 -0
  44. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_asyncio_classes/loopers.py +0 -0
  45. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_asyncio_classes/redis.py +0 -0
  46. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_atomicwrites.py +0 -0
  47. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_atools.py +0 -0
  48. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_cachetools.py +0 -0
  49. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_click.py +0 -0
  50. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_concurrent.py +0 -0
  51. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_contextlib.py +0 -0
  52. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_contextvars.py +0 -0
  53. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_cryptography.py +0 -0
  54. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_cvxpy.py +0 -0
  55. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_dataclasses.py +0 -0
  56. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_enum.py +0 -0
  57. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_errors.py +0 -0
  58. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_eventkit.py +0 -0
  59. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_fastapi.py +0 -0
  60. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_fpdf2.py +0 -0
  61. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_functions.py +0 -0
  62. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_functools.py +0 -0
  63. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_getpass.py +0 -0
  64. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_git.py +0 -0
  65. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_hashlib.py +0 -0
  66. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_http.py +0 -0
  67. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_hypothesis.py +0 -0
  68. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_importlib.py +0 -0
  69. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_inflect.py +0 -0
  70. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_ipython.py +0 -0
  71. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_iterables.py +0 -0
  72. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_jupyter.py +0 -0
  73. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_libcst.py +0 -0
  74. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_lightweight_charts.py +0 -0
  75. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_luigi.py +0 -0
  76. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_math.py +0 -0
  77. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_memory_profiler.py +0 -0
  78. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_modules.py +0 -0
  79. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_more_itertools.py +0 -0
  80. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_numpy.py +0 -0
  81. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_objects/__init__.py +0 -0
  82. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_objects/objects.py +0 -0
  83. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_operator.py +0 -0
  84. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_optuna.py +0 -0
  85. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_orjson.py +0 -0
  86. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_os.py +0 -0
  87. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_parse.py +0 -0
  88. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_pathlib.py +0 -0
  89. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_period.py +0 -0
  90. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_pickle.py +0 -0
  91. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_platform.py +0 -0
  92. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_polars.py +0 -0
  93. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_polars_ols.py +0 -0
  94. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_pottery.py +0 -0
  95. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_pqdm.py +0 -0
  96. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_psutil.py +0 -0
  97. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_pydantic.py +0 -0
  98. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_pyinstrument.py +0 -0
  99. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_pytest.py +0 -0
  100. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_pytest_regressions.py +0 -0
  101. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_python_dotenv.py +0 -0
  102. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_random.py +0 -0
  103. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_re.py +0 -0
  104. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_redis.py +0 -0
  105. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_reprlib.py +0 -0
  106. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_scipy.py +0 -0
  107. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_sentinel.py +0 -0
  108. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_shelve.py +0 -0
  109. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_slack_sdk.py +0 -0
  110. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_socket.py +0 -0
  111. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_sqlalchemy_polars.py +0 -0
  112. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_statsmodels.py +0 -0
  113. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_streamlit.py +0 -0
  114. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_string.py +0 -0
  115. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_tempfile.py +0 -0
  116. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_text.py +0 -0
  117. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_threading.py +0 -0
  118. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_timer.py +0 -0
  119. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_traceback.py +0 -0
  120. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_typed_settings.py +0 -0
  121. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_types.py +0 -0
  122. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_typing.py +0 -0
  123. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_typing_funcs/__init__.py +0 -0
  124. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_typing_funcs/no_future.py +0 -0
  125. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_typing_funcs/with_future.py +0 -0
  126. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_tzdata.py +0 -0
  127. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_tzlocal.py +0 -0
  128. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_uuid.py +0 -0
  129. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_version.py +0 -0
  130. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_warnings.py +0 -0
  131. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_zipfile.py +0 -0
  132. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/tests/test_zoneinfo.py +0 -0
  133. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/aiolimiter.py +0 -0
  134. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/altair.py +0 -0
  135. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/asyncio.py +0 -0
  136. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/atomicwrites.py +0 -0
  137. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/atools.py +0 -0
  138. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/cachetools.py +0 -0
  139. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/click.py +0 -0
  140. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/concurrent.py +0 -0
  141. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/contextlib.py +0 -0
  142. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/contextvars.py +0 -0
  143. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/cryptography.py +0 -0
  144. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/cvxpy.py +0 -0
  145. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/dataclasses.py +0 -0
  146. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/enum.py +0 -0
  147. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/errors.py +0 -0
  148. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/eventkit.py +0 -0
  149. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/fastapi.py +0 -0
  150. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/functions.py +0 -0
  151. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/functools.py +0 -0
  152. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/getpass.py +0 -0
  153. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/git.py +0 -0
  154. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/hashlib.py +0 -0
  155. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/http.py +0 -0
  156. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/hypothesis.py +0 -0
  157. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/importlib.py +0 -0
  158. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/inflect.py +0 -0
  159. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/ipython.py +0 -0
  160. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/iterables.py +0 -0
  161. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/jupyter.py +0 -0
  162. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/libcst.py +0 -0
  163. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/lightweight_charts.py +0 -0
  164. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/luigi.py +0 -0
  165. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/math.py +0 -0
  166. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/memory_profiler.py +0 -0
  167. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/modules.py +0 -0
  168. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/more_itertools.py +0 -0
  169. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/numpy.py +0 -0
  170. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/operator.py +0 -0
  171. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/optuna.py +0 -0
  172. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/orjson.py +0 -0
  173. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/os.py +0 -0
  174. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/parse.py +0 -0
  175. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/pathlib.py +0 -0
  176. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/period.py +0 -0
  177. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/pickle.py +0 -0
  178. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/platform.py +0 -0
  179. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/polars.py +0 -0
  180. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/polars_ols.py +0 -0
  181. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/pottery.py +0 -0
  182. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/pqdm.py +0 -0
  183. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/psutil.py +0 -0
  184. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/py.typed +0 -0
  185. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/pydantic.py +0 -0
  186. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/pytest.py +0 -0
  187. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/pytest_regressions.py +0 -0
  188. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/python_dotenv.py +0 -0
  189. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/random.py +0 -0
  190. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/re.py +0 -0
  191. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/redis.py +0 -0
  192. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/reprlib.py +0 -0
  193. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/scipy.py +0 -0
  194. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/sentinel.py +0 -0
  195. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/shelve.py +0 -0
  196. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/slack_sdk.py +0 -0
  197. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/socket.py +0 -0
  198. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/sqlalchemy.py +0 -0
  199. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/sqlalchemy_polars.py +0 -0
  200. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/statsmodels.py +0 -0
  201. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/streamlit.py +0 -0
  202. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/string.py +0 -0
  203. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/tempfile.py +0 -0
  204. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/text.py +0 -0
  205. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/threading.py +0 -0
  206. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/timer.py +0 -0
  207. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/typed_settings.py +0 -0
  208. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/types.py +0 -0
  209. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/typing.py +0 -0
  210. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/tzdata.py +0 -0
  211. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/tzlocal.py +0 -0
  212. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/uuid.py +0 -0
  213. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/version.py +0 -0
  214. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/warnings.py +0 -0
  215. {dycw_utilities-0.136.10 → dycw_utilities-0.137.0}/src/utilities/zipfile.py +0 -0
  216. {dycw_utilities-0.136.10 → dycw_utilities-0.137.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.136.10
3
+ Version: 0.137.0
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -105,7 +105,7 @@ dependencies = [
105
105
  name = "dycw-utilities"
106
106
  readme = "README.md"
107
107
  requires-python = ">= 3.12"
108
- version = "0.136.10"
108
+ version = "0.137.0"
109
109
 
110
110
  [project.optional-dependencies]
111
111
  logging = [
@@ -133,7 +133,7 @@ test = [
133
133
  # bump-my-version
134
134
  [tool.bumpversion]
135
135
  allow_dirty = true
136
- current_version = "0.136.10"
136
+ current_version = "0.137.0"
137
137
 
138
138
  [[tool.bumpversion.files]]
139
139
  filename = "src/utilities/__init__.py"
@@ -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.whenever import format_compact, get_now
41
+ from utilities.whenever import format_compact, get_now, to_local_plain
42
42
 
43
43
  if TYPE_CHECKING:
44
44
  from collections.abc import Mapping
@@ -192,7 +192,7 @@ class TestComputeRolloverActions:
192
192
 
193
193
  await sleep(1)
194
194
  tmp_path.joinpath("log.txt").touch()
195
- now = format_compact(get_now().to_plain())
195
+ now = format_compact(to_local_plain(get_now()))
196
196
  tmp_path.joinpath(f"log.99__{now}__{now}.txt").touch()
197
197
  actions = _compute_rollover_actions(tmp_path, "log", ".txt")
198
198
  assert len(actions.deletions) == 2
@@ -319,7 +319,7 @@ class TestRotatingLogFile:
319
319
  def test_from_path_with_index_and_end(
320
320
  self, *, index: int, end: ZonedDateTime
321
321
  ) -> None:
322
- path = Path(f"log.{index}__{format_compact(end.to_plain())}.txt")
322
+ path = Path(f"log.{index}__{format_compact(to_local_plain(end))}.txt")
323
323
  result = _RotatingLogFile.from_path(path, "log", ".txt")
324
324
  assert result is not None
325
325
  assert result.stem == "log"
@@ -334,7 +334,7 @@ class TestRotatingLogFile:
334
334
  ) -> None:
335
335
  start, end = datetimes
336
336
  path = Path(
337
- f"log.{index}__{format_compact(start.to_plain())}__{format_compact(end.to_plain())}.txt"
337
+ f"log.{index}__{format_compact(to_local_plain(start))}__{format_compact(to_local_plain(end))}.txt"
338
338
  )
339
339
  result = _RotatingLogFile.from_path(path, "log", ".txt")
340
340
  assert result is not None
@@ -366,7 +366,7 @@ class TestRotatingLogFile:
366
366
  directory=root, stem="log", suffix=".txt", index=index, end=end
367
367
  )
368
368
  assert file.path == root.joinpath(
369
- f"log.{index}__{format_compact(end.to_plain())}.txt"
369
+ f"log.{index}__{format_compact(to_local_plain(end))}.txt"
370
370
  )
371
371
 
372
372
  @given(
@@ -382,7 +382,7 @@ class TestRotatingLogFile:
382
382
  directory=root, stem="log", suffix=".txt", index=index, start=start, end=end
383
383
  )
384
384
  assert file.path == root.joinpath(
385
- f"log.{index}__{format_compact(start.to_plain())}__{format_compact(end.to_plain())}.txt"
385
+ f"log.{index}__{format_compact(to_local_plain(start))}__{format_compact(to_local_plain(end))}.txt"
386
386
  )
387
387
 
388
388
 
@@ -89,7 +89,7 @@ from utilities.sqlalchemy import (
89
89
  )
90
90
  from utilities.text import strip_and_dedent
91
91
  from utilities.typing import get_args, get_literal_elements
92
- from utilities.whenever import SECOND, format_compact, get_now
92
+ from utilities.whenever import SECOND, format_compact, get_now, to_local_plain
93
93
 
94
94
  if TYPE_CHECKING:
95
95
  from collections.abc import Callable, Iterator
@@ -102,9 +102,8 @@ if TYPE_CHECKING:
102
102
 
103
103
  def _table_names() -> str:
104
104
  """Generate at unique string."""
105
- now = get_now()
106
105
  key = str(uuid4()).replace("-", "")
107
- return f"{format_compact(now)}_{key}"
106
+ return f"{format_compact(to_local_plain(get_now()))}_{key}"
108
107
 
109
108
 
110
109
  @overload
@@ -99,6 +99,7 @@ from utilities.whenever import (
99
99
  to_date,
100
100
  to_date_time_delta,
101
101
  to_days,
102
+ to_local_plain,
102
103
  to_nanos,
103
104
  to_time_delta,
104
105
  to_zoned_date_time,
@@ -636,6 +637,13 @@ class TestToDays:
636
637
  _ = to_days(delta)
637
638
 
638
639
 
640
+ class TestToLocalPlain:
641
+ @given(date_time=zoned_datetimes())
642
+ def test_main(self, *, date_time: ZonedDateTime) -> None:
643
+ result = to_local_plain(date_time)
644
+ assert isinstance(result, PlainDateTime)
645
+
646
+
639
647
  class TestToZonedDateTime:
640
648
  @given(date_time=zoned_datetimes())
641
649
  def test_date_time(self, *, date_time: ZonedDateTime) -> None:
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.136.10"
3
+ __version__ = "0.137.0"
@@ -6,7 +6,7 @@ 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.whenever import format_compact, get_now_local
9
+ from utilities.whenever import format_compact, get_now, to_local_plain
10
10
 
11
11
  if TYPE_CHECKING:
12
12
  from collections.abc import Iterator
@@ -47,7 +47,7 @@ def yield_pdf(*, header: str | None = None) -> Iterator[_BasePDF]:
47
47
  def footer(self) -> None:
48
48
  self.set_y(-15)
49
49
  self.set_font(family="Helvetica", style="I", size=8)
50
- page_no, now = (self.page_no(), format_compact(get_now_local().to_plain()))
50
+ page_no, now = (self.page_no(), format_compact(to_local_plain(get_now())))
51
51
  text = f"page {page_no}/{{}}; {now}"
52
52
  _ = self.cell(
53
53
  w=0,
@@ -45,7 +45,12 @@ from utilities.re import (
45
45
  )
46
46
  from utilities.sentinel import Sentinel, sentinel
47
47
  from utilities.tzlocal import LOCAL_TIME_ZONE_NAME
48
- from utilities.whenever import WheneverLogRecord, format_compact, get_now_local
48
+ from utilities.whenever import (
49
+ WheneverLogRecord,
50
+ format_compact,
51
+ get_now_local,
52
+ to_local_plain,
53
+ )
49
54
 
50
55
  if TYPE_CHECKING:
51
56
  from collections.abc import Callable, Iterable, Mapping
@@ -533,9 +538,9 @@ class _RotatingLogFile:
533
538
  case int() as index, None, None:
534
539
  tail = str(index)
535
540
  case int() as index, None, ZonedDateTime() as end:
536
- tail = f"{index}__{format_compact(end.to_plain())}"
541
+ tail = f"{index}__{format_compact(to_local_plain(end))}"
537
542
  case int() as index, ZonedDateTime() as start, ZonedDateTime() as end:
538
- tail = f"{index}__{format_compact(start.to_plain())}__{format_compact(end.to_plain())}"
543
+ tail = f"{index}__{format_compact(to_local_plain(start))}__{format_compact(to_local_plain(end))}"
539
544
  case _: # pragma: no cover
540
545
  raise ImpossibleCaseError(
541
546
  case=[f"{self.index=}", f"{self.start=}", f"{self.end=}"]
@@ -8,7 +8,7 @@ from pyinstrument.profiler import Profiler
8
8
 
9
9
  from utilities.atomicwrites import writer
10
10
  from utilities.pathlib import get_path
11
- from utilities.whenever import format_compact, get_now_local
11
+ from utilities.whenever import format_compact, get_now, to_local_plain
12
12
 
13
13
  if TYPE_CHECKING:
14
14
  from collections.abc import Iterator
@@ -22,7 +22,7 @@ def profile(*, path: MaybeCallablePathLike | None = Path.cwd) -> Iterator[None]:
22
22
  with Profiler() as profiler:
23
23
  yield
24
24
  filename = get_path(path=path).joinpath(
25
- f"profile__{format_compact(get_now_local().to_plain())}.html"
25
+ f"profile__{format_compact(to_local_plain(get_now()))}.html"
26
26
  )
27
27
  with writer(filename) as temp, temp.open(mode="w") as fh:
28
28
  _ = fh.write(profiler.output_html())
@@ -31,6 +31,7 @@ from utilities.whenever import (
31
31
  format_compact,
32
32
  get_now,
33
33
  get_now_local,
34
+ to_local_plain,
34
35
  to_zoned_date_time,
35
36
  )
36
37
 
@@ -96,8 +97,8 @@ def _yield_header_lines(
96
97
  """Yield the header lines."""
97
98
  now = get_now_local()
98
99
  start_use = to_zoned_date_time(date_time=start)
99
- yield f"Date/time | {format_compact(now.to_plain())}"
100
- start_str = "" if start_use is None else format_compact(start_use.to_plain())
100
+ yield f"Date/time | {format_compact(now)}"
101
+ start_str = "" if start_use is None else format_compact(start_use)
101
102
  yield f"Started | {start_str}"
102
103
  delta = None if start_use is None else (now - start_use)
103
104
  delta_str = "" if delta is None else delta.format_common_iso()
@@ -256,7 +257,7 @@ def _make_except_hook_inner(
256
257
  if path is not None:
257
258
  path = (
258
259
  get_path(path=path)
259
- .joinpath(format_compact(get_now_local().to_plain()))
260
+ .joinpath(format_compact(to_local_plain(get_now())))
260
261
  .with_suffix(".txt")
261
262
  )
262
263
  full = format_exception_stack(
@@ -33,7 +33,7 @@ from utilities.platform import get_strftime
33
33
  from utilities.re import ExtractGroupsError, extract_groups
34
34
  from utilities.sentinel import Sentinel, sentinel
35
35
  from utilities.types import DateTimeRoundUnit, MaybeStr
36
- from utilities.tzlocal import LOCAL_TIME_ZONE
36
+ from utilities.tzlocal import LOCAL_TIME_ZONE, LOCAL_TIME_ZONE_NAME
37
37
  from utilities.zoneinfo import UTC, get_time_zone_name
38
38
 
39
39
  if TYPE_CHECKING:
@@ -668,6 +668,14 @@ def to_date_time_delta(nanos: int, /) -> DateTimeDelta:
668
668
  ##
669
669
 
670
670
 
671
+ def to_local_plain(date_time: ZonedDateTime, /) -> PlainDateTime:
672
+ """Convert a datetime to its local/plain variant."""
673
+ return date_time.to_tz(LOCAL_TIME_ZONE_NAME).to_plain()
674
+
675
+
676
+ ##
677
+
678
+
671
679
  def to_nanos(delta: DateTimeDelta, /) -> int:
672
680
  """Compute the number of nanoseconds in a date-time delta."""
673
681
  months, days, _, _ = delta.in_months_days_secs_nanos()
@@ -901,6 +909,7 @@ __all__ = [
901
909
  "to_date",
902
910
  "to_date_time_delta",
903
911
  "to_days",
912
+ "to_local_plain",
904
913
  "to_nanos",
905
914
  "to_zoned_date_time",
906
915
  ]