chutils 3.1.0__tar.gz → 3.3.0__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 (676) hide show
  1. chutils-3.3.0/.chutilsignore +6 -0
  2. {chutils-3.1.0 → chutils-3.3.0}/.gitignore +186 -185
  3. {chutils-3.1.0 → chutils-3.3.0}/PKG-INFO +69 -4
  4. {chutils-3.1.0 → chutils-3.3.0}/README.md +54 -3
  5. chutils-3.3.0/ai-lint.toml +180 -0
  6. {chutils-3.1.0 → chutils-3.3.0}/api_map.md +226 -180
  7. {chutils-3.1.0/conductor/tracks → chutils-3.3.0/conductor/archive}/dev_clean_20260707/plan.md +35 -35
  8. {chutils-3.1.0/conductor/archive/chat_context_20260610 → chutils-3.3.0/conductor/archive/http_streaming_20260720}/index.md +1 -1
  9. chutils-3.3.0/conductor/archive/http_streaming_20260720/metadata.json +8 -0
  10. chutils-3.3.0/conductor/archive/http_streaming_20260720/plan.md +34 -0
  11. chutils-3.3.0/conductor/archive/http_streaming_20260720/spec.md +36 -0
  12. {chutils-3.1.0/conductor/archive/ai_lint_inline_ignore_20260707 → chutils-3.3.0/conductor/archive/nodriver_interactions_20260720}/index.md +1 -1
  13. chutils-3.3.0/conductor/archive/nodriver_interactions_20260720/metadata.json +8 -0
  14. chutils-3.3.0/conductor/archive/nodriver_interactions_20260720/plan.md +30 -0
  15. chutils-3.3.0/conductor/archive/nodriver_interactions_20260720/spec.md +36 -0
  16. {chutils-3.1.0/conductor/archive/captcha_20260707 → chutils-3.3.0/conductor/archive/profile_warmer_20260720}/index.md +1 -1
  17. chutils-3.3.0/conductor/archive/profile_warmer_20260720/metadata.json +8 -0
  18. chutils-3.3.0/conductor/archive/profile_warmer_20260720/plan.md +31 -0
  19. chutils-3.3.0/conductor/archive/profile_warmer_20260720/spec.md +39 -0
  20. {chutils-3.1.0/conductor/tracks → chutils-3.3.0/conductor/archive}/store_20260702/plan.md +25 -25
  21. {chutils-3.1.0 → chutils-3.3.0}/conductor/product.md +19 -0
  22. {chutils-3.1.0 → chutils-3.3.0}/conductor/tech-stack.md +16 -0
  23. chutils-3.3.0/conductor/tracks.md +34 -0
  24. {chutils-3.1.0 → chutils-3.3.0}/conductor/workflow.md +4 -0
  25. {chutils-3.1.0 → chutils-3.3.0}/docs/README_RU.md +53 -3
  26. {chutils-3.1.0 → chutils-3.3.0}/docs/ai_lint.md +444 -388
  27. {chutils-3.1.0 → chutils-3.3.0}/docs/api.md +32 -0
  28. chutils-3.3.0/docs/audit.md +119 -0
  29. {chutils-3.1.0 → chutils-3.3.0}/docs/captcha.md +112 -112
  30. chutils-3.3.0/docs/cli/db.md +73 -0
  31. {chutils-3.1.0 → chutils-3.3.0}/docs/cli/dev.md +178 -1
  32. {chutils-3.1.0 → chutils-3.3.0}/docs/cli/env.md +62 -62
  33. {chutils-3.1.0 → chutils-3.3.0}/docs/cli/index.md +1 -0
  34. {chutils-3.1.0 → chutils-3.3.0}/docs/cli/pypi.md +121 -121
  35. chutils-3.3.0/docs/custom_config_providers.md +297 -0
  36. {chutils-3.1.0 → chutils-3.3.0}/docs/dependencies.md +111 -108
  37. chutils-3.3.0/docs/http.md +154 -0
  38. {chutils-3.1.0 → chutils-3.3.0}/docs/index.md +9 -4
  39. {chutils-3.1.0 → chutils-3.3.0}/docs/recipes.md +65 -7
  40. {chutils-3.1.0 → chutils-3.3.0}/docs/scraping.md +253 -162
  41. chutils-3.3.0/docs/store.md +98 -0
  42. chutils-3.3.0/examples/16_cloud_secret_managers.py +76 -0
  43. {chutils-3.1.0 → chutils-3.3.0}/project_index.json +20774 -11562
  44. {chutils-3.1.0 → chutils-3.3.0}/pyproject.toml +17 -4
  45. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/__init__.py +63 -0
  46. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/__init__.pyi +446 -7
  47. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/antigravity.md +6 -6
  48. chutils-3.3.0/src/chutils/audit/__init__.py +44 -0
  49. chutils-3.3.0/src/chutils/audit/_hash.py +22 -0
  50. chutils-3.3.0/src/chutils/audit/api.py +193 -0
  51. chutils-3.3.0/src/chutils/audit/backends/__init__.py +6 -0
  52. chutils-3.3.0/src/chutils/audit/backends/base.py +46 -0
  53. chutils-3.3.0/src/chutils/audit/backends/file.py +123 -0
  54. chutils-3.3.0/src/chutils/audit/backends/postgres.py +224 -0
  55. chutils-3.3.0/src/chutils/audit/backends/sqlite.py +200 -0
  56. chutils-3.3.0/src/chutils/audit/schema.py +116 -0
  57. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/cache/base.py +35 -3
  58. chutils-3.3.0/src/chutils/cache/decorator.py +164 -0
  59. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/cache/in_memory.py +78 -7
  60. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/cli.py +5 -0
  61. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/__init__.py +3 -1
  62. chutils-3.3.0/src/chutils/commands/db.py +496 -0
  63. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/dev/__init__.py +657 -437
  64. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/dev/ai_lint.py +138 -101
  65. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/dev/base.py +40 -40
  66. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/dev/chat_context.py +100 -100
  67. chutils-3.3.0/src/chutils/commands/dev/clean.py +124 -0
  68. chutils-3.3.0/src/chutils/commands/dev/dashboard.py +40 -0
  69. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/dev/diagnostics.py +109 -109
  70. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/dev/few_shot.py +55 -55
  71. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/dev/generate_context.py +453 -355
  72. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/dev/hooks.py +209 -185
  73. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/dev/mock.py +87 -87
  74. chutils-3.3.0/src/chutils/commands/dev/profile_imports.py +47 -0
  75. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/dev/scaffold.py +72 -72
  76. chutils-3.3.0/src/chutils/commands/dev/setup_github_actions.py +147 -0
  77. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/dev/sync_env.py +177 -157
  78. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/env.py +191 -191
  79. chutils-3.3.0/src/chutils/commands/init.py +366 -0
  80. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/pypi.py +2 -2
  81. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/config/__init__.py +52 -1
  82. chutils-3.3.0/src/chutils/config/custom_providers.py +290 -0
  83. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/config/dev.py +125 -1
  84. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/config/getters.py +63 -2
  85. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/config/manager.py +27 -3
  86. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/config/utils.py +92 -0
  87. chutils-3.3.0/src/chutils/db.py +267 -0
  88. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/decorators.py +253 -1
  89. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/__init__.py +28 -23
  90. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/ai_lint.py +593 -436
  91. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/ast_indexer.py +2 -1
  92. chutils-3.3.0/src/chutils/dev/changelog_parser.py +194 -0
  93. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/chat_context.py +441 -441
  94. chutils-3.3.0/src/chutils/dev/cleaner.py +221 -0
  95. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/constants.py +13 -13
  96. chutils-3.3.0/src/chutils/dev/dashboard/__init__.py +20 -0
  97. chutils-3.3.0/src/chutils/dev/dashboard/indexer.py +218 -0
  98. chutils-3.3.0/src/chutils/dev/dashboard/input.py +146 -0
  99. chutils-3.3.0/src/chutils/dev/dashboard/tui.py +593 -0
  100. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/env_parser.py +227 -227
  101. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/env_sync.py +113 -113
  102. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/few_shot/detector.py +225 -225
  103. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/few_shot/models.py +61 -61
  104. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/few_shot/renderer.py +455 -455
  105. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/few_shot/writer.py +3 -4
  106. chutils-3.3.0/src/chutils/dev/github_actions.py +91 -0
  107. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/models/__init__.py +17 -17
  108. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/models/base.py +35 -35
  109. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/models/index.py +34 -34
  110. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/models/node.py +19 -19
  111. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/models/symbol.py +21 -21
  112. chutils-3.3.0/src/chutils/dev/profile_imports.py +351 -0
  113. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/project_metadata.py +42 -4
  114. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/rules/__init__.py +24 -20
  115. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/rules/api_map.py +456 -439
  116. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/rules/decomposition.py +153 -96
  117. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/rules/dependency_sync.py +256 -256
  118. chutils-3.3.0/src/chutils/dev/rules/docstring.py +292 -0
  119. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/rules/env.py +111 -111
  120. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/rules/integration.py +281 -263
  121. chutils-3.3.0/src/chutils/dev/rules/linter_coverage.py +171 -0
  122. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/rules/manifest.py +74 -74
  123. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/rules/security.py +99 -99
  124. chutils-3.3.0/src/chutils/dev/rules/upgrade_check.py +116 -0
  125. chutils-3.3.0/src/chutils/dev/upgrade_client.py +121 -0
  126. chutils-3.3.0/src/chutils/dev/version_detector.py +114 -0
  127. chutils-3.3.0/src/chutils/di/__init__.pyi +39 -0
  128. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/di/container.py +93 -35
  129. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/diagnostics/__init__.py +24 -24
  130. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/diagnostics/models.py +98 -98
  131. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/diagnostics/web.py +79 -79
  132. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/env.pyi +34 -34
  133. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/events/core.py +1 -1
  134. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/exceptions/__init__.py +80 -73
  135. chutils-3.3.0/src/chutils/exceptions/audit.py +15 -0
  136. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/exceptions/base.py +66 -66
  137. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/exceptions/cache.py +7 -7
  138. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/exceptions/config.py +52 -52
  139. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/exceptions/di.py +19 -19
  140. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/exceptions/events.py +34 -34
  141. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/exceptions/logger.py +7 -7
  142. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/exceptions/resilience.py +25 -13
  143. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/exceptions/secrets.py +19 -19
  144. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/exceptions/system.py +44 -44
  145. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/exceptions/validation.py +148 -148
  146. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/exceptions/watcher.py +7 -7
  147. chutils-3.3.0/src/chutils/http/__init__.py +63 -0
  148. chutils-3.3.0/src/chutils/http/api.py +167 -0
  149. chutils-3.3.0/src/chutils/http/client.py +678 -0
  150. chutils-3.3.0/src/chutils/http/fallback.py +455 -0
  151. chutils-3.3.0/src/chutils/http/resilience.py +402 -0
  152. chutils-3.3.0/src/chutils/http/streaming.py +529 -0
  153. chutils-3.3.0/src/chutils/http/tracing.py +139 -0
  154. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/lifecycle.py +2 -5
  155. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/logger/internal/builder.py +2 -1
  156. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/metrics/__init__.py +1 -1
  157. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/metrics/prometheus.py +3 -7
  158. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/plugins/core.py +1 -1
  159. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/scraping/captcha/__init__.py +59 -59
  160. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/scraping/captcha/base.py +71 -71
  161. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/scraping/humanize/__init__.py +5 -0
  162. chutils-3.3.0/src/chutils/scraping/humanize/actions.py +438 -0
  163. chutils-3.3.0/src/chutils/scraping/humanize/antidetect.py +221 -0
  164. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/scraping/humanize/math_utils.py +223 -223
  165. chutils-3.3.0/src/chutils/scraping/humanize/warmer.py +204 -0
  166. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/secret_manager/core.py +2 -2
  167. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/secret_manager/providers/__init__.py +47 -34
  168. chutils-3.3.0/src/chutils/secret_manager/providers/aws.py +134 -0
  169. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/secret_manager/providers/base.py +51 -51
  170. chutils-3.3.0/src/chutils/secret_manager/providers/gcp.py +168 -0
  171. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/secret_manager/providers/keyring_provider.py +124 -124
  172. chutils-3.3.0/src/chutils/store/__init__.py +10 -0
  173. chutils-3.3.0/src/chutils/store/backends/__init__.py +11 -0
  174. chutils-3.3.0/src/chutils/store/backends/base.py +131 -0
  175. chutils-3.3.0/src/chutils/store/backends/memcached.py +211 -0
  176. chutils-3.3.0/src/chutils/store/backends/memory.py +156 -0
  177. chutils-3.3.0/src/chutils/store/backends/redis.py +191 -0
  178. chutils-3.3.0/src/chutils/store/decorator.py +84 -0
  179. chutils-3.3.0/src/chutils/store/manager.py +351 -0
  180. chutils-3.3.0/src/chutils/tasks/__init__.pyi +49 -0
  181. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/tasks/core.py +20 -8
  182. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/time.py +1 -0
  183. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/tracing.py +1 -1
  184. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/validation.py +138 -138
  185. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/validation.pyi +13 -13
  186. chutils-3.3.0/tests/integration/__init__.py +0 -0
  187. chutils-3.3.0/tests/integration/test_db_migrations.py +351 -0
  188. chutils-3.3.0/tests/integration/test_setup_github_actions_integration.py +35 -0
  189. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/test_cli_dev_cmd.py +75 -6
  190. chutils-3.3.0/tests/unit/cli/test_cli_init_interactive.py +76 -0
  191. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/test_cli_pypi.py +426 -426
  192. chutils-3.3.0/tests/unit/cli/test_cli_setup_github_actions.py +92 -0
  193. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/config/test_config_dev.py +187 -187
  194. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/config/test_config_validation_group.py +42 -42
  195. chutils-3.3.0/tests/unit/config/test_custom_config_providers.py +401 -0
  196. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/core/test_cache.py +129 -0
  197. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/decorators/test_decorator_circuit_breaker.py +238 -238
  198. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/dev/test_ai_lint.py +944 -734
  199. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/dev/test_ai_lint_staged.py +129 -129
  200. chutils-3.3.0/tests/unit/dev/test_changelog_parser.py +95 -0
  201. chutils-3.3.0/tests/unit/dev/test_cleaner.py +188 -0
  202. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/dev/test_env_parser.py +152 -152
  203. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/dev/test_env_sync.py +49 -49
  204. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/dev/test_generate_few_shot.py +511 -511
  205. chutils-3.3.0/tests/unit/dev/test_linter_coverage_rule.py +194 -0
  206. chutils-3.3.0/tests/unit/dev/test_setup_github_actions.py +75 -0
  207. chutils-3.3.0/tests/unit/dev/test_upgrade_check_rule.py +55 -0
  208. chutils-3.3.0/tests/unit/dev/test_upgrade_client.py +106 -0
  209. chutils-3.3.0/tests/unit/dev/test_version_detector.py +102 -0
  210. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/di/test_di.py +42 -0
  211. chutils-3.3.0/tests/unit/secret_manager/test_secret_manager_providers.py +455 -0
  212. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/tasks/test_scheduler.py +25 -1
  213. chutils-3.3.0/tests/unit/test_antidetect.py +133 -0
  214. chutils-3.3.0/tests/unit/test_audit.py +365 -0
  215. chutils-3.3.0/tests/unit/test_audit_phase2.py +363 -0
  216. chutils-3.3.0/tests/unit/test_cli_db.py +321 -0
  217. chutils-3.3.0/tests/unit/test_dashboard.py +401 -0
  218. chutils-3.3.0/tests/unit/test_db_init.py +256 -0
  219. chutils-3.3.0/tests/unit/test_db_operations.py +258 -0
  220. chutils-3.3.0/tests/unit/test_decorators_bulkhead.py +269 -0
  221. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_diagnostics.py +367 -367
  222. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_env.py +261 -261
  223. chutils-3.3.0/tests/unit/test_http_api.py +213 -0
  224. chutils-3.3.0/tests/unit/test_http_client.py +344 -0
  225. chutils-3.3.0/tests/unit/test_http_fallback.py +407 -0
  226. chutils-3.3.0/tests/unit/test_http_resilience.py +330 -0
  227. chutils-3.3.0/tests/unit/test_http_streaming.py +385 -0
  228. chutils-3.3.0/tests/unit/test_http_tracing.py +226 -0
  229. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_install_hooks.py +124 -120
  230. chutils-3.3.0/tests/unit/test_nodriver_humanize.py +147 -0
  231. chutils-3.3.0/tests/unit/test_profile_imports.py +214 -0
  232. chutils-3.3.0/tests/unit/test_profile_warmer.py +132 -0
  233. chutils-3.3.0/tests/unit/test_store_backends_external.py +112 -0
  234. chutils-3.3.0/tests/unit/test_store_integrations.py +87 -0
  235. chutils-3.3.0/tests/unit/test_store_manager.py +76 -0
  236. chutils-3.3.0/tests/unit/test_store_memory.py +80 -0
  237. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_validation.py +242 -242
  238. {chutils-3.1.0 → chutils-3.3.0}/uv.lock +683 -210
  239. chutils-3.1.0/ai-lint.toml +0 -33
  240. chutils-3.1.0/conductor/archive/ai_lint_code_decomposition_20260715/index.md +0 -5
  241. chutils-3.1.0/conductor/archive/ai_lint_code_decomposition_20260715/metadata.json +0 -8
  242. chutils-3.1.0/conductor/archive/ai_lint_code_decomposition_20260715/plan.md +0 -15
  243. chutils-3.1.0/conductor/archive/ai_lint_code_decomposition_20260715/spec.md +0 -23
  244. chutils-3.1.0/conductor/archive/ai_lint_file_dependencies_sync_20260715/index.md +0 -5
  245. chutils-3.1.0/conductor/archive/ai_lint_file_dependencies_sync_20260715/metadata.json +0 -8
  246. chutils-3.1.0/conductor/archive/ai_lint_file_dependencies_sync_20260715/plan.md +0 -16
  247. chutils-3.1.0/conductor/archive/ai_lint_file_dependencies_sync_20260715/spec.md +0 -30
  248. chutils-3.1.0/conductor/archive/ai_lint_inline_ignore_20260707/metadata.json +0 -8
  249. chutils-3.1.0/conductor/archive/ai_lint_inline_ignore_20260707/plan.md +0 -22
  250. chutils-3.1.0/conductor/archive/ai_lint_inline_ignore_20260707/spec.md +0 -39
  251. chutils-3.1.0/conductor/archive/ai_lint_staged_20260715/index.md +0 -5
  252. chutils-3.1.0/conductor/archive/ai_lint_staged_20260715/metadata.json +0 -8
  253. chutils-3.1.0/conductor/archive/ai_lint_staged_20260715/plan.md +0 -16
  254. chutils-3.1.0/conductor/archive/ai_lint_staged_20260715/spec.md +0 -23
  255. chutils-3.1.0/conductor/archive/captcha_20260707/metadata.json +0 -8
  256. chutils-3.1.0/conductor/archive/captcha_20260707/plan.md +0 -41
  257. chutils-3.1.0/conductor/archive/captcha_20260707/spec.md +0 -52
  258. chutils-3.1.0/conductor/archive/chat_context_20260610/metadata.json +0 -8
  259. chutils-3.1.0/conductor/archive/chat_context_20260610/plan.md +0 -39
  260. chutils-3.1.0/conductor/archive/chat_context_20260610/spec.md +0 -36
  261. chutils-3.1.0/conductor/archive/circuit_breaker_20260521/index.md +0 -5
  262. chutils-3.1.0/conductor/archive/circuit_breaker_20260521/metadata.json +0 -8
  263. chutils-3.1.0/conductor/archive/circuit_breaker_20260521/plan.md +0 -45
  264. chutils-3.1.0/conductor/archive/circuit_breaker_20260521/spec.md +0 -50
  265. chutils-3.1.0/conductor/archive/cli_scaffold_20260610/index.md +0 -5
  266. chutils-3.1.0/conductor/archive/cli_scaffold_20260610/metadata.json +0 -8
  267. chutils-3.1.0/conductor/archive/cli_scaffold_20260610/plan.md +0 -40
  268. chutils-3.1.0/conductor/archive/cli_scaffold_20260610/spec.md +0 -50
  269. chutils-3.1.0/conductor/archive/config_required_20260708/index.md +0 -5
  270. chutils-3.1.0/conductor/archive/config_required_20260708/metadata.json +0 -8
  271. chutils-3.1.0/conductor/archive/config_required_20260708/plan.md +0 -27
  272. chutils-3.1.0/conductor/archive/config_required_20260708/spec.md +0 -52
  273. chutils-3.1.0/conductor/archive/context_metadata_20260714/index.md +0 -5
  274. chutils-3.1.0/conductor/archive/context_metadata_20260714/metadata.json +0 -8
  275. chutils-3.1.0/conductor/archive/context_metadata_20260714/plan.md +0 -19
  276. chutils-3.1.0/conductor/archive/context_metadata_20260714/spec.md +0 -31
  277. chutils-3.1.0/conductor/archive/dependency_errors_20260707/index.md +0 -5
  278. chutils-3.1.0/conductor/archive/dependency_errors_20260707/metadata.json +0 -8
  279. chutils-3.1.0/conductor/archive/dependency_errors_20260707/plan.md +0 -27
  280. chutils-3.1.0/conductor/archive/dependency_errors_20260707/spec.md +0 -37
  281. chutils-3.1.0/conductor/archive/dev_install_hooks_20260707/index.md +0 -5
  282. chutils-3.1.0/conductor/archive/dev_install_hooks_20260707/metadata.json +0 -8
  283. chutils-3.1.0/conductor/archive/dev_install_hooks_20260707/plan.md +0 -23
  284. chutils-3.1.0/conductor/archive/dev_install_hooks_20260707/spec.md +0 -50
  285. chutils-3.1.0/conductor/archive/diagnostics_20260610/index.md +0 -5
  286. chutils-3.1.0/conductor/archive/diagnostics_20260610/metadata.json +0 -8
  287. chutils-3.1.0/conductor/archive/diagnostics_20260610/plan.md +0 -42
  288. chutils-3.1.0/conductor/archive/diagnostics_20260610/spec.md +0 -40
  289. chutils-3.1.0/conductor/archive/drop_python39_20260610/index.md +0 -5
  290. chutils-3.1.0/conductor/archive/drop_python39_20260610/metadata.json +0 -8
  291. chutils-3.1.0/conductor/archive/drop_python39_20260610/plan.md +0 -43
  292. chutils-3.1.0/conductor/archive/drop_python39_20260610/spec.md +0 -44
  293. chutils-3.1.0/conductor/archive/env_20260702/index.md +0 -5
  294. chutils-3.1.0/conductor/archive/env_20260702/metadata.json +0 -8
  295. chutils-3.1.0/conductor/archive/env_20260702/plan.md +0 -33
  296. chutils-3.1.0/conductor/archive/env_20260702/spec.md +0 -53
  297. chutils-3.1.0/conductor/archive/exception_groups_20260708/index.md +0 -5
  298. chutils-3.1.0/conductor/archive/exception_groups_20260708/metadata.json +0 -8
  299. chutils-3.1.0/conductor/archive/exception_groups_20260708/plan.md +0 -22
  300. chutils-3.1.0/conductor/archive/exception_groups_20260708/spec.md +0 -71
  301. chutils-3.1.0/conductor/archive/generate_few_shot_20260610/index.md +0 -5
  302. chutils-3.1.0/conductor/archive/generate_few_shot_20260610/metadata.json +0 -8
  303. chutils-3.1.0/conductor/archive/generate_few_shot_20260610/plan.md +0 -42
  304. chutils-3.1.0/conductor/archive/generate_few_shot_20260610/spec.md +0 -44
  305. chutils-3.1.0/conductor/archive/mock_server_20260610/index.md +0 -5
  306. chutils-3.1.0/conductor/archive/mock_server_20260610/metadata.json +0 -8
  307. chutils-3.1.0/conductor/archive/mock_server_20260610/plan.md +0 -43
  308. chutils-3.1.0/conductor/archive/mock_server_20260610/spec.md +0 -40
  309. chutils-3.1.0/conductor/archive/optional_dependencies_20260515/index.md +0 -5
  310. chutils-3.1.0/conductor/archive/optional_dependencies_20260515/metadata.json +0 -8
  311. chutils-3.1.0/conductor/archive/optional_dependencies_20260515/plan.md +0 -38
  312. chutils-3.1.0/conductor/archive/optional_dependencies_20260515/spec.md +0 -25
  313. chutils-3.1.0/conductor/archive/pypi_mirror_check_20260713/index.md +0 -5
  314. chutils-3.1.0/conductor/archive/pypi_mirror_check_20260713/metadata.json +0 -8
  315. chutils-3.1.0/conductor/archive/pypi_mirror_check_20260713/plan.md +0 -33
  316. chutils-3.1.0/conductor/archive/pypi_mirror_check_20260713/spec.md +0 -35
  317. chutils-3.1.0/conductor/archive/refactor_cli_dev_20260715/index.md +0 -5
  318. chutils-3.1.0/conductor/archive/refactor_cli_dev_20260715/metadata.json +0 -8
  319. chutils-3.1.0/conductor/archive/refactor_cli_dev_20260715/plan.md +0 -38
  320. chutils-3.1.0/conductor/archive/refactor_cli_dev_20260715/spec.md +0 -44
  321. chutils-3.1.0/conductor/archive/scraping_humanize_20260707/index.md +0 -5
  322. chutils-3.1.0/conductor/archive/scraping_humanize_20260707/metadata.json +0 -8
  323. chutils-3.1.0/conductor/archive/scraping_humanize_20260707/plan.md +0 -50
  324. chutils-3.1.0/conductor/archive/scraping_humanize_20260707/spec.md +0 -51
  325. chutils-3.1.0/conductor/archive/secrets_unification_20260708/index.md +0 -5
  326. chutils-3.1.0/conductor/archive/secrets_unification_20260708/metadata.json +0 -8
  327. chutils-3.1.0/conductor/archive/secrets_unification_20260708/plan.md +0 -31
  328. chutils-3.1.0/conductor/archive/secrets_unification_20260708/spec.md +0 -47
  329. chutils-3.1.0/conductor/archive/sync_env_20260707/index.md +0 -5
  330. chutils-3.1.0/conductor/archive/sync_env_20260707/metadata.json +0 -8
  331. chutils-3.1.0/conductor/archive/sync_env_20260707/plan.md +0 -37
  332. chutils-3.1.0/conductor/archive/sync_env_20260707/spec.md +0 -45
  333. chutils-3.1.0/conductor/archive/validation_20260702/index.md +0 -5
  334. chutils-3.1.0/conductor/archive/validation_20260702/metadata.json +0 -8
  335. chutils-3.1.0/conductor/archive/validation_20260702/plan.md +0 -29
  336. chutils-3.1.0/conductor/archive/validation_20260702/spec.md +0 -42
  337. chutils-3.1.0/conductor/archive/web_20260707/index.md +0 -5
  338. chutils-3.1.0/conductor/archive/web_20260707/metadata.json +0 -8
  339. chutils-3.1.0/conductor/archive/web_20260707/plan.md +0 -45
  340. chutils-3.1.0/conductor/archive/web_20260707/spec.md +0 -49
  341. chutils-3.1.0/conductor/tracks/audit_20260702/index.md +0 -5
  342. chutils-3.1.0/conductor/tracks/audit_20260702/metadata.json +0 -8
  343. chutils-3.1.0/conductor/tracks/audit_20260702/plan.md +0 -31
  344. chutils-3.1.0/conductor/tracks/audit_20260702/spec.md +0 -53
  345. chutils-3.1.0/conductor/tracks/bulkhead_20260702/index.md +0 -5
  346. chutils-3.1.0/conductor/tracks/bulkhead_20260702/metadata.json +0 -8
  347. chutils-3.1.0/conductor/tracks/bulkhead_20260702/plan.md +0 -25
  348. chutils-3.1.0/conductor/tracks/bulkhead_20260702/spec.md +0 -46
  349. chutils-3.1.0/conductor/tracks/cloud_secret_managers_20260511/index.md +0 -5
  350. chutils-3.1.0/conductor/tracks/cloud_secret_managers_20260511/metadata.json +0 -8
  351. chutils-3.1.0/conductor/tracks/cloud_secret_managers_20260511/plan.md +0 -36
  352. chutils-3.1.0/conductor/tracks/cloud_secret_managers_20260511/spec.md +0 -42
  353. chutils-3.1.0/conductor/tracks/custom_config_providers_20260714/index.md +0 -5
  354. chutils-3.1.0/conductor/tracks/custom_config_providers_20260714/metadata.json +0 -8
  355. chutils-3.1.0/conductor/tracks/custom_config_providers_20260714/plan.md +0 -18
  356. chutils-3.1.0/conductor/tracks/custom_config_providers_20260714/spec.md +0 -24
  357. chutils-3.1.0/conductor/tracks/db_manager_20260707/index.md +0 -5
  358. chutils-3.1.0/conductor/tracks/db_manager_20260707/metadata.json +0 -8
  359. chutils-3.1.0/conductor/tracks/db_manager_20260707/plan.md +0 -29
  360. chutils-3.1.0/conductor/tracks/db_manager_20260707/spec.md +0 -41
  361. chutils-3.1.0/conductor/tracks/db_migrations_cli_20260707/index.md +0 -5
  362. chutils-3.1.0/conductor/tracks/db_migrations_cli_20260707/metadata.json +0 -8
  363. chutils-3.1.0/conductor/tracks/db_migrations_cli_20260707/plan.md +0 -27
  364. chutils-3.1.0/conductor/tracks/db_migrations_cli_20260707/spec.md +0 -40
  365. chutils-3.1.0/conductor/tracks/dev_dashboard_20260610/index.md +0 -5
  366. chutils-3.1.0/conductor/tracks/dev_dashboard_20260610/metadata.json +0 -8
  367. chutils-3.1.0/conductor/tracks/dev_dashboard_20260610/plan.md +0 -39
  368. chutils-3.1.0/conductor/tracks/dev_dashboard_20260610/spec.md +0 -43
  369. chutils-3.1.0/conductor/tracks/http_20260702/index.md +0 -5
  370. chutils-3.1.0/conductor/tracks/http_20260702/metadata.json +0 -8
  371. chutils-3.1.0/conductor/tracks/http_20260702/plan.md +0 -28
  372. chutils-3.1.0/conductor/tracks/http_20260702/spec.md +0 -51
  373. chutils-3.1.0/conductor/tracks/profile_imports_20260610/index.md +0 -5
  374. chutils-3.1.0/conductor/tracks/profile_imports_20260610/metadata.json +0 -8
  375. chutils-3.1.0/conductor/tracks/profile_imports_20260610/plan.md +0 -42
  376. chutils-3.1.0/conductor/tracks/profile_imports_20260610/spec.md +0 -40
  377. chutils-3.1.0/conductor/tracks/setup_github_actions_20260714/index.md +0 -5
  378. chutils-3.1.0/conductor/tracks/setup_github_actions_20260714/metadata.json +0 -8
  379. chutils-3.1.0/conductor/tracks/setup_github_actions_20260714/plan.md +0 -28
  380. chutils-3.1.0/conductor/tracks/setup_github_actions_20260714/spec.md +0 -27
  381. chutils-3.1.0/conductor/tracks.md +0 -99
  382. chutils-3.1.0/src/chutils/cache/decorator.py +0 -94
  383. chutils-3.1.0/src/chutils/commands/init.py +0 -151
  384. chutils-3.1.0/src/chutils/dev/rules/docstring.py +0 -210
  385. chutils-3.1.0/src/chutils/scraping/humanize/actions.py +0 -268
  386. chutils-3.1.0/src/chutils/scraping/humanize/antidetect.py +0 -123
  387. chutils-3.1.0/tests/unit/secret_manager/test_secret_manager_providers.py +0 -105
  388. chutils-3.1.0/tests/unit/test_antidetect.py +0 -41
  389. {chutils-3.1.0 → chutils-3.3.0}/.gitattributes +0 -0
  390. {chutils-3.1.0 → chutils-3.3.0}/.github/workflows/ci.yml +0 -0
  391. {chutils-3.1.0 → chutils-3.3.0}/.github/workflows/publish-docs.yml +0 -0
  392. {chutils-3.1.0 → chutils-3.3.0}/CODE_OF_CONDUCT.md +0 -0
  393. {chutils-3.1.0 → chutils-3.3.0}/CONTRIBUTING.md +0 -0
  394. {chutils-3.1.0 → chutils-3.3.0}/GEMINI.md +0 -0
  395. {chutils-3.1.0 → chutils-3.3.0}/LICENSE +0 -0
  396. {chutils-3.1.0 → chutils-3.3.0}/benchmarks/cold_start.py +0 -0
  397. {chutils-3.1.0 → chutils-3.3.0}/conductor/.gitignore +0 -0
  398. {chutils-3.1.0 → chutils-3.3.0}/conductor/GEMINI.md +0 -0
  399. {chutils-3.1.0/conductor/tracks → chutils-3.3.0/conductor/archive}/cache_invalidation_20260714/index.md +0 -0
  400. {chutils-3.1.0/conductor/tracks → chutils-3.3.0/conductor/archive}/cache_invalidation_20260714/metadata.json +0 -0
  401. {chutils-3.1.0/conductor/tracks → chutils-3.3.0/conductor/archive}/cache_invalidation_20260714/plan.md +0 -0
  402. {chutils-3.1.0/conductor/tracks → chutils-3.3.0/conductor/archive}/cache_invalidation_20260714/spec.md +0 -0
  403. {chutils-3.1.0/conductor/tracks → chutils-3.3.0/conductor/archive}/dev_clean_20260707/index.md +0 -0
  404. {chutils-3.1.0/conductor/tracks → chutils-3.3.0/conductor/archive}/dev_clean_20260707/metadata.json +0 -0
  405. {chutils-3.1.0/conductor/tracks → chutils-3.3.0/conductor/archive}/dev_clean_20260707/spec.md +0 -0
  406. {chutils-3.1.0/conductor/tracks → chutils-3.3.0/conductor/archive}/store_20260702/index.md +0 -0
  407. {chutils-3.1.0/conductor/tracks → chutils-3.3.0/conductor/archive}/store_20260702/metadata.json +0 -0
  408. {chutils-3.1.0/conductor/tracks → chutils-3.3.0/conductor/archive}/store_20260702/spec.md +0 -0
  409. {chutils-3.1.0 → chutils-3.3.0}/conductor/code_styleguides/python.md +0 -0
  410. {chutils-3.1.0 → chutils-3.3.0}/conductor/index.md +0 -0
  411. {chutils-3.1.0 → chutils-3.3.0}/conductor/product-guidelines.md +0 -0
  412. {chutils-3.1.0 → chutils-3.3.0}/conductor/setup_state.json +0 -0
  413. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/ai_manifests_few_shot_20260713/index.md +0 -0
  414. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/ai_manifests_few_shot_20260713/metadata.json +0 -0
  415. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/ai_manifests_few_shot_20260713/plan.md +0 -0
  416. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/ai_manifests_few_shot_20260713/spec.md +0 -0
  417. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/config_remote_push_20260702/index.md +0 -0
  418. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/config_remote_push_20260702/metadata.json +0 -0
  419. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/config_remote_push_20260702/plan.md +0 -0
  420. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/config_remote_push_20260702/spec.md +0 -0
  421. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/dev_watch_20260702/index.md +0 -0
  422. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/dev_watch_20260702/metadata.json +0 -0
  423. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/dev_watch_20260702/plan.md +0 -0
  424. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/dev_watch_20260702/spec.md +0 -0
  425. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/docstring_audit_20260521/index.md +0 -0
  426. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/docstring_audit_20260521/metadata.json +0 -0
  427. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/docstring_audit_20260521/plan.md +0 -0
  428. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/docstring_audit_20260521/spec.md +0 -0
  429. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/fallback_alias_20260707/index.md +0 -0
  430. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/fallback_alias_20260707/metadata.json +0 -0
  431. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/fallback_alias_20260707/plan.md +0 -0
  432. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/fallback_alias_20260707/spec.md +0 -0
  433. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/qt_integration_20260521/index.md +0 -0
  434. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/qt_integration_20260521/metadata.json +0 -0
  435. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/qt_integration_20260521/plan.md +0 -0
  436. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/qt_integration_20260521/spec.md +0 -0
  437. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/qt_typed_signals_20260521/index.md +0 -0
  438. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/qt_typed_signals_20260521/metadata.json +0 -0
  439. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/qt_typed_signals_20260521/plan.md +0 -0
  440. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/qt_typed_signals_20260521/spec.md +0 -0
  441. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/scraping_concurrency_20260707/index.md +0 -0
  442. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/scraping_concurrency_20260707/metadata.json +0 -0
  443. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/scraping_concurrency_20260707/plan.md +0 -0
  444. {chutils-3.1.0 → chutils-3.3.0}/conductor/tracks/scraping_concurrency_20260707/spec.md +0 -0
  445. {chutils-3.1.0 → chutils-3.3.0}/docs/CODE_OF_CONDUCT_RU.md +0 -0
  446. {chutils-3.1.0 → chutils-3.3.0}/docs/CONTRIBUTING_RU.md +0 -0
  447. {chutils-3.1.0 → chutils-3.3.0}/docs/INTEGRATION_AI.md +0 -0
  448. {chutils-3.1.0 → chutils-3.3.0}/docs/ai_examples/README.md +0 -0
  449. {chutils-3.1.0 → chutils-3.3.0}/docs/ai_examples/configuration/README.md +0 -0
  450. {chutils-3.1.0 → chutils-3.3.0}/docs/ai_examples/configuration/bad_pattern.py +0 -0
  451. {chutils-3.1.0 → chutils-3.3.0}/docs/ai_examples/configuration/good_pattern.py +0 -0
  452. {chutils-3.1.0 → chutils-3.3.0}/docs/ai_examples/error_handling/README.md +0 -0
  453. {chutils-3.1.0 → chutils-3.3.0}/docs/ai_examples/error_handling/bad_pattern.py +0 -0
  454. {chutils-3.1.0 → chutils-3.3.0}/docs/ai_examples/error_handling/good_pattern.py +0 -0
  455. {chutils-3.1.0 → chutils-3.3.0}/docs/ai_examples/logging/README.md +0 -0
  456. {chutils-3.1.0 → chutils-3.3.0}/docs/ai_examples/logging/bad_pattern.py +0 -0
  457. {chutils-3.1.0 → chutils-3.3.0}/docs/ai_examples/logging/good_pattern.py +0 -0
  458. {chutils-3.1.0 → chutils-3.3.0}/docs/ai_examples/optional_deps/README.md +0 -0
  459. {chutils-3.1.0 → chutils-3.3.0}/docs/ai_examples/optional_deps/bad_pattern.py +0 -0
  460. {chutils-3.1.0 → chutils-3.3.0}/docs/ai_examples/optional_deps/good_pattern.py +0 -0
  461. {chutils-3.1.0 → chutils-3.3.0}/docs/ai_examples/secrets/README.md +0 -0
  462. {chutils-3.1.0 → chutils-3.3.0}/docs/ai_examples/secrets/bad_pattern.py +0 -0
  463. {chutils-3.1.0 → chutils-3.3.0}/docs/ai_examples/secrets/good_pattern.py +0 -0
  464. {chutils-3.1.0 → chutils-3.3.0}/docs/ai_hints.md +0 -0
  465. {chutils-3.1.0 → chutils-3.3.0}/docs/cli/config.md +0 -0
  466. {chutils-3.1.0 → chutils-3.3.0}/docs/cli/init.md +0 -0
  467. {chutils-3.1.0 → chutils-3.3.0}/docs/cli/secrets.md +0 -0
  468. {chutils-3.1.0 → chutils-3.3.0}/docs/cli/show_paths.md +0 -0
  469. {chutils-3.1.0 → chutils-3.3.0}/docs/cli/template.md +0 -0
  470. {chutils-3.1.0 → chutils-3.3.0}/docs/cli/validate.md +0 -0
  471. {chutils-3.1.0 → chutils-3.3.0}/docs/migration.md +0 -0
  472. {chutils-3.1.0 → chutils-3.3.0}/docs/plugins.md +0 -0
  473. {chutils-3.1.0 → chutils-3.3.0}/docs/testing.md +0 -0
  474. {chutils-3.1.0 → chutils-3.3.0}/docs/web.md +0 -0
  475. {chutils-3.1.0 → chutils-3.3.0}/examples/.env +0 -0
  476. {chutils-3.1.0 → chutils-3.3.0}/examples/01_configuration.py +0 -0
  477. {chutils-3.1.0 → chutils-3.3.0}/examples/02_logging.py +0 -0
  478. {chutils-3.1.0 → chutils-3.3.0}/examples/03_secrets.py +0 -0
  479. {chutils-3.1.0 → chutils-3.3.0}/examples/04_full_example.py +0 -0
  480. {chutils-3.1.0 → chutils-3.3.0}/examples/05_different_log_levels.py +0 -0
  481. {chutils-3.1.0 → chutils-3.3.0}/examples/06_local_config_override.py +0 -0
  482. {chutils-3.1.0 → chutils-3.3.0}/examples/07_decorators_example.py +0 -0
  483. {chutils-3.1.0 → chutils-3.3.0}/examples/08_multiple_loggers_example.py +0 -0
  484. {chutils-3.1.0 → chutils-3.3.0}/examples/09_disable_keyring.py +0 -0
  485. {chutils-3.1.0 → chutils-3.3.0}/examples/10_universal_env_override.py +0 -0
  486. {chutils-3.1.0 → chutils-3.3.0}/examples/11_retry_decorator.py +0 -0
  487. {chutils-3.1.0 → chutils-3.3.0}/examples/12_secret_masking.py +0 -0
  488. {chutils-3.1.0 → chutils-3.3.0}/examples/13_pydantic_validation.py +0 -0
  489. {chutils-3.1.0 → chutils-3.3.0}/examples/15_context_logging.py +0 -0
  490. {chutils-3.1.0 → chutils-3.3.0}/examples/17_timeout_decorator.py +0 -0
  491. {chutils-3.1.0 → chutils-3.3.0}/examples/18_config_hot_reload.py +0 -0
  492. {chutils-3.1.0 → chutils-3.3.0}/examples/19_remote_config.py +0 -0
  493. {chutils-3.1.0 → chutils-3.3.0}/examples/20_opentelemetry_tracing.py +0 -0
  494. {chutils-3.1.0 → chutils-3.3.0}/examples/21_config_diagnostics.py +0 -0
  495. {chutils-3.1.0 → chutils-3.3.0}/examples/22_circuit_breaker_decorator.py +0 -0
  496. {chutils-3.1.0 → chutils-3.3.0}/examples/22_safe_path_resolution.py +0 -0
  497. {chutils-3.1.0 → chutils-3.3.0}/examples/23_event_bus.py +0 -0
  498. {chutils-3.1.0 → chutils-3.3.0}/examples/24_task_scheduler.py +0 -0
  499. {chutils-3.1.0 → chutils-3.3.0}/examples/25_testing_fixtures_example.py +0 -0
  500. {chutils-3.1.0 → chutils-3.3.0}/examples/26_metrics_prometheus.py +0 -0
  501. {chutils-3.1.0 → chutils-3.3.0}/examples/27_rate_limiting.py +0 -0
  502. {chutils-3.1.0 → chutils-3.3.0}/examples/28_dependency_injection.py +0 -0
  503. {chutils-3.1.0 → chutils-3.3.0}/examples/captcha_solvers_usage.py +0 -0
  504. {chutils-3.1.0 → chutils-3.3.0}/examples/config.yml +0 -0
  505. {chutils-3.1.0 → chutils-3.3.0}/examples/scraping_humanize_usage.py +0 -0
  506. {chutils-3.1.0 → chutils-3.3.0}/examples/web_client_usage.py +0 -0
  507. {chutils-3.1.0 → chutils-3.3.0}/mkdocs.yml +0 -0
  508. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/__main__.py +0 -0
  509. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/cache/__init__.py +0 -0
  510. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/cache/utils.py +0 -0
  511. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/cli_booster.py +0 -0
  512. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/cli_utils.py +0 -0
  513. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/base.py +0 -0
  514. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/config.py +0 -0
  515. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/paths.py +0 -0
  516. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/secrets.py +0 -0
  517. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/template.py +0 -0
  518. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/utils.py +0 -0
  519. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/commands/validate.py +0 -0
  520. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/config/GEMINI.md +0 -0
  521. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/config/ast_fallback_parser.py +0 -0
  522. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/config/core.py +0 -0
  523. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/config/diagnostics.py +0 -0
  524. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/config/generator.py +0 -0
  525. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/config/providers.py +0 -0
  526. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/config/schema.py +0 -0
  527. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/config/watcher.py +0 -0
  528. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/context.py +0 -0
  529. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/crypto.py +0 -0
  530. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/few_shot/__init__.py +0 -0
  531. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/mock_server.py +0 -0
  532. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/dev/scaffold.py +0 -0
  533. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/di/__init__.py +0 -0
  534. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/diagnostics/manager.py +0 -0
  535. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/env.py +0 -0
  536. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/events/__init__.py +0 -0
  537. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/features.py +0 -0
  538. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/fs.py +0 -0
  539. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/logger/GEMINI.md +0 -0
  540. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/logger/__init__.py +0 -0
  541. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/logger/core.py +0 -0
  542. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/logger/formatters.py +0 -0
  543. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/logger/handlers.py +0 -0
  544. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/logger/internal/levels.py +0 -0
  545. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/logger/internal/utils.py +0 -0
  546. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/logger/masking.py +0 -0
  547. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/metrics/base.py +0 -0
  548. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/metrics/in_memory.py +0 -0
  549. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/metrics/timer.py +0 -0
  550. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/plugins/__init__.py +0 -0
  551. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/plugins/interfaces.py +0 -0
  552. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/scraping/__init__.py +0 -0
  553. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/scraping/captcha/anticaptcha.py +0 -0
  554. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/scraping/captcha/capmonster.py +0 -0
  555. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/scraping/captcha/exceptions.py +0 -0
  556. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/scraping/captcha/rucaptcha.py +0 -0
  557. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/secret_manager/GEMINI.md +0 -0
  558. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/secret_manager/__init__.py +0 -0
  559. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/secret_manager/providers/dotenv.py +0 -0
  560. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/secret_manager/providers/env.py +0 -0
  561. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/tasks/__init__.py +0 -0
  562. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/testing/__init__.py +0 -0
  563. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/testing/fixtures.py +0 -0
  564. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/text.py +0 -0
  565. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/typing.py +0 -0
  566. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/web/__init__.py +0 -0
  567. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/web/client.py +0 -0
  568. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/web/proxy_pool.py +0 -0
  569. {chutils-3.1.0 → chutils-3.3.0}/src/chutils/web/user_agent.py +0 -0
  570. {chutils-3.1.0 → chutils-3.3.0}/tests/conftest.py +0 -0
  571. {chutils-3.1.0 → chutils-3.3.0}/tests/integration/test_ai_lint_integration.py +0 -0
  572. {chutils-3.1.0 → chutils-3.3.0}/tests/integration/test_cli_e2e.py +0 -0
  573. {chutils-3.1.0 → chutils-3.3.0}/tests/integration/test_event_loops.py +0 -0
  574. {chutils-3.1.0 → chutils-3.3.0}/tests/integration/test_examples.py +0 -0
  575. {chutils-3.1.0 → chutils-3.3.0}/tests/integration/test_hooks_integration.py +0 -0
  576. {chutils-3.1.0 → chutils-3.3.0}/tests/integration/test_masking_integration.py +0 -0
  577. {chutils-3.1.0 → chutils-3.3.0}/tests/integration/test_otel_tracing.py +0 -0
  578. {chutils-3.1.0 → chutils-3.3.0}/tests/integration/test_remote_config_integration.py +0 -0
  579. {chutils-3.1.0 → chutils-3.3.0}/tests/manual/manual_test_cli_booster.py +0 -0
  580. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/conftest.py +0 -0
  581. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/test_cli.py +0 -0
  582. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/test_cli_booster.py +0 -0
  583. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/test_cli_config.py +0 -0
  584. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/test_cli_config_cmd.py +0 -0
  585. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/test_cli_config_schema.py +0 -0
  586. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/test_cli_dev.py +0 -0
  587. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/test_cli_dev_tree.py +0 -0
  588. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/test_cli_diagnostics.py +0 -0
  589. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/test_cli_extras_suggestion.py +0 -0
  590. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/test_cli_init.py +0 -0
  591. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/test_cli_paths.py +0 -0
  592. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/test_cli_rich.py +0 -0
  593. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/test_cli_rich_width.py +0 -0
  594. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/test_cli_secrets.py +0 -0
  595. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/test_cli_template.py +0 -0
  596. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/test_cli_utils_internal.py +0 -0
  597. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/cli/test_cli_validate.py +0 -0
  598. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/config/test_config.py +0 -0
  599. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/config/test_config_ast_parser.py +0 -0
  600. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/config/test_config_diagnostics.py +0 -0
  601. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/config/test_config_env.py +0 -0
  602. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/config/test_config_env_loading.py +0 -0
  603. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/config/test_config_generator.py +0 -0
  604. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/config/test_config_json.py +0 -0
  605. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/config/test_config_pydantic.py +0 -0
  606. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/config/test_config_required.py +0 -0
  607. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/config/test_config_schema.py +0 -0
  608. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/config/test_config_tracing.py +0 -0
  609. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/config/test_config_universal_env.py +0 -0
  610. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/config/test_config_utils.py +0 -0
  611. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/config/test_config_watcher.py +0 -0
  612. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/config/test_priority_unification.py +0 -0
  613. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/config/test_remote_config.py +0 -0
  614. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/core/test_ast_indexer.py +0 -0
  615. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/core/test_ast_indexer_abstract.py +0 -0
  616. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/core/test_ast_indexer_graph.py +0 -0
  617. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/core/test_ast_indexer_layers.py +0 -0
  618. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/core/test_ast_indexer_metadata.py +0 -0
  619. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/core/test_dev_models.py +0 -0
  620. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/core/test_exceptions.py +0 -0
  621. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/core/test_features.py +0 -0
  622. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/core/test_fs.py +0 -0
  623. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/core/test_lifecycle.py +0 -0
  624. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/core/test_thread_safety.py +0 -0
  625. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/core/test_time.py +0 -0
  626. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/decorators/test_decorator_retry.py +0 -0
  627. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/decorators/test_decorator_timeout.py +0 -0
  628. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/decorators/test_decorators.py +0 -0
  629. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/decorators/test_rate_limit.py +0 -0
  630. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/dev/test_chat_context.py +0 -0
  631. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/dev/test_mock_server.py +0 -0
  632. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/dev/test_scaffold.py +0 -0
  633. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/events/test_event_bus.py +0 -0
  634. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/logger/conftest.py +0 -0
  635. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/logger/test_basics.py +0 -0
  636. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/logger/test_compression.py +0 -0
  637. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/logger/test_config_sections.py +0 -0
  638. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/logger/test_configuration.py +0 -0
  639. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/logger/test_context.py +0 -0
  640. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/logger/test_env_control.py +0 -0
  641. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/logger/test_files.py +0 -0
  642. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/logger/test_json_format.py +0 -0
  643. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/logger/test_logger_rich_width.py +0 -0
  644. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/logger/test_masking.py +0 -0
  645. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/logger/test_performance_security.py +0 -0
  646. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/logger/test_rich.py +0 -0
  647. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/logger/test_rotation.py +0 -0
  648. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/metrics/test_metrics.py +0 -0
  649. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/plugins/test_integration.py +0 -0
  650. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/plugins/test_interfaces.py +0 -0
  651. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/plugins/test_plugins.py +0 -0
  652. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/secret_manager/test_secret_manager.py +0 -0
  653. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/secret_manager/test_secret_manager_env.py +0 -0
  654. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/secret_manager/test_secrets_required.py +0 -0
  655. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_ai_lint_ignore.py +0 -0
  656. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_anticaptcha.py +0 -0
  657. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_async_web_client.py +0 -0
  658. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_capmonster.py +0 -0
  659. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_captcha_base.py +0 -0
  660. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_captcha_imports.py +0 -0
  661. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_crypto.py +0 -0
  662. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_crypto_dependencies.py +0 -0
  663. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_events_exception_group.py +0 -0
  664. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_humanize_math.py +0 -0
  665. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_minimal_imports.py +0 -0
  666. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_playwright_humanize.py +0 -0
  667. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_proxy_pool.py +0 -0
  668. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_rucaptcha.py +0 -0
  669. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_scraping_imports.py +0 -0
  670. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_selenium_humanize.py +0 -0
  671. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_text.py +0 -0
  672. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_text_dependencies.py +0 -0
  673. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_user_agent.py +0 -0
  674. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_web_client.py +0 -0
  675. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/test_web_imports.py +0 -0
  676. {chutils-3.1.0 → chutils-3.3.0}/tests/unit/testing/test_fixtures.py +0 -0
