chutils 3.1.0__tar.gz → 3.2.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.
- chutils-3.2.0/.chutilsignore +6 -0
- {chutils-3.1.0 → chutils-3.2.0}/.gitignore +186 -185
- {chutils-3.1.0 → chutils-3.2.0}/PKG-INFO +66 -4
- {chutils-3.1.0 → chutils-3.2.0}/README.md +54 -3
- chutils-3.2.0/ai-lint.toml +176 -0
- {chutils-3.1.0 → chutils-3.2.0}/api_map.md +212 -180
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/audit_20260702/plan.md +23 -23
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/custom_config_providers_20260714/plan.md +11 -11
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/db_manager_20260707/plan.md +24 -24
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/db_migrations_cli_20260707/plan.md +20 -20
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/http_20260702/plan.md +18 -18
- {chutils-3.1.0 → chutils-3.2.0}/conductor/product.md +19 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tech-stack.md +16 -0
- chutils-3.2.0/conductor/tracks.md +48 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/README_RU.md +53 -3
- {chutils-3.1.0 → chutils-3.2.0}/docs/ai_lint.md +444 -388
- {chutils-3.1.0 → chutils-3.2.0}/docs/api.md +32 -0
- chutils-3.2.0/docs/audit.md +119 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/captcha.md +112 -112
- chutils-3.2.0/docs/cli/db.md +73 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/cli/dev.md +131 -1
- {chutils-3.1.0 → chutils-3.2.0}/docs/cli/env.md +62 -62
- {chutils-3.1.0 → chutils-3.2.0}/docs/cli/index.md +1 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/cli/pypi.md +121 -121
- chutils-3.2.0/docs/custom_config_providers.md +297 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/dependencies.md +110 -108
- {chutils-3.1.0 → chutils-3.2.0}/docs/index.md +9 -4
- {chutils-3.1.0 → chutils-3.2.0}/docs/recipes.md +13 -3
- {chutils-3.1.0 → chutils-3.2.0}/docs/scraping.md +162 -162
- chutils-3.2.0/examples/16_cloud_secret_managers.py +76 -0
- {chutils-3.1.0 → chutils-3.2.0}/project_index.json +10789 -4998
- {chutils-3.1.0 → chutils-3.2.0}/pyproject.toml +14 -4
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/__init__.py +47 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/__init__.pyi +311 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/antigravity.md +6 -6
- chutils-3.2.0/src/chutils/audit/__init__.py +44 -0
- chutils-3.2.0/src/chutils/audit/_hash.py +22 -0
- chutils-3.2.0/src/chutils/audit/api.py +193 -0
- chutils-3.2.0/src/chutils/audit/backends/__init__.py +6 -0
- chutils-3.2.0/src/chutils/audit/backends/base.py +46 -0
- chutils-3.2.0/src/chutils/audit/backends/file.py +123 -0
- chutils-3.2.0/src/chutils/audit/backends/postgres.py +224 -0
- chutils-3.2.0/src/chutils/audit/backends/sqlite.py +200 -0
- chutils-3.2.0/src/chutils/audit/schema.py +116 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/cli.py +5 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/__init__.py +3 -1
- chutils-3.2.0/src/chutils/commands/db.py +496 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/dev/__init__.py +569 -437
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/dev/ai_lint.py +101 -101
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/dev/base.py +40 -40
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/dev/chat_context.py +100 -100
- chutils-3.2.0/src/chutils/commands/dev/dashboard.py +40 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/dev/diagnostics.py +109 -109
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/dev/few_shot.py +55 -55
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/dev/generate_context.py +355 -355
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/dev/hooks.py +185 -185
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/dev/mock.py +87 -87
- chutils-3.2.0/src/chutils/commands/dev/profile_imports.py +47 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/dev/scaffold.py +72 -72
- chutils-3.2.0/src/chutils/commands/dev/setup_github_actions.py +147 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/dev/sync_env.py +177 -157
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/env.py +191 -191
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/pypi.py +2 -2
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/config/__init__.py +52 -1
- chutils-3.2.0/src/chutils/config/custom_providers.py +290 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/config/getters.py +63 -2
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/config/manager.py +26 -2
- chutils-3.2.0/src/chutils/db.py +267 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/decorators.py +252 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/__init__.py +25 -23
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/ai_lint.py +437 -436
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/ast_indexer.py +1 -0
- chutils-3.2.0/src/chutils/dev/changelog_parser.py +194 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/chat_context.py +441 -441
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/constants.py +13 -13
- chutils-3.2.0/src/chutils/dev/dashboard/__init__.py +20 -0
- chutils-3.2.0/src/chutils/dev/dashboard/indexer.py +218 -0
- chutils-3.2.0/src/chutils/dev/dashboard/input.py +146 -0
- chutils-3.2.0/src/chutils/dev/dashboard/tui.py +593 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/env_parser.py +227 -227
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/env_sync.py +113 -113
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/few_shot/detector.py +225 -225
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/few_shot/models.py +61 -61
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/few_shot/renderer.py +455 -455
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/few_shot/writer.py +3 -4
- chutils-3.2.0/src/chutils/dev/github_actions.py +91 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/models/__init__.py +17 -17
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/models/base.py +35 -35
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/models/index.py +34 -34
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/models/node.py +19 -19
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/models/symbol.py +21 -21
- chutils-3.2.0/src/chutils/dev/profile_imports.py +351 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/rules/__init__.py +24 -20
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/rules/api_map.py +439 -439
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/rules/decomposition.py +96 -96
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/rules/dependency_sync.py +256 -256
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/rules/docstring.py +218 -210
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/rules/env.py +111 -111
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/rules/integration.py +263 -263
- chutils-3.2.0/src/chutils/dev/rules/linter_coverage.py +171 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/rules/manifest.py +74 -74
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/rules/security.py +99 -99
- chutils-3.2.0/src/chutils/dev/rules/upgrade_check.py +116 -0
- chutils-3.2.0/src/chutils/dev/upgrade_client.py +121 -0
- chutils-3.2.0/src/chutils/dev/version_detector.py +114 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/diagnostics/__init__.py +24 -24
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/diagnostics/models.py +98 -98
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/diagnostics/web.py +79 -79
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/env.pyi +34 -34
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/exceptions/__init__.py +80 -73
- chutils-3.2.0/src/chutils/exceptions/audit.py +15 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/exceptions/base.py +66 -66
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/exceptions/cache.py +7 -7
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/exceptions/config.py +52 -52
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/exceptions/di.py +19 -19
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/exceptions/events.py +34 -34
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/exceptions/logger.py +7 -7
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/exceptions/resilience.py +25 -13
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/exceptions/secrets.py +19 -19
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/exceptions/system.py +44 -44
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/exceptions/validation.py +148 -148
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/exceptions/watcher.py +7 -7
- chutils-3.2.0/src/chutils/http/__init__.py +51 -0
- chutils-3.2.0/src/chutils/http/api.py +167 -0
- chutils-3.2.0/src/chutils/http/client.py +678 -0
- chutils-3.2.0/src/chutils/http/fallback.py +455 -0
- chutils-3.2.0/src/chutils/http/resilience.py +402 -0
- chutils-3.2.0/src/chutils/http/tracing.py +139 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/lifecycle.py +1 -4
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/logger/internal/builder.py +2 -1
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/metrics/prometheus.py +2 -6
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/scraping/captcha/__init__.py +59 -59
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/scraping/captcha/base.py +71 -71
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/scraping/humanize/actions.py +268 -268
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/scraping/humanize/antidetect.py +123 -123
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/scraping/humanize/math_utils.py +223 -223
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/secret_manager/providers/__init__.py +47 -34
- chutils-3.2.0/src/chutils/secret_manager/providers/aws.py +134 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/secret_manager/providers/base.py +51 -51
- chutils-3.2.0/src/chutils/secret_manager/providers/gcp.py +168 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/secret_manager/providers/keyring_provider.py +124 -124
- chutils-3.2.0/src/chutils/tasks/__init__.pyi +49 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/tasks/core.py +18 -6
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/validation.py +138 -138
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/validation.pyi +13 -13
- chutils-3.2.0/tests/integration/__init__.py +0 -0
- chutils-3.2.0/tests/integration/test_db_migrations.py +351 -0
- chutils-3.2.0/tests/integration/test_setup_github_actions_integration.py +35 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/test_cli_dev_cmd.py +71 -2
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/test_cli_pypi.py +426 -426
- chutils-3.2.0/tests/unit/cli/test_cli_setup_github_actions.py +92 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/config/test_config_dev.py +187 -187
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/config/test_config_validation_group.py +42 -42
- chutils-3.2.0/tests/unit/config/test_custom_config_providers.py +401 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/decorators/test_decorator_circuit_breaker.py +238 -238
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/dev/test_ai_lint.py +744 -734
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/dev/test_ai_lint_staged.py +129 -129
- chutils-3.2.0/tests/unit/dev/test_changelog_parser.py +95 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/dev/test_env_parser.py +152 -152
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/dev/test_env_sync.py +49 -49
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/dev/test_generate_few_shot.py +511 -511
- chutils-3.2.0/tests/unit/dev/test_linter_coverage_rule.py +194 -0
- chutils-3.2.0/tests/unit/dev/test_setup_github_actions.py +75 -0
- chutils-3.2.0/tests/unit/dev/test_upgrade_check_rule.py +55 -0
- chutils-3.2.0/tests/unit/dev/test_upgrade_client.py +106 -0
- chutils-3.2.0/tests/unit/dev/test_version_detector.py +102 -0
- chutils-3.2.0/tests/unit/secret_manager/test_secret_manager_providers.py +455 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/tasks/test_scheduler.py +25 -1
- chutils-3.2.0/tests/unit/test_audit.py +365 -0
- chutils-3.2.0/tests/unit/test_audit_phase2.py +363 -0
- chutils-3.2.0/tests/unit/test_cli_db.py +321 -0
- chutils-3.2.0/tests/unit/test_dashboard.py +401 -0
- chutils-3.2.0/tests/unit/test_db_init.py +256 -0
- chutils-3.2.0/tests/unit/test_db_operations.py +258 -0
- chutils-3.2.0/tests/unit/test_decorators_bulkhead.py +269 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_diagnostics.py +367 -367
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_env.py +261 -261
- chutils-3.2.0/tests/unit/test_http_api.py +213 -0
- chutils-3.2.0/tests/unit/test_http_client.py +344 -0
- chutils-3.2.0/tests/unit/test_http_fallback.py +407 -0
- chutils-3.2.0/tests/unit/test_http_resilience.py +330 -0
- chutils-3.2.0/tests/unit/test_http_tracing.py +226 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_install_hooks.py +120 -120
- chutils-3.2.0/tests/unit/test_profile_imports.py +214 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_validation.py +242 -242
- {chutils-3.1.0 → chutils-3.2.0}/uv.lock +559 -210
- chutils-3.1.0/ai-lint.toml +0 -33
- chutils-3.1.0/conductor/archive/ai_lint_code_decomposition_20260715/index.md +0 -5
- chutils-3.1.0/conductor/archive/ai_lint_code_decomposition_20260715/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/ai_lint_code_decomposition_20260715/plan.md +0 -15
- chutils-3.1.0/conductor/archive/ai_lint_code_decomposition_20260715/spec.md +0 -23
- chutils-3.1.0/conductor/archive/ai_lint_file_dependencies_sync_20260715/index.md +0 -5
- chutils-3.1.0/conductor/archive/ai_lint_file_dependencies_sync_20260715/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/ai_lint_file_dependencies_sync_20260715/plan.md +0 -16
- chutils-3.1.0/conductor/archive/ai_lint_file_dependencies_sync_20260715/spec.md +0 -30
- chutils-3.1.0/conductor/archive/ai_lint_inline_ignore_20260707/index.md +0 -5
- chutils-3.1.0/conductor/archive/ai_lint_inline_ignore_20260707/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/ai_lint_inline_ignore_20260707/plan.md +0 -22
- chutils-3.1.0/conductor/archive/ai_lint_inline_ignore_20260707/spec.md +0 -39
- chutils-3.1.0/conductor/archive/ai_lint_staged_20260715/index.md +0 -5
- chutils-3.1.0/conductor/archive/ai_lint_staged_20260715/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/ai_lint_staged_20260715/plan.md +0 -16
- chutils-3.1.0/conductor/archive/ai_lint_staged_20260715/spec.md +0 -23
- chutils-3.1.0/conductor/archive/captcha_20260707/index.md +0 -5
- chutils-3.1.0/conductor/archive/captcha_20260707/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/captcha_20260707/plan.md +0 -41
- chutils-3.1.0/conductor/archive/captcha_20260707/spec.md +0 -52
- chutils-3.1.0/conductor/archive/chat_context_20260610/index.md +0 -5
- chutils-3.1.0/conductor/archive/chat_context_20260610/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/chat_context_20260610/plan.md +0 -39
- chutils-3.1.0/conductor/archive/chat_context_20260610/spec.md +0 -36
- chutils-3.1.0/conductor/archive/circuit_breaker_20260521/index.md +0 -5
- chutils-3.1.0/conductor/archive/circuit_breaker_20260521/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/circuit_breaker_20260521/plan.md +0 -45
- chutils-3.1.0/conductor/archive/circuit_breaker_20260521/spec.md +0 -50
- chutils-3.1.0/conductor/archive/cli_scaffold_20260610/index.md +0 -5
- chutils-3.1.0/conductor/archive/cli_scaffold_20260610/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/cli_scaffold_20260610/plan.md +0 -40
- chutils-3.1.0/conductor/archive/cli_scaffold_20260610/spec.md +0 -50
- chutils-3.1.0/conductor/archive/config_required_20260708/index.md +0 -5
- chutils-3.1.0/conductor/archive/config_required_20260708/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/config_required_20260708/plan.md +0 -27
- chutils-3.1.0/conductor/archive/config_required_20260708/spec.md +0 -52
- chutils-3.1.0/conductor/archive/context_metadata_20260714/index.md +0 -5
- chutils-3.1.0/conductor/archive/context_metadata_20260714/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/context_metadata_20260714/plan.md +0 -19
- chutils-3.1.0/conductor/archive/context_metadata_20260714/spec.md +0 -31
- chutils-3.1.0/conductor/archive/dependency_errors_20260707/index.md +0 -5
- chutils-3.1.0/conductor/archive/dependency_errors_20260707/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/dependency_errors_20260707/plan.md +0 -27
- chutils-3.1.0/conductor/archive/dependency_errors_20260707/spec.md +0 -37
- chutils-3.1.0/conductor/archive/dev_install_hooks_20260707/index.md +0 -5
- chutils-3.1.0/conductor/archive/dev_install_hooks_20260707/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/dev_install_hooks_20260707/plan.md +0 -23
- chutils-3.1.0/conductor/archive/dev_install_hooks_20260707/spec.md +0 -50
- chutils-3.1.0/conductor/archive/diagnostics_20260610/index.md +0 -5
- chutils-3.1.0/conductor/archive/diagnostics_20260610/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/diagnostics_20260610/plan.md +0 -42
- chutils-3.1.0/conductor/archive/diagnostics_20260610/spec.md +0 -40
- chutils-3.1.0/conductor/archive/drop_python39_20260610/index.md +0 -5
- chutils-3.1.0/conductor/archive/drop_python39_20260610/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/drop_python39_20260610/plan.md +0 -43
- chutils-3.1.0/conductor/archive/drop_python39_20260610/spec.md +0 -44
- chutils-3.1.0/conductor/archive/env_20260702/index.md +0 -5
- chutils-3.1.0/conductor/archive/env_20260702/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/env_20260702/plan.md +0 -33
- chutils-3.1.0/conductor/archive/env_20260702/spec.md +0 -53
- chutils-3.1.0/conductor/archive/exception_groups_20260708/index.md +0 -5
- chutils-3.1.0/conductor/archive/exception_groups_20260708/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/exception_groups_20260708/plan.md +0 -22
- chutils-3.1.0/conductor/archive/exception_groups_20260708/spec.md +0 -71
- chutils-3.1.0/conductor/archive/generate_few_shot_20260610/index.md +0 -5
- chutils-3.1.0/conductor/archive/generate_few_shot_20260610/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/generate_few_shot_20260610/plan.md +0 -42
- chutils-3.1.0/conductor/archive/generate_few_shot_20260610/spec.md +0 -44
- chutils-3.1.0/conductor/archive/mock_server_20260610/index.md +0 -5
- chutils-3.1.0/conductor/archive/mock_server_20260610/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/mock_server_20260610/plan.md +0 -43
- chutils-3.1.0/conductor/archive/mock_server_20260610/spec.md +0 -40
- chutils-3.1.0/conductor/archive/optional_dependencies_20260515/index.md +0 -5
- chutils-3.1.0/conductor/archive/optional_dependencies_20260515/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/optional_dependencies_20260515/plan.md +0 -38
- chutils-3.1.0/conductor/archive/optional_dependencies_20260515/spec.md +0 -25
- chutils-3.1.0/conductor/archive/pypi_mirror_check_20260713/index.md +0 -5
- chutils-3.1.0/conductor/archive/pypi_mirror_check_20260713/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/pypi_mirror_check_20260713/plan.md +0 -33
- chutils-3.1.0/conductor/archive/pypi_mirror_check_20260713/spec.md +0 -35
- chutils-3.1.0/conductor/archive/refactor_cli_dev_20260715/index.md +0 -5
- chutils-3.1.0/conductor/archive/refactor_cli_dev_20260715/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/refactor_cli_dev_20260715/plan.md +0 -38
- chutils-3.1.0/conductor/archive/refactor_cli_dev_20260715/spec.md +0 -44
- chutils-3.1.0/conductor/archive/scraping_humanize_20260707/index.md +0 -5
- chutils-3.1.0/conductor/archive/scraping_humanize_20260707/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/scraping_humanize_20260707/plan.md +0 -50
- chutils-3.1.0/conductor/archive/scraping_humanize_20260707/spec.md +0 -51
- chutils-3.1.0/conductor/archive/secrets_unification_20260708/index.md +0 -5
- chutils-3.1.0/conductor/archive/secrets_unification_20260708/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/secrets_unification_20260708/plan.md +0 -31
- chutils-3.1.0/conductor/archive/secrets_unification_20260708/spec.md +0 -47
- chutils-3.1.0/conductor/archive/sync_env_20260707/index.md +0 -5
- chutils-3.1.0/conductor/archive/sync_env_20260707/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/sync_env_20260707/plan.md +0 -37
- chutils-3.1.0/conductor/archive/sync_env_20260707/spec.md +0 -45
- chutils-3.1.0/conductor/archive/validation_20260702/index.md +0 -5
- chutils-3.1.0/conductor/archive/validation_20260702/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/validation_20260702/plan.md +0 -29
- chutils-3.1.0/conductor/archive/validation_20260702/spec.md +0 -42
- chutils-3.1.0/conductor/archive/web_20260707/index.md +0 -5
- chutils-3.1.0/conductor/archive/web_20260707/metadata.json +0 -8
- chutils-3.1.0/conductor/archive/web_20260707/plan.md +0 -45
- chutils-3.1.0/conductor/archive/web_20260707/spec.md +0 -49
- chutils-3.1.0/conductor/tracks.md +0 -99
- chutils-3.1.0/tests/unit/secret_manager/test_secret_manager_providers.py +0 -105
- {chutils-3.1.0 → chutils-3.2.0}/.gitattributes +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/.github/workflows/ci.yml +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/.github/workflows/publish-docs.yml +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/CODE_OF_CONDUCT.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/CONTRIBUTING.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/GEMINI.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/LICENSE +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/benchmarks/cold_start.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/.gitignore +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/GEMINI.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/audit_20260702/index.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/audit_20260702/metadata.json +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/audit_20260702/spec.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/bulkhead_20260702/index.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/bulkhead_20260702/metadata.json +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/bulkhead_20260702/plan.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/bulkhead_20260702/spec.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/cloud_secret_managers_20260511/index.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/cloud_secret_managers_20260511/metadata.json +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/cloud_secret_managers_20260511/plan.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/cloud_secret_managers_20260511/spec.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/custom_config_providers_20260714/index.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/custom_config_providers_20260714/metadata.json +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/custom_config_providers_20260714/spec.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/db_manager_20260707/index.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/db_manager_20260707/metadata.json +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/db_manager_20260707/spec.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/db_migrations_cli_20260707/index.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/db_migrations_cli_20260707/metadata.json +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/db_migrations_cli_20260707/spec.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/dev_dashboard_20260610/index.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/dev_dashboard_20260610/metadata.json +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/dev_dashboard_20260610/plan.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/dev_dashboard_20260610/spec.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/http_20260702/index.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/http_20260702/metadata.json +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/http_20260702/spec.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/profile_imports_20260610/index.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/profile_imports_20260610/metadata.json +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/profile_imports_20260610/plan.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/profile_imports_20260610/spec.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/setup_github_actions_20260714/index.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/setup_github_actions_20260714/metadata.json +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/setup_github_actions_20260714/plan.md +0 -0
- {chutils-3.1.0/conductor/tracks → chutils-3.2.0/conductor/archive}/setup_github_actions_20260714/spec.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/code_styleguides/python.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/index.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/product-guidelines.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/setup_state.json +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/ai_manifests_few_shot_20260713/index.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/ai_manifests_few_shot_20260713/metadata.json +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/ai_manifests_few_shot_20260713/plan.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/ai_manifests_few_shot_20260713/spec.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/cache_invalidation_20260714/index.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/cache_invalidation_20260714/metadata.json +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/cache_invalidation_20260714/plan.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/cache_invalidation_20260714/spec.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/config_remote_push_20260702/index.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/config_remote_push_20260702/metadata.json +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/config_remote_push_20260702/plan.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/config_remote_push_20260702/spec.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/dev_clean_20260707/index.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/dev_clean_20260707/metadata.json +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/dev_clean_20260707/plan.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/dev_clean_20260707/spec.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/dev_watch_20260702/index.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/dev_watch_20260702/metadata.json +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/dev_watch_20260702/plan.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/dev_watch_20260702/spec.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/docstring_audit_20260521/index.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/docstring_audit_20260521/metadata.json +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/docstring_audit_20260521/plan.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/docstring_audit_20260521/spec.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/fallback_alias_20260707/index.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/fallback_alias_20260707/metadata.json +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/fallback_alias_20260707/plan.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/fallback_alias_20260707/spec.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/qt_integration_20260521/index.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/qt_integration_20260521/metadata.json +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/qt_integration_20260521/plan.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/qt_integration_20260521/spec.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/qt_typed_signals_20260521/index.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/qt_typed_signals_20260521/metadata.json +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/qt_typed_signals_20260521/plan.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/qt_typed_signals_20260521/spec.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/scraping_concurrency_20260707/index.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/scraping_concurrency_20260707/metadata.json +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/scraping_concurrency_20260707/plan.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/scraping_concurrency_20260707/spec.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/store_20260702/index.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/store_20260702/metadata.json +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/store_20260702/plan.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/tracks/store_20260702/spec.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/conductor/workflow.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/CODE_OF_CONDUCT_RU.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/CONTRIBUTING_RU.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/INTEGRATION_AI.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/ai_examples/README.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/ai_examples/configuration/README.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/ai_examples/configuration/bad_pattern.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/ai_examples/configuration/good_pattern.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/ai_examples/error_handling/README.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/ai_examples/error_handling/bad_pattern.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/ai_examples/error_handling/good_pattern.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/ai_examples/logging/README.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/ai_examples/logging/bad_pattern.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/ai_examples/logging/good_pattern.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/ai_examples/optional_deps/README.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/ai_examples/optional_deps/bad_pattern.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/ai_examples/optional_deps/good_pattern.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/ai_examples/secrets/README.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/ai_examples/secrets/bad_pattern.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/ai_examples/secrets/good_pattern.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/ai_hints.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/cli/config.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/cli/init.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/cli/secrets.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/cli/show_paths.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/cli/template.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/cli/validate.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/migration.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/plugins.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/testing.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/docs/web.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/.env +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/01_configuration.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/02_logging.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/03_secrets.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/04_full_example.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/05_different_log_levels.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/06_local_config_override.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/07_decorators_example.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/08_multiple_loggers_example.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/09_disable_keyring.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/10_universal_env_override.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/11_retry_decorator.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/12_secret_masking.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/13_pydantic_validation.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/15_context_logging.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/17_timeout_decorator.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/18_config_hot_reload.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/19_remote_config.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/20_opentelemetry_tracing.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/21_config_diagnostics.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/22_circuit_breaker_decorator.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/22_safe_path_resolution.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/23_event_bus.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/24_task_scheduler.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/25_testing_fixtures_example.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/26_metrics_prometheus.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/27_rate_limiting.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/28_dependency_injection.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/captcha_solvers_usage.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/config.yml +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/scraping_humanize_usage.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/examples/web_client_usage.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/mkdocs.yml +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/__main__.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/cache/__init__.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/cache/base.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/cache/decorator.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/cache/in_memory.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/cache/utils.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/cli_booster.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/cli_utils.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/base.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/config.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/init.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/paths.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/secrets.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/template.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/utils.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/commands/validate.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/config/GEMINI.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/config/ast_fallback_parser.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/config/core.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/config/dev.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/config/diagnostics.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/config/generator.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/config/providers.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/config/schema.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/config/utils.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/config/watcher.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/context.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/crypto.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/few_shot/__init__.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/mock_server.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/project_metadata.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/dev/scaffold.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/di/__init__.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/di/container.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/diagnostics/manager.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/env.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/events/__init__.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/events/core.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/features.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/fs.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/logger/GEMINI.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/logger/__init__.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/logger/core.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/logger/formatters.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/logger/handlers.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/logger/internal/levels.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/logger/internal/utils.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/logger/masking.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/metrics/__init__.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/metrics/base.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/metrics/in_memory.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/metrics/timer.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/plugins/__init__.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/plugins/core.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/plugins/interfaces.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/scraping/__init__.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/scraping/captcha/anticaptcha.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/scraping/captcha/capmonster.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/scraping/captcha/exceptions.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/scraping/captcha/rucaptcha.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/scraping/humanize/__init__.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/secret_manager/GEMINI.md +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/secret_manager/__init__.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/secret_manager/core.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/secret_manager/providers/dotenv.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/secret_manager/providers/env.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/tasks/__init__.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/testing/__init__.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/testing/fixtures.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/text.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/time.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/tracing.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/typing.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/web/__init__.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/web/client.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/web/proxy_pool.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/src/chutils/web/user_agent.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/conftest.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/integration/test_ai_lint_integration.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/integration/test_cli_e2e.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/integration/test_event_loops.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/integration/test_examples.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/integration/test_hooks_integration.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/integration/test_masking_integration.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/integration/test_otel_tracing.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/integration/test_remote_config_integration.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/manual/manual_test_cli_booster.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/conftest.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/test_cli.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/test_cli_booster.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/test_cli_config.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/test_cli_config_cmd.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/test_cli_config_schema.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/test_cli_dev.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/test_cli_dev_tree.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/test_cli_diagnostics.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/test_cli_extras_suggestion.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/test_cli_init.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/test_cli_paths.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/test_cli_rich.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/test_cli_rich_width.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/test_cli_secrets.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/test_cli_template.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/test_cli_utils_internal.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/cli/test_cli_validate.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/config/test_config.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/config/test_config_ast_parser.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/config/test_config_diagnostics.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/config/test_config_env.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/config/test_config_env_loading.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/config/test_config_generator.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/config/test_config_json.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/config/test_config_pydantic.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/config/test_config_required.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/config/test_config_schema.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/config/test_config_tracing.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/config/test_config_universal_env.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/config/test_config_utils.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/config/test_config_watcher.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/config/test_priority_unification.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/config/test_remote_config.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/core/test_ast_indexer.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/core/test_ast_indexer_abstract.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/core/test_ast_indexer_graph.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/core/test_ast_indexer_layers.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/core/test_ast_indexer_metadata.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/core/test_cache.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/core/test_dev_models.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/core/test_exceptions.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/core/test_features.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/core/test_fs.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/core/test_lifecycle.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/core/test_thread_safety.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/core/test_time.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/decorators/test_decorator_retry.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/decorators/test_decorator_timeout.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/decorators/test_decorators.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/decorators/test_rate_limit.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/dev/test_chat_context.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/dev/test_mock_server.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/dev/test_scaffold.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/di/test_di.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/events/test_event_bus.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/logger/conftest.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/logger/test_basics.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/logger/test_compression.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/logger/test_config_sections.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/logger/test_configuration.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/logger/test_context.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/logger/test_env_control.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/logger/test_files.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/logger/test_json_format.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/logger/test_logger_rich_width.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/logger/test_masking.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/logger/test_performance_security.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/logger/test_rich.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/logger/test_rotation.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/metrics/test_metrics.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/plugins/test_integration.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/plugins/test_interfaces.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/plugins/test_plugins.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/secret_manager/test_secret_manager.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/secret_manager/test_secret_manager_env.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/secret_manager/test_secrets_required.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_ai_lint_ignore.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_anticaptcha.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_antidetect.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_async_web_client.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_capmonster.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_captcha_base.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_captcha_imports.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_crypto.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_crypto_dependencies.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_events_exception_group.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_humanize_math.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_minimal_imports.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_playwright_humanize.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_proxy_pool.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_rucaptcha.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_scraping_imports.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_selenium_humanize.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_text.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_text_dependencies.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_user_agent.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_web_client.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/test_web_imports.py +0 -0
- {chutils-3.1.0 → chutils-3.2.0}/tests/unit/testing/test_fixtures.py +0 -0
|
@@ -1,185 +1,186 @@
|
|
|
1
|
-
# Byte-compiled / optimized / DLL files
|
|
2
|
-
__pycache__/
|
|
3
|
-
*.py[cod]
|
|
4
|
-
*$py.class
|
|
5
|
-
|
|
6
|
-
# C extensions
|
|
7
|
-
*.so
|
|
8
|
-
|
|
9
|
-
# Distribution / packaging
|
|
10
|
-
.Python
|
|
11
|
-
build/
|
|
12
|
-
develop-eggs/
|
|
13
|
-
dist/
|
|
14
|
-
downloads/
|
|
15
|
-
eggs/
|
|
16
|
-
.eggs/
|
|
17
|
-
lib/
|
|
18
|
-
lib64/
|
|
19
|
-
parts/
|
|
20
|
-
sdist/
|
|
21
|
-
var/
|
|
22
|
-
wheels/
|
|
23
|
-
share/python-wheels/
|
|
24
|
-
*.egg-info/
|
|
25
|
-
.installed.cfg
|
|
26
|
-
*.egg
|
|
27
|
-
MANIFEST
|
|
28
|
-
|
|
29
|
-
# PyInstaller
|
|
30
|
-
# Usually these files are written by a python script from a template
|
|
31
|
-
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
-
*.manifest
|
|
33
|
-
*.spec
|
|
34
|
-
|
|
35
|
-
# Installer logs
|
|
36
|
-
pip-log.txt
|
|
37
|
-
pip-delete-this-directory.txt
|
|
38
|
-
|
|
39
|
-
# Unit test / coverage reports
|
|
40
|
-
htmlcov/
|
|
41
|
-
.tox/
|
|
42
|
-
.nox/
|
|
43
|
-
.coverage
|
|
44
|
-
.coverage.*
|
|
45
|
-
.cache
|
|
46
|
-
nosetests.xml
|
|
47
|
-
coverage.xml
|
|
48
|
-
*.cover
|
|
49
|
-
*.py,cover
|
|
50
|
-
.hypothesis/
|
|
51
|
-
.pytest_cache/
|
|
52
|
-
cover/
|
|
53
|
-
|
|
54
|
-
# Translations
|
|
55
|
-
*.mo
|
|
56
|
-
*.pot
|
|
57
|
-
|
|
58
|
-
# Django stuff:
|
|
59
|
-
*.log
|
|
60
|
-
local_settings.py
|
|
61
|
-
db.sqlite3
|
|
62
|
-
db.sqlite3-journal
|
|
63
|
-
|
|
64
|
-
# Flask stuff:
|
|
65
|
-
instance/
|
|
66
|
-
.webassets-cache
|
|
67
|
-
|
|
68
|
-
# Scrapy stuff:
|
|
69
|
-
.scrapy
|
|
70
|
-
|
|
71
|
-
# Sphinx documentation
|
|
72
|
-
docs/_build/
|
|
73
|
-
|
|
74
|
-
# PyBuilder
|
|
75
|
-
.pybuilder/
|
|
76
|
-
target/
|
|
77
|
-
|
|
78
|
-
# Jupyter Notebook
|
|
79
|
-
.ipynb_checkpoints
|
|
80
|
-
|
|
81
|
-
# IPython
|
|
82
|
-
profile_default/
|
|
83
|
-
ipython_config.py
|
|
84
|
-
|
|
85
|
-
# pyenv
|
|
86
|
-
# For a library or package, you might want to ignore these files since the code is
|
|
87
|
-
# intended to run in multiple environments; otherwise, check them in:
|
|
88
|
-
# .python-version
|
|
89
|
-
|
|
90
|
-
# pipenv
|
|
91
|
-
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
92
|
-
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
93
|
-
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
94
|
-
# install all needed dependencies.
|
|
95
|
-
#Pipfile.lock
|
|
96
|
-
|
|
97
|
-
# UV
|
|
98
|
-
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
99
|
-
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
100
|
-
# commonly ignored for libraries.
|
|
101
|
-
#uv.lock
|
|
102
|
-
|
|
103
|
-
# poetry
|
|
104
|
-
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
105
|
-
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
106
|
-
# commonly ignored for libraries.
|
|
107
|
-
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
108
|
-
#poetry.lock
|
|
109
|
-
|
|
110
|
-
# pdm
|
|
111
|
-
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
112
|
-
#pdm.lock
|
|
113
|
-
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
|
114
|
-
# in version control.
|
|
115
|
-
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
|
|
116
|
-
.pdm.toml
|
|
117
|
-
.pdm-python
|
|
118
|
-
.pdm-build/
|
|
119
|
-
|
|
120
|
-
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
121
|
-
__pypackages__/
|
|
122
|
-
|
|
123
|
-
# Celery stuff
|
|
124
|
-
celerybeat-schedule
|
|
125
|
-
celerybeat.pid
|
|
126
|
-
|
|
127
|
-
# SageMath parsed files
|
|
128
|
-
*.sage.py
|
|
129
|
-
|
|
130
|
-
# Environments
|
|
131
|
-
.env
|
|
132
|
-
.venv
|
|
133
|
-
env/
|
|
134
|
-
venv/
|
|
135
|
-
ENV/
|
|
136
|
-
env.bak/
|
|
137
|
-
venv.bak/
|
|
138
|
-
!examples/.env
|
|
139
|
-
|
|
140
|
-
# Spyder project settings
|
|
141
|
-
.spyderproject
|
|
142
|
-
.spyproject
|
|
143
|
-
|
|
144
|
-
# Rope project settings
|
|
145
|
-
.ropeproject
|
|
146
|
-
|
|
147
|
-
# mkdocs documentation
|
|
148
|
-
/site
|
|
149
|
-
|
|
150
|
-
# mypy
|
|
151
|
-
.mypy_cache/
|
|
152
|
-
.dmypy.json
|
|
153
|
-
dmypy.json
|
|
154
|
-
|
|
155
|
-
# Pyre type checker
|
|
156
|
-
.pyre/
|
|
157
|
-
|
|
158
|
-
# pytype static type analyzer
|
|
159
|
-
.pytype/
|
|
160
|
-
|
|
161
|
-
# Cython debug symbols
|
|
162
|
-
cython_debug/
|
|
163
|
-
|
|
164
|
-
# PyCharm
|
|
165
|
-
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
166
|
-
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
167
|
-
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
168
|
-
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
169
|
-
.idea/
|
|
170
|
-
|
|
171
|
-
# Ruff stuff:
|
|
172
|
-
.ruff_cache/
|
|
173
|
-
|
|
174
|
-
# PyPI configuration file
|
|
175
|
-
.pypirc
|
|
176
|
-
|
|
177
|
-
# Project-specific documentation
|
|
178
|
-
PUBLISHING.md
|
|
179
|
-
project.txt
|
|
180
|
-
changelog.txt
|
|
181
|
-
*.log.*
|
|
182
|
-
*.log
|
|
183
|
-
|
|
184
|
-
# Local chutils cache
|
|
185
|
-
.chutils/
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
# Usually these files are written by a python script from a template
|
|
31
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
+
*.manifest
|
|
33
|
+
*.spec
|
|
34
|
+
|
|
35
|
+
# Installer logs
|
|
36
|
+
pip-log.txt
|
|
37
|
+
pip-delete-this-directory.txt
|
|
38
|
+
|
|
39
|
+
# Unit test / coverage reports
|
|
40
|
+
htmlcov/
|
|
41
|
+
.tox/
|
|
42
|
+
.nox/
|
|
43
|
+
.coverage
|
|
44
|
+
.coverage.*
|
|
45
|
+
.cache
|
|
46
|
+
nosetests.xml
|
|
47
|
+
coverage.xml
|
|
48
|
+
*.cover
|
|
49
|
+
*.py,cover
|
|
50
|
+
.hypothesis/
|
|
51
|
+
.pytest_cache/
|
|
52
|
+
cover/
|
|
53
|
+
|
|
54
|
+
# Translations
|
|
55
|
+
*.mo
|
|
56
|
+
*.pot
|
|
57
|
+
|
|
58
|
+
# Django stuff:
|
|
59
|
+
*.log
|
|
60
|
+
local_settings.py
|
|
61
|
+
db.sqlite3
|
|
62
|
+
db.sqlite3-journal
|
|
63
|
+
|
|
64
|
+
# Flask stuff:
|
|
65
|
+
instance/
|
|
66
|
+
.webassets-cache
|
|
67
|
+
|
|
68
|
+
# Scrapy stuff:
|
|
69
|
+
.scrapy
|
|
70
|
+
|
|
71
|
+
# Sphinx documentation
|
|
72
|
+
docs/_build/
|
|
73
|
+
|
|
74
|
+
# PyBuilder
|
|
75
|
+
.pybuilder/
|
|
76
|
+
target/
|
|
77
|
+
|
|
78
|
+
# Jupyter Notebook
|
|
79
|
+
.ipynb_checkpoints
|
|
80
|
+
|
|
81
|
+
# IPython
|
|
82
|
+
profile_default/
|
|
83
|
+
ipython_config.py
|
|
84
|
+
|
|
85
|
+
# pyenv
|
|
86
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
87
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
88
|
+
# .python-version
|
|
89
|
+
|
|
90
|
+
# pipenv
|
|
91
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
92
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
93
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
94
|
+
# install all needed dependencies.
|
|
95
|
+
#Pipfile.lock
|
|
96
|
+
|
|
97
|
+
# UV
|
|
98
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
99
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
100
|
+
# commonly ignored for libraries.
|
|
101
|
+
#uv.lock
|
|
102
|
+
|
|
103
|
+
# poetry
|
|
104
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
105
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
106
|
+
# commonly ignored for libraries.
|
|
107
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
108
|
+
#poetry.lock
|
|
109
|
+
|
|
110
|
+
# pdm
|
|
111
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
112
|
+
#pdm.lock
|
|
113
|
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
|
114
|
+
# in version control.
|
|
115
|
+
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
|
|
116
|
+
.pdm.toml
|
|
117
|
+
.pdm-python
|
|
118
|
+
.pdm-build/
|
|
119
|
+
|
|
120
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
121
|
+
__pypackages__/
|
|
122
|
+
|
|
123
|
+
# Celery stuff
|
|
124
|
+
celerybeat-schedule
|
|
125
|
+
celerybeat.pid
|
|
126
|
+
|
|
127
|
+
# SageMath parsed files
|
|
128
|
+
*.sage.py
|
|
129
|
+
|
|
130
|
+
# Environments
|
|
131
|
+
.env
|
|
132
|
+
.venv
|
|
133
|
+
env/
|
|
134
|
+
venv/
|
|
135
|
+
ENV/
|
|
136
|
+
env.bak/
|
|
137
|
+
venv.bak/
|
|
138
|
+
!examples/.env
|
|
139
|
+
|
|
140
|
+
# Spyder project settings
|
|
141
|
+
.spyderproject
|
|
142
|
+
.spyproject
|
|
143
|
+
|
|
144
|
+
# Rope project settings
|
|
145
|
+
.ropeproject
|
|
146
|
+
|
|
147
|
+
# mkdocs documentation
|
|
148
|
+
/site
|
|
149
|
+
|
|
150
|
+
# mypy
|
|
151
|
+
.mypy_cache/
|
|
152
|
+
.dmypy.json
|
|
153
|
+
dmypy.json
|
|
154
|
+
|
|
155
|
+
# Pyre type checker
|
|
156
|
+
.pyre/
|
|
157
|
+
|
|
158
|
+
# pytype static type analyzer
|
|
159
|
+
.pytype/
|
|
160
|
+
|
|
161
|
+
# Cython debug symbols
|
|
162
|
+
cython_debug/
|
|
163
|
+
|
|
164
|
+
# PyCharm
|
|
165
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
166
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
167
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
168
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
169
|
+
.idea/
|
|
170
|
+
|
|
171
|
+
# Ruff stuff:
|
|
172
|
+
.ruff_cache/
|
|
173
|
+
|
|
174
|
+
# PyPI configuration file
|
|
175
|
+
.pypirc
|
|
176
|
+
|
|
177
|
+
# Project-specific documentation
|
|
178
|
+
PUBLISHING.md
|
|
179
|
+
project.txt
|
|
180
|
+
changelog.txt
|
|
181
|
+
*.log.*
|
|
182
|
+
*.log
|
|
183
|
+
|
|
184
|
+
# Local chutils cache
|
|
185
|
+
.chutils/
|
|
186
|
+
.chutils_dashboard_history.json
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: chutils
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.2.0
|
|
4
4
|
Summary: Набор простых и удобных утилит для Python, который избавляет от рутины при работе с конфигурацией и логированием в новых проектах.
|
|
5
5
|
Author-email: Chu4hel <sergeiivanov636@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -9,14 +9,23 @@ Requires-Python: <3.15,>=3.10
|
|
|
9
9
|
Requires-Dist: exceptiongroup>=1.2.2; python_version < '3.11'
|
|
10
10
|
Requires-Dist: python-dotenv>=1.2.2
|
|
11
11
|
Requires-Dist: pyyaml>=6.0.3
|
|
12
|
+
Provides-Extra: aws
|
|
13
|
+
Requires-Dist: boto3>=1.34.0; extra == 'aws'
|
|
12
14
|
Provides-Extra: captcha
|
|
13
15
|
Requires-Dist: httpx>=0.27.0; extra == 'captcha'
|
|
14
16
|
Provides-Extra: crypto
|
|
15
17
|
Requires-Dist: cryptography>=42.0.0; extra == 'crypto'
|
|
16
18
|
Provides-Extra: date
|
|
17
19
|
Requires-Dist: python-dateutil>=2.9.0; extra == 'date'
|
|
20
|
+
Provides-Extra: db
|
|
21
|
+
Requires-Dist: aiosqlite>=0.20.0; extra == 'db'
|
|
22
|
+
Requires-Dist: alembic>=1.13.0; extra == 'db'
|
|
23
|
+
Requires-Dist: asyncpg>=0.29.0; extra == 'db'
|
|
24
|
+
Requires-Dist: sqlalchemy>=2.0.0; extra == 'db'
|
|
18
25
|
Provides-Extra: full
|
|
26
|
+
Requires-Dist: boto3>=1.34.0; extra == 'full'
|
|
19
27
|
Requires-Dist: cryptography>=42.0.0; extra == 'full'
|
|
28
|
+
Requires-Dist: google-cloud-secret-manager>=2.20.0; extra == 'full'
|
|
20
29
|
Requires-Dist: httpx>=0.27.0; extra == 'full'
|
|
21
30
|
Requires-Dist: keyring>=25.7.0; extra == 'full'
|
|
22
31
|
Requires-Dist: opentelemetry-api>=1.41.1; extra == 'full'
|
|
@@ -32,6 +41,8 @@ Requires-Dist: rapidfuzz>=3.9.0; extra == 'full'
|
|
|
32
41
|
Requires-Dist: rich>=15.0.0; extra == 'full'
|
|
33
42
|
Requires-Dist: selenium>=4.27.0; extra == 'full'
|
|
34
43
|
Requires-Dist: watchdog>=6.0.0; extra == 'full'
|
|
44
|
+
Provides-Extra: gcp
|
|
45
|
+
Requires-Dist: google-cloud-secret-manager>=2.20.0; extra == 'gcp'
|
|
35
46
|
Provides-Extra: json
|
|
36
47
|
Requires-Dist: python-json-logger>=3.2.1; extra == 'json'
|
|
37
48
|
Provides-Extra: metrics
|
|
@@ -278,20 +289,71 @@ To use this feature, install `watchdog`:
|
|
|
278
289
|
|
|
279
290
|
### 3. Secret Management
|
|
280
291
|
|
|
281
|
-
`SecretManager`
|
|
292
|
+
`SecretManager` provides a unified abstraction for managing secrets using a custom chain of providers (`SecretProvider`)
|
|
293
|
+
and automatic fallback logic.
|
|
294
|
+
|
|
295
|
+
By default, `SecretManager` searches for secrets in the following order: **Keyring > .env File > Environment Variables
|
|
296
|
+
**.
|
|
282
297
|
|
|
283
298
|
```python
|
|
284
299
|
from chutils import SecretManager
|
|
285
300
|
|
|
286
301
|
secrets = SecretManager("my_awesome_app")
|
|
287
302
|
|
|
288
|
-
# Save
|
|
303
|
+
# Save secret (will be written to the first writable provider in the chain)
|
|
289
304
|
secrets.save_secret("API_KEY", "secret-value-123")
|
|
290
305
|
|
|
291
|
-
#
|
|
306
|
+
# Retrieve secret
|
|
292
307
|
key = secrets.get_secret("API_KEY")
|
|
293
308
|
```
|
|
294
309
|
|
|
310
|
+
#### Built-in Providers
|
|
311
|
+
|
|
312
|
+
You can configure the providers list explicitly:
|
|
313
|
+
|
|
314
|
+
```python
|
|
315
|
+
from chutils import SecretManager
|
|
316
|
+
from chutils.secret_manager.providers import KeyringProvider, DotEnvProvider, EnvProvider
|
|
317
|
+
|
|
318
|
+
secrets = SecretManager(
|
|
319
|
+
service_name="my_app",
|
|
320
|
+
providers=[
|
|
321
|
+
KeyringProvider(),
|
|
322
|
+
DotEnvProvider(),
|
|
323
|
+
EnvProvider()
|
|
324
|
+
]
|
|
325
|
+
)
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
#### Cloud Secret Managers
|
|
329
|
+
|
|
330
|
+
The library supports transparent integration with AWS Secrets Manager and Google Secret Manager:
|
|
331
|
+
|
|
332
|
+
```python
|
|
333
|
+
from chutils import SecretManager
|
|
334
|
+
from chutils.secret_manager.providers import AWSSecretManagerProvider, GCPSecretManagerProvider, EnvProvider
|
|
335
|
+
|
|
336
|
+
# Initialize cloud providers (requires installation of chutils[aws,gcp])
|
|
337
|
+
aws_provider = AWSSecretManagerProvider(region_name="us-east-1")
|
|
338
|
+
gcp_provider = GCPSecretManagerProvider(project_id="my-gcp-project")
|
|
339
|
+
|
|
340
|
+
# Create a SecretManager with the chain: AWS -> GCP -> Environment Variables.
|
|
341
|
+
# If AWS or GCP calls fail due to network/permissions or the secret is missing,
|
|
342
|
+
# SecretManager logs a warning and automatically falls back to EnvProvider.
|
|
343
|
+
secrets = SecretManager(
|
|
344
|
+
service_name="my_service",
|
|
345
|
+
providers=[aws_provider, gcp_provider, EnvProvider()]
|
|
346
|
+
)
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
Install cloud dependencies:
|
|
350
|
+
|
|
351
|
+
```bash
|
|
352
|
+
pip install chutils[aws] # For AWS (boto3)
|
|
353
|
+
pip install chutils[gcp] # For GCP (google-cloud-secret-manager)
|
|
354
|
+
pip install chutils[all] # For all optional packages
|
|
355
|
+
```
|
|
356
|
+
|
|
295
357
|
#### Disabling Keyring (Optional)
|
|
296
358
|
|
|
297
359
|
In environments like Docker or CI/CD where `keyring` is unavailable, you can suppress warnings and skip the check:
|
|
@@ -217,20 +217,71 @@ To use this feature, install `watchdog`:
|
|
|
217
217
|
|
|
218
218
|
### 3. Secret Management
|
|
219
219
|
|
|
220
|
-
`SecretManager`
|
|
220
|
+
`SecretManager` provides a unified abstraction for managing secrets using a custom chain of providers (`SecretProvider`)
|
|
221
|
+
and automatic fallback logic.
|
|
222
|
+
|
|
223
|
+
By default, `SecretManager` searches for secrets in the following order: **Keyring > .env File > Environment Variables
|
|
224
|
+
**.
|
|
221
225
|
|
|
222
226
|
```python
|
|
223
227
|
from chutils import SecretManager
|
|
224
228
|
|
|
225
229
|
secrets = SecretManager("my_awesome_app")
|
|
226
230
|
|
|
227
|
-
# Save
|
|
231
|
+
# Save secret (will be written to the first writable provider in the chain)
|
|
228
232
|
secrets.save_secret("API_KEY", "secret-value-123")
|
|
229
233
|
|
|
230
|
-
#
|
|
234
|
+
# Retrieve secret
|
|
231
235
|
key = secrets.get_secret("API_KEY")
|
|
232
236
|
```
|
|
233
237
|
|
|
238
|
+
#### Built-in Providers
|
|
239
|
+
|
|
240
|
+
You can configure the providers list explicitly:
|
|
241
|
+
|
|
242
|
+
```python
|
|
243
|
+
from chutils import SecretManager
|
|
244
|
+
from chutils.secret_manager.providers import KeyringProvider, DotEnvProvider, EnvProvider
|
|
245
|
+
|
|
246
|
+
secrets = SecretManager(
|
|
247
|
+
service_name="my_app",
|
|
248
|
+
providers=[
|
|
249
|
+
KeyringProvider(),
|
|
250
|
+
DotEnvProvider(),
|
|
251
|
+
EnvProvider()
|
|
252
|
+
]
|
|
253
|
+
)
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
#### Cloud Secret Managers
|
|
257
|
+
|
|
258
|
+
The library supports transparent integration with AWS Secrets Manager and Google Secret Manager:
|
|
259
|
+
|
|
260
|
+
```python
|
|
261
|
+
from chutils import SecretManager
|
|
262
|
+
from chutils.secret_manager.providers import AWSSecretManagerProvider, GCPSecretManagerProvider, EnvProvider
|
|
263
|
+
|
|
264
|
+
# Initialize cloud providers (requires installation of chutils[aws,gcp])
|
|
265
|
+
aws_provider = AWSSecretManagerProvider(region_name="us-east-1")
|
|
266
|
+
gcp_provider = GCPSecretManagerProvider(project_id="my-gcp-project")
|
|
267
|
+
|
|
268
|
+
# Create a SecretManager with the chain: AWS -> GCP -> Environment Variables.
|
|
269
|
+
# If AWS or GCP calls fail due to network/permissions or the secret is missing,
|
|
270
|
+
# SecretManager logs a warning and automatically falls back to EnvProvider.
|
|
271
|
+
secrets = SecretManager(
|
|
272
|
+
service_name="my_service",
|
|
273
|
+
providers=[aws_provider, gcp_provider, EnvProvider()]
|
|
274
|
+
)
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
Install cloud dependencies:
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
pip install chutils[aws] # For AWS (boto3)
|
|
281
|
+
pip install chutils[gcp] # For GCP (google-cloud-secret-manager)
|
|
282
|
+
pip install chutils[all] # For all optional packages
|
|
283
|
+
```
|
|
284
|
+
|
|
234
285
|
#### Disabling Keyring (Optional)
|
|
235
286
|
|
|
236
287
|
In environments like Docker or CI/CD where `keyring` is unavailable, you can suppress warnings and skip the check:
|