dycw-utilities 0.131.19__tar.gz → 0.131.20__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.131.20}/PKG-INFO +1 -1
  2. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/pyproject.toml +2 -2
  3. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_datetime.py +2 -12
  4. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_platform.py +12 -2
  5. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/__init__.py +1 -1
  6. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/datetime.py +1 -18
  7. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/platform.py +18 -0
  8. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/whenever2.py +2 -2
  9. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/.gitignore +0 -0
  10. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/LICENSE +0 -0
  11. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/README.md +0 -0
  12. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/__init__.py +0 -0
  13. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/conftest.py +0 -0
  14. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/modules/__init__.py +0 -0
  15. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/modules/package_missing/__init__.py +0 -0
  16. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/modules/package_missing/module.py +0 -0
  17. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/modules/package_with/__init__.py +0 -0
  18. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/modules/package_with/outer_1.py +0 -0
  19. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/modules/package_with/outer_2.py +0 -0
  20. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  21. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  22. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  23. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  24. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/modules/package_without/__init__.py +0 -0
  25. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/modules/package_without/module_1.py +0 -0
  26. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/modules/package_without/module_2.py +0 -0
  27. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/modules/standalone.py +0 -0
  28. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/modules/with_imports.py +0 -0
  29. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  30. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  31. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  32. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  33. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  34. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  35. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  36. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  37. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_aiolimiter.py +0 -0
  38. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_altair.py +0 -0
  39. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_asyncio.py +0 -0
  40. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_asyncio_classes/__init__.py +0 -0
  41. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_asyncio_classes/loopers.py +0 -0
  42. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_asyncio_classes/redis.py +0 -0
  43. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_atomicwrites.py +0 -0
  44. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_atools.py +0 -0
  45. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_cachetools.py +0 -0
  46. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_click.py +0 -0
  47. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_concurrent.py +0 -0
  48. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_contextlib.py +0 -0
  49. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_contextvars.py +0 -0
  50. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_cryptography.py +0 -0
  51. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_cvxpy.py +0 -0
  52. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_dataclasses.py +0 -0
  53. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_enum.py +0 -0
  54. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_errors.py +0 -0
  55. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_eventkit.py +0 -0
  56. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_fastapi.py +0 -0
  57. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_fpdf2.py +0 -0
  58. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_functions.py +0 -0
  59. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_functools.py +0 -0
  60. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_getpass.py +0 -0
  61. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_git.py +0 -0
  62. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_hashlib.py +0 -0
  63. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_http.py +0 -0
  64. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_hypothesis.py +0 -0
  65. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_importlib.py +0 -0
  66. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_inflect.py +0 -0
  67. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_ipython.py +0 -0
  68. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_iterables.py +0 -0
  69. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_jupyter.py +0 -0
  70. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_libcst.py +0 -0
  71. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_lightweight_charts.py +0 -0
  72. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_logging.py +0 -0
  73. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_luigi.py +0 -0
  74. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_math.py +0 -0
  75. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_memory_profiler.py +0 -0
  76. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_modules.py +0 -0
  77. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_more_itertools.py +0 -0
  78. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_numpy.py +0 -0
  79. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_objects/__init__.py +0 -0
  80. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_objects/objects.py +0 -0
  81. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_operator.py +0 -0
  82. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_optuna.py +0 -0
  83. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_orjson.py +0 -0
  84. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_os.py +0 -0
  85. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_parse.py +0 -0
  86. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_pathlib.py +0 -0
  87. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_period.py +0 -0
  88. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_pickle.py +0 -0
  89. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_polars.py +0 -0
  90. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_polars_ols.py +0 -0
  91. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_pottery.py +0 -0
  92. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_pqdm.py +0 -0
  93. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_psutil.py +0 -0
  94. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_pydantic.py +0 -0
  95. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_pyinstrument.py +0 -0
  96. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_pyrsistent.py +0 -0
  97. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_pytest.py +0 -0
  98. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_pytest_regressions.py +0 -0
  99. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_python_dotenv.py +0 -0
  100. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_random.py +0 -0
  101. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_re.py +0 -0
  102. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_redis.py +0 -0
  103. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_reprlib.py +0 -0
  104. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_scipy.py +0 -0
  105. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_sentinel.py +0 -0
  106. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_shelve.py +0 -0
  107. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_slack_sdk.py +0 -0
  108. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_socket.py +0 -0
  109. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_sqlalchemy.py +0 -0
  110. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_sqlalchemy_polars.py +0 -0
  111. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_statsmodel.py +0 -0
  112. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_streamlit.py +0 -0
  113. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_string.py +0 -0
  114. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_tempfile.py +0 -0
  115. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_text.py +0 -0
  116. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_threading.py +0 -0
  117. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_timer.py +0 -0
  118. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_traceback.py +0 -0
  119. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_typed_settings.py +0 -0
  120. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_types.py +0 -0
  121. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_typing.py +0 -0
  122. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_typing_funcs/__init__.py +0 -0
  123. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_typing_funcs/no_future.py +0 -0
  124. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_typing_funcs/with_future.py +0 -0
  125. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_tzdata.py +0 -0
  126. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_tzlocal.py +0 -0
  127. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_uuid.py +0 -0
  128. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_version.py +0 -0
  129. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_warnings.py +0 -0
  130. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_whenever2.py +0 -0
  131. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_zipfile.py +0 -0
  132. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/tests/test_zoneinfo.py +0 -0
  133. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/aiolimiter.py +0 -0
  134. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/altair.py +0 -0
  135. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/asyncio.py +0 -0
  136. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/atomicwrites.py +0 -0
  137. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/atools.py +0 -0
  138. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/cachetools.py +0 -0
  139. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/click.py +0 -0
  140. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/concurrent.py +0 -0
  141. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/contextlib.py +0 -0
  142. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/contextvars.py +0 -0
  143. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/cryptography.py +0 -0
  144. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/cvxpy.py +0 -0
  145. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/dataclasses.py +0 -0
  146. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/enum.py +0 -0
  147. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/errors.py +0 -0
  148. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/eventkit.py +0 -0
  149. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/fastapi.py +0 -0
  150. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/fpdf2.py +0 -0
  151. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/functions.py +0 -0
  152. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/functools.py +0 -0
  153. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/getpass.py +0 -0
  154. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/git.py +0 -0
  155. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/hashlib.py +0 -0
  156. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/http.py +0 -0
  157. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/hypothesis.py +0 -0
  158. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/importlib.py +0 -0
  159. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/inflect.py +0 -0
  160. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/ipython.py +0 -0
  161. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/iterables.py +0 -0
  162. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/jupyter.py +0 -0
  163. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/libcst.py +0 -0
  164. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/lightweight_charts.py +0 -0
  165. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/logging.py +0 -0
  166. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/luigi.py +0 -0
  167. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/math.py +0 -0
  168. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/memory_profiler.py +0 -0
  169. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/modules.py +0 -0
  170. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/more_itertools.py +0 -0
  171. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/numpy.py +0 -0
  172. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/operator.py +0 -0
  173. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/optuna.py +0 -0
  174. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/orjson.py +0 -0
  175. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/os.py +0 -0
  176. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/parse.py +0 -0
  177. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/pathlib.py +0 -0
  178. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/period.py +0 -0
  179. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/pickle.py +0 -0
  180. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/polars.py +0 -0
  181. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/polars_ols.py +0 -0
  182. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/pottery.py +0 -0
  183. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/pqdm.py +0 -0
  184. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/psutil.py +0 -0
  185. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/py.typed +0 -0
  186. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/pydantic.py +0 -0
  187. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/pyinstrument.py +0 -0
  188. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/pyrsistent.py +0 -0
  189. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/pytest.py +0 -0
  190. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/pytest_regressions.py +0 -0
  191. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/python_dotenv.py +0 -0
  192. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/random.py +0 -0
  193. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/re.py +0 -0
  194. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/redis.py +0 -0
  195. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/reprlib.py +0 -0
  196. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/scipy.py +0 -0
  197. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/sentinel.py +0 -0
  198. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/shelve.py +0 -0
  199. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/slack_sdk.py +0 -0
  200. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/socket.py +0 -0
  201. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/sqlalchemy.py +0 -0
  202. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/sqlalchemy_polars.py +0 -0
  203. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/statsmodels.py +0 -0
  204. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/streamlit.py +0 -0
  205. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/string.py +0 -0
  206. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/tempfile.py +0 -0
  207. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/text.py +0 -0
  208. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/threading.py +0 -0
  209. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/timer.py +0 -0
  210. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/traceback.py +0 -0
  211. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/typed_settings.py +0 -0
  212. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/types.py +0 -0
  213. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/typing.py +0 -0
  214. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/tzdata.py +0 -0
  215. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/tzlocal.py +0 -0
  216. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/uuid.py +0 -0
  217. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/version.py +0 -0
  218. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/warnings.py +0 -0
  219. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/src/utilities/zipfile.py +0 -0
  220. {dycw_utilities-0.131.19 → dycw_utilities-0.131.20}/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.131.20
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -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.131.20"
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.131.20"
125
125
 