@@ -0,0 +1,6 @@
1
+ .idea/
2
+ .pytest_cache/
3
+ .venv/
4
+ dist/
5
+ build/
6
+ *.egg-info/
@@ -1,185 +1,186 @@
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
- # UV
98
- # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99
- # This is especially recommended for binary packages to ensure reproducibility, and is more
100
- # commonly ignored for libraries.
101
- #uv.lock
102
-
103
- # poetry
104
- # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
105
- # This is especially recommended for binary packages to ensure reproducibility, and is more
106
- # commonly ignored for libraries.
107
- # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
108
- #poetry.lock
109
-
110
- # pdm
111
- # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
112
- #pdm.lock
113
- # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
114
- # in version control.
115
- # https://pdm.fming.dev/latest/usage/project/#working-with-version-control
116
- .pdm.toml
117
- .pdm-python
118
- .pdm-build/
119
-
120
- # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
121
- __pypackages__/
122
-
123
- # Celery stuff
124
- celerybeat-schedule
125
- celerybeat.pid
126
-
127
- # SageMath parsed files
128
- *.sage.py
129
-
130
- # Environments
131
- .env
132
- .venv
133
- env/
134
- venv/
135
- ENV/
136
- env.bak/
137
- venv.bak/
138
- !examples/.env
139
-
140
- # Spyder project settings
141
- .spyderproject
142
- .spyproject
143
-
144
- # Rope project settings
145
- .ropeproject
146
-
147
- # mkdocs documentation
148
- /site
149
-
150
- # mypy
151
- .mypy_cache/
152
- .dmypy.json
153
- dmypy.json
154
-
155
- # Pyre type checker
156
- .pyre/
157
-
158
- # pytype static type analyzer
159
- .pytype/
160
-
161
- # Cython debug symbols
162
- cython_debug/
163
-
164
- # PyCharm
165
- # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
166
- # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
167
- # and can be added to the global gitignore or merged into this file. For a more nuclear
168
- # option (not recommended) you can uncomment the following to ignore the entire idea folder.
169
- .idea/
170
-
171
- # Ruff stuff:
172
- .ruff_cache/
173
-
174
- # PyPI configuration file
175
- .pypirc
176
-
177
- # Project-specific documentation
178
- PUBLISHING.md
179
- project.txt
180
- changelog.txt
181
- *.log.*
182
- *.log
183
-
184
- # Local chutils cache
185
- .chutils/
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
+ # UV
98
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ #uv.lock
102
+
103
+ # poetry
104
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
105
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
106
+ # commonly ignored for libraries.
107
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
108
+ #poetry.lock
109
+
110
+ # pdm
111
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
112
+ #pdm.lock
113
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
114
+ # in version control.
115
+ # https://pdm.fming.dev/latest/usage/project/#working-with-version-control
116
+ .pdm.toml
117
+ .pdm-python
118
+ .pdm-build/
119
+
120
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
121
+ __pypackages__/
122
+
123
+ # Celery stuff
124
+ celerybeat-schedule
125
+ celerybeat.pid
126
+
127
+ # SageMath parsed files
128
+ *.sage.py
129
+
130
+ # Environments
131
+ .env
132
+ .venv
133
+ env/
134
+ venv/
135
+ ENV/
136
+ env.bak/
137
+ venv.bak/
138
+ !examples/.env
139
+
140
+ # Spyder project settings
141
+ .spyderproject
142
+ .spyproject
143
+
144
+ # Rope project settings
145
+ .ropeproject
146
+
147
+ # mkdocs documentation
148
+ /site
149
+
150
+ # mypy
151
+ .mypy_cache/
152
+ .dmypy.json
153
+ dmypy.json
154
+
155
+ # Pyre type checker
156
+ .pyre/
157
+
158
+ # pytype static type analyzer
159
+ .pytype/
160
+
161
+ # Cython debug symbols
162
+ cython_debug/
163
+
164
+ # PyCharm
165
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
166
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
167
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
168
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
169
+ .idea/
170
+
171
+ # Ruff stuff:
172
+ .ruff_cache/
173
+
174
+ # PyPI configuration file
175
+ .pypirc
176
+
177
+ # Project-specific documentation
178
+ PUBLISHING.md
179
+ project.txt
180
+ changelog.txt
181
+ *.log.*
182
+ *.log
183
+
184
+ # Local chutils cache
185
+ .chutils/
186
+ .chutils_dashboard_history.json
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: chutils
3
- Version: 3.1.0
3
+ Version: 3.3.0
4
4
  Summary: Набор простых и удобных утилит для Python, который избавляет от рутины при работе с конфигурацией и логированием в новых проектах.
