chutils 3.5.0__tar.gz → 3.7.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 (1266) hide show
  1. chutils-3.7.0/.github/workflows/ci.yml +46 -0
  2. chutils-3.7.0/PKG-INFO +562 -0
  3. chutils-3.7.0/README.md +473 -0
  4. chutils-3.7.0/ai-lint.toml +194 -0
  5. chutils-3.7.0/api_map.md +278 -0
  6. chutils-3.7.0/benchmarks/cold_start.py +72 -0
  7. chutils-3.7.0/conductor/archive/advanced_antidetect_e2e_20260910/index.md +5 -0
  8. chutils-3.7.0/conductor/archive/advanced_antidetect_e2e_20260910/index.md.metadata.json +4 -0
  9. chutils-3.7.0/conductor/archive/advanced_antidetect_e2e_20260910/metadata.json +8 -0
  10. chutils-3.7.0/conductor/archive/advanced_antidetect_e2e_20260910/plan.md +29 -0
  11. chutils-3.7.0/conductor/archive/advanced_antidetect_e2e_20260910/plan.md.metadata.json +4 -0
  12. chutils-3.7.0/conductor/archive/advanced_antidetect_e2e_20260910/spec.md +25 -0
  13. chutils-3.7.0/conductor/archive/advanced_antidetect_e2e_20260910/spec.md.metadata.json +4 -0
  14. chutils-3.7.0/conductor/archive/nodriver_antidetect_20260910/index.md +5 -0
  15. chutils-3.7.0/conductor/archive/nodriver_antidetect_20260910/metadata.json +8 -0
  16. chutils-3.7.0/conductor/archive/nodriver_antidetect_20260910/plan.md +41 -0
  17. chutils-3.7.0/conductor/archive/nodriver_antidetect_20260910/spec.md +31 -0
  18. chutils-3.7.0/conductor/archive/nodriver_launch_turnstile_fix_20260910/index.md +5 -0
  19. chutils-3.7.0/conductor/archive/nodriver_launch_turnstile_fix_20260910/metadata.json +9 -0
  20. chutils-3.7.0/conductor/archive/nodriver_launch_turnstile_fix_20260910/plan.md +39 -0
  21. chutils-3.7.0/conductor/archive/nodriver_launch_turnstile_fix_20260910/spec.md +34 -0
  22. chutils-3.7.0/conductor/archive/nodriver_stealth_turnstile_20260910/index.md +5 -0
  23. chutils-3.7.0/conductor/archive/nodriver_stealth_turnstile_20260910/metadata.json +8 -0
  24. chutils-3.7.0/conductor/archive/nodriver_stealth_turnstile_20260910/plan.md +38 -0
  25. chutils-3.7.0/conductor/archive/nodriver_stealth_turnstile_20260910/spec.md +53 -0
  26. chutils-3.7.0/conductor/archive/profile_warmer_20260910/index.md +5 -0
  27. chutils-3.7.0/conductor/archive/profile_warmer_20260910/metadata.json +8 -0
  28. chutils-3.7.0/conductor/archive/profile_warmer_20260910/plan.md +38 -0
  29. chutils-3.7.0/conductor/archive/profile_warmer_20260910/spec.md +33 -0
  30. chutils-3.7.0/conductor/archive/proxy_manager_20260910/index.md +5 -0
  31. chutils-3.7.0/conductor/archive/proxy_manager_20260910/metadata.json +8 -0
  32. chutils-3.7.0/conductor/archive/proxy_manager_20260910/plan.md +39 -0
  33. chutils-3.7.0/conductor/archive/proxy_manager_20260910/spec.md +42 -0
  34. chutils-3.7.0/conductor/archive/python315_support_20260827/index.md +6 -0
  35. chutils-3.7.0/conductor/archive/python315_support_20260827/metadata.json +8 -0
  36. chutils-3.7.0/conductor/archive/python315_support_20260827/plan.md +22 -0
  37. chutils-3.7.0/conductor/archive/python315_support_20260827/spec.md +22 -0
  38. chutils-3.7.0/conductor/archive/scraping_testing_20260910/index.md +5 -0
  39. chutils-3.7.0/conductor/archive/scraping_testing_20260910/metadata.json +8 -0
  40. chutils-3.7.0/conductor/archive/scraping_testing_20260910/plan.md +50 -0
  41. chutils-3.7.0/conductor/archive/scraping_testing_20260910/spec.md +48 -0
  42. chutils-3.7.0/conductor/archive/tls_impersonation_antidetect_20260910/index.md +5 -0
  43. chutils-3.7.0/conductor/archive/tls_impersonation_antidetect_20260910/metadata.json +8 -0
  44. chutils-3.7.0/conductor/archive/tls_impersonation_antidetect_20260910/plan.md +40 -0
  45. chutils-3.7.0/conductor/archive/tls_impersonation_antidetect_20260910/spec.md +36 -0
  46. chutils-3.7.0/conductor/product.md +275 -0
  47. chutils-3.7.0/conductor/tech-stack.md +168 -0
  48. chutils-3.7.0/conductor/tracks/nextgen_antidetect_bidi_20260915/index.md +5 -0
  49. chutils-3.7.0/conductor/tracks/nextgen_antidetect_bidi_20260915/metadata.json +8 -0
  50. chutils-3.7.0/conductor/tracks/nextgen_antidetect_bidi_20260915/plan.md +50 -0
  51. chutils-3.7.0/conductor/tracks/nextgen_antidetect_bidi_20260915/spec.md +59 -0
  52. chutils-3.7.0/conductor/tracks.md +39 -0
  53. chutils-3.7.0/docs/README_RU.md +481 -0
  54. chutils-3.7.0/docs/ai_examples/configuration/bad_pattern.py +22 -0
  55. chutils-3.7.0/docs/ai_examples/error_handling/good_pattern.py +92 -0
  56. chutils-3.7.0/docs/ai_examples/logging/bad_pattern.py +27 -0
  57. chutils-3.7.0/docs/ai_examples/logging/good_pattern.py +38 -0
  58. chutils-3.7.0/docs/ai_examples/optional_deps/bad_pattern.py +48 -0
  59. chutils-3.7.0/docs/ai_examples/optional_deps/good_pattern.py +68 -0
  60. chutils-3.7.0/docs/ai_lint.md +492 -0
  61. chutils-3.7.0/docs/api.md +574 -0
  62. chutils-3.7.0/docs/audit.md +123 -0
  63. chutils-3.7.0/docs/captcha.md +115 -0
  64. chutils-3.7.0/docs/cli/check.md +97 -0
  65. chutils-3.7.0/docs/custom_config_providers.md +301 -0
  66. chutils-3.7.0/docs/dependencies.md +122 -0
  67. chutils-3.7.0/docs/http.md +221 -0
  68. chutils-3.7.0/docs/migration.md +238 -0
  69. chutils-3.7.0/docs/plugins.md +254 -0
  70. chutils-3.7.0/docs/recipes.md +1584 -0
  71. chutils-3.7.0/docs/scraping.md +1064 -0
  72. chutils-3.7.0/docs/store.md +100 -0
  73. chutils-3.7.0/docs/telegram.md +322 -0
  74. chutils-3.7.0/docs/testing.md +108 -0
  75. chutils-3.7.0/docs/vk_bot.md +43 -0
  76. chutils-3.7.0/docs/vk_testing.md +17 -0
  77. chutils-3.7.0/docs/vkma.md +141 -0
  78. chutils-3.7.0/docs/web.md +122 -0
  79. chutils-3.7.0/examples/01_configuration.py +50 -0
  80. chutils-3.7.0/examples/02_logging.py +48 -0
  81. chutils-3.7.0/examples/03_secrets.py +74 -0
  82. chutils-3.7.0/examples/04_full_example.py +78 -0
  83. chutils-3.7.0/examples/05_different_log_levels.py +46 -0
  84. chutils-3.7.0/examples/06_local_config_override.py +81 -0
  85. chutils-3.7.0/examples/07_decorators_example.py +42 -0
  86. chutils-3.7.0/examples/08_multiple_loggers_example.py +40 -0
  87. chutils-3.7.0/examples/09_disable_keyring.py +42 -0
  88. chutils-3.7.0/examples/10_universal_env_override.py +43 -0
  89. chutils-3.7.0/examples/11_retry_decorator.py +59 -0
  90. chutils-3.7.0/examples/12_secret_masking.py +55 -0
  91. chutils-3.7.0/examples/13_pydantic_validation.py +87 -0
  92. chutils-3.7.0/examples/15_context_logging.py +93 -0
  93. chutils-3.7.0/examples/17_timeout_decorator.py +62 -0
  94. chutils-3.7.0/examples/18_config_hot_reload.py +102 -0
  95. chutils-3.7.0/examples/19_remote_config.py +92 -0
  96. chutils-3.7.0/examples/20_opentelemetry_tracing.py +49 -0
  97. chutils-3.7.0/examples/21_config_diagnostics.py +47 -0
  98. chutils-3.7.0/examples/22_qt_logging.py +47 -0
  99. chutils-3.7.0/examples/22_safe_path_resolution.py +91 -0
  100. chutils-3.7.0/examples/23_event_bus.py +120 -0
  101. chutils-3.7.0/examples/23_qt_async.py +65 -0
  102. chutils-3.7.0/examples/24_qt_typed_signals.py +75 -0
  103. chutils-3.7.0/examples/24_task_scheduler.py +66 -0
  104. chutils-3.7.0/examples/25_testing_fixtures_example.py +81 -0
  105. chutils-3.7.0/examples/26_metrics_prometheus.py +88 -0
  106. chutils-3.7.0/examples/27_rate_limiting.py +77 -0
  107. chutils-3.7.0/examples/28_dependency_injection.py +75 -0
  108. chutils-3.7.0/examples/captcha_solvers_usage.py +67 -0
  109. chutils-3.7.0/examples/concurrency_scraping_usage.py +57 -0
  110. chutils-3.7.0/examples/config.yml +65 -0
  111. chutils-3.7.0/examples/scraping_humanize_usage.py +69 -0
  112. chutils-3.7.0/examples/web_client_usage.py +90 -0
  113. chutils-3.7.0/mkdocs.yml +75 -0
  114. chutils-3.7.0/project_index.json +45839 -0
  115. chutils-3.7.0/pyproject.toml +197 -0
  116. chutils-3.7.0/src/chutils/__init__.py +448 -0
  117. chutils-3.7.0/src/chutils/__init__.pyi +1211 -0
  118. chutils-3.7.0/src/chutils/audit/__init__.py +45 -0
  119. chutils-3.7.0/src/chutils/audit/_hash.py +23 -0
  120. chutils-3.7.0/src/chutils/audit/api.py +190 -0
  121. chutils-3.7.0/src/chutils/audit/backends/__init__.py +7 -0
  122. chutils-3.7.0/src/chutils/audit/backends/base.py +47 -0
  123. chutils-3.7.0/src/chutils/audit/backends/file.py +124 -0
  124. chutils-3.7.0/src/chutils/audit/backends/postgres.py +271 -0
  125. chutils-3.7.0/src/chutils/audit/backends/sqlite.py +211 -0
  126. chutils-3.7.0/src/chutils/audit/schema.py +119 -0
  127. chutils-3.7.0/src/chutils/cache/__init__.py +5 -0
  128. chutils-3.7.0/src/chutils/cache/base.py +137 -0
  129. chutils-3.7.0/src/chutils/cache/decorator.py +169 -0
  130. chutils-3.7.0/src/chutils/cache/utils.py +74 -0
  131. chutils-3.7.0/src/chutils/cli.py +141 -0
  132. chutils-3.7.0/src/chutils/cli_booster.py +169 -0
  133. chutils-3.7.0/src/chutils/cli_utils.py +185 -0
  134. chutils-3.7.0/src/chutils/commands/__init__.py +38 -0
  135. chutils-3.7.0/src/chutils/commands/base.py +41 -0
  136. chutils-3.7.0/src/chutils/commands/check.py +280 -0
  137. chutils-3.7.0/src/chutils/commands/config.py +236 -0
  138. chutils-3.7.0/src/chutils/commands/db.py +491 -0
  139. chutils-3.7.0/src/chutils/commands/dev/__init__.py +796 -0
  140. chutils-3.7.0/src/chutils/commands/dev/ai_lint.py +140 -0
  141. chutils-3.7.0/src/chutils/commands/dev/base.py +38 -0
  142. chutils-3.7.0/src/chutils/commands/dev/chat_context.py +101 -0
  143. chutils-3.7.0/src/chutils/commands/dev/clean.py +146 -0
  144. chutils-3.7.0/src/chutils/commands/dev/dashboard.py +42 -0
  145. chutils-3.7.0/src/chutils/commands/dev/diagnostics.py +130 -0
  146. chutils-3.7.0/src/chutils/commands/dev/few_shot.py +57 -0
  147. chutils-3.7.0/src/chutils/commands/dev/generate_context.py +618 -0
  148. chutils-3.7.0/src/chutils/commands/dev/hooks.py +219 -0
  149. chutils-3.7.0/src/chutils/commands/dev/lock.py +137 -0
  150. chutils-3.7.0/src/chutils/commands/dev/mock.py +85 -0
  151. chutils-3.7.0/src/chutils/commands/dev/profile_imports.py +49 -0
  152. chutils-3.7.0/src/chutils/commands/dev/scaffold.py +70 -0
  153. chutils-3.7.0/src/chutils/commands/dev/setup_github_actions.py +186 -0
  154. chutils-3.7.0/src/chutils/commands/dev/sync_env.py +202 -0
  155. chutils-3.7.0/src/chutils/commands/dev/watch.py +113 -0
  156. chutils-3.7.0/src/chutils/commands/env.py +207 -0
  157. chutils-3.7.0/src/chutils/commands/init.py +464 -0
  158. chutils-3.7.0/src/chutils/commands/paths.py +96 -0
  159. chutils-3.7.0/src/chutils/commands/pypi.py +463 -0
  160. chutils-3.7.0/src/chutils/commands/secrets.py +223 -0
  161. chutils-3.7.0/src/chutils/commands/template.py +124 -0
  162. chutils-3.7.0/src/chutils/commands/utils.py +41 -0
  163. chutils-3.7.0/src/chutils/commands/validate.py +119 -0
  164. chutils-3.7.0/src/chutils/config/__init__.py +320 -0
  165. chutils-3.7.0/src/chutils/config/ast_fallback_parser.py +159 -0
  166. chutils-3.7.0/src/chutils/config/core.py +558 -0
  167. chutils-3.7.0/src/chutils/config/custom_providers.py +291 -0
  168. chutils-3.7.0/src/chutils/config/dev.py +451 -0
  169. chutils-3.7.0/src/chutils/config/diagnostics.py +173 -0
  170. chutils-3.7.0/src/chutils/config/generator.py +155 -0
  171. chutils-3.7.0/src/chutils/config/getters.py +543 -0
  172. chutils-3.7.0/src/chutils/config/integrations.py +125 -0
  173. chutils-3.7.0/src/chutils/config/manager.py +411 -0
  174. chutils-3.7.0/src/chutils/config/paths.py +212 -0
  175. chutils-3.7.0/src/chutils/config/providers.py +607 -0
  176. chutils-3.7.0/src/chutils/config/schema.py +121 -0
  177. chutils-3.7.0/src/chutils/config/sse.py +257 -0
  178. chutils-3.7.0/src/chutils/config/tracing.py +125 -0
  179. chutils-3.7.0/src/chutils/config/utils.py +363 -0
  180. chutils-3.7.0/src/chutils/config/watcher.py +169 -0
  181. chutils-3.7.0/src/chutils/config/webhook_server.py +228 -0
  182. chutils-3.7.0/src/chutils/context.py +103 -0
  183. chutils-3.7.0/src/chutils/crypto.py +398 -0
  184. chutils-3.7.0/src/chutils/db.py +264 -0
  185. chutils-3.7.0/src/chutils/decorators.py +923 -0
  186. chutils-3.7.0/src/chutils/dev/__init__.py +48 -0
  187. chutils-3.7.0/src/chutils/dev/ai_lint.py +642 -0
  188. chutils-3.7.0/src/chutils/dev/ast_indexer.py +476 -0
  189. chutils-3.7.0/src/chutils/dev/changelog_parser.py +202 -0
  190. chutils-3.7.0/src/chutils/dev/chat_context.py +440 -0
  191. chutils-3.7.0/src/chutils/dev/cleaner.py +221 -0
  192. chutils-3.7.0/src/chutils/dev/constants.py +17 -0
  193. chutils-3.7.0/src/chutils/dev/context/gitignore.py +158 -0
  194. chutils-3.7.0/src/chutils/dev/context/incremental.py +134 -0
  195. chutils-3.7.0/src/chutils/dev/dashboard/__init__.py +22 -0
  196. chutils-3.7.0/src/chutils/dev/dashboard/indexer.py +233 -0
  197. chutils-3.7.0/src/chutils/dev/dashboard/input.py +155 -0
  198. chutils-3.7.0/src/chutils/dev/dashboard/tui.py +620 -0
  199. chutils-3.7.0/src/chutils/dev/env_parser.py +234 -0
  200. chutils-3.7.0/src/chutils/dev/env_sync.py +115 -0
  201. chutils-3.7.0/src/chutils/dev/few_shot/__init__.py +114 -0
  202. chutils-3.7.0/src/chutils/dev/few_shot/detector.py +232 -0
  203. chutils-3.7.0/src/chutils/dev/few_shot/renderer.py +495 -0
  204. chutils-3.7.0/src/chutils/dev/few_shot/writer.py +319 -0
  205. chutils-3.7.0/src/chutils/dev/github_actions.py +101 -0
  206. chutils-3.7.0/src/chutils/dev/mock_server.py +519 -0
  207. chutils-3.7.0/src/chutils/dev/models/__init__.py +17 -0
  208. chutils-3.7.0/src/chutils/dev/models/base.py +35 -0
  209. chutils-3.7.0/src/chutils/dev/models/index.py +37 -0
  210. chutils-3.7.0/src/chutils/dev/models/node.py +20 -0
  211. chutils-3.7.0/src/chutils/dev/models/symbol.py +22 -0
  212. chutils-3.7.0/src/chutils/dev/profile_imports.py +374 -0
  213. chutils-3.7.0/src/chutils/dev/project_metadata.py +269 -0
  214. chutils-3.7.0/src/chutils/dev/rules/__init__.py +24 -0
  215. chutils-3.7.0/src/chutils/dev/rules/api_map.py +503 -0
  216. chutils-3.7.0/src/chutils/dev/rules/decomposition.py +158 -0
  217. chutils-3.7.0/src/chutils/dev/rules/dependency_sync.py +259 -0
  218. chutils-3.7.0/src/chutils/dev/rules/docstring.py +312 -0
  219. chutils-3.7.0/src/chutils/dev/rules/env.py +114 -0
  220. chutils-3.7.0/src/chutils/dev/rules/integration.py +316 -0
  221. chutils-3.7.0/src/chutils/dev/rules/linter_coverage.py +192 -0
  222. chutils-3.7.0/src/chutils/dev/rules/manifest.py +75 -0
  223. chutils-3.7.0/src/chutils/dev/rules/security.py +133 -0
  224. chutils-3.7.0/src/chutils/dev/rules/upgrade_check.py +177 -0
  225. chutils-3.7.0/src/chutils/dev/runners.py +218 -0
  226. chutils-3.7.0/src/chutils/dev/scaffold.py +428 -0
  227. chutils-3.7.0/src/chutils/dev/upgrade_client.py +166 -0
  228. chutils-3.7.0/src/chutils/dev/version_detector.py +359 -0
  229. chutils-3.7.0/src/chutils/dev/watcher.py +427 -0
  230. chutils-3.7.0/src/chutils/di/__init__.py +9 -0
  231. chutils-3.7.0/src/chutils/di/__init__.pyi +28 -0
  232. chutils-3.7.0/src/chutils/di/container.py +412 -0
  233. chutils-3.7.0/src/chutils/diagnostics/__init__.py +27 -0
  234. chutils-3.7.0/src/chutils/diagnostics/manager.py +316 -0
  235. chutils-3.7.0/src/chutils/diagnostics/models.py +102 -0
  236. chutils-3.7.0/src/chutils/diagnostics/web.py +78 -0
  237. chutils-3.7.0/src/chutils/env.py +206 -0
  238. chutils-3.7.0/src/chutils/env.pyi +20 -0
  239. chutils-3.7.0/src/chutils/events/__init__.py +34 -0
  240. chutils-3.7.0/src/chutils/events/core.py +329 -0
  241. chutils-3.7.0/src/chutils/exceptions/__init__.py +85 -0
  242. chutils-3.7.0/src/chutils/exceptions/audit.py +14 -0
  243. chutils-3.7.0/src/chutils/exceptions/base.py +63 -0
  244. chutils-3.7.0/src/chutils/exceptions/cache.py +5 -0
  245. chutils-3.7.0/src/chutils/exceptions/config.py +50 -0
  246. chutils-3.7.0/src/chutils/exceptions/di.py +13 -0
  247. chutils-3.7.0/src/chutils/exceptions/events.py +32 -0
  248. chutils-3.7.0/src/chutils/exceptions/logger.py +5 -0
  249. chutils-3.7.0/src/chutils/exceptions/resilience.py +17 -0
  250. chutils-3.7.0/src/chutils/exceptions/secrets.py +13 -0
  251. chutils-3.7.0/src/chutils/exceptions/system.py +40 -0
  252. chutils-3.7.0/src/chutils/exceptions/telegram.py +19 -0
  253. chutils-3.7.0/src/chutils/exceptions/validation.py +146 -0
  254. chutils-3.7.0/src/chutils/exceptions/vkma.py +18 -0
  255. chutils-3.7.0/src/chutils/exceptions/watcher.py +5 -0
  256. chutils-3.7.0/src/chutils/features.py +213 -0
  257. chutils-3.7.0/src/chutils/fs.py +530 -0
  258. chutils-3.7.0/src/chutils/http/__init__.py +77 -0
  259. chutils-3.7.0/src/chutils/http/api.py +174 -0
  260. chutils-3.7.0/src/chutils/http/async_client.py +333 -0
  261. chutils-3.7.0/src/chutils/http/client.py +451 -0
  262. chutils-3.7.0/src/chutils/http/fallback.py +495 -0
  263. chutils-3.7.0/src/chutils/http/resilience.py +417 -0
  264. chutils-3.7.0/src/chutils/http/streaming.py +560 -0
  265. chutils-3.7.0/src/chutils/http/tls_client.py +558 -0
  266. chutils-3.7.0/src/chutils/http/tracing.py +137 -0
  267. chutils-3.7.0/src/chutils/lifecycle.py +391 -0
  268. chutils-3.7.0/src/chutils/logger/__init__.py +88 -0
  269. chutils-3.7.0/src/chutils/logger/core.py +236 -0
  270. chutils-3.7.0/src/chutils/logger/formatters.py +103 -0
  271. chutils-3.7.0/src/chutils/logger/handlers.py +137 -0
  272. chutils-3.7.0/src/chutils/logger/internal/builder.py +577 -0
  273. chutils-3.7.0/src/chutils/logger/internal/levels.py +67 -0
  274. chutils-3.7.0/src/chutils/logger/internal/utils.py +66 -0
  275. chutils-3.7.0/src/chutils/logger/masking.py +178 -0
  276. chutils-3.7.0/src/chutils/metrics/__init__.py +162 -0
  277. chutils-3.7.0/src/chutils/metrics/base.py +57 -0
  278. chutils-3.7.0/src/chutils/metrics/in_memory.py +201 -0
  279. chutils-3.7.0/src/chutils/metrics/prometheus.py +127 -0
  280. chutils-3.7.0/src/chutils/metrics/timer.py +108 -0
  281. chutils-3.7.0/src/chutils/plugins/__init__.py +46 -0
  282. chutils-3.7.0/src/chutils/plugins/core.py +233 -0
  283. chutils-3.7.0/src/chutils/plugins/interfaces.py +227 -0
  284. chutils-3.7.0/src/chutils/qt/__init__.py +52 -0
  285. chutils-3.7.0/src/chutils/qt/asyncio.py +173 -0
  286. chutils-3.7.0/src/chutils/qt/logging.py +95 -0
  287. chutils-3.7.0/src/chutils/qt/shim.py +98 -0
  288. chutils-3.7.0/src/chutils/qt/signals.py +185 -0
  289. chutils-3.7.0/src/chutils/scaffold.py +55 -0
  290. chutils-3.7.0/src/chutils/scraping/__init__.py +213 -0
  291. chutils-3.7.0/src/chutils/scraping/camoufox.py +61 -0
  292. chutils-3.7.0/src/chutils/scraping/captcha/__init__.py +60 -0
  293. chutils-3.7.0/src/chutils/scraping/captcha/anticaptcha.py +293 -0
  294. chutils-3.7.0/src/chutils/scraping/captcha/base.py +75 -0
  295. chutils-3.7.0/src/chutils/scraping/captcha/capmonster.py +293 -0
  296. chutils-3.7.0/src/chutils/scraping/captcha/exceptions.py +17 -0
  297. chutils-3.7.0/src/chutils/scraping/captcha/rucaptcha.py +350 -0
  298. chutils-3.7.0/src/chutils/scraping/concurrency/__init__.py +19 -0
  299. chutils-3.7.0/src/chutils/scraping/concurrency/limiter.py +125 -0
  300. chutils-3.7.0/src/chutils/scraping/concurrency/metrics.py +67 -0
  301. chutils-3.7.0/src/chutils/scraping/concurrency/pool.py +146 -0
  302. chutils-3.7.0/src/chutils/scraping/concurrency/queues.py +428 -0
  303. chutils-3.7.0/src/chutils/scraping/humanize/__init__.py +71 -0
  304. chutils-3.7.0/src/chutils/scraping/humanize/actions.py +677 -0
  305. chutils-3.7.0/src/chutils/scraping/humanize/antidetect.py +421 -0
  306. chutils-3.7.0/src/chutils/scraping/humanize/antidetect_scripts.py +464 -0
  307. chutils-3.7.0/src/chutils/scraping/humanize/config.py +179 -0
  308. chutils-3.7.0/src/chutils/scraping/humanize/math_utils.py +360 -0
  309. chutils-3.7.0/src/chutils/scraping/humanize/search.py +176 -0
  310. chutils-3.7.0/src/chutils/scraping/humanize/turnstile.py +422 -0
  311. chutils-3.7.0/src/chutils/scraping/humanize/warmer.py +622 -0
  312. chutils-3.7.0/src/chutils/scraping/nodriver.py +186 -0
  313. chutils-3.7.0/src/chutils/scraping/profiles/adapters/nodriver.py +99 -0
  314. chutils-3.7.0/src/chutils/scraping/profiles/adapters/playwright.py +109 -0
  315. chutils-3.7.0/src/chutils/scraping/profiles/adapters/selenium.py +88 -0
  316. chutils-3.7.0/src/chutils/scraping/profiles/manager.py +205 -0
  317. chutils-3.7.0/src/chutils/scraping/profiles/models.py +46 -0
  318. chutils-3.7.0/src/chutils/scraping/profiles/storage.py +89 -0
  319. chutils-3.7.0/src/chutils/scraping/proxy/__init__.py +64 -0
  320. chutils-3.7.0/src/chutils/scraping/proxy/adapters.py +116 -0
  321. chutils-3.7.0/src/chutils/scraping/proxy/extension.py +217 -0
  322. chutils-3.7.0/src/chutils/scraping/proxy/models.py +124 -0
  323. chutils-3.7.0/src/chutils/scraping/proxy/parser.py +122 -0
  324. chutils-3.7.0/src/chutils/scraping/proxy/pool.py +287 -0
  325. chutils-3.7.0/src/chutils/scraping/proxy/tunnel.py +379 -0
  326. chutils-3.7.0/src/chutils/scraping/testing/__init__.py +123 -0
  327. chutils-3.7.0/src/chutils/scraping/testing/assertions.py +182 -0
  328. chutils-3.7.0/src/chutils/scraping/testing/fixtures.py +112 -0
  329. chutils-3.7.0/src/chutils/scraping/testing/mocks/__init__.py +26 -0
  330. chutils-3.7.0/src/chutils/scraping/testing/mocks/dom.py +250 -0
  331. chutils-3.7.0/src/chutils/scraping/testing/mocks/nodriver.py +154 -0
  332. chutils-3.7.0/src/chutils/scraping/testing/mocks/playwright.py +203 -0
  333. chutils-3.7.0/src/chutils/scraping/testing/mocks/selenium.py +199 -0
  334. chutils-3.7.0/src/chutils/scraping/testing/server.py +329 -0
  335. chutils-3.7.0/src/chutils/scraping/testing/session.py +207 -0
  336. chutils-3.7.0/src/chutils/scraping/testing/snapshot.py +281 -0
  337. chutils-3.7.0/src/chutils/secret_manager/__init__.py +10 -0
  338. chutils-3.7.0/src/chutils/secret_manager/core.py +298 -0
  339. chutils-3.7.0/src/chutils/secret_manager/providers/__init__.py +46 -0
  340. chutils-3.7.0/src/chutils/secret_manager/providers/aws.py +161 -0
  341. chutils-3.7.0/src/chutils/secret_manager/providers/base.py +48 -0
  342. chutils-3.7.0/src/chutils/secret_manager/providers/dotenv.py +91 -0
  343. chutils-3.7.0/src/chutils/secret_manager/providers/gcp.py +197 -0
  344. chutils-3.7.0/src/chutils/secret_manager/providers/keyring_provider.py +153 -0
  345. chutils-3.7.0/src/chutils/store/__init__.py +11 -0
  346. chutils-3.7.0/src/chutils/store/backends/__init__.py +12 -0
  347. chutils-3.7.0/src/chutils/store/backends/base.py +132 -0
  348. chutils-3.7.0/src/chutils/store/backends/memcached.py +217 -0
  349. chutils-3.7.0/src/chutils/store/backends/memory.py +157 -0
  350. chutils-3.7.0/src/chutils/store/backends/redis.py +193 -0
  351. chutils-3.7.0/src/chutils/store/decorator.py +87 -0
  352. chutils-3.7.0/src/chutils/store/manager.py +352 -0
  353. chutils-3.7.0/src/chutils/tasks/__init__.py +23 -0
  354. chutils-3.7.0/src/chutils/tasks/__init__.pyi +38 -0
  355. chutils-3.7.0/src/chutils/tasks/core.py +370 -0
  356. chutils-3.7.0/src/chutils/telegram/__init__.py +41 -0
  357. chutils-3.7.0/src/chutils/telegram/access.py +192 -0
  358. chutils-3.7.0/src/chutils/telegram/aiogram.py +193 -0
  359. chutils-3.7.0/src/chutils/telegram/formatting.py +169 -0
  360. chutils-3.7.0/src/chutils/telegram/keyboard.py +224 -0
  361. chutils-3.7.0/src/chutils/telegram/logging.py +117 -0
  362. chutils-3.7.0/src/chutils/telegram/media.py +249 -0
  363. chutils-3.7.0/src/chutils/telegram/notifier.py +218 -0
  364. chutils-3.7.0/src/chutils/telegram/rate_limit.py +167 -0
  365. chutils-3.7.0/src/chutils/telegram/whitelist.py +273 -0
  366. chutils-3.7.0/src/chutils/templates/vk/vk-miniapp/backend/main.py.template +58 -0
  367. chutils-3.7.0/src/chutils/testing/__init__.py +11 -0
  368. chutils-3.7.0/src/chutils/testing/fixtures.py +215 -0
  369. chutils-3.7.0/src/chutils/text.py +59 -0
  370. chutils-3.7.0/src/chutils/time.py +216 -0
  371. chutils-3.7.0/src/chutils/tracing.py +209 -0
  372. chutils-3.7.0/src/chutils/typing.py +55 -0
  373. chutils-3.7.0/src/chutils/validation.py +150 -0
  374. chutils-3.7.0/src/chutils/validation.pyi +11 -0
  375. chutils-3.7.0/src/chutils/vk/__init__.py +8 -0
  376. chutils-3.7.0/src/chutils/vk/callback/__init__.py +8 -0
  377. chutils-3.7.0/src/chutils/vk/callback/router.py +220 -0
  378. chutils-3.7.0/src/chutils/vk/testing/__init__.py +16 -0
  379. chutils-3.7.0/src/chutils/vk/testing/fixtures.py +115 -0
  380. chutils-3.7.0/src/chutils/vk/testing/generators.py +132 -0
  381. chutils-3.7.0/src/chutils/vkma/__init__.py +14 -0
  382. chutils-3.7.0/src/chutils/vkma/integrations/__init__.py +15 -0
  383. chutils-3.7.0/src/chutils/vkma/integrations/aiohttp.py +73 -0
  384. chutils-3.7.0/src/chutils/vkma/integrations/fastapi.py +131 -0
  385. chutils-3.7.0/src/chutils/vkma/integrations/flask.py +71 -0
  386. chutils-3.7.0/src/chutils/vkma/models.py +80 -0
  387. chutils-3.7.0/src/chutils/vkma/testing.py +17 -0
  388. chutils-3.7.0/src/chutils/vkma/validator.py +186 -0
  389. chutils-3.7.0/src/chutils/web/__init__.py +17 -0
  390. chutils-3.7.0/src/chutils/web/client.py +412 -0
  391. chutils-3.7.0/src/chutils/web/proxy_pool.py +178 -0
  392. chutils-3.7.0/src/chutils/web/user_agent.py +59 -0
  393. chutils-3.7.0/tests/conftest.py +109 -0
  394. chutils-3.7.0/tests/e2e/test_antidetect_e2e.py +212 -0
  395. chutils-3.7.0/tests/integration/test_ai_lint_integration.py +52 -0
  396. chutils-3.7.0/tests/integration/test_cli_e2e.py +36 -0
  397. chutils-3.7.0/tests/integration/test_db_migrations.py +350 -0
  398. chutils-3.7.0/tests/integration/test_event_loops.py +112 -0
  399. chutils-3.7.0/tests/integration/test_examples.py +170 -0
  400. chutils-3.7.0/tests/integration/test_hooks_integration.py +43 -0
  401. chutils-3.7.0/tests/integration/test_masking_integration.py +63 -0
  402. chutils-3.7.0/tests/integration/test_otel_tracing.py +171 -0
  403. chutils-3.7.0/tests/integration/test_remote_config_integration.py +49 -0
  404. chutils-3.7.0/tests/integration/test_setup_github_actions_integration.py +41 -0
  405. chutils-3.7.0/tests/manual/manual_test_cli_booster.py +39 -0
  406. chutils-3.7.0/tests/unit/cli/conftest.py +67 -0
  407. chutils-3.7.0/tests/unit/cli/test_cli.py +262 -0
  408. chutils-3.7.0/tests/unit/cli/test_cli_booster.py +106 -0
  409. chutils-3.7.0/tests/unit/cli/test_cli_check.py +69 -0
  410. chutils-3.7.0/tests/unit/cli/test_cli_config.py +90 -0
  411. chutils-3.7.0/tests/unit/cli/test_cli_config_cmd.py +104 -0
  412. chutils-3.7.0/tests/unit/cli/test_cli_config_schema.py +90 -0
  413. chutils-3.7.0/tests/unit/cli/test_cli_dev.py +85 -0
  414. chutils-3.7.0/tests/unit/cli/test_cli_dev_cmd.py +604 -0
  415. chutils-3.7.0/tests/unit/cli/test_cli_dev_lock.py +66 -0
  416. chutils-3.7.0/tests/unit/cli/test_cli_dev_tree.py +42 -0
  417. chutils-3.7.0/tests/unit/cli/test_cli_dev_watch.py +122 -0
  418. chutils-3.7.0/tests/unit/cli/test_cli_diagnostics.py +156 -0
  419. chutils-3.7.0/tests/unit/cli/test_cli_extras_suggestion.py +32 -0
  420. chutils-3.7.0/tests/unit/cli/test_cli_init.py +103 -0
  421. chutils-3.7.0/tests/unit/cli/test_cli_init_interactive.py +107 -0
  422. chutils-3.7.0/tests/unit/cli/test_cli_paths.py +52 -0
  423. chutils-3.7.0/tests/unit/cli/test_cli_pypi.py +522 -0
  424. chutils-3.7.0/tests/unit/cli/test_cli_rich.py +56 -0
  425. chutils-3.7.0/tests/unit/cli/test_cli_rich_width.py +50 -0
  426. chutils-3.7.0/tests/unit/cli/test_cli_secrets.py +154 -0
  427. chutils-3.7.0/tests/unit/cli/test_cli_setup_github_actions.py +115 -0
  428. chutils-3.7.0/tests/unit/cli/test_cli_template.py +83 -0
  429. chutils-3.7.0/tests/unit/cli/test_cli_utils_internal.py +66 -0
  430. chutils-3.7.0/tests/unit/cli/test_cli_validate.py +112 -0
  431. chutils-3.7.0/tests/unit/config/test_config.py +528 -0
  432. chutils-3.7.0/tests/unit/config/test_config_ast_parser.py +106 -0
  433. chutils-3.7.0/tests/unit/config/test_config_dev.py +194 -0
  434. chutils-3.7.0/tests/unit/config/test_config_diagnostics.py +51 -0
  435. chutils-3.7.0/tests/unit/config/test_config_env_loading.py +83 -0
  436. chutils-3.7.0/tests/unit/config/test_config_generator.py +56 -0
  437. chutils-3.7.0/tests/unit/config/test_config_integrations.py +95 -0
  438. chutils-3.7.0/tests/unit/config/test_config_json.py +106 -0
  439. chutils-3.7.0/tests/unit/config/test_config_pydantic.py +159 -0
  440. chutils-3.7.0/tests/unit/config/test_config_required.py +157 -0
  441. chutils-3.7.0/tests/unit/config/test_config_schema.py +104 -0
  442. chutils-3.7.0/tests/unit/config/test_config_sse.py +148 -0
  443. chutils-3.7.0/tests/unit/config/test_config_sse_integration.py +76 -0
  444. chutils-3.7.0/tests/unit/config/test_config_universal_env.py +55 -0
  445. chutils-3.7.0/tests/unit/config/test_config_utils.py +88 -0
  446. chutils-3.7.0/tests/unit/config/test_config_validation_group.py +57 -0
  447. chutils-3.7.0/tests/unit/config/test_config_watcher.py +158 -0
  448. chutils-3.7.0/tests/unit/config/test_config_webhook.py +139 -0
  449. chutils-3.7.0/tests/unit/config/test_custom_config_providers.py +415 -0
  450. chutils-3.7.0/tests/unit/config/test_priority_unification.py +77 -0
  451. chutils-3.7.0/tests/unit/config/test_remote_config.py +133 -0
  452. chutils-3.7.0/tests/unit/core/test_ast_indexer.py +196 -0
  453. chutils-3.7.0/tests/unit/core/test_ast_indexer_graph.py +65 -0
  454. chutils-3.7.0/tests/unit/core/test_ast_indexer_layers.py +83 -0
  455. chutils-3.7.0/tests/unit/core/test_ast_indexer_metadata.py +58 -0
  456. chutils-3.7.0/tests/unit/core/test_cache.py +283 -0
  457. chutils-3.7.0/tests/unit/core/test_dev_models.py +62 -0
  458. chutils-3.7.0/tests/unit/core/test_exceptions.py +76 -0
  459. chutils-3.7.0/tests/unit/core/test_features.py +137 -0
  460. chutils-3.7.0/tests/unit/core/test_fs.py +609 -0
  461. chutils-3.7.0/tests/unit/core/test_lifecycle.py +219 -0
  462. chutils-3.7.0/tests/unit/core/test_thread_safety.py +218 -0
  463. chutils-3.7.0/tests/unit/core/test_time.py +127 -0
  464. chutils-3.7.0/tests/unit/decorators/test_decorator_circuit_breaker.py +237 -0
  465. chutils-3.7.0/tests/unit/decorators/test_decorator_retry.py +132 -0
  466. chutils-3.7.0/tests/unit/decorators/test_decorator_timeout.py +148 -0
  467. chutils-3.7.0/tests/unit/decorators/test_rate_limit.py +148 -0
  468. chutils-3.7.0/tests/unit/dev/test_ai_lint.py +960 -0
  469. chutils-3.7.0/tests/unit/dev/test_ai_lint_staged.py +136 -0
  470. chutils-3.7.0/tests/unit/dev/test_changelog_parser.py +129 -0
  471. chutils-3.7.0/tests/unit/dev/test_chat_context.py +252 -0
  472. chutils-3.7.0/tests/unit/dev/test_cleaner.py +194 -0
  473. chutils-3.7.0/tests/unit/dev/test_context_generator.py +52 -0
  474. chutils-3.7.0/tests/unit/dev/test_env_parser.py +151 -0
  475. chutils-3.7.0/tests/unit/dev/test_generate_few_shot.py +531 -0
  476. chutils-3.7.0/tests/unit/dev/test_linter_coverage_rule.py +175 -0
  477. chutils-3.7.0/tests/unit/dev/test_mock_server.py +306 -0
  478. chutils-3.7.0/tests/unit/dev/test_runners.py +98 -0
  479. chutils-3.7.0/tests/unit/dev/test_scaffold.py +151 -0
  480. chutils-3.7.0/tests/unit/dev/test_setup_github_actions.py +76 -0
  481. chutils-3.7.0/tests/unit/dev/test_upgrade_check_rule.py +103 -0
  482. chutils-3.7.0/tests/unit/dev/test_upgrade_client.py +138 -0
  483. chutils-3.7.0/tests/unit/dev/test_version_detector.py +180 -0
  484. chutils-3.7.0/tests/unit/dev/test_watcher.py +130 -0
  485. chutils-3.7.0/tests/unit/di/test_di.py +294 -0
  486. chutils-3.7.0/tests/unit/events/test_event_bus.py +332 -0
  487. chutils-3.7.0/tests/unit/logger/conftest.py +137 -0
  488. chutils-3.7.0/tests/unit/logger/test_basics.py +92 -0
  489. chutils-3.7.0/tests/unit/logger/test_compression.py +39 -0
  490. chutils-3.7.0/tests/unit/logger/test_config_sections.py +127 -0
  491. chutils-3.7.0/tests/unit/logger/test_configuration.py +228 -0
  492. chutils-3.7.0/tests/unit/logger/test_context.py +93 -0
  493. chutils-3.7.0/tests/unit/logger/test_env_control.py +75 -0
  494. chutils-3.7.0/tests/unit/logger/test_files.py +115 -0
  495. chutils-3.7.0/tests/unit/logger/test_json_format.py +129 -0
  496. chutils-3.7.0/tests/unit/logger/test_logger_rich_width.py +30 -0
  497. chutils-3.7.0/tests/unit/logger/test_masking.py +87 -0
  498. chutils-3.7.0/tests/unit/logger/test_performance_security.py +92 -0
  499. chutils-3.7.0/tests/unit/logger/test_rich.py +105 -0
  500. chutils-3.7.0/tests/unit/logger/test_rotation.py +191 -0
  501. chutils-3.7.0/tests/unit/metrics/test_metrics.py +197 -0
  502. chutils-3.7.0/tests/unit/plugins/test_integration.py +211 -0
  503. chutils-3.7.0/tests/unit/plugins/test_interfaces.py +165 -0
  504. chutils-3.7.0/tests/unit/plugins/test_plugins.py +168 -0
  505. chutils-3.7.0/tests/unit/scraping/test_advanced_antidetect.py +137 -0
  506. chutils-3.7.0/tests/unit/scraping/test_antidetect_config.py +170 -0
  507. chutils-3.7.0/tests/unit/scraping/test_clearance_bridge.py +124 -0
  508. chutils-3.7.0/tests/unit/scraping/test_extraction_assertions.py +126 -0
  509. chutils-3.7.0/tests/unit/scraping/test_live_server_session.py +94 -0
  510. chutils-3.7.0/tests/unit/scraping/test_nodriver_launcher.py +135 -0
  511. chutils-3.7.0/tests/unit/scraping/test_profile_adapters.py +109 -0
  512. chutils-3.7.0/tests/unit/scraping/test_profile_manager.py +115 -0
  513. chutils-3.7.0/tests/unit/scraping/test_profile_storage.py +76 -0
  514. chutils-3.7.0/tests/unit/scraping/test_proxy_adapters.py +70 -0
  515. chutils-3.7.0/tests/unit/scraping/test_proxy_extension.py +74 -0
  516. chutils-3.7.0/tests/unit/scraping/test_proxy_models.py +160 -0
  517. chutils-3.7.0/tests/unit/scraping/test_proxy_tunnel.py +196 -0
  518. chutils-3.7.0/tests/unit/scraping/test_pytest_plugin.py +57 -0
  519. chutils-3.7.0/tests/unit/scraping/test_queue_metrics.py +54 -0
  520. chutils-3.7.0/tests/unit/scraping/test_scraper_mocks.py +124 -0
  521. chutils-3.7.0/tests/unit/scraping/test_scraping_proxy_pool.py +164 -0
  522. chutils-3.7.0/tests/unit/scraping/test_snapshot_recorder.py +113 -0
  523. chutils-3.7.0/tests/unit/scraping/test_turnstile_solver.py +541 -0
  524. chutils-3.7.0/tests/unit/scraping/test_worker_metrics.py +27 -0
  525. chutils-3.7.0/tests/unit/secret_manager/test_secret_manager.py +242 -0
  526. chutils-3.7.0/tests/unit/secret_manager/test_secret_manager_env.py +127 -0
  527. chutils-3.7.0/tests/unit/secret_manager/test_secret_manager_providers.py +511 -0
  528. chutils-3.7.0/tests/unit/secret_manager/test_secrets_required.py +87 -0
  529. chutils-3.7.0/tests/unit/tasks/test_scheduler.py +341 -0
  530. chutils-3.7.0/tests/unit/telegram/test_access.py +76 -0
  531. chutils-3.7.0/tests/unit/telegram/test_aiogram_filter.py +47 -0
  532. chutils-3.7.0/tests/unit/telegram/test_aiogram_middleware.py +44 -0
  533. chutils-3.7.0/tests/unit/telegram/test_formatting.py +62 -0
  534. chutils-3.7.0/tests/unit/telegram/test_keyboard.py +56 -0
  535. chutils-3.7.0/tests/unit/telegram/test_logging.py +29 -0
  536. chutils-3.7.0/tests/unit/telegram/test_notifier.py +75 -0
  537. chutils-3.7.0/tests/unit/telegram/test_telegram_rate_limit.py +54 -0
  538. chutils-3.7.0/tests/unit/telegram/test_whitelist.py +45 -0
  539. chutils-3.7.0/tests/unit/test_ai_lint_ignore.py +103 -0
  540. chutils-3.7.0/tests/unit/test_anticaptcha.py +130 -0
  541. chutils-3.7.0/tests/unit/test_antidetect.py +222 -0
  542. chutils-3.7.0/tests/unit/test_async_web_client.py +92 -0
  543. chutils-3.7.0/tests/unit/test_audit.py +399 -0
  544. chutils-3.7.0/tests/unit/test_audit_phase2.py +393 -0
  545. chutils-3.7.0/tests/unit/test_capmonster.py +92 -0
  546. chutils-3.7.0/tests/unit/test_captcha_base.py +41 -0
  547. chutils-3.7.0/tests/unit/test_captcha_imports.py +25 -0
  548. chutils-3.7.0/tests/unit/test_cli_db.py +325 -0
  549. chutils-3.7.0/tests/unit/test_concurrency_limiter.py +42 -0
  550. chutils-3.7.0/tests/unit/test_concurrency_pool.py +60 -0
  551. chutils-3.7.0/tests/unit/test_concurrency_queues.py +172 -0
  552. chutils-3.7.0/tests/unit/test_config_alias_choices.py +50 -0
  553. chutils-3.7.0/tests/unit/test_config_fallback.py +73 -0
  554. chutils-3.7.0/tests/unit/test_crypto.py +154 -0
  555. chutils-3.7.0/tests/unit/test_crypto_dependencies.py +56 -0
  556. chutils-3.7.0/tests/unit/test_crypto_stream.py +90 -0
  557. chutils-3.7.0/tests/unit/test_dashboard.py +405 -0
  558. chutils-3.7.0/tests/unit/test_db_init.py +283 -0
  559. chutils-3.7.0/tests/unit/test_db_operations.py +278 -0
  560. chutils-3.7.0/tests/unit/test_decorators_bulkhead.py +275 -0
  561. chutils-3.7.0/tests/unit/test_diagnostics.py +365 -0
  562. chutils-3.7.0/tests/unit/test_env.py +286 -0
  563. chutils-3.7.0/tests/unit/test_events_exception_group.py +46 -0
  564. chutils-3.7.0/tests/unit/test_http_api.py +221 -0
  565. chutils-3.7.0/tests/unit/test_http_client.py +365 -0
  566. chutils-3.7.0/tests/unit/test_http_fallback.py +417 -0
  567. chutils-3.7.0/tests/unit/test_http_resilience.py +343 -0
  568. chutils-3.7.0/tests/unit/test_http_streaming.py +393 -0
  569. chutils-3.7.0/tests/unit/test_http_tls_client.py +216 -0
  570. chutils-3.7.0/tests/unit/test_http_tracing.py +239 -0
  571. chutils-3.7.0/tests/unit/test_humanize_math.py +106 -0
  572. chutils-3.7.0/tests/unit/test_install_hooks.py +124 -0
  573. chutils-3.7.0/tests/unit/test_minimal_imports.py +61 -0
  574. chutils-3.7.0/tests/unit/test_nodriver_humanize.py +225 -0
  575. chutils-3.7.0/tests/unit/test_playwright_humanize.py +106 -0
  576. chutils-3.7.0/tests/unit/test_profile_imports.py +235 -0
  577. chutils-3.7.0/tests/unit/test_profile_warmer.py +380 -0
  578. chutils-3.7.0/tests/unit/test_proxy_pool.py +87 -0
  579. chutils-3.7.0/tests/unit/test_qt_asyncio.py +109 -0
  580. chutils-3.7.0/tests/unit/test_qt_logging.py +135 -0
  581. chutils-3.7.0/tests/unit/test_qt_shim.py +75 -0
  582. chutils-3.7.0/tests/unit/test_qt_signals.py +118 -0
  583. chutils-3.7.0/tests/unit/test_qt_widgets.py +132 -0
  584. chutils-3.7.0/tests/unit/test_rucaptcha.py +121 -0
  585. chutils-3.7.0/tests/unit/test_scraping_imports.py +42 -0
  586. chutils-3.7.0/tests/unit/test_selenium_humanize.py +134 -0
  587. chutils-3.7.0/tests/unit/test_store_backends_external.py +131 -0
  588. chutils-3.7.0/tests/unit/test_store_integrations.py +89 -0
  589. chutils-3.7.0/tests/unit/test_store_manager.py +76 -0
  590. chutils-3.7.0/tests/unit/test_store_memory.py +81 -0
  591. chutils-3.7.0/tests/unit/test_telegram_media.py +83 -0
  592. chutils-3.7.0/tests/unit/test_text.py +81 -0
  593. chutils-3.7.0/tests/unit/test_text_dependencies.py +23 -0
  594. chutils-3.7.0/tests/unit/test_validation.py +286 -0
  595. chutils-3.7.0/tests/unit/test_vk_callback_fastapi.py +61 -0
  596. chutils-3.7.0/tests/unit/test_vk_callback_router.py +47 -0
  597. chutils-3.7.0/tests/unit/test_vk_testing_fixtures.py +29 -0
  598. chutils-3.7.0/tests/unit/test_vk_testing_generators.py +57 -0
  599. chutils-3.7.0/tests/unit/test_vkma_core.py +120 -0
  600. chutils-3.7.0/tests/unit/test_vkma_integrations.py +133 -0
  601. chutils-3.7.0/tests/unit/test_web_client.py +85 -0
  602. chutils-3.7.0/tests/unit/testing/test_fixtures.py +88 -0
  603. chutils-3.7.0/uv.lock +4248 -0
  604. chutils-3.5.0/.github/workflows/ci.yml +0 -45
  605. chutils-3.5.0/PKG-INFO +0 -552
  606. chutils-3.5.0/README.md +0 -467
  607. chutils-3.5.0/ai-lint.toml +0 -192
  608. chutils-3.5.0/api_map.md +0 -268
  609. chutils-3.5.0/benchmarks/cold_start.py +0 -70
  610. chutils-3.5.0/conductor/product.md +0 -251
  611. chutils-3.5.0/conductor/tech-stack.md +0 -166
  612. chutils-3.5.0/conductor/tracks.md +0 -31
  613. chutils-3.5.0/docs/README_RU.md +0 -478
  614. chutils-3.5.0/docs/ai_examples/configuration/bad_pattern.py +0 -20
  615. chutils-3.5.0/docs/ai_examples/error_handling/good_pattern.py +0 -91
  616. chutils-3.5.0/docs/ai_examples/logging/bad_pattern.py +0 -25
  617. chutils-3.5.0/docs/ai_examples/logging/good_pattern.py +0 -38
  618. chutils-3.5.0/docs/ai_examples/optional_deps/bad_pattern.py +0 -46
  619. chutils-3.5.0/docs/ai_examples/optional_deps/good_pattern.py +0 -65
  620. chutils-3.5.0/docs/ai_lint.md +0 -490
  621. chutils-3.5.0/docs/api.md +0 -455
  622. chutils-3.5.0/docs/audit.md +0 -119
  623. chutils-3.5.0/docs/captcha.md +0 -112
  624. chutils-3.5.0/docs/cli/check.md +0 -97
  625. chutils-3.5.0/docs/custom_config_providers.md +0 -297
  626. chutils-3.5.0/docs/dependencies.md +0 -119
  627. chutils-3.5.0/docs/http.md +0 -154
  628. chutils-3.5.0/docs/migration.md +0 -237
  629. chutils-3.5.0/docs/plugins.md +0 -191
  630. chutils-3.5.0/docs/recipes.md +0 -1588
  631. chutils-3.5.0/docs/scraping.md +0 -305
  632. chutils-3.5.0/docs/store.md +0 -98
  633. chutils-3.5.0/docs/telegram.md +0 -323
  634. chutils-3.5.0/docs/testing.md +0 -102
  635. chutils-3.5.0/docs/vk_bot.md +0 -43
  636. chutils-3.5.0/docs/vk_testing.md +0 -17
  637. chutils-3.5.0/docs/vkma.md +0 -129
  638. chutils-3.5.0/docs/web.md +0 -126
  639. chutils-3.5.0/examples/01_configuration.py +0 -50
  640. chutils-3.5.0/examples/02_logging.py +0 -46
  641. chutils-3.5.0/examples/03_secrets.py +0 -74
  642. chutils-3.5.0/examples/04_full_example.py +0 -66
  643. chutils-3.5.0/examples/05_different_log_levels.py +0 -50
  644. chutils-3.5.0/examples/06_local_config_override.py +0 -75
  645. chutils-3.5.0/examples/07_decorators_example.py +0 -41
  646. chutils-3.5.0/examples/08_multiple_loggers_example.py +0 -34
  647. chutils-3.5.0/examples/09_disable_keyring.py +0 -42
  648. chutils-3.5.0/examples/10_universal_env_override.py +0 -43
  649. chutils-3.5.0/examples/11_retry_decorator.py +0 -57
  650. chutils-3.5.0/examples/12_secret_masking.py +0 -51
  651. chutils-3.5.0/examples/13_pydantic_validation.py +0 -85
  652. chutils-3.5.0/examples/15_context_logging.py +0 -90
  653. chutils-3.5.0/examples/17_timeout_decorator.py +0 -62
  654. chutils-3.5.0/examples/18_config_hot_reload.py +0 -97
  655. chutils-3.5.0/examples/19_remote_config.py +0 -95
  656. chutils-3.5.0/examples/20_opentelemetry_tracing.py +0 -49
  657. chutils-3.5.0/examples/21_config_diagnostics.py +0 -45
  658. chutils-3.5.0/examples/22_qt_logging.py +0 -41
  659. chutils-3.5.0/examples/22_safe_path_resolution.py +0 -88
  660. chutils-3.5.0/examples/23_event_bus.py +0 -121
  661. chutils-3.5.0/examples/23_qt_async.py +0 -58
  662. chutils-3.5.0/examples/24_qt_typed_signals.py +0 -73
  663. chutils-3.5.0/examples/24_task_scheduler.py +0 -61
  664. chutils-3.5.0/examples/25_testing_fixtures_example.py +0 -85
  665. chutils-3.5.0/examples/26_metrics_prometheus.py +0 -69
  666. chutils-3.5.0/examples/27_rate_limiting.py +0 -77
  667. chutils-3.5.0/examples/28_dependency_injection.py +0 -78
  668. chutils-3.5.0/examples/captcha_solvers_usage.py +0 -67
  669. chutils-3.5.0/examples/concurrency_scraping_usage.py +0 -50
  670. chutils-3.5.0/examples/config.yml +0 -63
  671. chutils-3.5.0/examples/scraping_humanize_usage.py +0 -67
  672. chutils-3.5.0/examples/web_client_usage.py +0 -86
  673. chutils-3.5.0/mkdocs.yml +0 -58
  674. chutils-3.5.0/project_index.json +0 -39379
  675. chutils-3.5.0/pyproject.toml +0 -162
  676. chutils-3.5.0/src/chutils/__init__.py +0 -435
  677. chutils-3.5.0/src/chutils/__init__.pyi +0 -1222
  678. chutils-3.5.0/src/chutils/audit/__init__.py +0 -44
  679. chutils-3.5.0/src/chutils/audit/_hash.py +0 -22
  680. chutils-3.5.0/src/chutils/audit/api.py +0 -194
  681. chutils-3.5.0/src/chutils/audit/backends/__init__.py +0 -6
  682. chutils-3.5.0/src/chutils/audit/backends/base.py +0 -46
  683. chutils-3.5.0/src/chutils/audit/backends/file.py +0 -123
  684. chutils-3.5.0/src/chutils/audit/backends/postgres.py +0 -256
  685. chutils-3.5.0/src/chutils/audit/backends/sqlite.py +0 -200
  686. chutils-3.5.0/src/chutils/audit/schema.py +0 -116
  687. chutils-3.5.0/src/chutils/cache/__init__.py +0 -5
  688. chutils-3.5.0/src/chutils/cache/base.py +0 -143
  689. chutils-3.5.0/src/chutils/cache/decorator.py +0 -165
  690. chutils-3.5.0/src/chutils/cache/utils.py +0 -75
  691. chutils-3.5.0/src/chutils/cli.py +0 -127
  692. chutils-3.5.0/src/chutils/cli_booster.py +0 -161
  693. chutils-3.5.0/src/chutils/cli_utils.py +0 -179
  694. chutils-3.5.0/src/chutils/commands/__init__.py +0 -37
  695. chutils-3.5.0/src/chutils/commands/base.py +0 -43
  696. chutils-3.5.0/src/chutils/commands/check.py +0 -238
  697. chutils-3.5.0/src/chutils/commands/config.py +0 -227
  698. chutils-3.5.0/src/chutils/commands/db.py +0 -496
  699. chutils-3.5.0/src/chutils/commands/dev/__init__.py +0 -765
  700. chutils-3.5.0/src/chutils/commands/dev/ai_lint.py +0 -138
  701. chutils-3.5.0/src/chutils/commands/dev/base.py +0 -40
  702. chutils-3.5.0/src/chutils/commands/dev/chat_context.py +0 -100
  703. chutils-3.5.0/src/chutils/commands/dev/clean.py +0 -128
  704. chutils-3.5.0/src/chutils/commands/dev/dashboard.py +0 -40
  705. chutils-3.5.0/src/chutils/commands/dev/diagnostics.py +0 -113
  706. chutils-3.5.0/src/chutils/commands/dev/few_shot.py +0 -55
  707. chutils-3.5.0/src/chutils/commands/dev/generate_context.py +0 -576
  708. chutils-3.5.0/src/chutils/commands/dev/hooks.py +0 -209
  709. chutils-3.5.0/src/chutils/commands/dev/lock.py +0 -129
  710. chutils-3.5.0/src/chutils/commands/dev/mock.py +0 -87
  711. chutils-3.5.0/src/chutils/commands/dev/profile_imports.py +0 -47
  712. chutils-3.5.0/src/chutils/commands/dev/scaffold.py +0 -72
  713. chutils-3.5.0/src/chutils/commands/dev/setup_github_actions.py +0 -147
  714. chutils-3.5.0/src/chutils/commands/dev/sync_env.py +0 -177
  715. chutils-3.5.0/src/chutils/commands/dev/watch.py +0 -105
  716. chutils-3.5.0/src/chutils/commands/env.py +0 -191
  717. chutils-3.5.0/src/chutils/commands/init.py +0 -378
  718. chutils-3.5.0/src/chutils/commands/paths.py +0 -89
  719. chutils-3.5.0/src/chutils/commands/pypi.py +0 -426
  720. chutils-3.5.0/src/chutils/commands/secrets.py +0 -219
  721. chutils-3.5.0/src/chutils/commands/template.py +0 -118
  722. chutils-3.5.0/src/chutils/commands/utils.py +0 -41
  723. chutils-3.5.0/src/chutils/commands/validate.py +0 -112
  724. chutils-3.5.0/src/chutils/config/__init__.py +0 -310
  725. chutils-3.5.0/src/chutils/config/ast_fallback_parser.py +0 -147
  726. chutils-3.5.0/src/chutils/config/core.py +0 -510
  727. chutils-3.5.0/src/chutils/config/custom_providers.py +0 -290
  728. chutils-3.5.0/src/chutils/config/dev.py +0 -420
  729. chutils-3.5.0/src/chutils/config/diagnostics.py +0 -151
  730. chutils-3.5.0/src/chutils/config/generator.py +0 -154
  731. chutils-3.5.0/src/chutils/config/getters.py +0 -522
  732. chutils-3.5.0/src/chutils/config/integrations.py +0 -124
  733. chutils-3.5.0/src/chutils/config/manager.py +0 -665
  734. chutils-3.5.0/src/chutils/config/providers.py +0 -578
  735. chutils-3.5.0/src/chutils/config/schema.py +0 -125
  736. chutils-3.5.0/src/chutils/config/sse.py +0 -258
  737. chutils-3.5.0/src/chutils/config/utils.py +0 -357
  738. chutils-3.5.0/src/chutils/config/watcher.py +0 -158
  739. chutils-3.5.0/src/chutils/config/webhook_server.py +0 -217
  740. chutils-3.5.0/src/chutils/context.py +0 -101
  741. chutils-3.5.0/src/chutils/crypto.py +0 -384
  742. chutils-3.5.0/src/chutils/db.py +0 -265
  743. chutils-3.5.0/src/chutils/decorators.py +0 -918
  744. chutils-3.5.0/src/chutils/dev/__init__.py +0 -37
  745. chutils-3.5.0/src/chutils/dev/ai_lint.py +0 -590
  746. chutils-3.5.0/src/chutils/dev/ast_indexer.py +0 -434
  747. chutils-3.5.0/src/chutils/dev/changelog_parser.py +0 -196
  748. chutils-3.5.0/src/chutils/dev/chat_context.py +0 -441
  749. chutils-3.5.0/src/chutils/dev/cleaner.py +0 -221
  750. chutils-3.5.0/src/chutils/dev/constants.py +0 -13
  751. chutils-3.5.0/src/chutils/dev/context/gitignore.py +0 -151
  752. chutils-3.5.0/src/chutils/dev/context/incremental.py +0 -126
  753. chutils-3.5.0/src/chutils/dev/dashboard/__init__.py +0 -20
  754. chutils-3.5.0/src/chutils/dev/dashboard/indexer.py +0 -218
  755. chutils-3.5.0/src/chutils/dev/dashboard/input.py +0 -146
  756. chutils-3.5.0/src/chutils/dev/dashboard/tui.py +0 -593
  757. chutils-3.5.0/src/chutils/dev/env_parser.py +0 -227
  758. chutils-3.5.0/src/chutils/dev/env_sync.py +0 -113
  759. chutils-3.5.0/src/chutils/dev/few_shot/__init__.py +0 -113
  760. chutils-3.5.0/src/chutils/dev/few_shot/detector.py +0 -225
  761. chutils-3.5.0/src/chutils/dev/few_shot/renderer.py +0 -455
  762. chutils-3.5.0/src/chutils/dev/few_shot/writer.py +0 -307
  763. chutils-3.5.0/src/chutils/dev/github_actions.py +0 -91
  764. chutils-3.5.0/src/chutils/dev/mock_server.py +0 -506
  765. chutils-3.5.0/src/chutils/dev/models/__init__.py +0 -17
  766. chutils-3.5.0/src/chutils/dev/models/base.py +0 -35
  767. chutils-3.5.0/src/chutils/dev/models/index.py +0 -34
  768. chutils-3.5.0/src/chutils/dev/models/node.py +0 -19
  769. chutils-3.5.0/src/chutils/dev/models/symbol.py +0 -21
  770. chutils-3.5.0/src/chutils/dev/profile_imports.py +0 -355
  771. chutils-3.5.0/src/chutils/dev/project_metadata.py +0 -262
  772. chutils-3.5.0/src/chutils/dev/rules/__init__.py +0 -24
  773. chutils-3.5.0/src/chutils/dev/rules/api_map.py +0 -456
  774. chutils-3.5.0/src/chutils/dev/rules/decomposition.py +0 -153
  775. chutils-3.5.0/src/chutils/dev/rules/dependency_sync.py +0 -248
  776. chutils-3.5.0/src/chutils/dev/rules/docstring.py +0 -292
  777. chutils-3.5.0/src/chutils/dev/rules/env.py +0 -111
  778. chutils-3.5.0/src/chutils/dev/rules/integration.py +0 -281
  779. chutils-3.5.0/src/chutils/dev/rules/linter_coverage.py +0 -182
  780. chutils-3.5.0/src/chutils/dev/rules/manifest.py +0 -74
  781. chutils-3.5.0/src/chutils/dev/rules/security.py +0 -99
  782. chutils-3.5.0/src/chutils/dev/rules/upgrade_check.py +0 -148
  783. chutils-3.5.0/src/chutils/dev/runners.py +0 -202
  784. chutils-3.5.0/src/chutils/dev/scaffold.py +0 -424
  785. chutils-3.5.0/src/chutils/dev/upgrade_client.py +0 -150
  786. chutils-3.5.0/src/chutils/dev/version_detector.py +0 -348
  787. chutils-3.5.0/src/chutils/dev/watcher.py +0 -424
  788. chutils-3.5.0/src/chutils/di/__init__.py +0 -9
  789. chutils-3.5.0/src/chutils/di/__init__.pyi +0 -39
  790. chutils-3.5.0/src/chutils/di/container.py +0 -386
  791. chutils-3.5.0/src/chutils/diagnostics/__init__.py +0 -24
  792. chutils-3.5.0/src/chutils/diagnostics/manager.py +0 -254
  793. chutils-3.5.0/src/chutils/diagnostics/models.py +0 -98
  794. chutils-3.5.0/src/chutils/diagnostics/web.py +0 -79
  795. chutils-3.5.0/src/chutils/env.py +0 -194
  796. chutils-3.5.0/src/chutils/env.pyi +0 -34
  797. chutils-3.5.0/src/chutils/events/__init__.py +0 -22
  798. chutils-3.5.0/src/chutils/events/core.py +0 -264
  799. chutils-3.5.0/src/chutils/exceptions/__init__.py +0 -85
  800. chutils-3.5.0/src/chutils/exceptions/audit.py +0 -15
  801. chutils-3.5.0/src/chutils/exceptions/base.py +0 -66
  802. chutils-3.5.0/src/chutils/exceptions/cache.py +0 -7
  803. chutils-3.5.0/src/chutils/exceptions/config.py +0 -52
  804. chutils-3.5.0/src/chutils/exceptions/di.py +0 -19
  805. chutils-3.5.0/src/chutils/exceptions/events.py +0 -34
  806. chutils-3.5.0/src/chutils/exceptions/logger.py +0 -7
  807. chutils-3.5.0/src/chutils/exceptions/resilience.py +0 -25
  808. chutils-3.5.0/src/chutils/exceptions/secrets.py +0 -19
  809. chutils-3.5.0/src/chutils/exceptions/system.py +0 -44
  810. chutils-3.5.0/src/chutils/exceptions/telegram.py +0 -17
  811. chutils-3.5.0/src/chutils/exceptions/validation.py +0 -148
  812. chutils-3.5.0/src/chutils/exceptions/vkma.py +0 -13
  813. chutils-3.5.0/src/chutils/exceptions/watcher.py +0 -7
  814. chutils-3.5.0/src/chutils/features.py +0 -192
  815. chutils-3.5.0/src/chutils/fs.py +0 -462
  816. chutils-3.5.0/src/chutils/http/__init__.py +0 -63
  817. chutils-3.5.0/src/chutils/http/api.py +0 -167
  818. chutils-3.5.0/src/chutils/http/client.py +0 -678
  819. chutils-3.5.0/src/chutils/http/fallback.py +0 -455
  820. chutils-3.5.0/src/chutils/http/resilience.py +0 -402
  821. chutils-3.5.0/src/chutils/http/streaming.py +0 -529
  822. chutils-3.5.0/src/chutils/http/tracing.py +0 -139
  823. chutils-3.5.0/src/chutils/lifecycle.py +0 -346
  824. chutils-3.5.0/src/chutils/logger/__init__.py +0 -67
  825. chutils-3.5.0/src/chutils/logger/core.py +0 -227
  826. chutils-3.5.0/src/chutils/logger/formatters.py +0 -93
  827. chutils-3.5.0/src/chutils/logger/handlers.py +0 -124
  828. chutils-3.5.0/src/chutils/logger/internal/builder.py +0 -442
  829. chutils-3.5.0/src/chutils/logger/internal/levels.py +0 -66
  830. chutils-3.5.0/src/chutils/logger/internal/utils.py +0 -64
  831. chutils-3.5.0/src/chutils/logger/masking.py +0 -171
  832. chutils-3.5.0/src/chutils/metrics/__init__.py +0 -152
  833. chutils-3.5.0/src/chutils/metrics/base.py +0 -56
  834. chutils-3.5.0/src/chutils/metrics/in_memory.py +0 -171
  835. chutils-3.5.0/src/chutils/metrics/prometheus.py +0 -111
  836. chutils-3.5.0/src/chutils/metrics/timer.py +0 -94
  837. chutils-3.5.0/src/chutils/plugins/__init__.py +0 -28
  838. chutils-3.5.0/src/chutils/plugins/core.py +0 -184
  839. chutils-3.5.0/src/chutils/plugins/interfaces.py +0 -165
  840. chutils-3.5.0/src/chutils/qt/__init__.py +0 -49
  841. chutils-3.5.0/src/chutils/qt/asyncio.py +0 -145
  842. chutils-3.5.0/src/chutils/qt/logging.py +0 -87
  843. chutils-3.5.0/src/chutils/qt/shim.py +0 -91
  844. chutils-3.5.0/src/chutils/qt/signals.py +0 -185
  845. chutils-3.5.0/src/chutils/scaffold.py +0 -53
  846. chutils-3.5.0/src/chutils/scraping/__init__.py +0 -33
  847. chutils-3.5.0/src/chutils/scraping/captcha/__init__.py +0 -59
  848. chutils-3.5.0/src/chutils/scraping/captcha/anticaptcha.py +0 -281
  849. chutils-3.5.0/src/chutils/scraping/captcha/base.py +0 -71
  850. chutils-3.5.0/src/chutils/scraping/captcha/capmonster.py +0 -281
  851. chutils-3.5.0/src/chutils/scraping/captcha/exceptions.py +0 -21
  852. chutils-3.5.0/src/chutils/scraping/captcha/rucaptcha.py +0 -299
  853. chutils-3.5.0/src/chutils/scraping/concurrency/__init__.py +0 -19
  854. chutils-3.5.0/src/chutils/scraping/concurrency/limiter.py +0 -114
  855. chutils-3.5.0/src/chutils/scraping/concurrency/metrics.py +0 -65
  856. chutils-3.5.0/src/chutils/scraping/concurrency/pool.py +0 -143
  857. chutils-3.5.0/src/chutils/scraping/concurrency/queues.py +0 -408
  858. chutils-3.5.0/src/chutils/scraping/humanize/__init__.py +0 -38
  859. chutils-3.5.0/src/chutils/scraping/humanize/actions.py +0 -438
  860. chutils-3.5.0/src/chutils/scraping/humanize/antidetect.py +0 -221
  861. chutils-3.5.0/src/chutils/scraping/humanize/math_utils.py +0 -223
  862. chutils-3.5.0/src/chutils/scraping/humanize/warmer.py +0 -204
  863. chutils-3.5.0/src/chutils/scraping/profiles/adapters/nodriver.py +0 -98
  864. chutils-3.5.0/src/chutils/scraping/profiles/adapters/playwright.py +0 -104
  865. chutils-3.5.0/src/chutils/scraping/profiles/adapters/selenium.py +0 -85
  866. chutils-3.5.0/src/chutils/scraping/profiles/manager.py +0 -128
  867. chutils-3.5.0/src/chutils/scraping/profiles/models.py +0 -45
  868. chutils-3.5.0/src/chutils/scraping/profiles/storage.py +0 -82
  869. chutils-3.5.0/src/chutils/secret_manager/__init__.py +0 -10
  870. chutils-3.5.0/src/chutils/secret_manager/core.py +0 -290
  871. chutils-3.5.0/src/chutils/secret_manager/providers/__init__.py +0 -47
  872. chutils-3.5.0/src/chutils/secret_manager/providers/aws.py +0 -134
  873. chutils-3.5.0/src/chutils/secret_manager/providers/base.py +0 -51
  874. chutils-3.5.0/src/chutils/secret_manager/providers/dotenv.py +0 -91
  875. chutils-3.5.0/src/chutils/secret_manager/providers/gcp.py +0 -170
  876. chutils-3.5.0/src/chutils/secret_manager/providers/keyring_provider.py +0 -124
  877. chutils-3.5.0/src/chutils/store/__init__.py +0 -10
  878. chutils-3.5.0/src/chutils/store/backends/__init__.py +0 -11
  879. chutils-3.5.0/src/chutils/store/backends/base.py +0 -131
  880. chutils-3.5.0/src/chutils/store/backends/memcached.py +0 -211
  881. chutils-3.5.0/src/chutils/store/backends/memory.py +0 -156
  882. chutils-3.5.0/src/chutils/store/backends/redis.py +0 -192
  883. chutils-3.5.0/src/chutils/store/decorator.py +0 -85
  884. chutils-3.5.0/src/chutils/store/manager.py +0 -351
  885. chutils-3.5.0/src/chutils/tasks/__init__.py +0 -22
  886. chutils-3.5.0/src/chutils/tasks/__init__.pyi +0 -49
  887. chutils-3.5.0/src/chutils/tasks/core.py +0 -325
  888. chutils-3.5.0/src/chutils/telegram/__init__.py +0 -37
  889. chutils-3.5.0/src/chutils/telegram/access.py +0 -173
  890. chutils-3.5.0/src/chutils/telegram/aiogram.py +0 -191
  891. chutils-3.5.0/src/chutils/telegram/formatting.py +0 -165
  892. chutils-3.5.0/src/chutils/telegram/keyboard.py +0 -193
  893. chutils-3.5.0/src/chutils/telegram/logging.py +0 -97
  894. chutils-3.5.0/src/chutils/telegram/media.py +0 -211
  895. chutils-3.5.0/src/chutils/telegram/notifier.py +0 -204
  896. chutils-3.5.0/src/chutils/telegram/rate_limit.py +0 -166
  897. chutils-3.5.0/src/chutils/telegram/whitelist.py +0 -266
  898. chutils-3.5.0/src/chutils/templates/vk/vk-miniapp/backend/main.py.template +0 -42
  899. chutils-3.5.0/src/chutils/testing/__init__.py +0 -11
  900. chutils-3.5.0/src/chutils/testing/fixtures.py +0 -208
  901. chutils-3.5.0/src/chutils/text.py +0 -59
  902. chutils-3.5.0/src/chutils/time.py +0 -215
  903. chutils-3.5.0/src/chutils/tracing.py +0 -196
  904. chutils-3.5.0/src/chutils/typing.py +0 -62
  905. chutils-3.5.0/src/chutils/validation.py +0 -143
  906. chutils-3.5.0/src/chutils/validation.pyi +0 -13
  907. chutils-3.5.0/src/chutils/vk/__init__.py +0 -8
  908. chutils-3.5.0/src/chutils/vk/callback/__init__.py +0 -8
  909. chutils-3.5.0/src/chutils/vk/callback/router.py +0 -211
  910. chutils-3.5.0/src/chutils/vk/testing/__init__.py +0 -16
  911. chutils-3.5.0/src/chutils/vk/testing/fixtures.py +0 -107
  912. chutils-3.5.0/src/chutils/vk/testing/generators.py +0 -121
  913. chutils-3.5.0/src/chutils/vkma/__init__.py +0 -14
  914. chutils-3.5.0/src/chutils/vkma/integrations/__init__.py +0 -12
  915. chutils-3.5.0/src/chutils/vkma/integrations/aiohttp.py +0 -65
  916. chutils-3.5.0/src/chutils/vkma/integrations/fastapi.py +0 -124
  917. chutils-3.5.0/src/chutils/vkma/integrations/flask.py +0 -62
  918. chutils-3.5.0/src/chutils/vkma/models.py +0 -60
  919. chutils-3.5.0/src/chutils/vkma/testing.py +0 -17
  920. chutils-3.5.0/src/chutils/vkma/validator.py +0 -167
  921. chutils-3.5.0/src/chutils/web/__init__.py +0 -17
  922. chutils-3.5.0/src/chutils/web/client.py +0 -416
  923. chutils-3.5.0/src/chutils/web/proxy_pool.py +0 -174
  924. chutils-3.5.0/src/chutils/web/user_agent.py +0 -61
  925. chutils-3.5.0/tests/conftest.py +0 -54
  926. chutils-3.5.0/tests/integration/test_ai_lint_integration.py +0 -58
  927. chutils-3.5.0/tests/integration/test_cli_e2e.py +0 -35
  928. chutils-3.5.0/tests/integration/test_db_migrations.py +0 -351
  929. chutils-3.5.0/tests/integration/test_event_loops.py +0 -110
  930. chutils-3.5.0/tests/integration/test_examples.py +0 -159
  931. chutils-3.5.0/tests/integration/test_hooks_integration.py +0 -41
  932. chutils-3.5.0/tests/integration/test_masking_integration.py +0 -61
  933. chutils-3.5.0/tests/integration/test_otel_tracing.py +0 -159
  934. chutils-3.5.0/tests/integration/test_remote_config_integration.py +0 -49
  935. chutils-3.5.0/tests/integration/test_setup_github_actions_integration.py +0 -35
  936. chutils-3.5.0/tests/manual/manual_test_cli_booster.py +0 -23
  937. chutils-3.5.0/tests/unit/cli/conftest.py +0 -69
  938. chutils-3.5.0/tests/unit/cli/test_cli.py +0 -229
  939. chutils-3.5.0/tests/unit/cli/test_cli_booster.py +0 -105
  940. chutils-3.5.0/tests/unit/cli/test_cli_check.py +0 -60
  941. chutils-3.5.0/tests/unit/cli/test_cli_config.py +0 -81
  942. chutils-3.5.0/tests/unit/cli/test_cli_config_cmd.py +0 -91
  943. chutils-3.5.0/tests/unit/cli/test_cli_config_schema.py +0 -77
  944. chutils-3.5.0/tests/unit/cli/test_cli_dev.py +0 -84
  945. chutils-3.5.0/tests/unit/cli/test_cli_dev_cmd.py +0 -507
  946. chutils-3.5.0/tests/unit/cli/test_cli_dev_lock.py +0 -67
  947. chutils-3.5.0/tests/unit/cli/test_cli_dev_tree.py +0 -41
  948. chutils-3.5.0/tests/unit/cli/test_cli_dev_watch.py +0 -118
  949. chutils-3.5.0/tests/unit/cli/test_cli_diagnostics.py +0 -139
  950. chutils-3.5.0/tests/unit/cli/test_cli_extras_suggestion.py +0 -31
  951. chutils-3.5.0/tests/unit/cli/test_cli_init.py +0 -99
  952. chutils-3.5.0/tests/unit/cli/test_cli_init_interactive.py +0 -76
  953. chutils-3.5.0/tests/unit/cli/test_cli_paths.py +0 -46
  954. chutils-3.5.0/tests/unit/cli/test_cli_pypi.py +0 -426
  955. chutils-3.5.0/tests/unit/cli/test_cli_rich.py +0 -54
  956. chutils-3.5.0/tests/unit/cli/test_cli_rich_width.py +0 -50
  957. chutils-3.5.0/tests/unit/cli/test_cli_secrets.py +0 -125
  958. chutils-3.5.0/tests/unit/cli/test_cli_setup_github_actions.py +0 -92
  959. chutils-3.5.0/tests/unit/cli/test_cli_template.py +0 -81
  960. chutils-3.5.0/tests/unit/cli/test_cli_utils_internal.py +0 -65
  961. chutils-3.5.0/tests/unit/cli/test_cli_validate.py +0 -99
  962. chutils-3.5.0/tests/unit/config/test_config.py +0 -502
  963. chutils-3.5.0/tests/unit/config/test_config_ast_parser.py +0 -106
  964. chutils-3.5.0/tests/unit/config/test_config_dev.py +0 -187
  965. chutils-3.5.0/tests/unit/config/test_config_diagnostics.py +0 -52
  966. chutils-3.5.0/tests/unit/config/test_config_env_loading.py +0 -80
  967. chutils-3.5.0/tests/unit/config/test_config_generator.py +0 -55
  968. chutils-3.5.0/tests/unit/config/test_config_integrations.py +0 -95
  969. chutils-3.5.0/tests/unit/config/test_config_json.py +0 -95
  970. chutils-3.5.0/tests/unit/config/test_config_pydantic.py +0 -155
  971. chutils-3.5.0/tests/unit/config/test_config_required.py +0 -145
  972. chutils-3.5.0/tests/unit/config/test_config_schema.py +0 -101
  973. chutils-3.5.0/tests/unit/config/test_config_sse.py +0 -155
  974. chutils-3.5.0/tests/unit/config/test_config_sse_integration.py +0 -79
  975. chutils-3.5.0/tests/unit/config/test_config_universal_env.py +0 -53
  976. chutils-3.5.0/tests/unit/config/test_config_utils.py +0 -40
  977. chutils-3.5.0/tests/unit/config/test_config_validation_group.py +0 -53
  978. chutils-3.5.0/tests/unit/config/test_config_watcher.py +0 -157
  979. chutils-3.5.0/tests/unit/config/test_config_webhook.py +0 -137
  980. chutils-3.5.0/tests/unit/config/test_custom_config_providers.py +0 -401
  981. chutils-3.5.0/tests/unit/config/test_priority_unification.py +0 -72
  982. chutils-3.5.0/tests/unit/config/test_remote_config.py +0 -130
  983. chutils-3.5.0/tests/unit/core/test_ast_indexer.py +0 -190
  984. chutils-3.5.0/tests/unit/core/test_ast_indexer_graph.py +0 -54
  985. chutils-3.5.0/tests/unit/core/test_ast_indexer_layers.py +0 -79
  986. chutils-3.5.0/tests/unit/core/test_ast_indexer_metadata.py +0 -58
  987. chutils-3.5.0/tests/unit/core/test_cache.py +0 -284
  988. chutils-3.5.0/tests/unit/core/test_dev_models.py +0 -62
  989. chutils-3.5.0/tests/unit/core/test_exceptions.py +0 -74
  990. chutils-3.5.0/tests/unit/core/test_features.py +0 -150
  991. chutils-3.5.0/tests/unit/core/test_fs.py +0 -584
  992. chutils-3.5.0/tests/unit/core/test_lifecycle.py +0 -194
  993. chutils-3.5.0/tests/unit/core/test_thread_safety.py +0 -217
  994. chutils-3.5.0/tests/unit/core/test_time.py +0 -110
  995. chutils-3.5.0/tests/unit/decorators/test_decorator_circuit_breaker.py +0 -238
  996. chutils-3.5.0/tests/unit/decorators/test_decorator_retry.py +0 -129
  997. chutils-3.5.0/tests/unit/decorators/test_decorator_timeout.py +0 -146
  998. chutils-3.5.0/tests/unit/decorators/test_rate_limit.py +0 -148
  999. chutils-3.5.0/tests/unit/dev/test_ai_lint.py +0 -944
  1000. chutils-3.5.0/tests/unit/dev/test_ai_lint_staged.py +0 -129
  1001. chutils-3.5.0/tests/unit/dev/test_changelog_parser.py +0 -128
  1002. chutils-3.5.0/tests/unit/dev/test_chat_context.py +0 -252
  1003. chutils-3.5.0/tests/unit/dev/test_cleaner.py +0 -188
  1004. chutils-3.5.0/tests/unit/dev/test_context_generator.py +0 -46
  1005. chutils-3.5.0/tests/unit/dev/test_env_parser.py +0 -152
  1006. chutils-3.5.0/tests/unit/dev/test_generate_few_shot.py +0 -511
  1007. chutils-3.5.0/tests/unit/dev/test_linter_coverage_rule.py +0 -194
  1008. chutils-3.5.0/tests/unit/dev/test_mock_server.py +0 -298
  1009. chutils-3.5.0/tests/unit/dev/test_runners.py +0 -101
  1010. chutils-3.5.0/tests/unit/dev/test_scaffold.py +0 -139
  1011. chutils-3.5.0/tests/unit/dev/test_setup_github_actions.py +0 -75
  1012. chutils-3.5.0/tests/unit/dev/test_upgrade_check_rule.py +0 -101
  1013. chutils-3.5.0/tests/unit/dev/test_upgrade_client.py +0 -125
  1014. chutils-3.5.0/tests/unit/dev/test_version_detector.py +0 -175
  1015. chutils-3.5.0/tests/unit/dev/test_watcher.py +0 -135
  1016. chutils-3.5.0/tests/unit/di/test_di.py +0 -293
  1017. chutils-3.5.0/tests/unit/events/test_event_bus.py +0 -315
  1018. chutils-3.5.0/tests/unit/logger/conftest.py +0 -129
  1019. chutils-3.5.0/tests/unit/logger/test_basics.py +0 -92
  1020. chutils-3.5.0/tests/unit/logger/test_compression.py +0 -39
  1021. chutils-3.5.0/tests/unit/logger/test_config_sections.py +0 -115
  1022. chutils-3.5.0/tests/unit/logger/test_configuration.py +0 -120
  1023. chutils-3.5.0/tests/unit/logger/test_context.py +0 -90
  1024. chutils-3.5.0/tests/unit/logger/test_env_control.py +0 -75
  1025. chutils-3.5.0/tests/unit/logger/test_files.py +0 -101
  1026. chutils-3.5.0/tests/unit/logger/test_json_format.py +0 -122
  1027. chutils-3.5.0/tests/unit/logger/test_logger_rich_width.py +0 -30
  1028. chutils-3.5.0/tests/unit/logger/test_masking.py +0 -78
  1029. chutils-3.5.0/tests/unit/logger/test_performance_security.py +0 -86
  1030. chutils-3.5.0/tests/unit/logger/test_rich.py +0 -99
  1031. chutils-3.5.0/tests/unit/logger/test_rotation.py +0 -169
  1032. chutils-3.5.0/tests/unit/metrics/test_metrics.py +0 -185
  1033. chutils-3.5.0/tests/unit/plugins/test_integration.py +0 -198
  1034. chutils-3.5.0/tests/unit/plugins/test_interfaces.py +0 -109
  1035. chutils-3.5.0/tests/unit/plugins/test_plugins.py +0 -158
  1036. chutils-3.5.0/tests/unit/scraping/test_profile_adapters.py +0 -108
  1037. chutils-3.5.0/tests/unit/scraping/test_profile_manager.py +0 -70
  1038. chutils-3.5.0/tests/unit/scraping/test_profile_storage.py +0 -75
  1039. chutils-3.5.0/tests/unit/scraping/test_queue_metrics.py +0 -52
  1040. chutils-3.5.0/tests/unit/scraping/test_worker_metrics.py +0 -25
  1041. chutils-3.5.0/tests/unit/secret_manager/test_secret_manager.py +0 -225
  1042. chutils-3.5.0/tests/unit/secret_manager/test_secret_manager_env.py +0 -117
  1043. chutils-3.5.0/tests/unit/secret_manager/test_secret_manager_providers.py +0 -455
  1044. chutils-3.5.0/tests/unit/secret_manager/test_secrets_required.py +0 -85
  1045. chutils-3.5.0/tests/unit/tasks/test_scheduler.py +0 -306
  1046. chutils-3.5.0/tests/unit/telegram/test_access.py +0 -72
  1047. chutils-3.5.0/tests/unit/telegram/test_aiogram_filter.py +0 -46
  1048. chutils-3.5.0/tests/unit/telegram/test_aiogram_middleware.py +0 -40
  1049. chutils-3.5.0/tests/unit/telegram/test_formatting.py +0 -64
  1050. chutils-3.5.0/tests/unit/telegram/test_keyboard.py +0 -56
  1051. chutils-3.5.0/tests/unit/telegram/test_logging.py +0 -28
  1052. chutils-3.5.0/tests/unit/telegram/test_notifier.py +0 -59
  1053. chutils-3.5.0/tests/unit/telegram/test_telegram_rate_limit.py +0 -53
  1054. chutils-3.5.0/tests/unit/telegram/test_whitelist.py +0 -43
  1055. chutils-3.5.0/tests/unit/test_ai_lint_ignore.py +0 -77
  1056. chutils-3.5.0/tests/unit/test_anticaptcha.py +0 -127
  1057. chutils-3.5.0/tests/unit/test_antidetect.py +0 -133
  1058. chutils-3.5.0/tests/unit/test_async_web_client.py +0 -86
  1059. chutils-3.5.0/tests/unit/test_audit.py +0 -365
  1060. chutils-3.5.0/tests/unit/test_audit_phase2.py +0 -363
  1061. chutils-3.5.0/tests/unit/test_capmonster.py +0 -89
  1062. chutils-3.5.0/tests/unit/test_captcha_base.py +0 -41
  1063. chutils-3.5.0/tests/unit/test_captcha_imports.py +0 -22
  1064. chutils-3.5.0/tests/unit/test_cli_db.py +0 -321
  1065. chutils-3.5.0/tests/unit/test_concurrency_limiter.py +0 -43
  1066. chutils-3.5.0/tests/unit/test_concurrency_pool.py +0 -58
  1067. chutils-3.5.0/tests/unit/test_concurrency_queues.py +0 -161
  1068. chutils-3.5.0/tests/unit/test_config_alias_choices.py +0 -45
  1069. chutils-3.5.0/tests/unit/test_config_fallback.py +0 -72
  1070. chutils-3.5.0/tests/unit/test_crypto.py +0 -148
  1071. chutils-3.5.0/tests/unit/test_crypto_dependencies.py +0 -47
  1072. chutils-3.5.0/tests/unit/test_crypto_stream.py +0 -77
  1073. chutils-3.5.0/tests/unit/test_dashboard.py +0 -401
  1074. chutils-3.5.0/tests/unit/test_db_init.py +0 -256
  1075. chutils-3.5.0/tests/unit/test_db_operations.py +0 -259
  1076. chutils-3.5.0/tests/unit/test_decorators_bulkhead.py +0 -269
  1077. chutils-3.5.0/tests/unit/test_diagnostics.py +0 -367
  1078. chutils-3.5.0/tests/unit/test_env.py +0 -261
  1079. chutils-3.5.0/tests/unit/test_events_exception_group.py +0 -42
  1080. chutils-3.5.0/tests/unit/test_http_api.py +0 -213
  1081. chutils-3.5.0/tests/unit/test_http_client.py +0 -344
  1082. chutils-3.5.0/tests/unit/test_http_fallback.py +0 -407
  1083. chutils-3.5.0/tests/unit/test_http_resilience.py +0 -330
  1084. chutils-3.5.0/tests/unit/test_http_streaming.py +0 -385
  1085. chutils-3.5.0/tests/unit/test_http_tracing.py +0 -226
  1086. chutils-3.5.0/tests/unit/test_humanize_math.py +0 -78
  1087. chutils-3.5.0/tests/unit/test_install_hooks.py +0 -124
  1088. chutils-3.5.0/tests/unit/test_minimal_imports.py +0 -84
  1089. chutils-3.5.0/tests/unit/test_nodriver_humanize.py +0 -147
  1090. chutils-3.5.0/tests/unit/test_playwright_humanize.py +0 -71
  1091. chutils-3.5.0/tests/unit/test_profile_imports.py +0 -214
  1092. chutils-3.5.0/tests/unit/test_profile_warmer.py +0 -132
  1093. chutils-3.5.0/tests/unit/test_proxy_pool.py +0 -85
  1094. chutils-3.5.0/tests/unit/test_qt_asyncio.py +0 -102
  1095. chutils-3.5.0/tests/unit/test_qt_logging.py +0 -117
  1096. chutils-3.5.0/tests/unit/test_qt_shim.py +0 -75
  1097. chutils-3.5.0/tests/unit/test_qt_signals.py +0 -111
  1098. chutils-3.5.0/tests/unit/test_qt_widgets.py +0 -127
  1099. chutils-3.5.0/tests/unit/test_rucaptcha.py +0 -117
  1100. chutils-3.5.0/tests/unit/test_scraping_imports.py +0 -39
  1101. chutils-3.5.0/tests/unit/test_selenium_humanize.py +0 -102
  1102. chutils-3.5.0/tests/unit/test_store_backends_external.py +0 -117
  1103. chutils-3.5.0/tests/unit/test_store_integrations.py +0 -87
  1104. chutils-3.5.0/tests/unit/test_store_manager.py +0 -76
  1105. chutils-3.5.0/tests/unit/test_store_memory.py +0 -80
  1106. chutils-3.5.0/tests/unit/test_telegram_media.py +0 -82
  1107. chutils-3.5.0/tests/unit/test_text.py +0 -74
  1108. chutils-3.5.0/tests/unit/test_text_dependencies.py +0 -21
  1109. chutils-3.5.0/tests/unit/test_validation.py +0 -251
  1110. chutils-3.5.0/tests/unit/test_vk_callback_fastapi.py +0 -52
  1111. chutils-3.5.0/tests/unit/test_vk_callback_router.py +0 -40
  1112. chutils-3.5.0/tests/unit/test_vk_testing_fixtures.py +0 -31
  1113. chutils-3.5.0/tests/unit/test_vk_testing_generators.py +0 -42
  1114. chutils-3.5.0/tests/unit/test_vkma_core.py +0 -111
  1115. chutils-3.5.0/tests/unit/test_vkma_integrations.py +0 -120
  1116. chutils-3.5.0/tests/unit/test_web_client.py +0 -81
  1117. chutils-3.5.0/tests/unit/testing/test_fixtures.py +0 -88
  1118. chutils-3.5.0/uv.lock +0 -3103
  1119. {chutils-3.5.0 → chutils-3.7.0}/.chutilsignore +0 -0
  1120. {chutils-3.5.0 → chutils-3.7.0}/.gitattributes +0 -0
  1121. {chutils-3.5.0 → chutils-3.7.0}/.github/workflows/publish-docs.yml +0 -0
  1122. {chutils-3.5.0 → chutils-3.7.0}/.gitignore +0 -0
  1123. {chutils-3.5.0 → chutils-3.7.0}/CODE_OF_CONDUCT.md +0 -0
  1124. {chutils-3.5.0 → chutils-3.7.0}/CONTRIBUTING.md +0 -0
  1125. {chutils-3.5.0 → chutils-3.7.0}/GEMINI.md +0 -0
  1126. {chutils-3.5.0 → chutils-3.7.0}/LICENSE +0 -0
  1127. {chutils-3.5.0 → chutils-3.7.0}/conductor/.gitignore +0 -0
  1128. {chutils-3.5.0 → chutils-3.7.0}/conductor/GEMINI.md +0 -0
  1129. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/ai_context_opt_20260728/index.md +0 -0
  1130. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/ai_context_opt_20260728/metadata.json +0 -0
  1131. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/ai_context_opt_20260728/plan.md +0 -0
  1132. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/ai_context_opt_20260728/spec.md +0 -0
  1133. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/async_lifecycle_20260728/index.md +0 -0
  1134. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/async_lifecycle_20260728/metadata.json +0 -0
  1135. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/async_lifecycle_20260728/plan.md +0 -0
  1136. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/async_lifecycle_20260728/spec.md +0 -0
  1137. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/browser_profiles_20260728/index.md +0 -0
  1138. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/browser_profiles_20260728/metadata.json +0 -0
  1139. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/browser_profiles_20260728/plan.md +0 -0
  1140. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/browser_profiles_20260728/spec.md +0 -0
  1141. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/plugins_extension_20260805/plan.md +0 -0
  1142. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/plugins_extension_20260805/spec.md +0 -0
  1143. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/queue_monitoring_20260728/index.md +0 -0
  1144. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/queue_monitoring_20260728/metadata.json +0 -0
  1145. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/queue_monitoring_20260728/plan.md +0 -0
  1146. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/queue_monitoring_20260728/spec.md +0 -0
  1147. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/stream_crypto_20260728/index.md +0 -0
  1148. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/stream_crypto_20260728/metadata.json +0 -0
  1149. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/stream_crypto_20260728/plan.md +0 -0
  1150. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/stream_crypto_20260728/spec.md +0 -0
  1151. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_access_20260729/index.md +0 -0
  1152. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_access_20260729/metadata.json +0 -0
  1153. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_access_20260729/plan.md +0 -0
  1154. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_access_20260729/spec.md +0 -0
  1155. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_formatting_20260729/index.md +0 -0
  1156. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_formatting_20260729/metadata.json +0 -0
  1157. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_formatting_20260729/plan.md +0 -0
  1158. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_formatting_20260729/spec.md +0 -0
  1159. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_keyboard_20260729/index.md +0 -0
  1160. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_keyboard_20260729/metadata.json +0 -0
  1161. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_keyboard_20260729/plan.md +0 -0
  1162. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_keyboard_20260729/spec.md +0 -0
  1163. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_logging_20260729/index.md +0 -0
  1164. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_logging_20260729/metadata.json +0 -0
  1165. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_logging_20260729/plan.md +0 -0
  1166. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_logging_20260729/spec.md +0 -0
  1167. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_media_20260729/index.md +0 -0
  1168. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_media_20260729/metadata.json +0 -0
  1169. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_media_20260729/plan.md +0 -0
  1170. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_media_20260729/spec.md +0 -0
  1171. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_notifier_20260729/index.md +0 -0
  1172. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_notifier_20260729/metadata.json +0 -0
  1173. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_notifier_20260729/plan.md +0 -0
  1174. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_notifier_20260729/spec.md +0 -0
  1175. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_ratelimit_20260729/index.md +0 -0
  1176. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_ratelimit_20260729/metadata.json +0 -0
  1177. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_ratelimit_20260729/plan.md +0 -0
  1178. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_ratelimit_20260729/spec.md +0 -0
  1179. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_send_file_20260729/index.md +0 -0
  1180. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_send_file_20260729/metadata.json +0 -0
  1181. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_send_file_20260729/plan.md +0 -0
  1182. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_send_file_20260729/spec.md +0 -0
  1183. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_whitelist_20260729/index.md +0 -0
  1184. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_whitelist_20260729/metadata.json +0 -0
  1185. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_whitelist_20260729/plan.md +0 -0
  1186. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/telegram_whitelist_20260729/spec.md +0 -0
  1187. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/vk_callback_20260807/index.md +0 -0
  1188. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/vk_callback_20260807/metadata.json +0 -0
  1189. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/vk_callback_20260807/plan.md +0 -0
  1190. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/vk_callback_20260807/spec.md +0 -0
  1191. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/vk_scaffold_20260807/index.md +0 -0
  1192. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/vk_scaffold_20260807/metadata.json +0 -0
  1193. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/vk_scaffold_20260807/plan.md +0 -0
  1194. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/vk_scaffold_20260807/spec.md +0 -0
  1195. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/vk_testing_20260807/index.md +0 -0
  1196. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/vk_testing_20260807/metadata.json +0 -0
  1197. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/vk_testing_20260807/plan.md +0 -0
  1198. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/vk_testing_20260807/spec.md +0 -0
  1199. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/vkma_20260807/index.md +0 -0
  1200. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/vkma_20260807/metadata.json +0 -0
  1201. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/vkma_20260807/plan.md +0 -0
  1202. {chutils-3.5.0 → chutils-3.7.0}/conductor/archive/vkma_20260807/spec.md +0 -0
  1203. {chutils-3.5.0 → chutils-3.7.0}/conductor/code_styleguides/python.md +0 -0
  1204. {chutils-3.5.0 → chutils-3.7.0}/conductor/index.md +0 -0
  1205. {chutils-3.5.0 → chutils-3.7.0}/conductor/product-guidelines.md +0 -0
  1206. {chutils-3.5.0 → chutils-3.7.0}/conductor/setup_state.json +0 -0
  1207. {chutils-3.5.0 → chutils-3.7.0}/conductor/workflow.md +0 -0
  1208. {chutils-3.5.0 → chutils-3.7.0}/docs/CODE_OF_CONDUCT_RU.md +0 -0
  1209. {chutils-3.5.0 → chutils-3.7.0}/docs/CONTRIBUTING_RU.md +0 -0
  1210. {chutils-3.5.0 → chutils-3.7.0}/docs/INTEGRATION_AI.md +0 -0
  1211. {chutils-3.5.0 → chutils-3.7.0}/docs/ai_examples/README.md +0 -0
  1212. {chutils-3.5.0 → chutils-3.7.0}/docs/ai_examples/configuration/README.md +0 -0
  1213. {chutils-3.5.0 → chutils-3.7.0}/docs/ai_examples/configuration/good_pattern.py +0 -0
  1214. {chutils-3.5.0 → chutils-3.7.0}/docs/ai_examples/error_handling/README.md +0 -0
  1215. {chutils-3.5.0 → chutils-3.7.0}/docs/ai_examples/error_handling/bad_pattern.py +0 -0
  1216. {chutils-3.5.0 → chutils-3.7.0}/docs/ai_examples/logging/README.md +0 -0
  1217. {chutils-3.5.0 → chutils-3.7.0}/docs/ai_examples/optional_deps/README.md +0 -0
  1218. {chutils-3.5.0 → chutils-3.7.0}/docs/ai_examples/secrets/README.md +0 -0
  1219. {chutils-3.5.0 → chutils-3.7.0}/docs/ai_examples/secrets/bad_pattern.py +0 -0
  1220. {chutils-3.5.0 → chutils-3.7.0}/docs/ai_examples/secrets/good_pattern.py +0 -0
  1221. {chutils-3.5.0 → chutils-3.7.0}/docs/ai_hints.md +0 -0
  1222. {chutils-3.5.0 → chutils-3.7.0}/docs/cli/config.md +0 -0
  1223. {chutils-3.5.0 → chutils-3.7.0}/docs/cli/db.md +0 -0
  1224. {chutils-3.5.0 → chutils-3.7.0}/docs/cli/dev.md +0 -0
  1225. {chutils-3.5.0 → chutils-3.7.0}/docs/cli/env.md +0 -0
  1226. {chutils-3.5.0 → chutils-3.7.0}/docs/cli/index.md +0 -0
  1227. {chutils-3.5.0 → chutils-3.7.0}/docs/cli/init.md +0 -0
  1228. {chutils-3.5.0 → chutils-3.7.0}/docs/cli/pypi.md +0 -0
  1229. {chutils-3.5.0 → chutils-3.7.0}/docs/cli/secrets.md +0 -0
  1230. {chutils-3.5.0 → chutils-3.7.0}/docs/cli/show_paths.md +0 -0
  1231. {chutils-3.5.0 → chutils-3.7.0}/docs/cli/template.md +0 -0
  1232. {chutils-3.5.0 → chutils-3.7.0}/docs/cli/validate.md +0 -0
  1233. {chutils-3.5.0 → chutils-3.7.0}/docs/index.md +0 -0
  1234. {chutils-3.5.0 → chutils-3.7.0}/docs/qt.md +0 -0
  1235. {chutils-3.5.0 → chutils-3.7.0}/examples/.env +0 -0
  1236. {chutils-3.5.0 → chutils-3.7.0}/examples/16_cloud_secret_managers.py +0 -0
  1237. {chutils-3.5.0 → chutils-3.7.0}/examples/22_circuit_breaker_decorator.py +0 -0
  1238. {chutils-3.5.0 → chutils-3.7.0}/src/chutils/__main__.py +0 -0
  1239. {chutils-3.5.0 → chutils-3.7.0}/src/chutils/antigravity.md +0 -0
  1240. {chutils-3.5.0 → chutils-3.7.0}/src/chutils/cache/in_memory.py +0 -0
  1241. {chutils-3.5.0 → chutils-3.7.0}/src/chutils/config/GEMINI.md +0 -0
  1242. {chutils-3.5.0 → chutils-3.7.0}/src/chutils/dev/context/__init__.py +0 -0
  1243. {chutils-3.5.0 → chutils-3.7.0}/src/chutils/dev/few_shot/models.py +0 -0
  1244. {chutils-3.5.0 → chutils-3.7.0}/src/chutils/logger/GEMINI.md +0 -0
  1245. {chutils-3.5.0 → chutils-3.7.0}/src/chutils/qt/widgets.py +0 -0
  1246. {chutils-3.5.0 → chutils-3.7.0}/src/chutils/scraping/concurrency/base.py +0 -0
  1247. {chutils-3.5.0 → chutils-3.7.0}/src/chutils/scraping/concurrency/models.py +0 -0
  1248. {chutils-3.5.0 → chutils-3.7.0}/src/chutils/scraping/profiles/__init__.py +0 -0
  1249. {chutils-3.5.0 → chutils-3.7.0}/src/chutils/scraping/profiles/adapters/__init__.py +0 -0
  1250. {chutils-3.5.0 → chutils-3.7.0}/src/chutils/secret_manager/GEMINI.md +0 -0
  1251. {chutils-3.5.0 → chutils-3.7.0}/src/chutils/secret_manager/providers/env.py +0 -0
  1252. {chutils-3.5.0 → chutils-3.7.0}/src/chutils/templates/vk/vk-miniapp/backend/config.yml.template +0 -0
  1253. {chutils-3.5.0 → chutils-3.7.0}/src/chutils/templates/vk/vk-miniapp/docker-compose.yml.template +0 -0
  1254. {chutils-3.5.0 → chutils-3.7.0}/src/chutils/templates/vk/vk-miniapp/frontend/App.jsx.template +0 -0
  1255. {chutils-3.5.0 → chutils-3.7.0}/src/chutils/vkma/exceptions.py +0 -0
  1256. {chutils-3.5.0 → chutils-3.7.0}/tests/integration/__init__.py +0 -0
  1257. {chutils-3.5.0 → chutils-3.7.0}/tests/unit/config/test_config_env.py +0 -0
  1258. {chutils-3.5.0 → chutils-3.7.0}/tests/unit/config/test_config_tracing.py +0 -0
  1259. {chutils-3.5.0 → chutils-3.7.0}/tests/unit/core/test_ast_indexer_abstract.py +0 -0
  1260. {chutils-3.5.0 → chutils-3.7.0}/tests/unit/decorators/test_decorators.py +0 -0
  1261. {chutils-3.5.0 → chutils-3.7.0}/tests/unit/dev/test_env_sync.py +0 -0
  1262. {chutils-3.5.0 → chutils-3.7.0}/tests/unit/test_concurrency_imports.py +0 -0
  1263. {chutils-3.5.0 → chutils-3.7.0}/tests/unit/test_init_templates.py +0 -0
  1264. {chutils-3.5.0 → chutils-3.7.0}/tests/unit/test_telegram_send_file.py +0 -0
  1265. {chutils-3.5.0 → chutils-3.7.0}/tests/unit/test_user_agent.py +0 -0
  1266. {chutils-3.5.0 → chutils-3.7.0}/tests/unit/test_web_imports.py +0 -0
