dycw-utilities 0.133.1__tar.gz → 0.133.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 (218) hide show
  1. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/PKG-INFO +1 -1
  2. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/pyproject.toml +2 -2
  3. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_arq.py +24 -13
  4. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_sqlalchemy.py +3 -3
  5. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/__init__.py +1 -1
  6. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/arq.py +66 -4
  7. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/sqlalchemy.py +5 -3
  8. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/sqlalchemy_polars.py +1 -1
  9. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/.gitignore +0 -0
  10. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/LICENSE +0 -0
  11. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/README.md +0 -0
  12. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/__init__.py +0 -0
  13. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/conftest.py +0 -0
  14. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/__init__.py +0 -0
  15. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_missing/__init__.py +0 -0
  16. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_missing/module.py +0 -0
  17. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_with/__init__.py +0 -0
  18. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_with/outer_1.py +0 -0
  19. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_with/outer_2.py +0 -0
  20. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  21. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  22. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  23. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  24. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_without/__init__.py +0 -0
  25. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_without/module_1.py +0 -0
  26. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_without/module_2.py +0 -0
  27. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/standalone.py +0 -0
  28. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/with_imports.py +0 -0
  29. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  30. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  31. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  32. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  33. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  34. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  35. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  36. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  37. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_aiolimiter.py +0 -0
  38. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_altair.py +0 -0
  39. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_asyncio.py +0 -0
  40. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_asyncio_classes/__init__.py +0 -0
  41. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_asyncio_classes/loopers.py +0 -0
  42. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_asyncio_classes/redis.py +0 -0
  43. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_atomicwrites.py +0 -0
  44. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_atools.py +0 -0
  45. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_cachetools.py +0 -0
  46. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_click.py +0 -0
  47. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_concurrent.py +0 -0
  48. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_contextlib.py +0 -0
  49. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_contextvars.py +0 -0
  50. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_cryptography.py +0 -0
  51. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_cvxpy.py +0 -0
  52. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_dataclasses.py +0 -0
  53. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_enum.py +0 -0
  54. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_errors.py +0 -0
  55. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_eventkit.py +0 -0
  56. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_fastapi.py +0 -0
  57. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_fpdf2.py +0 -0
  58. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_functions.py +0 -0
  59. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_functools.py +0 -0
  60. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_getpass.py +0 -0
  61. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_git.py +0 -0
  62. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_hashlib.py +0 -0
  63. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_http.py +0 -0
  64. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_hypothesis.py +0 -0
  65. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_importlib.py +0 -0
  66. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_inflect.py +0 -0
  67. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_ipython.py +0 -0
  68. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_iterables.py +0 -0
  69. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_jupyter.py +0 -0
  70. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_libcst.py +0 -0
  71. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_lightweight_charts.py +0 -0
  72. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_logging.py +0 -0
  73. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_luigi.py +0 -0
  74. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_math.py +0 -0
  75. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_memory_profiler.py +0 -0
  76. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_modules.py +0 -0
  77. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_more_itertools.py +0 -0
  78. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_numpy.py +0 -0
  79. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_objects/__init__.py +0 -0
  80. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_objects/objects.py +0 -0
  81. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_operator.py +0 -0
  82. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_optuna.py +0 -0
  83. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_orjson.py +0 -0
  84. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_os.py +0 -0
  85. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_parse.py +0 -0
  86. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_pathlib.py +0 -0
  87. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_period.py +0 -0
  88. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_pickle.py +0 -0
  89. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_platform.py +0 -0
  90. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_polars.py +0 -0
  91. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_polars_ols.py +0 -0
  92. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_pottery.py +0 -0
  93. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_pqdm.py +0 -0
  94. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_psutil.py +0 -0
  95. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_pydantic.py +0 -0
  96. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_pyinstrument.py +0 -0
  97. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_pytest.py +0 -0
  98. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_pytest_regressions.py +0 -0
  99. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_python_dotenv.py +0 -0
  100. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_random.py +0 -0
  101. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_re.py +0 -0
  102. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_redis.py +0 -0
  103. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_reprlib.py +0 -0
  104. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_scipy.py +0 -0
  105. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_sentinel.py +0 -0
  106. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_shelve.py +0 -0
  107. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_slack_sdk.py +0 -0
  108. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_socket.py +0 -0
  109. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_sqlalchemy_polars.py +0 -0
  110. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_statsmodels.py +0 -0
  111. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_streamlit.py +0 -0
  112. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_string.py +0 -0
  113. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_tempfile.py +0 -0
  114. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_text.py +0 -0
  115. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_threading.py +0 -0
  116. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_timer.py +0 -0
  117. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_traceback.py +0 -0
  118. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_typed_settings.py +0 -0
  119. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_types.py +0 -0
  120. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_typing.py +0 -0
  121. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_typing_funcs/__init__.py +0 -0
  122. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_typing_funcs/no_future.py +0 -0
  123. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_typing_funcs/with_future.py +0 -0
  124. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_tzdata.py +0 -0
  125. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_tzlocal.py +0 -0
  126. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_uuid.py +0 -0
  127. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_version.py +0 -0
  128. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_warnings.py +0 -0
  129. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_whenever.py +0 -0
  130. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_zipfile.py +0 -0
  131. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_zoneinfo.py +0 -0
  132. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/aiolimiter.py +0 -0
  133. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/altair.py +0 -0
  134. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/asyncio.py +0 -0
  135. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/atomicwrites.py +0 -0
  136. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/atools.py +0 -0
  137. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/cachetools.py +0 -0
  138. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/click.py +0 -0
  139. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/concurrent.py +0 -0
  140. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/contextlib.py +0 -0
  141. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/contextvars.py +0 -0
  142. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/cryptography.py +0 -0
  143. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/cvxpy.py +0 -0
  144. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/dataclasses.py +0 -0
  145. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/enum.py +0 -0
  146. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/errors.py +0 -0
  147. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/eventkit.py +0 -0
  148. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/fastapi.py +0 -0
  149. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/fpdf2.py +0 -0
  150. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/functions.py +0 -0
  151. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/functools.py +0 -0
  152. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/getpass.py +0 -0
  153. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/git.py +0 -0
  154. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/hashlib.py +0 -0
  155. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/http.py +0 -0
  156. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/hypothesis.py +0 -0
  157. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/importlib.py +0 -0
  158. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/inflect.py +0 -0
  159. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/ipython.py +0 -0
  160. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/iterables.py +0 -0
  161. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/jupyter.py +0 -0
  162. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/libcst.py +0 -0
  163. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/lightweight_charts.py +0 -0
  164. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/logging.py +0 -0
  165. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/luigi.py +0 -0
  166. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/math.py +0 -0
  167. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/memory_profiler.py +0 -0
  168. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/modules.py +0 -0
  169. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/more_itertools.py +0 -0
  170. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/numpy.py +0 -0
  171. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/operator.py +0 -0
  172. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/optuna.py +0 -0
  173. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/orjson.py +0 -0
  174. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/os.py +0 -0
  175. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/parse.py +0 -0
  176. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/pathlib.py +0 -0
  177. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/period.py +0 -0
  178. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/pickle.py +0 -0
  179. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/platform.py +0 -0
  180. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/polars.py +0 -0
  181. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/polars_ols.py +0 -0
  182. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/pottery.py +0 -0
  183. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/pqdm.py +0 -0
  184. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/psutil.py +0 -0
  185. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/py.typed +0 -0
  186. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/pydantic.py +0 -0
  187. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/pyinstrument.py +0 -0
  188. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/pytest.py +0 -0
  189. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/pytest_regressions.py +0 -0
  190. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/python_dotenv.py +0 -0
  191. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/random.py +0 -0
  192. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/re.py +0 -0
  193. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/redis.py +0 -0
  194. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/reprlib.py +0 -0
  195. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/scipy.py +0 -0
  196. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/sentinel.py +0 -0
  197. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/shelve.py +0 -0
  198. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/slack_sdk.py +0 -0
  199. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/socket.py +0 -0
  200. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/statsmodels.py +0 -0
  201. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/streamlit.py +0 -0
  202. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/string.py +0 -0
  203. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/tempfile.py +0 -0
  204. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/text.py +0 -0
  205. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/threading.py +0 -0
  206. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/timer.py +0 -0
  207. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/traceback.py +0 -0
  208. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/typed_settings.py +0 -0
  209. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/types.py +0 -0
  210. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/typing.py +0 -0
  211. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/tzdata.py +0 -0
  212. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/tzlocal.py +0 -0
  213. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/uuid.py +0 -0
  214. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/version.py +0 -0
  215. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/warnings.py +0 -0
  216. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/whenever.py +0 -0
  217. {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/zipfile.py +0 -0
  218. {dycw_utilities-0.133.1 → dycw_utilities-0.133.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.133.1
3
+ Version: 0.133.3
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -104,7 +104,7 @@ dependencies = [
104
104
  name = "dycw-utilities"
105
105
  readme = "README.md"
106
106
  requires-python = ">= 3.12"
107
- version = "0.133.1"
107
+ version = "0.133.3"
108
108
 
109
109
  [project.optional-dependencies]
110
110
  logging = [
@@ -130,7 +130,7 @@ test = [
130
130
  # bump-my-version
131
131
  [tool.bumpversion]
132
132
  allow_dirty = true
133
- current_version = "0.133.1"
133
+ current_version = "0.133.3"
134
134
 
135
135
  [[tool.bumpversion.files]]
136
136
  filename = "src/utilities/__init__.py"
@@ -3,45 +3,56 @@ from __future__ import annotations
3
3
  from asyncio import sleep
4
4
  from typing import TYPE_CHECKING, Any, cast
5
5
 
6
+ from arq.connections import ArqRedis
6
7
  from hypothesis import given
7
8
  from hypothesis.strategies import integers
8
9
 
9
- from utilities.arq import Worker, cron_raw
10
+ from tests.conftest import SKIPIF_CI_AND_NOT_LINUX
11
+ from utilities.arq import Worker, cron_raw, job_enqueuer
10
12
  from utilities.iterables import one
11
13
 
12
14
  if TYPE_CHECKING:
13
15
  from collections.abc import Sequence
14
16
 
15
- from arq.cron import CronJob
16
17
  from arq.typing import WorkerCoroutine
17
18
 
18
19
  from utilities.types import CallableCoroutine1
19
20
 
20
21
 
21
- class TestWorker:
22
+ class TestCronRaw:
22
23
  @given(x=integers(), y=integers())
23
24
  async def test_main(self, *, x: int, y: int) -> None:
24
25
  async def func(x: int, y: int, /) -> int:
25
26
  await sleep(0.01)
26
27
  return x + y
27
28
 
28
- class Example(Worker):
29
- functions_raw: Sequence[CallableCoroutine1[Any]] = [func]
30
-
31
- func_use = cast("WorkerCoroutine", one(Example.functions))
32
- result = await func_use({}, x, y)
29
+ job = cron_raw(func, args=(x, y))
30
+ result = await job.coroutine({})
33
31
  assert result == (x + y)
34
32
 
33
+
34
+ class TestJobEnqueuer:
35
+ @given(x=integers(), y=integers())
36
+ @SKIPIF_CI_AND_NOT_LINUX
37
+ async def test_main(self, *, x: int, y: int) -> None:
38
+ async def func(x: int, y: int, /) -> int:
39
+ await sleep(0.01)
40
+ return x + y
41
+
42
+ redis = ArqRedis(db=15)
43
+ _ = await job_enqueuer.settings(queue_name="test")(redis, func, x, y)
44
+
45
+
46
+ class TestWorker:
35
47
  @given(x=integers(), y=integers())
36
- async def test_cron(self, *, x: int, y: int) -> None:
48
+ async def test_main(self, *, x: int, y: int) -> None:
37
49
  async def func(x: int, y: int, /) -> int:
38
50
  await sleep(0.01)
39
51
  return x + y
40
52
 
41
53
  class Example(Worker):
42
- cron_jobs: Sequence[CronJob] | None = [cron_raw(func, args=(x, y))]
54
+ functions_raw: Sequence[CallableCoroutine1[Any]] = [func]
43
55
 
44
- assert Example.cron_jobs is not None
45
- cron_job = one(Example.cron_jobs)
46
- result = await cron_job.coroutine({})
56
+ func_use = cast("WorkerCoroutine", one(Example.functions))
57
+ result = await func_use({}, x, y)
47
58
  assert result == (x + y)
@@ -274,17 +274,17 @@ class TestEnsureTablesDropped:
274
274
 
275
275
 
276
276
  class TestGetChunkSize:
277
- @given(chunk_size_frac=floats(0.0, 1.0), scaling=floats(0.1, 10.0))
277
+ @given(chunk_size_frac=floats(0.0, 1.0), scaling=integers(0, 10))
278
278
  @settings(
279
279
  max_examples=1,
280
280
  phases={Phase.generate},
281
281
  suppress_health_check={HealthCheck.function_scoped_fixture},
282
282
  )
283
283
  async def test_main(
284
- self, *, chunk_size_frac: float, scaling: float, test_engine: AsyncEngine
284
+ self, *, chunk_size_frac: float, scaling: int, test_engine: AsyncEngine
285
285
  ) -> None:
286
286
  result = get_chunk_size(
287
- test_engine, chunk_size_frac=chunk_size_frac, scaling=scaling
287
+ test_engine, chunk_size_frac=chunk_size_frac, max_length=scaling
288
288
  )
289
289
  assert result >= 1
290
290
 
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.133.1"
3
+ __version__ = "0.133.3"
@@ -3,18 +3,21 @@ from __future__ import annotations
3
3
  from dataclasses import dataclass
4
4
  from functools import wraps
5
5
  from itertools import chain
6
- from typing import TYPE_CHECKING, Any, ParamSpec, TypeVar, cast, override
6
+ from typing import TYPE_CHECKING, Any, ParamSpec, Self, TypeVar, cast, override
7
7
 
8
8
  from arq.constants import default_queue_name, expires_extra_ms
9
9
  from arq.cron import cron
10
10
 
11
+ from utilities.dataclasses import replace_non_sentinel
12
+ from utilities.sentinel import Sentinel, sentinel
13
+
11
14
  if TYPE_CHECKING:
12
15
  from collections.abc import Callable, Iterable, Sequence
13
- from datetime import timezone
16
+ from datetime import datetime, timedelta, timezone
14
17
 
15
18
  from arq.connections import ArqRedis, RedisSettings
16
19
  from arq.cron import CronJob
17
- from arq.jobs import Deserializer, Serializer
20
+ from arq.jobs import Deserializer, Job, Serializer
18
21
  from arq.typing import (
19
22
  OptionType,
20
23
  SecondsTimedelta,
@@ -26,6 +29,7 @@ if TYPE_CHECKING:
26
29
 
27
30
  from utilities.types import CallableCoroutine1, Coroutine1, StrMapping
28
31
 
32
+
29
33
  _P = ParamSpec("_P")
30
34
  _T = TypeVar("_T")
31
35
 
@@ -95,6 +99,64 @@ def _lift_cron(
95
99
  ##
96
100
 
97
101
 
102
+ @dataclass(kw_only=True, slots=True)
103
+ class _JobEnqueuer:
104
+ """Enqueuer of jobs."""
105
+
106
+ job_id: str | None = None
107
+ queue_name: str | None = None
108
+ defer_until: datetime | None = None
109
+ defer_by: int | float | timedelta | None = None
110
+ expires: int | float | timedelta | None = None
111
+ job_try: int | None = None
112
+
113
+ async def __call__(
114
+ self,
115
+ redis: ArqRedis,
116
+ function: Callable[_P, Coroutine1[_T]],
117
+ *args: _P.args,
118
+ **kwargs: _P.kwargs,
119
+ ) -> Job | None:
120
+ return await redis.enqueue_job( # skipif-ci-and-not-linux
121
+ function.__name__,
122
+ *args,
123
+ _job_id=self.job_id,
124
+ _queue_name=self.queue_name,
125
+ _defer_until=self.defer_until,
126
+ _defer_by=self.defer_by,
127
+ _expires=self.expires,
128
+ _job_try=self.job_try,
129
+ **kwargs,
130
+ )
131
+
132
+ def settings(
133
+ self,
134
+ *,
135
+ job_id: str | None | Sentinel = sentinel,
136
+ queue_name: str | None | Sentinel = sentinel,
137
+ defer_until: datetime | None | Sentinel = sentinel,
138
+ defer_by: float | timedelta | None | Sentinel = sentinel,
139
+ expires: float | timedelta | None | Sentinel = sentinel,
140
+ job_try: int | None | Sentinel = sentinel,
141
+ ) -> Self:
142
+ """Replace elements of the enqueuer."""
143
+ return replace_non_sentinel( # skipif-ci-and-not-linux
144
+ self,
145
+ job_id=job_id,
146
+ queue_name=queue_name,
147
+ defer_until=defer_until,
148
+ defer_by=defer_by,
149
+ expires=expires,
150
+ job_try=job_try,
151
+ )
152
+
153
+
154
+ job_enqueuer = _JobEnqueuer()
155
+
156
+
157
+ ##
158
+
159
+
98
160
  class _WorkerMeta(type):
99
161
  @override
100
162
  def __new__(
@@ -158,4 +220,4 @@ class Worker(metaclass=_WorkerMeta):
158
220
  log_results: bool = True
159
221
 
160
222
 
161
- __all__ = ["Worker", "cron"]
223
+ __all__ = ["Worker", "cron", "job_enqueuer"]
@@ -298,11 +298,13 @@ def get_chunk_size(
298
298
  /,
299
299
  *,
300
300
  chunk_size_frac: float = CHUNK_SIZE_FRAC,
301
- scaling: float = 1.0,
301
+ max_length: int = 1,
302
302
  ) -> int:
303
303
  """Get the maximum chunk size for an engine."""
304
304
  max_params = _get_dialect_max_params(engine_or_conn)
305
- return max(floor(chunk_size_frac * max_params / scaling), 1)
305
+ scaling = max(max_length, 1)
306
+ size = floor(chunk_size_frac * max_params / scaling)
307
+ return max(size, 1)
306
308
 
307
309
 
308
310
  ##
@@ -1098,7 +1100,7 @@ def _prepare_insert_or_upsert_items(
1098
1100
  }
1099
1101
  max_length = max(lengths, default=1)
1100
1102
  chunk_size = get_chunk_size(
1101
- engine, chunk_size_frac=chunk_size_frac, scaling=max_length
1103
+ engine, chunk_size_frac=chunk_size_frac, max_length=max_length
1102
1104
  )
1103
1105
 
1104
1106
  def yield_pairs() -> Iterator[tuple[Insert, None]]:
@@ -433,7 +433,7 @@ def _select_to_dataframe_yield_selects_with_in_clauses(
433
433
  in_col, in_values = in_clauses
434
434
  if in_clauses_chunk_size is None:
435
435
  chunk_size = get_chunk_size(
436
- engine, chunk_size_frac=chunk_size_frac, scaling=max_length
436
+ engine, chunk_size_frac=chunk_size_frac, max_length=max_length
437
437
  )
438
438
  else:
439
439
  chunk_size = in_clauses_chunk_size