dycw-utilities 0.150.12__tar.gz → 0.150.14__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.150.12 → dycw_utilities-0.150.14}/PKG-INFO +1 -1
  2. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/pyproject.toml +2 -2
  3. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_sqlalchemy.py +9 -2
  4. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/__init__.py +1 -1
  5. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/sqlalchemy.py +33 -13
  6. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/.gitignore +0 -0
  7. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/LICENSE +0 -0
  8. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/README.md +0 -0
  9. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/__init__.py +0 -0
  10. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/conftest.py +0 -0
  11. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/__init__.py +0 -0
  12. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_missing/__init__.py +0 -0
  13. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_missing/module.py +0 -0
  14. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_with/__init__.py +0 -0
  15. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_with/outer_1.py +0 -0
  16. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_with/outer_2.py +0 -0
  17. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  18. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  19. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  20. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  21. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_without/__init__.py +0 -0
  22. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_without/module_1.py +0 -0
  23. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_without/module_2.py +0 -0
  24. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/standalone.py +0 -0
  25. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/with_imports.py +0 -0
  26. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  27. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  28. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  29. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  30. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  31. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  32. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  33. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  34. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_altair.py +0 -0
  35. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_asyncio.py +0 -0
  36. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_atomicwrites.py +0 -0
  37. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_atools.py +0 -0
  38. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_cachetools.py +0 -0
  39. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_click.py +0 -0
  40. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_concurrent.py +0 -0
  41. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_contextlib.py +0 -0
  42. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_contextvars.py +0 -0
  43. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_cryptography.py +0 -0
  44. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_cvxpy.py +0 -0
  45. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_dataclasses.py +0 -0
  46. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_dnspython.py +0 -0
  47. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_enum.py +0 -0
  48. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_errors.py +0 -0
  49. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_eventkit.py +0 -0
  50. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_fastapi.py +0 -0
  51. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_fpdf2.py +0 -0
  52. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_functions.py +0 -0
  53. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_functools.py +0 -0
  54. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_getpass.py +0 -0
  55. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_gzip.py +0 -0
  56. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_hashlib.py +0 -0
  57. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_http.py +0 -0
  58. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_hypothesis.py +0 -0
  59. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_importlib.py +0 -0
  60. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_inflect.py +0 -0
  61. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_ipython.py +0 -0
  62. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_iterables.py +0 -0
  63. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_json.py +0 -0
  64. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_jupyter.py +0 -0
  65. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_libcst.py +0 -0
  66. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_lightweight_charts.py +0 -0
  67. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_logging.py +0 -0
  68. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_math.py +0 -0
  69. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_memory_profiler.py +0 -0
  70. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_modules.py +0 -0
  71. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_more_itertools.py +0 -0
  72. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_numpy.py +0 -0
  73. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_objects/__init__.py +0 -0
  74. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_objects/objects.py +0 -0
  75. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_operator.py +0 -0
  76. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_optuna.py +0 -0
  77. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_orjson.py +0 -0
  78. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_os.py +0 -0
  79. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_parse.py +0 -0
  80. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_pathlib.py +0 -0
  81. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_period.py +0 -0
  82. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_pickle.py +0 -0
  83. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_platform.py +0 -0
  84. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_polars.py +0 -0
  85. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_polars_ols.py +0 -0
  86. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_postgres.py +0 -0
  87. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_pottery.py +0 -0
  88. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_pqdm.py +0 -0
  89. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_psutil.py +0 -0
  90. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_pyinstrument.py +0 -0
  91. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_pytest.py +0 -0
  92. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_pytest_randomly.py +0 -0
  93. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_pytest_regressions.py +0 -0
  94. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_random.py +0 -0
  95. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_re.py +0 -0
  96. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_redis.py +0 -0
  97. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_reprlib.py +0 -0
  98. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_scipy.py +0 -0
  99. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_sentinel.py +0 -0
  100. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_shelve.py +0 -0
  101. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_slack_sdk.py +0 -0
  102. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_socket.py +0 -0
  103. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_sqlalchemy_polars.py +0 -0
  104. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_statsmodels.py +0 -0
  105. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_string.py +0 -0
  106. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_tempfile.py +0 -0
  107. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_text.py +0 -0
  108. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_threading.py +0 -0
  109. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_timer.py +0 -0
  110. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_traceback.py +0 -0
  111. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_typed_settings.py +0 -0
  112. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_types.py +0 -0
  113. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_typing.py +0 -0
  114. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_typing_funcs/__init__.py +0 -0
  115. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_typing_funcs/no_future.py +0 -0
  116. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_typing_funcs/with_future.py +0 -0
  117. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_tzdata.py +0 -0
  118. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_tzlocal.py +0 -0
  119. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_uuid.py +0 -0
  120. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_version.py +0 -0
  121. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_warnings.py +0 -0
  122. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_whenever.py +0 -0
  123. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_yield_access/__init__.py +0 -0
  124. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_yield_access/script.py +0 -0
  125. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_yield_access/script.sh +0 -0
  126. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_zipfile.py +0 -0
  127. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_zoneinfo.py +0 -0
  128. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/altair.py +0 -0
  129. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/asyncio.py +0 -0
  130. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/atomicwrites.py +0 -0
  131. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/atools.py +0 -0
  132. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/cachetools.py +0 -0
  133. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/click.py +0 -0
  134. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/concurrent.py +0 -0
  135. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/contextlib.py +0 -0
  136. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/contextvars.py +0 -0
  137. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/cryptography.py +0 -0
  138. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/cvxpy.py +0 -0
  139. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/dataclasses.py +0 -0
  140. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/dnspython.py +0 -0
  141. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/enum.py +0 -0
  142. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/errors.py +0 -0
  143. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/eventkit.py +0 -0
  144. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/fastapi.py +0 -0
  145. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/fpdf2.py +0 -0
  146. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/functions.py +0 -0
  147. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/functools.py +0 -0
  148. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/getpass.py +0 -0
  149. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/gzip.py +0 -0
  150. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/hashlib.py +0 -0
  151. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/http.py +0 -0
  152. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/hypothesis.py +0 -0
  153. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/importlib.py +0 -0
  154. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/inflect.py +0 -0
  155. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/ipython.py +0 -0
  156. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/iterables.py +0 -0
  157. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/json.py +0 -0
  158. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/jupyter.py +0 -0
  159. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/libcst.py +0 -0
  160. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/lightweight_charts.py +0 -0
  161. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/logging.py +0 -0
  162. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/math.py +0 -0
  163. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/memory_profiler.py +0 -0
  164. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/modules.py +0 -0
  165. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/more_itertools.py +0 -0
  166. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/numpy.py +0 -0
  167. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/operator.py +0 -0
  168. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/optuna.py +0 -0
  169. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/orjson.py +0 -0
  170. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/os.py +0 -0
  171. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/parse.py +0 -0
  172. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pathlib.py +0 -0
  173. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/period.py +0 -0
  174. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pickle.py +0 -0
  175. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/platform.py +0 -0
  176. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/polars.py +0 -0
  177. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/polars_ols.py +0 -0
  178. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/postgres.py +0 -0
  179. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pottery.py +0 -0
  180. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pqdm.py +0 -0
  181. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/psutil.py +0 -0
  182. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/py.typed +0 -0
  183. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pyinstrument.py +0 -0
  184. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pytest.py +0 -0
  185. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pytest_plugins/__init__.py +0 -0
  186. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
  187. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
  188. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pytest_regressions.py +0 -0
  189. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/random.py +0 -0
  190. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/re.py +0 -0
  191. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/redis.py +0 -0
  192. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/reprlib.py +0 -0
  193. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/scipy.py +0 -0
  194. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/sentinel.py +0 -0
  195. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/shelve.py +0 -0
  196. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/slack_sdk.py +0 -0
  197. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/socket.py +0 -0
  198. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/sqlalchemy_polars.py +0 -0
  199. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/statsmodels.py +0 -0
  200. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/string.py +0 -0
  201. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/tempfile.py +0 -0
  202. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/text.py +0 -0
  203. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/threading.py +0 -0
  204. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/timer.py +0 -0
  205. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/traceback.py +0 -0
  206. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/typed_settings.py +0 -0
  207. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/types.py +0 -0
  208. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/typing.py +0 -0
  209. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/tzdata.py +0 -0
  210. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/tzlocal.py +0 -0
  211. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/uuid.py +0 -0
  212. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/version.py +0 -0
  213. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/warnings.py +0 -0
  214. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/whenever.py +0 -0
  215. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/zipfile.py +0 -0
  216. {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/zoneinfo.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dycw-utilities
3
- Version: 0.150.12
3
+ Version: 0.150.14
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -232,7 +232,7 @@ dependencies = [
232
232
  name = "dycw-utilities"
233
233
  readme = "README.md"
234
234
  requires-python = ">= 3.12"
235
- version = "0.150.12"
235
+ version = "0.150.14"
236
236
 
237
237
  [project.entry-points.pytest11]
238
238
  pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
@@ -265,7 +265,7 @@ test = [
265
265
  # bump-my-version
266
266
  [tool.bumpversion]
267
267
  allow_dirty = true
268
- current_version = "0.150.12"
268
+ current_version = "0.150.14"
269
269
 
270
270
  [[tool.bumpversion.files]]
271
271
  filename = "src/utilities/__init__.py"
@@ -67,6 +67,7 @@ from utilities.sqlalchemy import (
67
67
  _SelectedOrAll,
68
68
  _tuple_to_mapping,
69
69
  check_connect,
70
+ check_connect_async,
70
71
  check_engine,
71
72
  columnwise_max,
72
73
  columnwise_min,
@@ -93,7 +94,7 @@ from utilities.sqlalchemy import (
93
94
  )
94
95
  from utilities.text import strip_and_dedent
95
96
  from utilities.typing import get_args, get_literal_elements
96
- from utilities.whenever import format_compact, get_now, to_local_plain
97
+ from utilities.whenever import MILLISECOND, format_compact, get_now, to_local_plain
97
98
 
98
99
  if TYPE_CHECKING:
99
100
  from collections.abc import Callable, Iterator
@@ -137,9 +138,15 @@ def _upsert_lists(
137
138
 
138
139
 
139
140
  class TestCheckConnect:
140
- def test_main(self, *, test_engine: Engine) -> None:
141
+ def test_sync(self, *, test_engine: Engine) -> None:
141
142
  assert check_connect(test_engine)
142
143
 
144
+ async def test_async(self, *, test_async_engine: AsyncEngine) -> None:
145
+ assert await check_connect_async(test_async_engine)
146
+
147
+ async def test_async_timeout(self, *, test_async_engine: AsyncEngine) -> None:
148
+ assert not await check_connect_async(test_async_engine, timeout=MILLISECOND)
149
+
143
150
 
144
151
  class TestCheckEngine:
145
152
  async def test_main(self, *, test_async_engine: AsyncEngine) -> None:
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.150.12"
3
+ __version__ = "0.150.14"
@@ -97,12 +97,17 @@ from utilities.iterables import (
97
97
  )
98
98
  from utilities.reprlib import get_repr
99
99
  from utilities.text import secret_str, snake_case
100
- from utilities.types import MaybeIterable, MaybeType, StrMapping, TupleOrStrMapping
100
+ from utilities.types import (
101
+ Delta,
102
+ MaybeIterable,
103
+ MaybeType,
104
+ StrMapping,
105
+ TupleOrStrMapping,
106
+ )
101
107
 
102
108
  if TYPE_CHECKING:
103
109
  from enum import Enum, StrEnum
104
110
 
105
- from whenever import TimeDelta
106
111
 
107
112
  type EngineOrConnectionOrAsync = Engine | Connection | AsyncEngine | AsyncConnection
108
113
  type Dialect = Literal["mssql", "mysql", "oracle", "postgresql", "sqlite"]
@@ -115,15 +120,29 @@ CHUNK_SIZE_FRAC = 0.8
115
120
  ##
116
121
 
117
122
 
123
+ _SELECT = text("SELECT 1")
124
+
125
+
118
126
  def check_connect(engine: Engine, /) -> bool:
119
127
  """Check if an engine can connect."""
120
128
  try:
121
129
  with engine.connect() as conn:
122
- return bool(conn.execute(text("SELECT 1")).scalar_one())
130
+ return bool(conn.execute(_SELECT).scalar_one())
123
131
  except (OperationalError, ProgrammingError):
124
132
  return False
125
133
 
126
134
 
135
+ async def check_connect_async(
136
+ engine: AsyncEngine, /, *, timeout: Delta | None = None
137
+ ) -> bool:
138
+ """Check if an engine can connect."""
139
+ try:
140
+ async with timeout_td(timeout), engine.connect() as conn:
141
+ return bool((await conn.execute(_SELECT)).scalar_one())
142
+ except (OperationalError, ProgrammingError, TimeoutError):
143
+ return False
144
+
145
+
127
146
  ##
128
147
 
129
148
 
@@ -131,7 +150,7 @@ async def check_engine(
131
150
  engine: AsyncEngine,
132
151
  /,
133
152
  *,
134
- timeout: TimeDelta | None = None,
153
+ timeout: Delta | None = None,
135
154
  error: type[Exception] = TimeoutError,
136
155
  num_tables: int | tuple[int, float] | None = None,
137
156
  ) -> None:
@@ -304,7 +323,7 @@ async def ensure_tables_created(
304
323
  engine: AsyncEngine,
305
324
  /,
306
325
  *tables_or_orms: TableOrORMInstOrClass,
307
- timeout: TimeDelta | None = None,
326
+ timeout: Delta | None = None,
308
327
  error: type[Exception] = TimeoutError,
309
328
  ) -> None:
310
329
  """Ensure a table/set of tables is/are created."""
@@ -333,7 +352,7 @@ async def ensure_tables_created(
333
352
  async def ensure_tables_dropped(
334
353
  engine: AsyncEngine,
335
354
  *tables_or_orms: TableOrORMInstOrClass,
336
- timeout: TimeDelta | None = None,
355
+ timeout: Delta | None = None,
337
356
  error: type[Exception] = TimeoutError,
338
357
  ) -> None:
339
358
  """Ensure a table/set of tables is/are dropped."""
@@ -563,9 +582,9 @@ async def insert_items(
563
582
  snake: bool = False,
564
583
  chunk_size_frac: float = CHUNK_SIZE_FRAC,
565
584
  assume_tables_exist: bool = False,
566
- timeout_create: TimeDelta | None = None,
585
+ timeout_create: Delta | None = None,
567
586
  error_create: type[Exception] = TimeoutError,
568
- timeout_insert: TimeDelta | None = None,
587
+ timeout_insert: Delta | None = None,
569
588
  error_insert: type[Exception] = TimeoutError,
570
589
  ) -> None:
571
590
  """Insert a set of items into a database.
@@ -664,9 +683,9 @@ async def migrate_data(
664
683
  table_or_orm_to: TableOrORMInstOrClass | None = None,
665
684
  chunk_size_frac: float = CHUNK_SIZE_FRAC,
666
685
  assume_tables_exist: bool = False,
667
- timeout_create: TimeDelta | None = None,
686
+ timeout_create: Delta | None = None,
668
687
  error_create: type[Exception] = TimeoutError,
669
- timeout_insert: TimeDelta | None = None,
688
+ timeout_insert: Delta | None = None,
670
689
  error_insert: type[Exception] = TimeoutError,
671
690
  ) -> None:
672
691
  """Migrate the contents of a table from one database to another."""
@@ -800,9 +819,9 @@ async def upsert_items(
800
819
  selected_or_all: _SelectedOrAll = "selected",
801
820
  chunk_size_frac: float = CHUNK_SIZE_FRAC,
802
821
  assume_tables_exist: bool = False,
803
- timeout_create: TimeDelta | None = None,
822
+ timeout_create: Delta | None = None,
804
823
  error_create: type[Exception] = TimeoutError,
805
- timeout_insert: TimeDelta | None = None,
824
+ timeout_insert: Delta | None = None,
806
825
  error_insert: type[Exception] = TimeoutError,
807
826
  ) -> None:
808
827
  """Upsert a set of items into a database.
@@ -922,7 +941,7 @@ async def yield_connection(
922
941
  engine: AsyncEngine,
923
942
  /,
924
943
  *,
925
- timeout: TimeDelta | None = None,
944
+ timeout: Delta | None = None,
926
945
  error: MaybeType[BaseException] = TimeoutError,
927
946
  ) -> AsyncIterator[AsyncConnection]:
928
947
  """Yield an async connection."""
@@ -1260,6 +1279,7 @@ __all__ = [
1260
1279
  "TablenameMixin",
1261
1280
  "UpsertItemsError",
1262
1281
  "check_connect",
1282
+ "check_connect_async",
1263
1283
  "check_engine",
1264
1284
  "columnwise_max",
1265
1285
  "columnwise_min",