5
5
  Author-email: Chu4hel <sergeiivanov636@gmail.com>
6
6
  License-Expression: MIT
@@ -9,14 +9,23 @@ Requires-Python: <3.15,>=3.10
9
9
  Requires-Dist: exceptiongroup>=1.2.2; python_version < '3.11'
10
10
  Requires-Dist: python-dotenv>=1.2.2
11
11
  Requires-Dist: pyyaml>=6.0.3
12
+ Provides-Extra: aws
13
+ Requires-Dist: boto3>=1.34.0; extra == 'aws'
12
14
  Provides-Extra: captcha
13
15
  Requires-Dist: httpx>=0.27.0; extra == 'captcha'
14
16
  Provides-Extra: crypto
15
17
  Requires-Dist: cryptography>=42.0.0; extra == 'crypto'
16
18
  Provides-Extra: date
17
19
  Requires-Dist: python-dateutil>=2.9.0; extra == 'date'
20
+ Provides-Extra: db
21
+ Requires-Dist: aiosqlite>=0.20.0; extra == 'db'
22
+ Requires-Dist: alembic>=1.13.0; extra == 'db'
23
+ Requires-Dist: asyncpg>=0.29.0; extra == 'db'
24
+ Requires-Dist: sqlalchemy>=2.0.0; extra == 'db'
18
25
  Provides-Extra: full