@@ -0,0 +1,46 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ main, master ]
6
+ pull_request:
7
+ branches: [ main, master ]
8
+
9
+ jobs:
10
+ test-and-lint:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ python-version: [ '3.10', '3.11', '3.12', '3.13', '3.14', '3.15-dev' ]
15
+
16
+
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+
20
+ - name: Set up Python ${{ matrix.python-version }}
21
+ uses: actions/setup-python@v5
22
+ with:
23
+ python-version: ${{ matrix.python-version }}
24
+
25
+ - name: Install uv
26
+ uses: astral-sh/setup-uv@v5
27
+ with:
28
+ enable-cache: true
29
+ version: "latest"
30
+
31
+ - name: Install dependencies
32
+ run: |
33
+ uv sync --all-extras
34
+
35
+ - name: Run Tests
36
+ run: |
37
+ uv run pytest
38
+
39
+ - name: Run Type Checking (Mypy)
40
+ run: |
41
+ uv run mypy src
42
+
43
+ - name: Run AI-Readiness Audit
44
+ run: |
45
+ uv run python -m chutils dev ai-lint --soft-mode
46
+
chutils-3.7.0/PKG-INFO ADDED
@@ -0,0 +1,562 @@
1
+ Metadata-Version: 2.5
2
+ Name: chutils
3
+ Version: 3.7.0
4
+ Summary: Набор простых и удобных утилит для Python, который избавляет от рутины при работе с конфигурацией и логированием в новых проектах.
5
+ Author-email: Chu4hel <sergeiivanov636@gmail.com>
6
+ License-Expression: MIT
7
+ License-File: LICENSE
8
+ Requires-Python: <3.16,>=3.10
9
+ Requires-Dist: exceptiongroup>=1.2.2; python_version < '3.11'
10
+ Requires-Dist: python-dotenv>=1.2.2
11
+ Requires-Dist: pyyaml>=6.0.3
12
+ Provides-Extra: aws
13
+ Requires-Dist: boto3>=1.34.0; extra == 'aws'
14
+ Provides-Extra: camoufox
15
+ Requires-Dist: camoufox>=0.4.0; extra == 'camoufox'
16
+ Provides-Extra: captcha
17
+ Requires-Dist: httpx>=0.27.0; extra == 'captcha'
18
+ Provides-Extra: crypto
19
+ Requires-Dist: cryptography>=42.0.0; extra == 'crypto'
20
+ Provides-Extra: date
21
+ Requires-Dist: python-dateutil>=2.9.0; extra == 'date'
22
+ Provides-Extra: db
23
+ Requires-Dist: aiosqlite>=0.20.0; extra == 'db'
24
+ Requires-Dist: alembic>=1.13.0; extra == 'db'
25
+ Requires-Dist: asyncpg>=0.29.0; extra == 'db'
26
+ Requires-Dist: sqlalchemy>=2.0.0; extra == 'db'
27
+ Provides-Extra: full
28
+ Requires-Dist: boto3>=1.34.0; extra == 'full'
29
+ Requires-Dist: cryptography>=42.0.0; extra == 'full'
30
+ Requires-Dist: google-cloud-secret-manager>=2.20.0; extra == 'full'
31
+ Requires-Dist: httpx>=0.27.0; extra == 'full'
32
+ Requires-Dist: keyring>=25.7.0; extra == 'full'
33
+ Requires-Dist: opentelemetry-api>=1.41.1; extra == 'full'
34
+ Requires-Dist: opentelemetry-exporter-otlp>=1.41.1; extra == 'full'
35
+ Requires-Dist: opentelemetry-sdk>=1.41.1; extra == 'full'
36
+ Requires-Dist: playwright>=1.49.0; extra == 'full'
37
+ Requires-Dist: prometheus-client<1.0.0,>=0.20.0; extra == 'full'
38
+ Requires-Dist: pydantic>=2.13.4; extra == 'full'
39
+ Requires-Dist: pytest>=9.0.3; extra == 'full'
40
+ Requires-Dist: python-dateutil>=2.9.0; extra == 'full'
41
+ Requires-Dist: python-json-logger>=3.2.1; extra == 'full'
42
+ Requires-Dist: rapidfuzz>=3.9.0; extra == 'full'
43
+ Requires-Dist: rich>=15.0.0; extra == 'full'
44
+ Requires-Dist: selenium>=4.27.0; extra == 'full'
45
+ Requires-Dist: watchdog>=6.0.0; extra == 'full'
46
+ Requires-Dist: websockets>=14.0.0; extra == 'full'
47
+ Provides-Extra: gcp
48
+ Requires-Dist: google-cloud-secret-manager>=2.20.0; extra == 'gcp'
49
+ Provides-Extra: json
50
+ Requires-Dist: python-json-logger>=3.2.1; extra == 'json'
51
+ Provides-Extra: metrics
52
+ Requires-Dist: prometheus-client<1.0.0,>=0.20.0; extra == 'metrics'
53
+ Provides-Extra: otel
54
+ Requires-Dist: opentelemetry-api>=1.41.1; extra == 'otel'
55
+ Requires-Dist: opentelemetry-exporter-otlp>=1.41.1; extra == 'otel'
56
+ Requires-Dist: opentelemetry-sdk>=1.41.1; extra == 'otel'
57
+ Provides-Extra: pydantic
58
+ Requires-Dist: pydantic<3.0.0,>=2.13.4; extra == 'pydantic'
59
+ Provides-Extra: qt
60
+ Requires-Dist: pyqt6>=6.6.0; extra == 'qt'
61
+ Provides-Extra: qt-pyside
62
+ Requires-Dist: pyside6>=6.6.0; extra == 'qt-pyside'
63
+ Provides-Extra: redis
64
+ Requires-Dist: redis>=5.0.0; extra == 'redis'
65
+ Provides-Extra: rich
66
+ Requires-Dist: rich>=15.0.0; extra == 'rich'
67
+ Provides-Extra: scraping
68
+ Requires-Dist: playwright>=1.49.0; extra == 'scraping'
69
+ Requires-Dist: selenium>=4.27.0; extra == 'scraping'
70
+ Provides-Extra: secrets
71
+ Requires-Dist: keyring>=25.7.0; extra == 'secrets'
72
+ Provides-Extra: testing
73
+ Requires-Dist: pytest>=9.0.3; extra == 'testing'
74
+ Provides-Extra: text
75
+ Requires-Dist: rapidfuzz>=3.9.0; extra == 'text'
76
+ Provides-Extra: tls
77
+ Requires-Dist: curl-cffi>=0.7.0; extra == 'tls'
78
+ Provides-Extra: vk
79
+ Requires-Dist: pydantic<3.0.0,>=2.13.4; extra == 'vk'
80
+ Provides-Extra: vkma
81
+ Requires-Dist: pydantic<3.0.0,>=2.13.4; extra == 'vkma'
82
+ Provides-Extra: watch
83
+ Requires-Dist: watchdog>=6.0.0; extra == 'watch'
84
+ Provides-Extra: web
85
+ Requires-Dist: httpx>=0.27.0; extra == 'web'
86
+ Provides-Extra: websockets
87
+ Requires-Dist: websockets>=14.0.0; extra == 'websockets'
88
+ Description-Content-Type: text/markdown
89
+
90
+ [Русская версия](docs/README_RU.md)
91
+
92
+ # chutils: Stop the Routine!
93
+
94
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
95
+ [![Python](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/)
96
+ [![PyPI version](https://badge.fury.io/py/chutils.svg)](https://badge.fury.io/py/chutils)
97
+ [![Documentation](https://img.shields.io/badge/documentation-read-brightgreen)](https://Chu4hel.github.io/chutils/)
98
+
99
+ **chutils** is a set of simple utilities for Python designed to eliminate the repetitive setup of configuration,
100
+ logging, and secrets in your projects.
101
+
102
+ Start a new project and focus on what matters, not the routine.
103
+
104
+ Full documentation is available on [our website](https://Chu4hel.github.io/chutils/) (currently in Russian).
105
+
106
+ ## The Problem
107
+
108
+ Every time you start a new project, you have to solve the same tasks:
109
+
110
+ - How to conveniently read settings from a configuration file?
111
+ - How to configure logging to write messages to both the console and a file with daily rotation?
112
+ - How to securely store API keys without hardcoding them in the code?
113
+ - How to make it all work "out of the box" without manually defining paths?
114
+
115
+ **chutils** offers ready-made solutions for all these problems.
116
+
117
+ ## Key Features
118
+
119
+ - **✨ Zero Configuration:** The library **automatically** finds your project root and the `config.yml` or `config.ini`
120
+ file. It uses **lazy initialization** — no heavy operations until you actually need them.
121
+ - **⚙️ Flexible Configuration:** Support for `YAML` and `INI` formats. Simple functions for retrieving typed data.
122
+ - **✍️ Advanced Logger:** The `setup_logger()` function configures logging to the console and rotating files out of the
123
+ box. Includes **automatic secret masking** and **smart console width detection** for IDEs (PyCharm, etc.).
124
+ It returns a custom logger with additional debug levels (`devdebug`, `mediumdebug`).
125
+ - **🔒 Secure Secret Storage:** The `secret_manager` module provides a simple interface for saving and retrieving secrets
126
+ via the system `keyring`, with a fallback to `.env` files.
127
+ - **🚀 CLI Booster:** Turn any function into a CLI tool in seconds using the `@cli_command` decorator with automatic type
128
+ mapping and docstring parsing.
129
+ - **⏰ Painless Datetime:** Always-aware UTC time utilities, smart parsing, and human-readable time intervals.
130
+ - **📡 Distributed Tracing:** Seamless OpenTelemetry integration with `@trace` decorator and automatic log correlation.
131
+ - **🔍 Config Diagnostics:** Interactive trace of configuration sources and priorities via `config debug` command.
132
+ - **🌐 Remote Configuration:** Load settings from HTTP/HTTPS endpoints with background polling and fallback support.
133
+ - **🔄 Hot-Reload:** Support for automatic configuration reloading on file changes without restart (requires
134
+ `pip install chutils[watch]`).
135
+ - **🛡️ Secure Paths:** Prevent Path Traversal attacks by safely resolving file paths against a base directory using
136
+ `resolve_safe_path()`.
137
+ - **🤖 AI Linter:** Run static analysis checks on your codebase to ensure AI readiness (strict type hints, structured
138
+ docstrings, API map sync, and file dependency synchronization) via `chutils dev ai-lint`.
139
+ - **✅ Data Validation (chutils.validation):** An all-in-one Pydantic-based data and JSON validation module featuring
140
+ `@validate_call` decorator for function argument checks and rich exception formatting.
141
+ - **🩺 Diagnostics API (chutils.diagnostics):** An asynchronous, thread-safe health checking framework with built-in
142
+ checks (keyring, config) and integrations for popular web frameworks (FastAPI, Flask).
143
+ - **⚡ Async Ready:** Most core functions have asynchronous versions (prefixed with `a`) for non-blocking execution.
144
+ - **🚀 Ready to Use:** Just install and use.
145
+
146
+ ## Command Line Interface (CLI)
147
+
148
+ The library provides a `chutils` console command for convenient secret management without writing code.
149
+
150
+ ### Secret Management
151
+
152
+ ```bash
153
+ # Save a secret to the system storage (keyring)
154
+ chutils secrets set MY_API_KEY "super-secret-value"
155
+
156
+ # Delete a secret
157
+ chutils secrets delete MY_API_KEY
158
+
159
+ # Explicitly specify service name
160
+ chutils secrets set DB_PASSWORD "12345" --service my_custom_app
161
+ ```
162
+
163
+ ## Installation
164
+
165
+ ```bash
166
+ poetry add chutils
167
+ ```
168
+
169
+ Or using pip:
170
+
171
+ ```bash
172
+ pip install chutils
173
+ ```
174
+
175
+ ## Examples
176
+
177
+ In the [`/examples`](./examples/) folder, you will find ready-to-run scripts demonstrating the library's key features.
178
+ Each example focuses on a specific task.
179
+
180
+ ## Quick Start
181
+
182
+ ### 1. Working with Configuration
183
+
184
+ 1. (Optional) Create a `config.yml` file in your project root:
185
+
186
+ ```yaml
187
+ # config.yml
188
+ Database:
189
+ host: localhost
190
+ port: 5432
191
+ ```
192
+
193
+ 2. Get values in your code:
194
+
195
+ ```python
196
+ from chutils import get_config_value, get_config_int
197
+
198
+ db_host = get_config_value("Database", "host", fallback="127.0.0.1")
199
+ db_port = get_config_int("Database", "port", fallback=5432)
200
+ ```
201
+
202
+ #### Validation via Pydantic (Optional)
203
+
204
+ For strict typing and validation, you can use Pydantic models (requires `pip install chutils[pydantic]`):
205
+
206
+ ```python
207
+ from pydantic import BaseModel
208
+ from chutils import get_config
209
+
210
+
211
+ class AppConfig(BaseModel):
212
+ app_name: str
213
+ version: str
214
+
215
+
216
+ # Returns an instance of AppConfig
217
+ cfg = get_config(model=AppConfig)
218
+ print(cfg.app_name)
219
+ ```
220
+
221
+ You can also validate specific sections:
222
+ ```python
223
+ from chutils import get_config_section
224
+
225
+ db_cfg = get_config_section("Database", model=MyDbModel)
226
+ ```
227
+
228
+ #### Overriding Configuration with Local Files (`config.local.yml`)
229
+
230
+ You can create a `config.local.yml` next to your main file. Values from the local file will **override**
231
+ corresponding values from the main file. This is perfect for local development or storing sensitive data (ensure
232
+ `*.local.*` is in your `.gitignore`).
233
+
234
+ ### 2. Hot-Reload
235
+
236
+ You can make your application react to configuration file changes in real-time.
237
+
238
+ ```python
239
+ from chutils import start_config_watcher, on_config_change, get_config_value
240
+
241
+
242
+ def reload_logic():
243
+ print("Configuration updated!")
244
+ # Update app state here
245
+ db_url = get_config_value("Database", "url")
246
+
247
+
248
+ # Register callback
249
+ on_config_change(reload_logic)
250
+
251
+ # Start watcher (requires watchdog package)
252
+ start_config_watcher()
253
+ ```
254
+
255
+ To use this feature, install `watchdog`:
256
+ `pip install chutils[watch]`
257
+
258
+ ### 3. Logging Setup
259
+
260
+ 1. Configure and use the logger:
261
+
262
+ ```python
263
+ from chutils import setup_logger_from_config, ChutilsLogger
264
+
265
+ # Automatically reads settings from [Logging] section in config.yml
266
+ logger: ChutilsLogger = setup_logger_from_config()
267
+
268
+ logger.info("Application started.")
269
+ logger.devdebug("Deep debug message (level 9).")
270
+ ```
271
+
272
+ #### Structured Logging (JSON)
273
+
274
+ If you need to output logs in JSON format for ELK, Splunk, or cloud logging (requires `pip install chutils[json]`):
275
+
276
+ ```python
277
+ # Via code
278
+ logger = setup_logger(json_format=True)
279
+
280
+ # Or via config in the [Logging] section
281
+ # json_format: true
282
+ ```
283
+
284
+ #### Contextual Logging (ContextVar)
285
+
286
+ You can bind metadata to the current execution context (thread or coroutine), and it will be automatically
287
+ included in all log messages.
288
+
289
+ ```python
290
+ from chutils import setup_logger, bind_context
291
+
292
+ logger = setup_logger()
293
+
294
+ # Bind request ID and user to the current context
295
+ bind_context(request_id="REQ-123", user="admin")
296
+
297
+ logger.info("Action performed")
298
+ # Text: ... [request_id=REQ-123 user=admin] Action performed
299
+ # JSON: {..., "message": "Action performed", "context": {"request_id": "REQ-123", "user": "admin"}}
300
+ ```
301
+
302
+ #### Controlling Logging via Environment Variables
303
+
304
+ - `CH_LOG_JSON=true`: Forces JSON format.
305
+ - `CH_LOG_NO_TIME=true`: Removes the date/time from the log format (for clean Docker logs).
306
+ - `CH_LOG_NO_FILE=true`: Disables creating log files.
307
+
308
+ These variables have **highest priority** and override any code or config settings.
309
+
310
+ ### 3. Secret Management
311
+
312
+ `SecretManager` provides a unified abstraction for managing secrets using a custom chain of providers (`SecretProvider`)
313
+ and automatic fallback logic.
314
+
315
+ By default, `SecretManager` searches for secrets in the following order: **Keyring > .env File > Environment Variables
316
+ **.
317
+
318
+ ```python
319
+ from chutils import SecretManager
320
+
321
+ secrets = SecretManager("my_awesome_app")
322
+
323
+ # Save secret (will be written to the first writable provider in the chain)
324
+ secrets.save_secret("API_KEY", "secret-value-123")
325
+
326
+ # Retrieve secret
327
+ key = secrets.get_secret("API_KEY")
328
+ ```
329
+
330
+ #### Built-in Providers
331
+
332
+ You can configure the providers list explicitly:
333
+
334
+ ```python
335
+ from chutils import SecretManager
336
+ from chutils.secret_manager.providers import (
337
+ KeyringProvider,
338
+ DotEnvProvider,
339
+ EnvProvider,
340
+ )
341
+
342
+ secrets = SecretManager(
343
+ service_name="my_app",
344
+ providers=[KeyringProvider(), DotEnvProvider(), EnvProvider()],
345
+ )
346
+ ```
347
+
348
+ #### Cloud Secret Managers
349
+
350
+ The library supports transparent integration with AWS Secrets Manager and Google Secret Manager:
351
+
352
+ ```python
353
+ from chutils import SecretManager
354
+ from chutils.secret_manager.providers import (
355
+ AWSSecretManagerProvider,
356
+ GCPSecretManagerProvider,
357
+ EnvProvider,
358
+ )
359
+
360
+ # Initialize cloud providers (requires installation of chutils[aws,gcp])
361
+ aws_provider = AWSSecretManagerProvider(region_name="us-east-1")
362
+ gcp_provider = GCPSecretManagerProvider(project_id="my-gcp-project")
363
+
364
+ # Create a SecretManager with the chain: AWS -> GCP -> Environment Variables.
365
+ # If AWS or GCP calls fail due to network/permissions or the secret is missing,
366
+ # SecretManager logs a warning and automatically falls back to EnvProvider.
367
+ secrets = SecretManager(
368
+ service_name="my_service", providers=[aws_provider, gcp_provider, EnvProvider()]
369
+ )
370
+ ```
371
+
372
+ Install cloud dependencies:
373
+
374
+ ```bash
375
+ pip install chutils[aws] # For AWS (boto3)
376
+ pip install chutils[gcp] # For GCP (google-cloud-secret-manager)
377
+ pip install chutils[all] # For all optional packages
378
+ ```
379
+
380
+ #### Disabling Keyring (Optional)
381
+
382
+ In environments like Docker or CI/CD where `keyring` is unavailable, you can suppress warnings and skip the check:
383
+
384
+ - Set `CH_DISABLE_KEYRING_WARNING=true` in environment.
385
+ - Or add `disable_keyring: true` under `secrets` section in `config.yml`.
386
+
387
+ ### 4. Safe Path Resolution
388
+
389
+ Safely resolve relative and absolute paths against a base directory to prevent directory traversal vulnerabilities:
390
+
391
+ ```python
392
+ from chutils.fs import resolve_safe_path
393
+ from chutils.exceptions import PathTraversalError
394
+
395
+ try:
396
+ # Resolves path relative to the base directory and checks if it's safe
397
+ safe_path = resolve_safe_path("user_file.txt", base_dir="./sandbox")
398
+ print(f"Safe absolute path: {safe_path}")
399
+ except PathTraversalError as e:
400
+ print(f"Path traversal detected! Attempted: {e.context.get('attempted_path')}")
401
+ ```
402
+
403
+ ## API Overview
404
+
405
+ ### Configuration (`chutils.config`)
406
+
407
+ - `get_config_value(section, key, fallback=None, required=False)` / `aget_config()`
408
+ - `get_config_int`, `get_config_boolean`, `get_config_list`, `get_config_path` (all support `fallback` and `required`
409
+ parameters)
410
+ - `save_config_value(section, key, value, notify=True)` / `asave_config_value()`
411
+ - Use `notify=False` to update the file without triggering Hot-Reload callbacks.
412
+
413
+ ### Logging (`chutils.logger`)
414
+
415
+ - `setup_logger(name, log_level, log_file_name, rotation_type, compress, ...)`
416
+ - Levels: `logger.devdebug` (9), `logger.mediumdebug` (15), and all standard ones.
417
+
418
+ ### Secret Management (`chutils.secret_manager`)
419
+
420
+ - `SecretManager(service_name, prefix)`
421
+ - `save_secret` / `asave_secret`
422
+ - `get_secret(key, fallback=None, required=False)` / `aget_secret(...)`
423
+ - `delete_secret` / `adelete_secret`
424
+
425
+ ### Environment Manifest (`chutils.env`)
426
+
427
+ - `BaseEnvManifest`: Declarative specification of environment variables using Pydantic typing, automatic secret masking,
428
+ and `load()` classmethod.
429
+
430
+ ### Data Validation (`chutils.validation`)
431
+
432
+ - `validate_data(model, data)`: Validates dictionaries or JSON strings against Pydantic models, raising
433
+ `ChutilsValidationError`.
434
+ - `@validate_call`: Automatically validates function arguments using Pydantic.
435
+
436
+ ### Health Checking (`chutils.diagnostics`)
437
+
438
+ - `DiagnosticsManager`: Registers and аsynchronously executes system health checks with timeouts.
439
+ - Web Framework helpers: `get_fastapi_health_handler` and `get_flask_health_handler`.
440
+
441
+ ### Decorators (`chutils.decorators`)
442
+
443
+ - `@log_function_details`: Logs arguments, execution time, and result (uses `DEVDEBUG` level).
444
+ - `@timeout(seconds, fallback)`: Limits function execution time. Supports sync/async and optional fallback.
445
+ - `@retry`: Automatically retries a function if it fails. Supports sync/async, backoff, jitter, and exception filtering.
446
+ - `@cli_command`: Turns any function into a standalone CLI script with automatic argument parsing.
447
+
448
+ ### File System (`chutils.fs`)
449
+
450
+ - `resolve_safe_path(path, base_dir)`: Safely resolves path and checks for Path Traversal attempts.
451
+ - `ensure_dir(path)`: Ensures directory exists.
452
+
453
+ ### Time & Dates (`chutils.time`)
454
+
455
+ - `utc_now()`: Returns a timezone-aware UTC datetime.
456
+ - `parse_datetime(value)`: Smart parsing of strings and timestamps into UTC.
457
+ - `humanize_timedelta(dt)`: Returns human-readable strings like "5 minutes ago" or "tomorrow".
458
+
459
+ ### Example of @retry usage:
460
+
461
+ ```python
462
+ from chutils.decorators import retry
463
+
464
+
465
+ @retry(retries=3, delay=1.0, backoff=2.0)
466
+ def fetch_data():
467
+ # Will be retried up to 3 times on any Exception
468
+ ...
469
+ ```
470
+
471
+ ## Command Line Interface (CLI)
472
+
473
+ `chutils` includes a set of tools to speed up development and debugging.
474
+
475
+ ### 1. Initialize Project
476
+
477
+ Quickly set up a new project with a default configuration and `.gitignore` rules:
478
+
479
+ ```bash
480
+ # Interactive mode
481
+ chutils init
482
+
483
+ # Non-interactive mode (default values)
484
+ chutils init -y
485
+ ```
486
+
487
+ ### 2. Validate Configuration
488
+
489
+ Check if your configuration files match your Pydantic models:
490
+
491
+ ```bash
492
+ # Automatically finds 'Settings' class in context.py or config.py
493
+ chutils validate
494
+
495
+ # Explicitly specify the model path
496
+ chutils validate --model src.settings:AppConfig
497
+ ```
498
+
499
+ ### 3. Debug Search Paths
500
+
501
+ See exactly where `chutils` is looking for configuration files:
502
+
503
+ ```bash
504
+ # Human-readable output
505
+ chutils show-paths
506
+
507
+ # JSON output for automation
508
+ chutils show-paths --json
509
+ ```
510
+
511
+ ### 4. Manage Secrets
512
+
513
+ Manage your system keyring secrets directly from the terminal:
514
+
515
+ ```bash
516
+ # Set a secret
517
+ chutils secrets set API_KEY "your-secret-value" --service my_app
518
+
519
+ # Delete a secret
520
+ chutils secrets delete API_KEY --service my_app
521
+ ```
522
+
523
+ ### 5. Debug Configuration
524
+
525
+ Trace exactly where each configuration value comes from:
526
+
527
+ ```bash
528
+ chutils config debug
529
+ ```
530
+
531
+ ### 6. AI-Readiness Linter
532
+
533
+ Perform a static audit of your codebase to ensure it is optimized for AI developers and agents:
534
+
535
+ ```bash
536
+ # Run linter on the current project
537
+ chutils dev ai-lint
538
+
539
+ # Run linter in strict mode with ignored paths
540
+ chutils dev ai-lint --strict --ignore "temp/,build/"
541
+ ```
542
+
543
+ See [docs/ai_lint.md](docs/ai_lint.md) for more details.
544
+
545
+ ### 7. Environment Variables Synchronization
546
+
547
+ Keep `.env` and `.env.example` files in sync with format preservation, comments, and values masking:
548
+
549
+ ```bash
550
+ # Compare .env and .env.example keys without making changes
551
+ chutils dev sync-env --dry-run
552
+
553
+ # Synchronize files automatically
554
+ chutils dev sync-env --yes
555
+
556
+ # Specify custom paths
557
+ chutils dev sync-env --env-path .env.dev --example-path .env.dev.example
558
+ ```
559
+
560
+ ## License
561
+
562
+ The project is distributed under the MIT License.