dycw-utilities 0.168.9__tar.gz → 0.169.4__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.

Potentially problematic release.


This version of dycw-utilities might be problematic. Click here for more details.

Files changed (227) hide show
  1. dycw_utilities-0.169.4/PKG-INFO +41 -0
  2. dycw_utilities-0.169.4/pyproject.toml +336 -0
  3. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/__init__.py +1 -1
  4. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/cachetools.py +9 -6
  5. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/sentinel.py +1 -3
  6. dycw_utilities-0.168.9/.gitignore +0 -169
  7. dycw_utilities-0.168.9/LICENSE +0 -21
  8. dycw_utilities-0.168.9/PKG-INFO +0 -41
  9. dycw_utilities-0.168.9/pyproject.toml +0 -500
  10. dycw_utilities-0.168.9/src/tests/__init__.py +0 -0
  11. dycw_utilities-0.168.9/src/tests/conftest.py +0 -193
  12. dycw_utilities-0.168.9/src/tests/modules/package_missing/__init__.py +0 -1
  13. dycw_utilities-0.168.9/src/tests/modules/package_missing/module.py +0 -5
  14. dycw_utilities-0.168.9/src/tests/modules/package_with/__init__.py +0 -1
  15. dycw_utilities-0.168.9/src/tests/modules/package_with/outer_1.py +0 -17
  16. dycw_utilities-0.168.9/src/tests/modules/package_with/outer_2.py +0 -17
  17. dycw_utilities-0.168.9/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  18. dycw_utilities-0.168.9/src/tests/modules/package_with/subpackage/inner_1.py +0 -17
  19. dycw_utilities-0.168.9/src/tests/modules/package_with/subpackage/inner_2.py +0 -17
  20. dycw_utilities-0.168.9/src/tests/modules/package_with/subpackage/inner_3.py +0 -17
  21. dycw_utilities-0.168.9/src/tests/modules/package_without/__init__.py +0 -1
  22. dycw_utilities-0.168.9/src/tests/modules/package_without/module_1.py +0 -17
  23. dycw_utilities-0.168.9/src/tests/modules/package_without/module_2.py +0 -17
  24. dycw_utilities-0.168.9/src/tests/modules/standalone.py +0 -17
  25. dycw_utilities-0.168.9/src/tests/modules/with_imports.py +0 -7
  26. dycw_utilities-0.168.9/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -5
  27. dycw_utilities-0.168.9/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -70
  28. dycw_utilities-0.168.9/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -5
  29. dycw_utilities-0.168.9/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -5
  30. dycw_utilities-0.168.9/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -5
  31. dycw_utilities-0.168.9/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -9
  32. dycw_utilities-0.168.9/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -73
  33. dycw_utilities-0.168.9/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -70
  34. dycw_utilities-0.168.9/src/tests/test_aeventkit.py +0 -282
  35. dycw_utilities-0.168.9/src/tests/test_altair.py +0 -169
  36. dycw_utilities-0.168.9/src/tests/test_asyncio.py +0 -492
  37. dycw_utilities-0.168.9/src/tests/test_atomicwrites.py +0 -198
  38. dycw_utilities-0.168.9/src/tests/test_atools.py +0 -67
  39. dycw_utilities-0.168.9/src/tests/test_cachetools.py +0 -85
  40. dycw_utilities-0.168.9/src/tests/test_click.py +0 -439
  41. dycw_utilities-0.168.9/src/tests/test_concurrent.py +0 -86
  42. dycw_utilities-0.168.9/src/tests/test_contextlib.py +0 -242
  43. dycw_utilities-0.168.9/src/tests/test_contextvars.py +0 -37
  44. dycw_utilities-0.168.9/src/tests/test_cryptography.py +0 -38
  45. dycw_utilities-0.168.9/src/tests/test_cvxpy.py +0 -649
  46. dycw_utilities-0.168.9/src/tests/test_dataclasses.py +0 -1012
  47. dycw_utilities-0.168.9/src/tests/test_docker.py +0 -22
  48. dycw_utilities-0.168.9/src/tests/test_enum.py +0 -222
  49. dycw_utilities-0.168.9/src/tests/test_errors.py +0 -82
  50. dycw_utilities-0.168.9/src/tests/test_fastapi.py +0 -43
  51. dycw_utilities-0.168.9/src/tests/test_fpdf2.py +0 -22
  52. dycw_utilities-0.168.9/src/tests/test_functions.py +0 -778
  53. dycw_utilities-0.168.9/src/tests/test_functools.py +0 -59
  54. dycw_utilities-0.168.9/src/tests/test_getpass.py +0 -8
  55. dycw_utilities-0.168.9/src/tests/test_git.py +0 -19
  56. dycw_utilities-0.168.9/src/tests/test_grp.py +0 -24
  57. dycw_utilities-0.168.9/src/tests/test_gzip.py +0 -21
  58. dycw_utilities-0.168.9/src/tests/test_hashlib.py +0 -14
  59. dycw_utilities-0.168.9/src/tests/test_http.py +0 -20
  60. dycw_utilities-0.168.9/src/tests/test_hypothesis.py +0 -1273
  61. dycw_utilities-0.168.9/src/tests/test_importlib.py +0 -22
  62. dycw_utilities-0.168.9/src/tests/test_inflect.py +0 -29
  63. dycw_utilities-0.168.9/src/tests/test_ipython.py +0 -15
  64. dycw_utilities-0.168.9/src/tests/test_iterables.py +0 -1397
  65. dycw_utilities-0.168.9/src/tests/test_jinja2.py +0 -113
  66. dycw_utilities-0.168.9/src/tests/test_json.py +0 -52
  67. dycw_utilities-0.168.9/src/tests/test_jupyter.py +0 -64
  68. dycw_utilities-0.168.9/src/tests/test_libcst.py +0 -168
  69. dycw_utilities-0.168.9/src/tests/test_lightweight_charts.py +0 -64
  70. dycw_utilities-0.168.9/src/tests/test_logging.py +0 -536
  71. dycw_utilities-0.168.9/src/tests/test_math.py +0 -1383
  72. dycw_utilities-0.168.9/src/tests/test_memory_profiler.py +0 -21
  73. dycw_utilities-0.168.9/src/tests/test_modules.py +0 -144
  74. dycw_utilities-0.168.9/src/tests/test_more_itertools.py +0 -354
  75. dycw_utilities-0.168.9/src/tests/test_numpy.py +0 -1178
  76. dycw_utilities-0.168.9/src/tests/test_objects/__init__.py +0 -1
  77. dycw_utilities-0.168.9/src/tests/test_objects/objects.py +0 -225
  78. dycw_utilities-0.168.9/src/tests/test_operator.py +0 -127
  79. dycw_utilities-0.168.9/src/tests/test_optuna.py +0 -76
  80. dycw_utilities-0.168.9/src/tests/test_orjson.py +0 -799
  81. dycw_utilities-0.168.9/src/tests/test_os.py +0 -185
  82. dycw_utilities-0.168.9/src/tests/test_parse.py +0 -757
  83. dycw_utilities-0.168.9/src/tests/test_pathlib.py +0 -349
  84. dycw_utilities-0.168.9/src/tests/test_pickle.py +0 -21
  85. dycw_utilities-0.168.9/src/tests/test_platform.py +0 -97
  86. dycw_utilities-0.168.9/src/tests/test_polars.py +0 -3207
  87. dycw_utilities-0.168.9/src/tests/test_polars_ols.py +0 -110
  88. dycw_utilities-0.168.9/src/tests/test_postgres.py +0 -162
  89. dycw_utilities-0.168.9/src/tests/test_pottery.py +0 -109
  90. dycw_utilities-0.168.9/src/tests/test_pqdm.py +0 -105
  91. dycw_utilities-0.168.9/src/tests/test_psutil.py +0 -24
  92. dycw_utilities-0.168.9/src/tests/test_pwd.py +0 -24
  93. dycw_utilities-0.168.9/src/tests/test_pydantic.py +0 -21
  94. dycw_utilities-0.168.9/src/tests/test_pydantic_settings.py +0 -254
  95. dycw_utilities-0.168.9/src/tests/test_pydantic_settings_sops.py +0 -48
  96. dycw_utilities-0.168.9/src/tests/test_pyinstrument.py +0 -19
  97. dycw_utilities-0.168.9/src/tests/test_pytest.py +0 -525
  98. dycw_utilities-0.168.9/src/tests/test_pytest_randomly.py +0 -8
  99. dycw_utilities-0.168.9/src/tests/test_pytest_regressions.py +0 -68
  100. dycw_utilities-0.168.9/src/tests/test_random.py +0 -85
  101. dycw_utilities-0.168.9/src/tests/test_re.py +0 -129
  102. dycw_utilities-0.168.9/src/tests/test_redis.py +0 -768
  103. dycw_utilities-0.168.9/src/tests/test_reprlib.py +0 -87
  104. dycw_utilities-0.168.9/src/tests/test_scipy.py +0 -48
  105. dycw_utilities-0.168.9/src/tests/test_sentinel.py +0 -53
  106. dycw_utilities-0.168.9/src/tests/test_shelve.py +0 -26
  107. dycw_utilities-0.168.9/src/tests/test_slack_sdk.py +0 -34
  108. dycw_utilities-0.168.9/src/tests/test_socket.py +0 -8
  109. dycw_utilities-0.168.9/src/tests/test_sqlalchemy.py +0 -1471
  110. dycw_utilities-0.168.9/src/tests/test_sqlalchemy_polars.py +0 -639
  111. dycw_utilities-0.168.9/src/tests/test_statsmodels.py +0 -51
  112. dycw_utilities-0.168.9/src/tests/test_string.py +0 -51
  113. dycw_utilities-0.168.9/src/tests/test_tempfile.py +0 -31
  114. dycw_utilities-0.168.9/src/tests/test_testbook.py +0 -38
  115. dycw_utilities-0.168.9/src/tests/test_text.py +0 -404
  116. dycw_utilities-0.168.9/src/tests/test_threading.py +0 -42
  117. dycw_utilities-0.168.9/src/tests/test_timer.py +0 -130
  118. dycw_utilities-0.168.9/src/tests/test_traceback.py +0 -168
  119. dycw_utilities-0.168.9/src/tests/test_types.py +0 -53
  120. dycw_utilities-0.168.9/src/tests/test_typing.py +0 -1166
  121. dycw_utilities-0.168.9/src/tests/test_typing_funcs/__init__.py +0 -0
  122. dycw_utilities-0.168.9/src/tests/test_typing_funcs/no_future.py +0 -45
  123. dycw_utilities-0.168.9/src/tests/test_typing_funcs/with_future.py +0 -246
  124. dycw_utilities-0.168.9/src/tests/test_tzdata.py +0 -14
  125. dycw_utilities-0.168.9/src/tests/test_tzlocal.py +0 -17
  126. dycw_utilities-0.168.9/src/tests/test_uuid.py +0 -96
  127. dycw_utilities-0.168.9/src/tests/test_version.py +0 -144
  128. dycw_utilities-0.168.9/src/tests/test_warnings.py +0 -74
  129. dycw_utilities-0.168.9/src/tests/test_whenever.py +0 -1941
  130. dycw_utilities-0.168.9/src/tests/test_zipfile.py +0 -37
  131. dycw_utilities-0.168.9/src/tests/test_zoneinfo.py +0 -131
  132. dycw_utilities-0.168.9/src/utilities/pytest_plugins/__init__.py +0 -1
  133. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/README.md +0 -0
  134. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/aeventkit.py +0 -0
  135. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/altair.py +0 -0
  136. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/asyncio.py +0 -0
  137. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/atomicwrites.py +0 -0
  138. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/atools.py +0 -0
  139. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/click.py +0 -0
  140. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/concurrent.py +0 -0
  141. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/contextlib.py +0 -0
  142. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/contextvars.py +0 -0
  143. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/cryptography.py +0 -0
  144. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/cvxpy.py +0 -0
  145. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/dataclasses.py +0 -0
  146. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/docker.py +0 -0
  147. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/enum.py +0 -0
  148. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/errors.py +0 -0
  149. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/fastapi.py +0 -0
  150. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/fpdf2.py +0 -0
  151. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/functions.py +0 -0
  152. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/functools.py +0 -0
  153. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/getpass.py +0 -0
  154. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/git.py +0 -0
  155. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/grp.py +0 -0
  156. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/gzip.py +0 -0
  157. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/hashlib.py +0 -0
  158. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/http.py +0 -0
  159. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/hypothesis.py +0 -0
  160. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/importlib.py +0 -0
  161. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/inflect.py +0 -0
  162. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/ipython.py +0 -0
  163. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/iterables.py +0 -0
  164. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/jinja2.py +0 -0
  165. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/json.py +0 -0
  166. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/jupyter.py +0 -0
  167. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/libcst.py +0 -0
  168. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/lightweight_charts.py +0 -0
  169. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/logging.py +0 -0
  170. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/math.py +0 -0
  171. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/memory_profiler.py +0 -0
  172. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/modules.py +0 -0
  173. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/more_itertools.py +0 -0
  174. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/numpy.py +0 -0
  175. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/operator.py +0 -0
  176. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/optuna.py +0 -0
  177. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/orjson.py +0 -0
  178. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/os.py +0 -0
  179. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/parse.py +0 -0
  180. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/pathlib.py +0 -0
  181. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/pickle.py +0 -0
  182. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/platform.py +0 -0
  183. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/polars.py +0 -0
  184. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/polars_ols.py +0 -0
  185. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/postgres.py +0 -0
  186. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/pottery.py +0 -0
  187. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/pqdm.py +0 -0
  188. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/psutil.py +0 -0
  189. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/pwd.py +0 -0
  190. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/py.typed +0 -0
  191. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/pydantic.py +0 -0
  192. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/pydantic_settings.py +0 -0
  193. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/pydantic_settings_sops.py +0 -0
  194. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/pyinstrument.py +0 -0
  195. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/pytest.py +0 -0
  196. {dycw_utilities-0.168.9/src/tests/modules → dycw_utilities-0.169.4/src/utilities/pytest_plugins}/__init__.py +0 -0
  197. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
  198. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
  199. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/pytest_regressions.py +0 -0
  200. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/random.py +0 -0
  201. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/re.py +0 -0
  202. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/redis.py +0 -0
  203. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/reprlib.py +0 -0
  204. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/scipy.py +0 -0
  205. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/shelve.py +0 -0
  206. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/slack_sdk.py +0 -0
  207. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/socket.py +0 -0
  208. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/sqlalchemy.py +0 -0
  209. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/sqlalchemy_polars.py +0 -0
  210. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/statsmodels.py +0 -0
  211. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/string.py +0 -0
  212. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/tempfile.py +0 -0
  213. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/testbook.py +0 -0
  214. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/text.py +0 -0
  215. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/threading.py +0 -0
  216. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/timer.py +0 -0
  217. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/traceback.py +0 -0
  218. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/types.py +0 -0
  219. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/typing.py +0 -0
  220. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/tzdata.py +0 -0
  221. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/tzlocal.py +0 -0
  222. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/uuid.py +0 -0
  223. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/version.py +0 -0
  224. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/warnings.py +0 -0
  225. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/whenever.py +0 -0
  226. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/zipfile.py +0 -0
  227. {dycw_utilities-0.168.9 → dycw_utilities-0.169.4}/src/utilities/zoneinfo.py +0 -0