26
+ Requires-Dist: boto3>=1.34.0; extra == 'full'
19
27
  Requires-Dist: cryptography>=42.0.0; extra == 'full'
28
+ Requires-Dist: google-cloud-secret-manager>=2.20.0; extra == 'full'
20
29
  Requires-Dist: httpx>=0.27.0; extra == 'full'
21
30
  Requires-Dist: keyring>=25.7.0; extra == 'full'
22
31
  Requires-Dist: opentelemetry-api>=1.41.1; extra == 'full'
@@ -32,6 +41,9 @@ Requires-Dist: rapidfuzz>=3.9.0; extra == 'full'
32
41
  Requires-Dist: rich>=15.0.0; extra == 'full'
33
42
  Requires-Dist: selenium>=4.27.0; extra == 'full'
34
43
  Requires-Dist: watchdog>=6.0.0; extra == 'full'
44
+ Requires-Dist: websockets>=14.0.0; extra == 'full'
45
+ Provides-Extra: gcp
46
+ Requires-Dist: google-cloud-secret-manager>=2.20.0; extra == 'gcp'
35
47
  Provides-Extra: json
36
48
  Requires-Dist: python-json-logger>=3.2.1; extra == 'json'
37
49
  Provides-Extra: metrics
@@ -57,6 +69,8 @@ Provides-Extra: watch
57
69
  Requires-Dist: watchdog>=6.0.0; extra == 'watch'
