dycw-utilities 0.162.1__tar.gz → 0.162.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/PKG-INFO +1 -1
  2. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/pyproject.toml +3 -3
  3. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_orjson.py +25 -3
  4. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/__init__.py +1 -1
  5. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/orjson.py +4 -6
  6. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/redis.py +18 -18
  7. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/sqlalchemy.py +7 -7
  8. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/.gitignore +0 -0
  9. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/LICENSE +0 -0
  10. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/README.md +0 -0
  11. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/__init__.py +0 -0
  12. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/conftest.py +0 -0
  13. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/modules/__init__.py +0 -0
  14. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/modules/package_missing/__init__.py +0 -0
  15. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/modules/package_missing/module.py +0 -0
  16. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/modules/package_with/__init__.py +0 -0
  17. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/modules/package_with/outer_1.py +0 -0
  18. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/modules/package_with/outer_2.py +0 -0
  19. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  20. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  21. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  22. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  23. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/modules/package_without/__init__.py +0 -0
  24. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/modules/package_without/module_1.py +0 -0
  25. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/modules/package_without/module_2.py +0 -0
  26. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/modules/standalone.py +0 -0
  27. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/modules/with_imports.py +0 -0
  28. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  29. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  30. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  31. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  32. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  33. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  34. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  35. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  36. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_aeventkit.py +0 -0
  37. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_altair.py +0 -0
  38. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_asyncio.py +0 -0
  39. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_atomicwrites.py +0 -0
  40. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_atools.py +0 -0
  41. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_cachetools.py +0 -0
  42. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_click.py +0 -0
  43. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_concurrent.py +0 -0
  44. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_contextlib.py +0 -0
  45. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_contextvars.py +0 -0
  46. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_cryptography.py +0 -0
  47. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_cvxpy.py +0 -0
  48. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_dataclasses.py +0 -0
  49. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_enum.py +0 -0
  50. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_errors.py +0 -0
  51. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_fastapi.py +0 -0
  52. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_fpdf2.py +0 -0
  53. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_functions.py +0 -0
  54. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_functools.py +0 -0
  55. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_getpass.py +0 -0
  56. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_gzip.py +0 -0
  57. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_hashlib.py +0 -0
  58. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_http.py +0 -0
  59. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_hypothesis.py +0 -0
  60. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_importlib.py +0 -0
  61. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_inflect.py +0 -0
  62. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_ipython.py +0 -0
  63. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_iterables.py +0 -0
  64. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_json.py +0 -0
  65. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_jupyter.py +0 -0
  66. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_libcst.py +0 -0
  67. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_lightweight_charts.py +0 -0
  68. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_logging.py +0 -0
  69. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_math.py +0 -0
  70. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_memory_profiler.py +0 -0
  71. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_modules.py +0 -0
  72. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_more_itertools.py +0 -0
  73. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_numpy.py +0 -0
  74. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_objects/__init__.py +0 -0
  75. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_objects/objects.py +0 -0
  76. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_operator.py +0 -0
  77. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_optuna.py +0 -0
  78. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_os.py +0 -0
  79. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_parse.py +0 -0
  80. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_pathlib.py +0 -0
  81. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_pickle.py +0 -0
  82. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_platform.py +0 -0
  83. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_polars.py +0 -0
  84. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_polars_ols.py +0 -0
  85. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_postgres.py +0 -0
  86. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_pottery.py +0 -0
  87. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_pqdm.py +0 -0
  88. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_psutil.py +0 -0
  89. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_pyinstrument.py +0 -0
  90. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_pytest.py +0 -0
  91. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_pytest_randomly.py +0 -0
  92. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_pytest_regressions.py +0 -0
  93. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_random.py +0 -0
  94. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_re.py +0 -0
  95. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_redis.py +0 -0
  96. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_reprlib.py +0 -0
  97. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_scipy.py +0 -0
  98. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_sentinel.py +0 -0
  99. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_shelve.py +0 -0
  100. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_slack_sdk.py +0 -0
  101. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_socket.py +0 -0
  102. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_sqlalchemy.py +0 -0
  103. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_sqlalchemy_polars.py +0 -0
  104. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_statsmodels.py +0 -0
  105. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_string.py +0 -0
  106. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_tempfile.py +0 -0
  107. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_text.py +0 -0
  108. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_threading.py +0 -0
  109. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_timer.py +0 -0
  110. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_traceback.py +0 -0
  111. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_typed_settings.py +0 -0
  112. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_types.py +0 -0
  113. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_typing.py +0 -0
  114. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_typing_funcs/__init__.py +0 -0
  115. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_typing_funcs/no_future.py +0 -0
  116. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_typing_funcs/with_future.py +0 -0
  117. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_tzdata.py +0 -0
  118. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_tzlocal.py +0 -0
  119. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_uuid.py +0 -0
  120. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_version.py +0 -0
  121. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_warnings.py +0 -0
  122. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_whenever.py +0 -0
  123. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_zipfile.py +0 -0
  124. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/tests/test_zoneinfo.py +0 -0
  125. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/aeventkit.py +0 -0
  126. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/altair.py +0 -0
  127. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/asyncio.py +0 -0
  128. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/atomicwrites.py +0 -0
  129. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/atools.py +0 -0
  130. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/cachetools.py +0 -0
  131. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/click.py +0 -0
  132. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/concurrent.py +0 -0
  133. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/contextlib.py +0 -0
  134. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/contextvars.py +0 -0
  135. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/cryptography.py +0 -0
  136. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/cvxpy.py +0 -0
  137. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/dataclasses.py +0 -0
  138. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/enum.py +0 -0
  139. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/errors.py +0 -0
  140. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/fastapi.py +0 -0
  141. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/fpdf2.py +0 -0
  142. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/functions.py +0 -0
  143. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/functools.py +0 -0
  144. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/getpass.py +0 -0
  145. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/gzip.py +0 -0
  146. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/hashlib.py +0 -0
  147. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/http.py +0 -0
  148. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/hypothesis.py +0 -0
  149. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/importlib.py +0 -0
  150. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/inflect.py +0 -0
  151. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/ipython.py +0 -0
  152. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/iterables.py +0 -0
  153. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/json.py +0 -0
  154. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/jupyter.py +0 -0
  155. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/libcst.py +0 -0
  156. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/lightweight_charts.py +0 -0
  157. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/logging.py +0 -0
  158. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/math.py +0 -0
  159. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/memory_profiler.py +0 -0
  160. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/modules.py +0 -0
  161. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/more_itertools.py +0 -0
  162. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/numpy.py +0 -0
  163. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/operator.py +0 -0
  164. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/optuna.py +0 -0
  165. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/os.py +0 -0
  166. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/parse.py +0 -0
  167. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/pathlib.py +0 -0
  168. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/pickle.py +0 -0
  169. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/platform.py +0 -0
  170. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/polars.py +0 -0
  171. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/polars_ols.py +0 -0
  172. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/postgres.py +0 -0
  173. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/pottery.py +0 -0
  174. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/pqdm.py +0 -0
  175. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/psutil.py +0 -0
  176. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/py.typed +0 -0
  177. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/pyinstrument.py +0 -0
  178. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/pytest.py +0 -0
  179. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/pytest_plugins/__init__.py +0 -0
  180. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
  181. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
  182. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/pytest_regressions.py +0 -0
  183. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/random.py +0 -0
  184. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/re.py +0 -0
  185. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/reprlib.py +0 -0
  186. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/scipy.py +0 -0
  187. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/sentinel.py +0 -0
  188. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/shelve.py +0 -0
  189. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/slack_sdk.py +0 -0
  190. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/socket.py +0 -0
  191. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/sqlalchemy_polars.py +0 -0
  192. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/statsmodels.py +0 -0
  193. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/string.py +0 -0
  194. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/tempfile.py +0 -0
  195. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/text.py +0 -0
  196. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/threading.py +0 -0
  197. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/timer.py +0 -0
  198. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/traceback.py +0 -0
  199. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/typed_settings.py +0 -0
  200. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/types.py +0 -0
  201. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/typing.py +0 -0
  202. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/tzdata.py +0 -0
  203. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/tzlocal.py +0 -0
  204. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/uuid.py +0 -0
  205. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/version.py +0 -0
  206. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/warnings.py +0 -0
  207. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/whenever.py +0 -0
  208. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/zipfile.py +0 -0
  209. {dycw_utilities-0.162.1 → dycw_utilities-0.162.3}/src/utilities/zoneinfo.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dycw-utilities