@@ -0,0 +1,41 @@
1
+ Metadata-Version: 2.3
2
+ Name: dycw-utilities
3
+ Version: 0.169.4
4
+ Author: Derek Wan
5
+ Author-email: Derek Wan <d.wan@icloud.com>
6
+ Requires-Dist: atomicwrites>=1.4.1,<1.5
7
+ Requires-Dist: typing-extensions>=4.15.0,<4.16
8
+ Requires-Dist: tzlocal>=5.3.1,<5.4
9
+ Requires-Dist: whenever>=0.9.3,<0.10
10
+ Requires-Dist: coloredlogs>=15.0.1,<15.1 ; extra == 'logging'
11
+ Requires-Dist: dycw-pytest-only>=2.1.1,<2.2 ; extra == 'test'
12
+ Requires-Dist: hypothesis>=6.142.0,<6.143 ; extra == 'test'
13
+ Requires-Dist: pytest>=8.4.2,<8.5 ; extra == 'test'
14
+ Requires-Dist: pytest-asyncio>=1.2.0,<1.3 ; extra == 'test'
15
+ Requires-Dist: pytest-cov>=7.0.0,<7.1 ; extra == 'test'
16
+ Requires-Dist: pytest-instafail>=0.5.0,<0.6 ; extra == 'test'
17
+ Requires-Dist: pytest-lazy-fixtures>=1.4.0,<1.5 ; extra == 'test'
18
+ Requires-Dist: pytest-randomly>=4.0.1,<4.1 ; extra == 'test'
19
+ Requires-Dist: pytest-regressions>=2.8.3,<2.9 ; extra == 'test'
20
+ Requires-Dist: pytest-repeat>=0.9.4,<0.10 ; extra == 'test'
21
+ Requires-Dist: pytest-rerunfailures>=16.0.1,<16.1 ; extra == 'test'
22
+ Requires-Dist: pytest-rng>=1.0.0,<1.1 ; extra == 'test'
23
+ Requires-Dist: pytest-timeout>=2.4.0,<2.5 ; extra == 'test'
24
+ Requires-Dist: pytest-xdist>=3.8.0,<3.9 ; extra == 'test'
25
+ Requires-Dist: testbook>=0.4.2,<0.5 ; extra == 'test'
26
+ Requires-Python: >=3.13
27
+ Provides-Extra: logging
28
+ Provides-Extra: test
29
+ Description-Content-Type: text/markdown
30
+
31
+ [![PyPI version](https://badge.fury.io/py/dycw-utilities.svg)](https://badge.fury.io/py/dycw-utilities)
32
+
33
+ # `dycw-utilities`
34
+
35
+ [All the Python functions I don't want to write twice.](https://github.com/nvim-lua/plenary.nvim)
36
+
37
+ ## Installation
38
+
39
+ - `pip install dycw-utilities`
40
+
41
+ or with [extras](https://github.com/dycw/python-utilities/blob/master/pyproject.toml).
@@ -0,0 +1,336 @@
1
+ # build-system
2
+ [build-system]
3
+ build-backend = "uv_build"
4
+ requires = ["uv_build"]
5
+
6
+ # dependency groups
7
+ [dependency-groups]
8
+ aeventkit = ["aeventkit >=2.1.0, <2.2"]
9
+ altair = ["altair >=5.5.0, <5.6"]
10
+ altair-test = ["polars", "img2pdf", "vl-convert-python"]
11
+ atools = ["atools >=0.14.2, <0.15"]
12
+ cachetools = ["cachetools >=6.2.1, <6.3"]
13
+ click = ["click >=8.3.0, <8.4"]
14
+ core = [
15
+ "atomicwrites >=1.4.1, <1.5",
16
+ "typing-extensions >=4.15.0, <4.16",
17
+ "tzlocal >=5.3.1, <5.4",
18
+ "whenever >=0.9.3, <0.10",
19
+ ]
20
+ cryptography = ["cryptography >=46.0.3, <46.1"]
21
+ cvxpy = ["cvxpy >=1.7.3, <1.8"]
22
+ dataclasses-test = ["orjson", "polars"]
23
+ dev = [
24
+ "coloredlogs >=15.0.1, <15.1",
25
+ "coverage-conditional-plugin >=0.9.0, <0.10",
26
+ "dycw-pytest-only >=2.1.1, <2.2",
27
+ "pyright[nodejs] >=1.1.407, <1.2",
28
+ "pytest-cov >=7.0.0, <7.1",
29
+ "pytest-timeout >=2.4.0, <2.5",
30
+ ]
31
+ fastapi = ["fastapi >=0.120.0, <0.121"]
32
+ fastapi-test = ["httpx", "uvicorn"]
33
+ fpdf2 = ["fpdf2 >=2.8.4, <2.9"]
34
+ gitpython = ["gitpython >=3.1.45, <3.2"]
35
+ hashlib-test = ["orjson"]
36
+ http-test = ["orjson"]
37
+ hypothesis = ["hypothesis >=6.142.0, <6.143"]
38
+ hypothesis-test = ["libcst", "numpy", "pathvalidate", "pytest-rerunfailures"]
39
+ inflect = ["inflect >=7.5.0, <7.6"]
40
+ jinja2 = ["jinja2 >=3.1.6, <3.2"]
41
+ jupyter-test = ["pandas", "polars"]
42
+ libcst = ["libcst >=1.8.5, <1.9"]
43
+ lightweight-charts = ["lightweight-charts >=2.1, <2.2"]
44
+ lightweight-charts-test = ["polars", "pyarrow"]
45
+ math-test = ["numpy"]
46
+ memory-profiler = ["memory-profiler >=0.61.0, <0.62"]
47
+ more-itertools = ["more-itertools >=10.8.0, <10.9"]
48
+ numpy = ["numpy >=2.3.4, <2.4"]
49
+ operator = ["polars"]
50
+ optuna = ["optuna >=4.5.0, <4.6"]
51
+ orjson = ["orjson >=3.11.4, <3.12"]
52
+ orjson-test = ["polars"]
53
+ polars = ["polars >=1.34.0, <1.35"]
54
+ polars-ols = ["polars-ols >=0.3.5, <0.4"]
55
+ polars-ols-test = ["scikit-learn"]
56
+ polars-test = ["numpy", "scipy", "statsmodels"]
57
+ pottery = ["pottery >=3.0.1, <3.1"]
58
+ pottery-test = ["orjson"]
59
+ pqdm = ["pqdm >=0.2.0, <0.3"]
60
+ psutil = ["psutil >=7.1.2, <7.2"]
61
+ pydantic = ["pydantic >=2.12.3, <2.13"]
62
+ pydantic-settings = ["pydantic-settings >=2.11.0, <2.12"]
63
+ pydantic-settings-sops = ["pydantic-settings-sops"]
64
+ pydantic-settings-test = ["pyyaml", "tomlkit"]
65
+ pyinstrument = ["pyinstrument >=5.1.1, <5.2"]
66
+ pytest = [
67
+ "pytest >=8.4.2, <8.5",
68
+ "pytest-asyncio >=1.2.0, <1.3",
69
+ "pytest-randomly >=4.0.1, <4.1",
70
+ "pytest-timeout >=2.4.0, <2.5",
71
+ "pytest-xdist >=3.8.0, <3.9",
72
+ ]
73
+ pytest-regressions = ["pytest-regressions >=2.8.3, <2.9"]
74
+ pytest-regressions-test = ["orjson", "polars"]
75
+ pytest-test = ["orjson", "pytest-rerunfailures", "pytest-rng"]
76
+ redis = ["redis >=7.0.0, <7.1", "orjson"]
77
+ redis-test = ["pytest-rerunfailures"]
78
+ reprlib-test = ["rich"]
79
+ scipy = ["scipy >=1.16.2, <1.17"]
80
+ sklearn = ["scikit-learn >=1.7.2, <1.8"]
81
+ slack-sdk = ["slack-sdk >=3.37.0, <3.38"]
82
+ slack-sdk-test = ["aiohttp"]
83
+ sqlalchemy = ["sqlalchemy >=2.0.44, <2.1", "psycopg"]
84
+ sqlalchemy-polars = ["sqlalchemy", "polars"]
85
+ sqlalchemy-polars-test = ["aiosqlite", "asyncpg", "greenlet"]
86
+ sqlalchemy-test = ["aiosqlite", "asyncpg", "greenlet"]
87
+ statsmodels = ["statsmodels >=0.14.5, <0.15"]
88
+ testbook = ["testbook >=0.4.2, <0.5"]
89
+ tzdata = ["tzdata >=2025.2, <2025.3"]
90
+ whenever-test = ["pathvalidate"]
91
+
92
+ # project
93
+ [project]
94
+ authors = [{ email = "d.wan@icloud.com", name = "Derek Wan" }]
95
+ dependencies = [
96
+ "atomicwrites >=1.4.1, <1.5",
97
+ "typing-extensions >=4.15.0, <4.16",
98
+ "tzlocal >=5.3.1, <5.4",
99
+ "whenever >=0.9.3, <0.10",
100
+ ]
101
+ name = "dycw-utilities"
102
+ readme = "README.md"
103
+ requires-python = ">= 3.13"
104
+ version = "0.169.4"
105
+
106
+ [project.entry-points.pytest11]
107
+ pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
108
+ pytest-regressions = "utilities.pytest_plugins.pytest_regressions"
109
+
110
+ [project.optional-dependencies]
111
+ logging = ["coloredlogs >=15.0.1, <15.1"]
112
+ test = [
113
+ "dycw-pytest-only >=2.1.1, <2.2",
114
+ "hypothesis >=6.142.0, <6.143",
115
+ "pytest >=8.4.2, <8.5",
116
+ "pytest-asyncio >=1.2.0, <1.3",
117
+ "pytest-cov >=7.0.0, <7.1",
118
+ "pytest-instafail >=0.5.0, <0.6",
119
+ "pytest-lazy-fixtures >=1.4.0, <1.5",
120
+ "pytest-randomly >=4.0.1, <4.1",
121
+ "pytest-regressions >=2.8.3, <2.9",
122
+ "pytest-repeat >=0.9.4, <0.10",
123
+ "pytest-rerunfailures >=16.0.1, <16.1",
124
+ "pytest-rng >=1.0.0, <1.1",
125
+ "pytest-timeout >=2.4.0, <2.5",
126
+ "pytest-xdist >=3.8.0, <3.9",
127
+ "testbook >=0.4.2, <0.5",
128
+ ]
129
+
130
+ [project.scripts]
131
+
132
+ # tool
133
+ [tool]
134
+
135
+ # bump-my-version
136
+ [tool.bumpversion]
137
+ allow_dirty = true
138
+ current_version = "0.169.4"
139
+
140
+ [[tool.bumpversion.files]]
141
+ filename = "src/utilities/__init__.py"
142
+ replace = "__version__ = \"{new_version}\""
143
+ search = "__version__ = \"{current_version}\""
144
+
145
+ # coverage
146
+ [tool.coverage]
147
+ [tool.coverage.coverage_conditional_plugin.rules]
148
+ skipif-ci = '"CI" in os_environ'
149
+ skipif-ci-and-mac = '("CI" in os_environ) and (sys_platform == "darwin")'
150
+ skipif-ci-and-not-linux = '("CI" in os_environ) and (sys_platform != "linux")'
151
+ skipif-ci-and-not-windows = '("CI" in os_environ) and (sys_platform != "windows")'
152
+ skipif-ci-and-windows = '("CI" in os_environ) and (sys_platform != "windows")'
153
+ skipif-linux = 'sys_platform == "linux"'
154
+ skipif-mac = 'sys_platform == "darwin"'
155
+ skipif-not-linux = 'sys_platform != "linux"'
156
+ skipif-not-macos = 'sys_platform != "darwin"'
157
+ skipif-not-windows = 'sys_platform != "windows"'
158
+ skipif-windows = 'sys_platform == "windows"'
159
+
160
+ [tool.coverage.html]
161
+ directory = ".coverage/html"
162
+
163
+ [tool.coverage.report]
164
+ exclude_also = [
165
+ "@overload",
166
+ "assert_never",
167
+ "case never:",
168
+ "if TYPE_CHECKING:",
169
+ ]
170
+ fail_under = 100.0
171
+ skip_covered = true
172
+ skip_empty = true
173
+
174
+ [tool.coverage.run]
175
+ branch = true
176
+ data_file = ".coverage/data"
177
+ omit = [
178
+ "src/utilities/__init__.py",
179
+ "src/utilities/pytest_plugins/*.py",
180
+ "src/utilities/streamlit.py",
181
+ ]
182
+ parallel = true
183
+ plugins = ["coverage_conditional_plugin"]
184
+ source = ["src/utilities"]
185
+
186
+ # nitpick
187
+ [tool.nitpick]
188
+ style = [
189
+ "https://raw.githubusercontent.com/dycw/nitpick/master/styles/3.13.toml",
190
+ "https://raw.githubusercontent.com/dycw/nitpick/master/styles/common.toml",
191
+ ]
192
+
193
+ # pyright
194
+ [tool.pyright]
195
+ deprecateTypingAliases = true
196
+ enableReachabilityAnalysis = false
197
+ ignore = ["**/_typeshed/**"]
198
+ pythonVersion = "3.13"
199
+ reportCallInDefaultInitializer = true
200
+ reportImplicitOverride = true
201
+ reportImplicitStringConcatenation = true
202
+ reportImportCycles = true
203
+ reportMissingSuperCall = true
204
+ reportMissingTypeArgument = false
205
+ reportMissingTypeStubs = false
206
+ reportPrivateUsage = false
207
+ reportPropertyTypeMismatch = true
208
+ reportUninitializedInstanceVariable = true
209
+ reportUnknownArgumentType = false
210
+ reportUnknownMemberType = false
211
+ reportUnknownParameterType = false
212
+ reportUnknownVariableType = false
213
+ reportUnnecessaryComparison = false
214
+ reportUnnecessaryTypeIgnoreComment = true
215
+ reportUnusedCallResult = true
216
+ reportUnusedImport = false
217
+ reportUnusedVariable = false
218
+ typeCheckingMode = "strict"
219
+
220
+ # pytest
221
+ [tool.pytest]
222
+ [tool.pytest.ini_options]
223
+ addopts = [
224
+ "-ra",
225
+ "-vv",
226
+ "--color=auto",
227
+ "--durations=10",
228
+ "--durations-min=10",
229
+ "--strict-markers",
230
+ "--timeout=600",
231
+ ]
232
+ asyncio_default_fixture_loop_scope = "function"
233
+ asyncio_mode = "auto"
234
+ collect_imported_tests = false
235
+ filterwarnings = [
236
+ "error",
237
+ "ignore:Exception ignored in.* <coroutine object .* at .*>:pytest.PytestUnraisableExceptionWarning",
238
+ "ignore:Exception in thread Thread-.*:pytest.PytestUnhandledThreadExceptionWarning",
239
+ "ignore:Jupyter is migrating its paths to use standard platformdirs:DeprecationWarning", # jupyter
240
+ "ignore:ResourceTracker called reentrantly for resource cleanup, which is unsupported:UserWarning",
241
+ "ignore:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(.*)>:RuntimeWarning", # sqlalchemy
242
+ "ignore:Using fork.* can cause Polars to deadlock in the child process:RuntimeWarning", # polars/pqdm
243
+ "ignore:coroutine 'AsyncConnection.close' was never awaited:RuntimeWarning",
244
+ "ignore:loop is closed:ResourceWarning", # redis
245
+ "ignore:unclosed <StreamWriter .*>:ResourceWarning", # redis
246
+ "ignore:unclosed <socket.*socket .*>:ResourceWarning", # redis
247
+ "ignore:unclosed Connection <redis.*asyncio.*connection.*Connection.*>:ResourceWarning", # redis
248
+ "ignore:unclosed connection <asyncpg.*connection.*Connection.*>:ResourceWarning", # asyncpg
249
+ "ignore:unclosed database in <sqlite3.*Connection .*>:ResourceWarning", # sqlalchemy
250
+ "ignore:unclosed event loop <_UnixSelectorEventLoop .*>:ResourceWarning", # redis
251
+ "ignore:unclosed file <_io.*TextIOWrapper .*>:ResourceWarning", # logging
252
+ "ignore:unclosed transport <_SelectorSocketTransport .*>:ResourceWarning", # redis
253
+ ]
254
+ minversion = "8.0"
255
+ testpaths = ["src/tests"]
256
+ xfail_strict = true
257
+
258
+ # ruff
259
+ [tool.ruff]
260
+ src = ["src"]
261
+ target-version = "py313"
262
+ unsafe-fixes = true
263
+
264
+ [tool.ruff.format]
265
+ preview = true
266
+ skip-magic-trailing-comma = true
267
+
268
+ [tool.ruff.lint]
269
+ explicit-preview-rules = true
270
+ fixable = ["ALL"]
271
+ ignore = [
272
+ "ANN401", # any-type
273
+ "A005", # stdlib-module-shadowing
274
+ "ASYNC109", # async-function-with-timeout
275
+ "C901", # complex-structure
276
+ "CPY", # flake8-copyright
277
+ "D", # pydocstyle
278
+ "DOC", # pydoclint
279
+ "E501", # line-too-long
280
+ "PD", # pandas-vet
281
+ "PERF203", # try-except-in-loop
282
+ "PLC0415", # import-outside-top-level
283
+ "PLR0911", # too-many-return-statements
284
+ "PLR0912", # too-many-branches
285
+ "PLR0913", # too-many-arguments
286
+ "PLR0915", # too-many-statements
287
+ "PLR2004", # magic-value-comparison
288
+ "PT012", # pytest-raises-with-multiple-statements
289
+ "PT013", # pytest-incorrect-pytest-import
290
+ "S202", # tarfile-unsafe-members
291
+ "S310", # suspicious-url-open-usage
292
+ "S311", # suspicious-non-cryptographic-random-usage
293
+ "S602", # subprocess-popen-with-shell-equals-true
294
+ "S603", # subprocess-without-shell-equals-true
295
+ "S607", # start-process-with-partial-path
296
+ # preview
297
+ "S101", # assert
298
+ # formatter
299
+ "W191", # tab-indentation
300
+ "E111", # indentation-with-invalid-multiple
301
+ "E114", # indentation-with-invalid-multiple-comment
302
+ "E117", # over-indented
303
+ "COM812", # missing-trailing-comma
304
+ "COM819", # prohibited-trailing-comma
305
+ "ISC001", # single-line-implicit-string-concatenation
306
+ "ISC002", # multi-line-implicit-string-concatenation
307
+ ]
308
+ preview = true
309
+ select = [
310
+ "ALL",
311
+ "RUF022", # unsorted-dunder-all
312
+ ]
313
+
314
+ [tool.ruff.lint.extend-per-file-ignores]
315
+ "src/tests/**/*.py" = [
316
+ "S101", # assert
317
+ "SLF001", # private-member-access
318
+ ]
319
+ "src/tests/test_typing_funcs/no_future.py" = [
320
+ "I002",
321
+ ] # missing-required-import
322
+
323
+ [tool.ruff.lint.flake8-tidy-imports]
324
+ ban-relative-imports = "all"
325
+
326
+ [tool.ruff.lint.isort]
327
+ required-imports = ["from __future__ import annotations"]
328
+ split-on-trailing-comma = false
329
+
330
+ # uv
331
+ [tool.uv]
332
+ default-groups = "all"
333
+
334
+ [tool.uv.build-backend]
335
+ module-name = "utilities"
336
+ module-root = "src"
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.168.9"
3
+ __version__ = "0.169.4"
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  from collections.abc import Callable, Hashable, Iterable, Iterator, MutableSet
4
4
  from math import inf
5
5
  from time import monotonic
6
- from typing import TYPE_CHECKING, Any, override
6
+ from typing import TYPE_CHECKING, Any, cast, override
7
7
 
8
8
  import cachetools
9
9
  from cachetools.func import ttl_cache
@@ -100,11 +100,14 @@ def cache[F: Callable](
100
100
  typed_: bool = False,
101
101
  ) -> Callable[[F], F]:
102
102
  """Decorate a function with `max_size` and/or `ttl` settings."""
103
- return ttl_cache(
104
- maxsize=inf if max_size is None else max_size,
105
- ttl=inf if max_duration is None else max_duration.in_seconds(),
106
- timer=timer,
107
- typed=typed_,
103
+ return cast(
104
+ "F",
105
+ ttl_cache(
106
+ maxsize=max_size,
107
+ ttl=inf if max_duration is None else max_duration.in_seconds(),
108
+ timer=timer,
109
+ typed=typed_,
110
+ ),
108
111
  )
109
112
 
110
113
 
@@ -2,9 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
4
  from re import IGNORECASE, search
5
- from typing import Any, override
6
-
7
- from typing_extensions import TypeIs
5
+ from typing import Any, TypeIs, override
8
6
 
9
7
 
10
8
  class _Meta(type):
@@ -1,169 +0,0 @@
1
- # Byte-compiled / optimized / DLL files
2
- __pycache__/
3
- *.py[cod]
4
- *$py.class
5
-
6
- # C extensions
7
- *.so
8
-
9
- # Distribution / packaging
10
- .Python
11
- build/
12
- develop-eggs/
13
- dist/
14
- downloads/
15
- eggs/
16
- .eggs/
17
- lib/
18
- lib64/
19
- parts/
20
- sdist/
21
- var/
22
- wheels/
23
- share/python-wheels/
24
- *.egg-info/
25
- .installed.cfg
26
- *.egg
27
- MANIFEST
28
-
29
- # PyInstaller
30
- # Usually these files are written by a python script from a template
31
- # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
- *.manifest
33
- *.spec
34
-
35
- # Installer logs
36
- pip-log.txt
37
- pip-delete-this-directory.txt
38
-
39
- # Unit test / coverage reports
40
- htmlcov/
41
- .tox/
42
- .nox/
43
- .coverage
44
- .coverage.*
45
- .cache
46
- nosetests.xml
47
- coverage.xml
48
- *.cover
49
- *.py,cover
50
- .hypothesis/
51
- .pytest_cache/
52
- cover/
53
-
54
- # Translations
55
- *.mo
56
- *.pot
57
-
58
- # Django stuff:
59
- *.log
60
- local_settings.py
61
- db.sqlite3
62
- db.sqlite3-journal
63
-
64
- # Flask stuff:
65
- instance/
66
- .webassets-cache
67
-
68
- # Scrapy stuff:
69
- .scrapy
70
-
71
- # Sphinx documentation
72
- docs/_build/
73
-
74
- # PyBuilder
75
- .pybuilder/
76
- target/
77
-
78
- # Jupyter Notebook
79
- .ipynb_checkpoints
80
-
81
- # IPython
82
- profile_default/
83
- ipython_config.py
84
-
85
- # pyenv
86
- # For a library or package, you might want to ignore these files since the code is
87
- # intended to run in multiple environments; otherwise, check them in:
88
- # .python-version
89
-
90
- # pipenv
91
- # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
- # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
- # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
- # install all needed dependencies.
95
- #Pipfile.lock
96
-
97
- # poetry
98
- # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
99
- # This is especially recommended for binary packages to ensure reproducibility, and is more
100
- # commonly ignored for libraries.
101
- # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
102
- #poetry.lock
103
-
104
- # pdm
105
- # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
106
- #pdm.lock
107
- # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
108
- # in version control.
109
- # https://pdm.fming.dev/#use-with-ide
110
- .pdm.toml
111
-
112
- # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
113
- __pypackages__/
114
-
115
- # Celery stuff
116
- celerybeat-schedule
117
- celerybeat.pid
118
-
119
- # SageMath parsed files
120
- *.sage.py
121
-
122
- # Environments
123
- .env
124
- .venv
125
- env/
126
- venv/
127
- ENV/
128
- env.bak/
129
- venv.bak/
130
-
131
- # Spyder project settings
132
- .spyderproject
133
- .spyproject
134
-
135
- # Rope project settings
136
- .ropeproject
137
-
138
- # mkdocs documentation
139
- /site
140
-
141
- # mypy
142
- .mypy_cache/
143
- .dmypy.json
144
- dmypy.json
145
-
146
- # Pyre type checker
147
- .pyre/
148
-
149
- # pytype static type analyzer
150
- .pytype/
151
-
152
- # Cython debug symbols
153
- cython_debug/
154
-
155
- # PyCharm
156
- # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
157
- # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
158
- # and can be added to the global gitignore or merged into this file. For a more nuclear
159
- # option (not recommended) you can uncomment the following to ignore the entire idea folder.
160
- #.idea/
161
-
162
- # extra
163
- **/*.gz
164
- **/*.ipc
165
- **/*.ipynb
166
- .direnv/
167
- .logs/
168
- .ruff_cache/
169
- .streamlit/secrets.toml
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2024 Derek Wan
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1,41 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: dycw-utilities
3
- Version: 0.168.9
4
- Author-email: Derek Wan <d.wan@icloud.com>
5
- License-File: LICENSE
6
- Requires-Python: >=3.12
7
- Requires-Dist: atomicwrites<1.5,>=1.4.1
8
- Requires-Dist: typing-extensions<4.16,>=4.15.0
9
- Requires-Dist: tzlocal<5.4,>=5.3.1
10
- Requires-Dist: whenever<0.10,>=0.9.2
11
- Provides-Extra: logging
12
- Requires-Dist: coloredlogs<15.1,>=15.0.1; extra == 'logging'
13
- Provides-Extra: test
14
- Requires-Dist: dycw-pytest-only<2.2,>=2.1.1; extra == 'test'
15
- Requires-Dist: hypothesis<6.141,>=6.140.3; extra == 'test'
16
- Requires-Dist: pytest-asyncio<1.3,>=1.2.0; extra == 'test'
17
- Requires-Dist: pytest-cov<7.1,>=7.0.0; extra == 'test'
18
- Requires-Dist: pytest-instafail<0.6,>=0.5.0; extra == 'test'
19
- Requires-Dist: pytest-lazy-fixtures<1.5,>=1.4.0; extra == 'test'
20
- Requires-Dist: pytest-randomly<4.1,>=4.0.1; extra == 'test'
21
- Requires-Dist: pytest-regressions<2.9,>=2.8.3; extra == 'test'
22
- Requires-Dist: pytest-repeat<0.10,>=0.9.4; extra == 'test'
23
- Requires-Dist: pytest-rerunfailures<16.1,>=16.0.1; extra == 'test'
24
- Requires-Dist: pytest-rng<1.1,>=1.0.0; extra == 'test'
25
- Requires-Dist: pytest-timeout<2.5,>=2.4.0; extra == 'test'
26
- Requires-Dist: pytest-xdist<3.9,>=3.8.0; extra == 'test'
27
- Requires-Dist: pytest<8.5,>=8.4.2; extra == 'test'
28
- Requires-Dist: testbook<0.5,>=0.4.2; extra == 'test'
29
- Description-Content-Type: text/markdown
30
-
31
- [![PyPI version](https://badge.fury.io/py/dycw-utilities.svg)](https://badge.fury.io/py/dycw-utilities)
32
-
33
- # `dycw-utilities`
34
-
35
- [All the Python functions I don't want to write twice.](https://github.com/nvim-lua/plenary.nvim)
36
-
37
- ## Installation
38
-
39
- - `pip install dycw-utilities`
40
-
41
- or with [extras](https://github.com/dycw/python-utilities/blob/master/pyproject.toml).