58
70
  Provides-Extra: web
59
71
  Requires-Dist: httpx>=0.27.0; extra == 'web'
72
+ Provides-Extra: websockets
73
+ Requires-Dist: websockets>=14.0.0; extra == 'websockets'
60
74
  Description-Content-Type: text/markdown
61
75
 
62
76
  [Русская версия](docs/README_RU.md)
@@ -278,20 +292,71 @@ To use this feature, install `watchdog`:
278
292
 
279
293
  ### 3. Secret Management
280
294
 
281
- `SecretManager` looks for secrets in the following order: **Keyring > .env File > Environment Variables**.
295
+ `SecretManager` provides a unified abstraction for managing secrets using a custom chain of providers (`SecretProvider`)
296
+ and automatic fallback logic.
297
+
298
+ By default, `SecretManager` searches for secrets in the following order: **Keyring > .env File > Environment Variables
299
+ **.
282
300
 
283
301
  ```python
284
302
  from chutils import SecretManager
285
303
 
286
304
  secrets = SecretManager("my_awesome_app")
287
305
 
288
- # Save once
306
+ # Save secret (will be written to the first writable provider in the chain)
289
307
  secrets.save_secret("API_KEY", "secret-value-123")
290
308
 
291
- # Use everywhere
309
+ # Retrieve secret
292
310
  key = secrets.get_secret("API_KEY")
293
311
  ```