126
126
  [[tool.bumpversion.files]]
127
127
  filename = "src/utilities/__init__.py"
@@ -1,10 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import datetime as dt
4
- from re import search
5
4
  from typing import TYPE_CHECKING
6
5
 
7
- from hypothesis import assume, given
6
+ from hypothesis import given
8
7
  from hypothesis.strategies import DataObject, data, dates, integers, sampled_from
9
8
  from pytest import mark, param, raises
10
9
 
@@ -17,12 +16,11 @@ from utilities.datetime import (
17
16
  _ParseTwoDigitYearInvalidStringError,
18
17
  date_to_month,
19
18
  ensure_month,
20
- maybe_sub_pct_y,
21
19
  parse_month,
22
20
  parse_two_digit_year,
23
21
  serialize_month,
24
22
  )
25
- from utilities.hypothesis import months, text_clean
23
+ from utilities.hypothesis import months
26
24
  from utilities.zoneinfo import UTC
27
25
 
28
26
  if TYPE_CHECKING:
@@ -36,14 +34,6 @@ class TestDateToMonth:
36
34
  assert result == date
37
35
 
38
36
 
39
- class TestMaybeSubPctY:
40
- @given(text=text_clean())
41
- def test_main(self, *, text: str) -> None:
42
- result = maybe_sub_pct_y(text)
43
- _ = assume(not search("%Y", result))
44
- assert not search("%Y", result)
45
-
46
-
47
37
  class TestMonth:
48
38
  @mark.parametrize(
49
39
  ("month", "n", "expected"),
@@ -1,11 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from re import search
3
4
  from typing import TYPE_CHECKING, assert_never
4
5
 
5
- from hypothesis import given
6
+ from hypothesis import assume, given
6
7
  from hypothesis.strategies import sampled_from, sets
7
8
 
8
- from utilities.hypothesis import text_ascii
9
+ from utilities.hypothesis import text_ascii, text_clean
9
10
  from utilities.platform import (
10
11
  IS_LINUX,
11
12
  IS_MAC,
@@ -17,6 +18,7 @@ from utilities.platform import (
17
18
  SYSTEM,
18
19
  System,
19
20
  get_max_pid,
21
+ get_strftime,
20
22
  get_system,
21
23
  maybe_yield_lower_case,
22
24
  )
@@ -51,6 +53,14 @@ class TestGetMaxPID:
51
53
  assert_never(never)
52
54
 
53
55
 
56
+ class TestGetStrftime:
57
+ @given(text=text_clean())
58
+ def test_main(self, *, text: str) -> None:
59
+ result = get_strftime(text)
60
+ _ = assume(not search("%Y", result))
61
+ assert not search("%Y", result)
62
+
63
+
54
64
  class TestGetSystem:
55
65
  def test_function(self) -> None:
56
66
  assert get_system() in get_args(System)
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.131.19"
3
+ __version__ = "0.131.20"
@@ -2,11 +2,10 @@ from __future__ import annotations
2
2
 
3
3
  import datetime as dt
4
4
  from dataclasses import dataclass, replace
5
- from re import search, sub
5
+ from re import search
6
6
  from typing import Any, Self, assert_never, overload, override
7
7
 
8
8
  from utilities.iterables import OneEmptyError, one
9
- from utilities.platform import SYSTEM
10
9
  from utilities.types import MaybeStr
11
10
  from utilities.zoneinfo import UTC
12
11
 
@@ -41,22 +40,6 @@ class EnsureMonthError(Exception):
41
40
  ##
42
41
 
43
42
 
44
- def maybe_sub_pct_y(text: str, /) -> str:
45
- """Substitute the `%Y' token with '%4Y' if necessary."""
46
- match SYSTEM:
47
- case "windows": # skipif-not-windows
48
- return text
49
- case "mac": # skipif-not-macos
50
- return text
51
- case "linux": # skipif-not-linux
52
- return sub("%Y", "%4Y", text)
53
- case _ as never:
54
- assert_never(never)
55
-
56
-
57
- ##
58
-
59
-
60
43
  @dataclass(order=True, unsafe_hash=True, slots=True)
61
44
  class Month:
62
45
  """Represents a month in time."""
@@ -3,6 +3,7 @@ from __future__ import annotations
3
3
  from dataclasses import dataclass
4
4
  from pathlib import Path
5
5
  from platform import system
6
+ from re import sub
6
7
  from typing import TYPE_CHECKING, Literal, assert_never, override
7
8
 
8
9
  if TYPE_CHECKING:
@@ -69,6 +70,22 @@ MAX_PID = get_max_pid()
69
70
  ##
70
71
 
71
72
 
73
+ def get_strftime(text: str, /) -> str:
74
+ """Get a platform-specific format string."""
75
+ match SYSTEM:
76
+ case "windows": # skipif-not-windows
77
+ return text
78
+ case "mac": # skipif-not-macos
79
+ return text
80
+ case "linux": # skipif-not-linux
81
+ return sub("%Y", "%4Y", text)
82
+ case _ as never:
83
+ assert_never(never)
84
+
85
+
86
+ ##
87
+
88
+
72
89
  def maybe_yield_lower_case(text: Iterable[str], /) -> Iterator[str]:
73
90
  """Yield lower-cased text if the platform is case-insentive."""
74
91
  match SYSTEM:
@@ -94,6 +111,7 @@ __all__ = [
94
111
  "GetSystemError",
95
112
  "System",
96
113
  "get_max_pid",
114
+ "get_strftime",
97
115
  "get_system",
98
116
  "maybe_yield_lower_case",
99
117
  ]
@@ -18,8 +18,8 @@ from whenever import (
18
18
  ZonedDateTime,
19
19
  )
20
20
 
21
- from utilities.datetime import maybe_sub_pct_y
22
21
  from utilities.math import sign
22
+ from utilities.platform import get_strftime
23
23
  from utilities.sentinel import Sentinel, sentinel
24
24
  from utilities.tzlocal import LOCAL_TIME_ZONE, LOCAL_TIME_ZONE_NAME
25
25
  from utilities.zoneinfo import UTC, get_time_zone_name
@@ -148,7 +148,7 @@ def datetime_utc(
148
148
  def format_compact(datetime: ZonedDateTime, /) -> str:
149
149
  """Convert a zoned datetime to the local time zone, then format."""
150
150
  py_datetime = datetime.round().to_tz(LOCAL_TIME_ZONE_NAME).to_plain().py_datetime()
151
- return py_datetime.strftime(maybe_sub_pct_y("%Y%m%dT%H%M%S"))
151
+ return py_datetime.strftime(get_strftime("%Y%m%dT%H%M%S"))
152
152
 
153
153
 
154
154
  ##