3
- Version: 0.162.1
3
+ Version: 0.162.3
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -109,7 +109,7 @@ operator = [
109
109
  "polars",
110
110
  ]
111
111
  optuna = [
112
- "optuna >=4.4.0, <4.5",
112
+ "optuna >=4.5.0, <4.6",
113
113
  ]
114
114
  orjson = [
115
115
  "orjson >=3.11.0, <3.12",
@@ -227,7 +227,7 @@ dependencies = [
227
227
  name = "dycw-utilities"
228
228
  readme = "README.md"
229
229
  requires-python = ">= 3.12"
230
- version = "0.162.1"
230
+ version = "0.162.3"
231
231
 
232
232
  [project.entry-points.pytest11]
233
233
  pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
@@ -259,7 +259,7 @@ test = [
259
259
  # bump-my-version
260
260
  [tool.bumpversion]
261
261
  allow_dirty = true
262
- current_version = "0.162.1"
262
+ current_version = "0.162.3"
263
263
 
264
264
  [[tool.bumpversion.files]]
265
265
  filename = "src/utilities/__init__.py"
@@ -23,6 +23,7 @@ from hypothesis.strategies import (
23
23
  from orjson import JSONDecodeError
24
24
  from polars import Object, String, UInt64
25
25
  from pytest import approx, mark, param, raises
26
+ from whenever import ZonedDateTime
26
27
 
27
28
  from tests.conftest import SKIPIF_CI_AND_WINDOWS
28
29
  from tests.test_objects.objects import (
@@ -60,6 +61,7 @@ from utilities.hypothesis import (
60
61
  text_ascii,
61
62
  text_printable,
62
63
  time_periods,
64
+ zoned_date_time_periods,
63
65
  zoned_date_times,
64
66
  )
65
67
  from utilities.iterables import always_iterable, one
@@ -86,12 +88,21 @@ from utilities.sentinel import Sentinel, sentinel
86
88
  from utilities.types import LogLevel, MaybeIterable, PathLike
87
89
  from utilities.typing import get_args
88
90
  from utilities.tzlocal import LOCAL_TIME_ZONE
89
- from utilities.whenever import MINUTE, SECOND, DatePeriod, TimePeriod, get_now
91
+ from utilities.whenever import (
92
+ HOUR,
93
+ MINUTE,
94
+ SECOND,
95
+ DatePeriod,
96
+ TimePeriod,
97
+ ZonedDateTimePeriod,
98
+ get_now,
99
+ )
100
+ from utilities.zoneinfo import UTC
90
101
 
91
102
  if TYPE_CHECKING:
92
103
  from collections.abc import Sequence
93
104
 
94
- from whenever import Date, ZonedDateTime
105
+ from whenever import Date
95
106
 
96
107
  from utilities.types import Dataclass, StrMapping
97
108
 
@@ -130,7 +141,7 @@ class TestGetLogRecords:
130
141
  assert record.name == str(tmp_path)
131
142
  assert record.message == ""
132
143
  assert record.level == WARNING
133
- assert record.line_num == approx(102, rel=0.1)
144
+ assert record.line_num == approx(118, rel=0.1)
134
145
  assert abs(record.datetime - get_now()) <= MINUTE
135
146
  assert record.func_name == "test_main"
136
147
  assert record.stack_info is None
@@ -667,6 +678,11 @@ class TestSerializeAndDeserialize:
667
678
  )
668
679
  assert result == exp_res
669
680
 
681
+ @given(period=zoned_date_time_periods())
682
+ def test_zoned_date_time_period(self, *, period: ZonedDateTimePeriod) -> None:
683
+ result = deserialize(serialize(period))
684
+ assert result == period
685
+
670
686
 
671
687
  class TestSerialize:
672
688
  @given(text=text_printable())
@@ -730,6 +746,12 @@ class TestSerialize:
730
746
  with raises(_SerializeIntegerError, match="Integer .* is out of range"):
731
747
  _ = serialize(x)
732
748
 
749
+ def test_zoned_date_time_period(self) -> None:
750
+ start = ZonedDateTime(2000, 1, 2, 12, 34, 45, tz=UTC.key)
751
+ result = serialize(ZonedDateTimePeriod(start, start + HOUR))
752
+ expected = b'"[zp]2000-01-02T12:34:45,2000-01-02T13:34:45+00:00[UTC]"'
753
+ assert result == expected
754
+
733
755
 
734
756
  class TestObjectHookGetObject:
735
757
  def test_main(self) -> None:
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.162.1"
3
+ __version__ = "0.162.3"
@@ -218,9 +218,7 @@ def _pre_process(
218
218
  case ZonedDateTime() as date_time:
219
219
  return f"[{_Prefixes.zoned_date_time.value}]{date_time}"
220
220
  case ZonedDateTimePeriod() as period:
221
- return (
222
- f"[{_Prefixes.zoned_date_time_period.value}]{period.start},{period.end}"
223
- )
221
+ return f"[{_Prefixes.zoned_date_time_period.value}]{period.start.to_plain()},{period.end}"
224
222
  case dt.datetime() as py_datetime:
225
223
  match py_datetime.tzinfo:
226
224
  case None:
@@ -512,9 +510,9 @@ def _object_hook(
512
510
  if match := _ZONED_DATE_TIME_PATTERN.search(text):
513
511
  return ZonedDateTime.parse_common_iso(match.group(1))
514
512
  if match := _ZONED_DATE_TIME_PERIOD_PATTERN.search(text):
515
- start, end = map(
516
- ZonedDateTime.parse_common_iso, match.group(1).split(",")
517
- )
513
+ start, end = match.group(1).split(",")
514
+ end = ZonedDateTime.parse_common_iso(end)
515
+ start = PlainDateTime.parse_common_iso(start).assume_tz(end.tz)
518
516
  return ZonedDateTimePeriod(start, end)
519
517
  if (
520
518
  exc_class := _object_hook_exception_class(
@@ -188,7 +188,7 @@ def redis_hash_map_key[K, V](
188
188
  value_serializer: Callable[[V], bytes] | None = None,
189
189
  value_deserializer: Callable[[bytes], V] | None = None,
190
190
  timeout: Delta | None = None,
191
- error: type[Exception] = TimeoutError,
191
+ error: MaybeType[BaseException] = TimeoutError,
192
192
  ttl: Delta | None = None,
193
193
  ) -> RedisHashMapKey[K, V]: ...
194
194
  @overload
@@ -203,7 +203,7 @@ def redis_hash_map_key[K, V1, V2](
203
203
  value_serializer: Callable[[V1 | V2], bytes] | None = None,
204
204
  value_deserializer: Callable[[bytes], V1 | V2] | None = None,
205
205
  timeout: Delta | None = None,
206
- error: type[Exception] = TimeoutError,
206
+ error: MaybeType[BaseException] = TimeoutError,
207
207
  ttl: Delta | None = None,
208
208
  ) -> RedisHashMapKey[K, V1 | V2]: ...
209
209
  @overload
@@ -218,7 +218,7 @@ def redis_hash_map_key[K, V1, V2, V3](
218
218
  value_serializer: Callable[[V1 | V2 | V3], bytes] | None = None,
219
219
  value_deserializer: Callable[[bytes], V1 | V2 | V3] | None = None,
220
220
  timeout: Delta | None = None,
221
- error: type[Exception] = TimeoutError,
221
+ error: MaybeType[BaseException] = TimeoutError,
222
222
  ttl: Delta | None = None,
223
223
  ) -> RedisHashMapKey[K, V1 | V2 | V3]: ...
224
224
  @overload
@@ -233,7 +233,7 @@ def redis_hash_map_key[K1, K2, V](
233
233
  value_serializer: Callable[[V], bytes] | None = None,
234
234
  value_deserializer: Callable[[bytes], V] | None = None,
235
235
  timeout: Delta | None = None,
236
- error: type[Exception] = TimeoutError,
236
+ error: MaybeType[BaseException] = TimeoutError,
237
237
  ttl: Delta | None = None,
238
238
  ) -> RedisHashMapKey[K1 | K2, V]: ...
239
239
  @overload
@@ -248,7 +248,7 @@ def redis_hash_map_key[K1, K2, V1, V2](
248
248
  value_serializer: Callable[[V1 | V2], bytes] | None = None,
249
249
  value_deserializer: Callable[[bytes], V1 | V2] | None = None,
250
250
  timeout: Delta | None = None,
251
- error: type[Exception] = TimeoutError,
251
+ error: MaybeType[BaseException] = TimeoutError,
252
252
  ttl: Delta | None = None,
253
253
  ) -> RedisHashMapKey[K1 | K2, V1 | V2]: ...
254
254
  @overload
@@ -263,7 +263,7 @@ def redis_hash_map_key[K1, K2, V1, V2, V3](
263
263
  value_serializer: Callable[[V1 | V2 | V3], bytes] | None = None,
264
264
  value_deserializer: Callable[[bytes], V1 | V2 | V3] | None = None,
265
265
  timeout: Delta | None = None,
266
- error: type[Exception] = TimeoutError,
266
+ error: MaybeType[BaseException] = TimeoutError,
267
267
  ttl: Delta | None = None,
268
268
  ) -> RedisHashMapKey[K1 | K2, V1 | V2 | V3]: ...
269
269
  @overload
@@ -278,7 +278,7 @@ def redis_hash_map_key[K1, K2, K3, V](
278
278
  value_serializer: Callable[[V], bytes] | None = None,
279
279
  value_deserializer: Callable[[bytes], V] | None = None,
280
280
  timeout: Delta | None = None,
281
- error: type[Exception] = TimeoutError,
281
+ error: MaybeType[BaseException] = TimeoutError,
282
282
  ttl: Delta | None = None,
283
283
  ) -> RedisHashMapKey[K1 | K2 | K3, V]: ...
284
284
  @overload
@@ -293,7 +293,7 @@ def redis_hash_map_key[K1, K2, K3, V1, V2](
293
293
  value_serializer: Callable[[V1 | V2], bytes] | None = None,
294
294
  value_deserializer: Callable[[bytes], V1 | V2] | None = None,
295
295
  timeout: Delta | None = None,
296
- error: type[Exception] = TimeoutError,
296
+ error: MaybeType[BaseException] = TimeoutError,
297
297
  ttl: Delta | None = None,
298
298
  ) -> RedisHashMapKey[K1 | K2 | K3, V1 | V2]: ...
299
299
  @overload
@@ -308,7 +308,7 @@ def redis_hash_map_key[K1, K2, K3, V1, V2, V3](
308
308
  value_serializer: Callable[[V1 | V2 | V3], bytes] | None = None,
309
309
  value_deserializer: Callable[[bytes], V1 | V2 | V3] | None = None,
310
310
  timeout: Delta | None = None,
311
- error: type[Exception] = TimeoutError,
311
+ error: MaybeType[BaseException] = TimeoutError,
312
312
  ttl: Delta | None = None,
313
313
  ) -> RedisHashMapKey[K1 | K2 | K3, V1 | V2 | V3]: ...
314
314
  @overload
@@ -323,7 +323,7 @@ def redis_hash_map_key[K, K1, K2, K3, V, V1, V2, V3](
323
323
  value_serializer: Callable[[V1 | V2 | V3], bytes] | None = None,
324
324
  value_deserializer: Callable[[bytes], V1 | V2 | V3] | None = None,
325
325
  timeout: Delta | None = None,
326
- error: type[Exception] = TimeoutError,
326
+ error: MaybeType[BaseException] = TimeoutError,
327
327
  ttl: Delta | None = None,
328
328
  ) -> RedisHashMapKey[K, V]: ...
329
329
  def redis_hash_map_key[K, V](
@@ -338,7 +338,7 @@ def redis_hash_map_key[K, V](
338
338
  value_deserializer: Callable[[bytes], Any] | None = None,
339
339
  timeout: Delta | None = None,
340
340
  ttl: Delta | None = None,
341
- error: type[Exception] = TimeoutError,
341
+ error: MaybeType[BaseException] = TimeoutError,
342
342
  ) -> RedisHashMapKey[K, V]:
343
343
  """Create a redis key."""
344
344
  return RedisHashMapKey( # skipif-ci-and-not-linux
@@ -426,7 +426,7 @@ def redis_key[T](
426
426
  serializer: Callable[[T], bytes] | None = None,
427
427
  deserializer: Callable[[bytes], T] | None = None,
428
428
  timeout: Delta | None = None,
429
- error: type[Exception] = TimeoutError,
429
+ error: MaybeType[BaseException] = TimeoutError,
430
430
  ttl: Delta | None = None,
431
431
  ) -> RedisKey[T]: ...
432
432
  @overload
@@ -438,7 +438,7 @@ def redis_key[T1, T2](
438
438
  serializer: Callable[[T1 | T2], bytes] | None = None,
439
439
  deserializer: Callable[[bytes], T1 | T2] | None = None,
440
440
  timeout: Delta | None = None,
441
- error: type[Exception] = TimeoutError,
441
+ error: MaybeType[BaseException] = TimeoutError,
442
442
  ttl: Delta | None = None,
443
443
  ) -> RedisKey[T1 | T2]: ...
444
444
  @overload
@@ -450,7 +450,7 @@ def redis_key[T1, T2, T3](
450
450
  serializer: Callable[[T1 | T2 | T3], bytes] | None = None,
451
451
  deserializer: Callable[[bytes], T1 | T2 | T3] | None = None,
452
452
  timeout: Delta | None = None,
453
- error: type[Exception] = TimeoutError,
453
+ error: MaybeType[BaseException] = TimeoutError,
454
454
  ttl: Delta | None = None,
455
455
  ) -> RedisKey[T1 | T2 | T3]: ...
456
456
  @overload
@@ -462,7 +462,7 @@ def redis_key[T1, T2, T3, T4](
462
462
  serializer: Callable[[T1 | T2 | T3 | T4], bytes] | None = None,
463
463
  deserializer: Callable[[bytes], T1 | T2 | T3 | T4] | None = None,
464
464
  timeout: Delta | None = None,
465
- error: type[Exception] = TimeoutError,
465
+ error: MaybeType[BaseException] = TimeoutError,
466
466
  ttl: Delta | None = None,
467
467
  ) -> RedisKey[T1 | T2 | T3 | T4]: ...
468
468
  @overload
@@ -474,7 +474,7 @@ def redis_key[T1, T2, T3, T4, T5](
474
474
  serializer: Callable[[T1 | T2 | T3 | T4 | T5], bytes] | None = None,
475
475
  deserializer: Callable[[bytes], T1 | T2 | T3 | T4 | T5] | None = None,
476
476
  timeout: Delta | None = None,
477
- error: type[Exception] = TimeoutError,
477
+ error: MaybeType[BaseException] = TimeoutError,
478
478
  ttl: Delta | None = None,
479
479
  ) -> RedisKey[T1 | T2 | T3 | T4 | T5]: ...
480
480
  @overload
@@ -486,7 +486,7 @@ def redis_key[T, T1, T2, T3, T4, T5](
486
486
  serializer: Callable[[T1 | T2 | T3 | T4 | T5], bytes] | None = None,
487
487
  deserializer: Callable[[bytes], T1 | T2 | T3 | T4 | T5] | None = None,
488
488
  timeout: Delta | None = None,
489
- error: type[Exception] = TimeoutError,
489
+ error: MaybeType[BaseException] = TimeoutError,
490
490
  ttl: Delta | None = None,
491
491
  ) -> RedisKey[T]: ...
492
492
  def redis_key[T](
@@ -497,7 +497,7 @@ def redis_key[T](
497
497
  serializer: Callable[[Any], bytes] | None = None,
498
498
  deserializer: Callable[[bytes], Any] | None = None,
499
499
  timeout: Delta | None = None,
500
- error: type[Exception] = TimeoutError,
500
+ error: MaybeType[BaseException] = TimeoutError,
501
501
  ttl: Delta | None = None,
502
502
  ) -> RedisKey[T]:
503
503
  """Create a redis key."""
@@ -148,7 +148,7 @@ async def check_engine(
148
148
  /,
149
149
  *,
150
150
  timeout: Delta | None = None,
151
- error: MaybeType[Exception] = TimeoutError,
151
+ error: MaybeType[BaseException] = TimeoutError,
152
152
  num_tables: int | tuple[int, float] | None = None,
153
153
  ) -> None:
154
154
  """Check that an engine can connect.
@@ -341,7 +341,7 @@ async def ensure_tables_created(
341
341
  /,
342
342
  *tables_or_orms: TableOrORMInstOrClass,
343
343
  timeout: Delta | None = None,
344
- error: MaybeType[Exception] = TimeoutError,
344
+ error: MaybeType[BaseException] = TimeoutError,
345
345
  ) -> None:
346
346
  """Ensure a table/set of tables is/are created."""
347
347
  tables = set(map(get_table, tables_or_orms))
@@ -370,7 +370,7 @@ async def ensure_tables_dropped(
370
370
  engine: AsyncEngine,
371
371
  *tables_or_orms: TableOrORMInstOrClass,
372
372
  timeout: Delta | None = None,
373
- error: MaybeType[Exception] = TimeoutError,
373
+ error: MaybeType[BaseException] = TimeoutError,
374
374
  ) -> None:
375
375
  """Ensure a table/set of tables is/are dropped."""
376
376
  tables = set(map(get_table, tables_or_orms))
@@ -604,9 +604,9 @@ async def insert_items(
604
604
  chunk_size_frac: float = CHUNK_SIZE_FRAC,
605
605
  assume_tables_exist: bool = False,
606
606
  timeout_create: Delta | None = None,
607
- error_create: MaybeType[Exception] = TimeoutError,
607
+ error_create: MaybeType[BaseException] = TimeoutError,
608
608
  timeout_insert: Delta | None = None,
609
- error_insert: MaybeType[Exception] = TimeoutError,
609
+ error_insert: MaybeType[BaseException] = TimeoutError,
610
610
  ) -> None:
611
611
  """Insert a set of items into a database.
612
612
 
@@ -849,9 +849,9 @@ async def migrate_data(
849
849
  chunk_size_frac: float = CHUNK_SIZE_FRAC,
850
850
  assume_tables_exist: bool = False,
851
851
  timeout_create: Delta | None = None,
852
- error_create: MaybeType[Exception] = TimeoutError,
852
+ error_create: MaybeType[BaseException] = TimeoutError,
853
853
  timeout_insert: Delta | None = None,
854
- error_insert: MaybeType[Exception] = TimeoutError,
854
+ error_insert: MaybeType[BaseException] = TimeoutError,
855
855
  ) -> None:
856
856
  """Migrate the contents of a table from one database to another."""
857
857
  table_from = get_table(table_or_orm_from)