294
312
 
313
+ #### Built-in Providers
314
+
315
+ You can configure the providers list explicitly:
316
+
317
+ ```python
318
+ from chutils import SecretManager
319
+ from chutils.secret_manager.providers import KeyringProvider, DotEnvProvider, EnvProvider
320
+
321
+ secrets = SecretManager(
322
+ service_name="my_app",
323
+ providers=[
324
+ KeyringProvider(),
325
+ DotEnvProvider(),
326
+ EnvProvider()
327
+ ]
328
+ )
329
+ ```
330
+
331
+ #### Cloud Secret Managers
332
+
333
+ The library supports transparent integration with AWS Secrets Manager and Google Secret Manager:
334
+
335
+ ```python
336
+ from chutils import SecretManager
337
+ from chutils.secret_manager.providers import AWSSecretManagerProvider, GCPSecretManagerProvider, EnvProvider
338
+
339
+ # Initialize cloud providers (requires installation of chutils[aws,gcp])
340
+ aws_provider = AWSSecretManagerProvider(region_name="us-east-1")
341
+ gcp_provider = GCPSecretManagerProvider(project_id="my-gcp-project")
342
+
343
+ # Create a SecretManager with the chain: AWS -> GCP -> Environment Variables.
344
+ # If AWS or GCP calls fail due to network/permissions or the secret is missing,
345
+ # SecretManager logs a warning and automatically falls back to EnvProvider.
346
+ secrets = SecretManager(
347
+ service_name="my_service",
348
+ providers=[aws_provider, gcp_provider, EnvProvider()]
349
+ )
350
+ ```
351
+
352
+ Install cloud dependencies:
353
+
354
+ ```bash
355
+ pip install chutils[aws] # For AWS (boto3)
356
+ pip install chutils[gcp] # For GCP (google-cloud-secret-manager)
357
+ pip install chutils[all] # For all optional packages
358
+ ```
359
+
295
360
  #### Disabling Keyring (Optional)
296
361
 
297
362
  In environments like Docker or CI/CD where `keyring` is unavailable, you can suppress warnings and skip the check:
@@ -217,20 +217,71 @@ To use this feature, install `watchdog`:
217
217
 
218
218
  ### 3. Secret Management
219
219
 
220
- `SecretManager` looks for secrets in the following order: **Keyring > .env File > Environment Variables**.
220
+ `SecretManager` provides a unified abstraction for managing secrets using a custom chain of providers (`SecretProvider`)
221
+ and automatic fallback logic.
222
+
223
+ By default, `SecretManager` searches for secrets in the following order: **Keyring > .env File > Environment Variables
224
+ **.
221
225
 
222
226
  ```python
223
227
  from chutils import SecretManager
224
228
 
225
229
  secrets = SecretManager("my_awesome_app")
226
230
 
227
- # Save once
231
+ # Save secret (will be written to the first writable provider in the chain)
228
232
  secrets.save_secret("API_KEY", "secret-value-123")
229
233
 
230
- # Use everywhere
234
+ # Retrieve secret
231
235
  key = secrets.get_secret("API_KEY")
232
236
  ```
233
237
 
238
+ #### Built-in Providers
239
+
240
+ You can configure the providers list explicitly:
241
+
242
+ ```python
243
+ from chutils import SecretManager
244
+ from chutils.secret_manager.providers import KeyringProvider, DotEnvProvider, EnvProvider
245
+
246
+ secrets = SecretManager(
247
+ service_name="my_app",
248
+ providers=[
249
+ KeyringProvider(),
250
+ DotEnvProvider(),
251
+ EnvProvider()
252
+ ]
253
+ )
254
+ ```
255
+
256
+ #### Cloud Secret Managers
257
+
258
+ The library supports transparent integration with AWS Secrets Manager and Google Secret Manager:
259
+
260
+ ```python
261
+ from chutils import SecretManager
262
+ from chutils.secret_manager.providers import AWSSecretManagerProvider, GCPSecretManagerProvider, EnvProvider
263
+
264
+ # Initialize cloud providers (requires installation of chutils[aws,gcp])
265
+ aws_provider = AWSSecretManagerProvider(region_name="us-east-1")
266
+ gcp_provider = GCPSecretManagerProvider(project_id="my-gcp-project")
267
+
268
+ # Create a SecretManager with the chain: AWS -> GCP -> Environment Variables.
269
+ # If AWS or GCP calls fail due to network/permissions or the secret is missing,
270
+ # SecretManager logs a warning and automatically falls back to EnvProvider.
271
+ secrets = SecretManager(
272
+ service_name="my_service",
273
+ providers=[aws_provider, gcp_provider, EnvProvider()]
274
+ )
275
+ ```
276
+
277
+ Install cloud dependencies:
278
+
279
+ ```bash
280
+ pip install chutils[aws] # For AWS (boto3)
281
+ pip install chutils[gcp] # For GCP (google-cloud-secret-manager)
282
+ pip install chutils[all] # For all optional packages
283
+ ```
284
+
234
285
  #### Disabling Keyring (Optional)
235
286
 
236
287
  In environments like Docker or CI/CD where `keyring` is unavailable, you can suppress warnings and skip the check: