| src/app/__init__.py |
(no function) |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/app/main.py |
greet |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/app/main.py |
main |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/app/main.py |
(no function) |
|
100% |
5 |
0 |
2 |
|
100% |
0 |
0 |
|
100% |
| src/app/secure_system.py |
UserNotFoundError.__init__ |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/app/secure_system.py |
UserAlreadyExistsError.__init__ |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/app/secure_system.py |
UserCreationError.__init__ |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/app/secure_system.py |
UserRepository.save |
|
100% |
0 |
0 |
7 |
|
100% |
0 |
0 |
|
100% |
| src/app/secure_system.py |
UserRepository.get_by_id |
|
100% |
0 |
0 |
10 |
|
100% |
0 |
0 |
|
100% |
| src/app/secure_system.py |
InMemoryUserRepository.__init__ |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/app/secure_system.py |
InMemoryUserRepository.save |
|
100% |
5 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/app/secure_system.py |
InMemoryUserRepository.get_by_id |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/app/secure_system.py |
UserService.__init__ |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/app/secure_system.py |
UserService.create_user |
|
100% |
18 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/app/secure_system.py |
UserService.get_user |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/app/secure_system.py |
(no function) |
|
100% |
36 |
0 |
4 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/__init__.py |
(no function) |
|
100% |
5 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/__init__.py |
(no function) |
|
100% |
5 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/_imports.py |
require_dependency |
|
100% |
6 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/_imports.py |
get_attr_or_err |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/_imports.py |
(no function) |
|
100% |
5 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/db_bridge.py |
_breaker_is_open |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/bridges/db_bridge.py |
ResilientDatabase.__init__ |
|
100% |
3 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/db_bridge.py |
ResilientDatabase._check_db_dependencies |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/bridges/db_bridge.py |
ResilientDatabase._check_breaker_gate |
|
100% |
5 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/bridges/db_bridge.py |
ResilientDatabase._handle_attempt_failure |
|
100% |
8 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/bridges/db_bridge.py |
ResilientDatabase._execute_single_attempt |
|
100% |
6 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/db_bridge.py |
ResilientDatabase._process_attempt |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/bridges/db_bridge.py |
ResilientDatabase._execute_loop |
|
100% |
9 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/bridges/db_bridge.py |
ResilientDatabase.execute |
|
100% |
10 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/bridges/db_bridge.py |
ResilientDatabase.health_check |
|
100% |
8 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/bridges/db_bridge.py |
ResilientRedis.__init__ |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/db_bridge.py |
ResilientRedis._check_redis_dependencies |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/bridges/db_bridge.py |
ResilientRedis._check_breaker_gate |
|
100% |
5 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/bridges/db_bridge.py |
ResilientRedis._execute_command |
|
100% |
9 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/bridges/db_bridge.py |
ResilientRedis.execute |
|
100% |
7 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/bridges/db_bridge.py |
ResilientRedis.health_check |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/bridges/db_bridge.py |
(no function) |
|
100% |
38 |
0 |
5 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
_check_circuit_breaker |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
_check_ssrf |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
_should_retry_status |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
_handle_http_exception |
|
100% |
7 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
_execute_single_attempt |
|
100% |
12 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
_execute_with_retries |
|
100% |
9 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
_check_preconditions |
|
100% |
8 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
safe_request |
|
100% |
7 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
safe_request._do_request |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
SafeHttpClient.__init__ |
|
100% |
7 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
SafeHttpClient.__aenter__ |
|
100% |
5 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
SafeHttpClient.__aexit__ |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
SafeHttpClient.request |
|
100% |
7 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
SafeHttpClient.request._do_request |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
SafeHttpClient.get |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
SafeHttpClient.post |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
SafeHttpClient.put |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
SafeHttpClient.delete |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
SafeHttpClient.patch |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/http_bridge.py |
(no function) |
|
100% |
62 |
0 |
4 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/web_bridge.py |
SecurityHeadersConfig.to_headers |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/web_bridge.py |
result_to_response |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/bridges/web_bridge.py |
_send_json_response |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/bridges/web_bridge.py |
TaipanMiddleware.__init__ |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/bridges/web_bridge.py |
TaipanMiddleware._wrap_send_with_security_headers |
|
100% |
5 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/bridges/web_bridge.py |
TaipanMiddleware._wrap_send_with_security_headers.send_with_headers |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/bridges/web_bridge.py |
TaipanMiddleware._handle_rate_limit |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/bridges/web_bridge.py |
TaipanMiddleware.__call__ |
|
100% |
11 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/bridges/web_bridge.py |
(no function) |
|
100% |
30 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/__init__.py |
(no function) |
|
100% |
3 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/generators.py |
_generate_ruff_config |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/generators.py |
_generate_mypy_config |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/generators.py |
_generate_pytest_config |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/generators.py |
_generate_coverage_config |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/generators.py |
generate_pyproject_config |
|
100% |
3 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/generators.py |
_generate_bandit_hook |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/generators.py |
_generate_pip_audit_hook |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/generators.py |
_generate_semgrep_hook |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/generators.py |
_generate_detect_secrets_hook |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/generators.py |
_generate_paranoid_hooks |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/generators.py |
_collect_security_hooks |
|
100% |
12 |
0 |
0 |
|
100% |
10 |
0 |
|
100% |
| src/taipanstack/config/generators.py |
generate_pre_commit_config |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/generators.py |
generate_security_policy |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/generators.py |
(no function) |
|
100% |
14 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/models.py |
StackConfig.validate_project_name |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/config/models.py |
StackConfig.validate_python_version |
|
100% |
11 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/config/models.py |
StackConfig.validate_project_dir |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/config/models.py |
StackConfig.validate_config_consistency |
|
100% |
5 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/config/models.py |
StackConfig.to_target_version |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/models.py |
(no function) |
|
100% |
49 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/version_config.py |
VersionRecommendations.to_dict |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/version_config.py |
_get_311_recommendations |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/version_config.py |
_get_312_recommendations |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/version_config.py |
_get_313_recommendations |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/version_config.py |
_get_314_recommendations |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/config/version_config.py |
get_version_recommendations |
|
100% |
7 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/config/version_config.py |
(no function) |
|
100% |
29 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/__init__.py |
(no function) |
|
100% |
3 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/compat.py |
_check_jit_available |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/core/compat.py |
_check_free_threading_available |
|
100% |
9 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/core/compat.py |
_check_mimalloc_available |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/core/compat.py |
_check_tail_call_interpreter |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/compat.py |
is_experimental_enabled |
|
100% |
5 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/core/compat.py |
get_optimization_level |
|
100% |
8 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/core/compat.py |
PythonFeatures.to_dict |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/compat.py |
_get_version_tier |
|
100% |
7 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/core/compat.py |
_get_build_features |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/compat.py |
_get_language_features |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/compat.py |
get_features |
|
100% |
10 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/core/compat.py |
get_python_info |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/compat.py |
(no function) |
|
100% |
60 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/optimizations.py |
OptimizationResult.to_dict |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/optimizations.py |
_get_base_profile |
|
100% |
7 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/core/optimizations.py |
_build_aggressive_profile |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/optimizations.py |
get_optimization_profile |
|
100% |
12 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/core/optimizations.py |
_apply_gc_tuning |
|
100% |
6 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/optimizations.py |
_apply_gc_freeze |
|
100% |
12 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/core/optimizations.py |
_apply_experimental |
|
100% |
8 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/core/optimizations.py |
_log_optimization_summary |
|
100% |
6 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/core/optimizations.py |
apply_optimizations |
|
100% |
16 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/core/optimizations.py |
get_recommended_thread_pool_size |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/optimizations.py |
(no function) |
|
100% |
46 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/result.py |
safe |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/result.py |
safe |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/result.py |
safe |
|
100% |
11 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/core/result.py |
safe.async_wrapper |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/result.py |
safe.wrapper |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/result.py |
SafeFromDecorator.__call__ |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/result.py |
SafeFromDecorator.__call__ |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/result.py |
safe_from |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/result.py |
safe_from.decorator |
|
100% |
9 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/core/result.py |
safe_from.decorator.async_wrapper |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/result.py |
safe_from.decorator.wrapper |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/result.py |
_collect_list |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/result.py |
_collect_iterable |
|
100% |
11 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/core/result.py |
collect_results |
|
100% |
5 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/core/result.py |
map_async |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/result.py |
map_async |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/result.py |
map_async |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/result.py |
map_async |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/core/result.py |
and_then_async |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/result.py |
and_then_async |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/result.py |
and_then_async |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/core/result.py |
and_then_async |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/core/result.py |
(no function) |
|
100% |
19 |
0 |
35 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/__init__.py |
(no function) |
|
100% |
6 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/__init__.py |
(no function) |
|
100% |
5 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_breaker.py |
AdaptiveCircuitBreaker.__init__ |
|
100% |
12 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_breaker.py |
AdaptiveCircuitBreaker._calculate_elapsed_time |
|
100% |
5 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_breaker.py |
AdaptiveCircuitBreaker._check_half_open_transition |
|
100% |
5 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_breaker.py |
AdaptiveCircuitBreaker.state |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_breaker.py |
AdaptiveCircuitBreaker._calculate_error_rate |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_breaker.py |
AdaptiveCircuitBreaker._get_safe_target_rate |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_breaker.py |
AdaptiveCircuitBreaker._transition_to_open |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_breaker.py |
AdaptiveCircuitBreaker._evaluate_trip |
|
100% |
9 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_breaker.py |
AdaptiveCircuitBreaker.record_success |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_breaker.py |
AdaptiveCircuitBreaker.record_failure |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_breaker.py |
AdaptiveCircuitBreaker.evaluate_result |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_breaker.py |
AdaptiveCircuitBreaker.should_allow |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_breaker.py |
AdaptiveCircuitBreaker.reset |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_breaker.py |
AdaptiveCircuitBreaker.metrics |
|
100% |
7 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_breaker.py |
(no function) |
|
100% |
36 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_retry.py |
AdaptiveRetry.__init__ |
|
100% |
6 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_retry.py |
AdaptiveRetry.record_outcome |
|
100% |
5 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_retry.py |
AdaptiveRetry.get_delay |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_retry.py |
AdaptiveRetry.to_retry_config |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_retry.py |
AdaptiveRetry._calculate_delay_metrics |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_retry.py |
AdaptiveRetry.metrics |
|
100% |
7 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/adaptive_retry.py |
(no function) |
|
100% |
27 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/bulkhead.py |
BulkheadFullError.__init__ |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/bulkhead.py |
Bulkhead.__init__ |
|
100% |
9 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/bulkhead.py |
Bulkhead.available_permits |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/bulkhead.py |
Bulkhead.queued |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/bulkhead.py |
Bulkhead.active |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/bulkhead.py |
Bulkhead._cleanup_acquire_task |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/bulkhead.py |
Bulkhead._acquire_permit |
|
100% |
13 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/bulkhead.py |
Bulkhead.execute |
|
100% |
17 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/bulkhead.py |
(no function) |
|
100% |
24 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator.__init__ |
|
100% |
8 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator.with_bulkhead |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator.with_circuit_breaker |
|
100% |
5 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator.with_retry |
|
100% |
5 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator.with_timeout |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator.with_fallback |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator._acquire_bulkhead |
|
100% |
7 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator._execute_with_bulkhead |
|
100% |
17 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator.execute |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator._evaluate_adaptive_breaker |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator._evaluate_standard_breaker |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator._evaluate_circuit_breaker |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator._record_success_outcome |
|
100% |
6 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator._record_failure_outcome |
|
100% |
6 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator._calculate_retry_delay |
|
100% |
5 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator._execute_inner |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator._handle_retry_failure |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator._handle_circuit_breaker_open |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator._execute_single_attempt |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator._check_circuit_breaker_for_attempt |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator._process_retry_attempt |
|
100% |
11 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator._execute_with_retries |
|
100% |
9 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator._run_fn_with_timeout |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator._execute_with_timeout |
|
100% |
9 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
ResilienceOrchestrator._apply_fallback |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/adaptive/orchestrator.py |
(no function) |
|
100% |
43 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreakerDecorator.__call__ |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreakerDecorator.__call__ |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreakerError.__init__ |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreakerConfig._check_finite |
|
100% |
2 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreakerConfig.__post_init__ |
|
100% |
3 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._is_valid_metric |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._get_safe_threshold |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._check_finite_val |
|
100% |
2 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._validate_thresholds |
|
100% |
3 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker.__init__ |
|
100% |
5 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker.state |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker.failure_count |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._log_callback_failure |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._log_structlog_warning |
|
100% |
2 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._notify_state_change |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._get_safe_timeout |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._calculate_elapsed_time |
|
100% |
9 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._transition_to_half_open |
|
100% |
5 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._evaluate_open_timeout |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._get_valid_elapsed |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._handle_open_state |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._handle_attempt_half_open |
|
100% |
7 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._evaluate_state_for_attempt |
|
100% |
8 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._should_attempt |
|
100% |
8 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._handle_success_half_open |
|
100% |
11 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._get_success_state_change |
|
100% |
7 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._record_success |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._handle_failure_half_open |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._handle_failure_closed |
|
100% |
10 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._increment_failure_count |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._update_failure_metrics |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._get_failure_state_change |
|
100% |
5 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._is_excluded_exception |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._record_failure |
|
100% |
11 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker.reset |
|
100% |
9 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._is_failure_exception |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._process_result |
|
100% |
8 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._is_valid_half_open_attempts |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._safe_decrement_half_open_attempts |
|
100% |
7 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker._decrement_half_open |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker.__call__ |
|
100% |
9 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker.__call__.async_wrapper |
|
100% |
16 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
CircuitBreaker.__call__.wrapper |
|
100% |
16 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
circuit_breaker |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
circuit_breaker.decorator |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/circuit_breaker.py |
(no function) |
|
100% |
89 |
0 |
5 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/resilience.py |
FallbackDecorator.__call__ |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/resilience.py |
FallbackDecorator.__call__ |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/resilience.py |
fallback |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/resilience.py |
fallback.decorator |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/resilience.py |
fallback.decorator.async_wrapper |
|
100% |
15 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/resilience/resilience.py |
fallback.decorator.sync_wrapper |
|
100% |
15 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/resilience/resilience.py |
TimeoutDecorator.__call__ |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/resilience.py |
TimeoutDecorator.__call__ |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/resilience.py |
timeout |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/resilience.py |
timeout.decorator |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/resilience.py |
timeout.decorator.async_wrapper |
|
100% |
13 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/resilience.py |
timeout.decorator.sync_wrapper |
|
100% |
20 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/resilience/resilience.py |
timeout.decorator.sync_wrapper.worker |
|
100% |
5 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/resilience.py |
(no function) |
|
100% |
17 |
0 |
10 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
_handle_retry_exception |
|
100% |
12 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
RetryDecorator.__call__ |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
RetryDecorator.__call__ |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
_validate_finite_or_default |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
RetryConfig.__post_init__ |
|
100% |
5 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
RetryError.__init__ |
|
100% |
3 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
_calculate_base_delay |
|
100% |
13 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
_compute_jitter_amount |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
_apply_jitter |
|
100% |
9 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
calculate_delay |
|
100% |
5 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
_log_retry_callback_failure |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
_log_retry_attempt_fallback |
|
100% |
2 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
_invoke_retry_callback |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
_log_retry_attempt |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
_log_all_failed |
|
100% |
2 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
_raise_retry_error |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
_ensure_tuple |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
_validate_retry_exceptions |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
retry |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
retry.decorator |
|
100% |
9 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
retry.decorator.async_wrapper |
|
100% |
20 |
0 |
0 |
|
100% |
10 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
retry.decorator.wrapper |
|
100% |
20 |
0 |
0 |
|
100% |
10 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
retry_on_exception |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
Retrier.__init__ |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
Retrier.__enter__ |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
Retrier._increment_attempt |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
Retrier._should_retry |
|
100% |
10 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
Retrier.__exit__ |
|
100% |
7 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/retry.py |
(no function) |
|
100% |
58 |
0 |
5 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/__init__.py |
(no function) |
|
100% |
5 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/_base.py |
BaseWatcher.__init__ |
|
100% |
3 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/_base.py |
BaseWatcher.is_running |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/_base.py |
BaseWatcher.start |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/_base.py |
BaseWatcher.stop |
|
100% |
8 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/_base.py |
BaseWatcher._loop |
|
100% |
9 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/_base.py |
BaseWatcher._run |
|
100% |
0 |
0 |
5 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/_base.py |
BaseWatcher._get_extra_repr |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/_base.py |
BaseWatcher.__repr__ |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/_base.py |
(no function) |
|
100% |
14 |
0 |
2 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/config_watcher.py |
_hash_file |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/config_watcher.py |
_parse_env |
|
100% |
11 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/config_watcher.py |
_parse_json |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/config_watcher.py |
_read_file_content |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/config_watcher.py |
_parse_content_by_extension |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/config_watcher.py |
_load_file_data |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/config_watcher.py |
validate_config |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/config_watcher.py |
ConfigWatcher.__init__ |
|
100% |
6 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/config_watcher.py |
ConfigWatcher._process_hash_result |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/config_watcher.py |
ConfigWatcher._detect_changes |
|
100% |
7 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/config_watcher.py |
ConfigWatcher._handle_validation_success |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/config_watcher.py |
ConfigWatcher._handle_validation_failure |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/config_watcher.py |
ConfigWatcher._validate_and_apply |
|
100% |
7 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/config_watcher.py |
ConfigWatcher._run |
|
100% |
5 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/config_watcher.py |
(no function) |
|
100% |
25 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/health_pinger.py |
check_target |
|
100% |
5 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/health_pinger.py |
check_all |
|
100% |
8 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/health_pinger.py |
HealthPinger.__init__ |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/health_pinger.py |
HealthPinger._process_target |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/health_pinger.py |
HealthPinger._check_and_open_breaker |
|
100% |
2 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/health_pinger.py |
HealthPinger._notify_health_change |
|
100% |
5 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/health_pinger.py |
HealthPinger._update_target_status |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/health_pinger.py |
HealthPinger._run |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/health_pinger.py |
_force_open_breaker |
|
100% |
12 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/health_pinger.py |
(no function) |
|
100% |
23 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/resource_watcher.py |
check_resources |
|
100% |
5 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/resource_watcher.py |
ResourceWatcher.__init__ |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/resource_watcher.py |
ResourceWatcher.start |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/resource_watcher.py |
ResourceWatcher._check_threshold |
|
100% |
4 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/resource_watcher.py |
ResourceWatcher._handle_snapshot |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/resource_watcher.py |
ResourceWatcher._run |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/resilience/watchdogs/resource_watcher.py |
(no function) |
|
100% |
25 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/__init__.py |
(no function) |
|
100% |
9 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
OperationTimeoutError.__init__ |
|
100% |
3 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
ValidationError.__init__ |
|
100% |
3 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
validate_inputs |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
validate_inputs.decorator |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
validate_inputs.decorator.wrapper |
|
100% |
12 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
guard_exceptions |
|
100% |
3 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
guard_exceptions.decorator |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
guard_exceptions.decorator.wrapper |
|
100% |
11 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
timeout |
|
100% |
5 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
timeout.decorator |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
timeout.decorator.wrapper |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
_timeout_with_signal |
|
100% |
7 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
_timeout_with_signal.handler |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
_timeout_with_thread |
|
100% |
12 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
_timeout_with_thread.target |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
deprecated |
|
100% |
3 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
deprecated.decorator |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
deprecated.decorator.wrapper |
|
100% |
8 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
require_type |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
require_type.decorator |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
require_type.decorator.wrapper |
|
100% |
8 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/security/decorators.py |
(no function) |
|
100% |
24 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
SecurityError.__init__ |
|
100% |
3 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_traversal_patterns |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_resolve_and_check_bounds |
|
100% |
8 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_symlink_safety |
|
100% |
9 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_path_types |
|
100% |
4 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_path_lengths |
|
100% |
4 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_validate_path_types |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_path_null_bytes |
|
100% |
2 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_resolve_base_dir |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
guard_path_traversal |
|
100% |
9 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_command_not_empty |
|
100% |
2 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_command_null_bytes |
|
100% |
3 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_command_patterns |
|
100% |
7 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_allowed_commands |
|
100% |
7 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
guard_command_injection |
|
100% |
6 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_filename_null_bytes |
|
100% |
2 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_clean_filename_end |
|
100% |
7 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_normalize_ext |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_denied_extension |
|
100% |
5 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_allowed_extension |
|
100% |
4 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
guard_file_extension |
|
100% |
10 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_env_denied |
|
100% |
5 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_env_sensitive |
|
100% |
7 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_env_var_type |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_env_var_length |
|
100% |
2 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_env_var_content |
|
100% |
4 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_validate_env_var_name |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
guard_env_variable |
|
100% |
8 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_ssrf_url_length |
|
100% |
7 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_has_invalid_url_chars |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_ssrf_url_characters |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_validate_ssrf_url_type_and_length |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_validate_ssrf_url_parse |
|
100% |
10 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_validate_ssrf_url |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_is_ip_address_unsafe_bounds |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_is_ip_address_safe |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_is_ip_safe |
|
100% |
5 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
_check_ip_safety |
|
100% |
9 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
guard_ssrf |
|
100% |
7 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/guards.py |
(no function) |
|
100% |
62 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/jwt.py |
encode_jwt |
|
100% |
7 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/security/jwt.py |
_validate_jwt_algorithms |
|
100% |
5 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/security/jwt.py |
_validate_jwt_audience |
|
100% |
2 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/jwt.py |
decode_jwt |
|
100% |
5 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/jwt.py |
(no function) |
|
100% |
14 |
0 |
2 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/models.py |
_mask_dict |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/models.py |
_mask_list |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/models.py |
_mask_tuple |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/models.py |
_mask_set |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/models.py |
_mask_collection |
|
100% |
9 |
0 |
0 |
|
100% |
8 |
0 |
|
100% |
| src/taipanstack/security/models.py |
_mask_data |
|
100% |
5 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/models.py |
SecureBaseModel.__str__ |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/models.py |
SecureBaseModel.__repr_args__ |
|
100% |
4 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/models.py |
SecureBaseModel.model_dump |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/models.py |
SecureBaseModel.model_dump_json |
|
100% |
5 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/models.py |
(no function) |
|
100% |
22 |
0 |
2 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/password.py |
_get_password_str |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/password.py |
hash_password |
|
100% |
8 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/password.py |
_verify_legacy_pbkdf2 |
|
100% |
14 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/password.py |
_verify_argon2 |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/password.py |
verify_password |
|
100% |
11 |
0 |
0 |
|
100% |
8 |
0 |
|
100% |
| src/taipanstack/security/password.py |
(no function) |
|
100% |
15 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_handle_html |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_handle_unicode |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_check_string_length |
|
100% |
2 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_check_max_length_param |
|
100% |
2 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_validate_string_params |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
sanitize_string |
|
100% |
10 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_get_filename_from_path |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_has_valid_extension |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_extract_stem_and_suffix |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_remove_invalid_chars |
|
100% |
10 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_collapse_replacements |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_truncate_filename |
|
100% |
8 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_is_filename_safe |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_finalize_filename |
|
100% |
5 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_check_filename_type_str |
|
100% |
4 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_check_filename_types |
|
100% |
5 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_check_filename_length |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_validate_filename_params |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
sanitize_filename |
|
100% |
9 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_get_stem |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_is_safe_path_part |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_handle_dot_dot |
|
100% |
2 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_handle_normal_part |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_process_path_part |
|
100% |
4 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_clean_path_parts |
|
100% |
5 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_apply_base_dir_constraint |
|
100% |
12 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_process_string_path |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_check_pathlike_length |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_normalize_path_input |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_reconstruct_path |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
_validate_path_depth |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
sanitize_path |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/sanitizers.py |
(no function) |
|
100% |
42 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/types.py |
_validate_safe_url |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/types.py |
_validate_safe_path |
|
100% |
5 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/types.py |
_validate_safe_command |
|
100% |
5 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/types.py |
_validate_safe_project_name |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/types.py |
_validate_safe_url_format |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/types.py |
(no function) |
|
100% |
20 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_validate_type |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_check_project_name_length |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_build_project_name_pattern |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_build_invalid_chars_msg |
|
100% |
3 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_check_project_name_chars |
|
100% |
7 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_check_project_name_reserved |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
validate_project_name |
|
100% |
8 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_check_version_string_safety |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_check_version_regex_pattern |
|
100% |
7 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_check_version_format |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_check_version_numbers |
|
100% |
11 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
validate_python_version |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_check_email_basics |
|
100% |
9 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_check_email_format |
|
100% |
5 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_check_email_parts |
|
100% |
7 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
validate_email |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_check_url_length |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_has_invalid_url_chars |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_check_url_characters |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_check_url_basics |
|
100% |
3 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_check_scheme |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_check_tld |
|
100% |
5 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
_check_url_domain |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
validate_url |
|
100% |
9 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/security/validators.py |
(no function) |
|
100% |
35 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/__init__.py |
(no function) |
|
100% |
11 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/cache.py |
_check_cache |
|
100% |
7 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/utils/cache.py |
_update_cache |
|
100% |
5 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/utils/cache.py |
CacheDecorator.__call__ |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/cache.py |
CacheDecorator.__call__ |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/cache.py |
cached |
|
100% |
8 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/cache.py |
cached.get_cache_key |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/cache.py |
cached.get_cache_key._make_hashable |
|
100% |
8 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/utils/cache.py |
cached.decorator |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/cache.py |
cached.decorator.async_wrapper |
|
100% |
24 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/utils/cache.py |
cached.decorator.sync_wrapper |
|
100% |
9 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/cache.py |
(no function) |
|
100% |
17 |
0 |
8 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/circuit_breaker.py |
(no function) |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/concurrency.py |
OverloadError.__init__ |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/concurrency.py |
ConcurrencyLimitDecorator.__call__ |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/concurrency.py |
ConcurrencyLimitDecorator.__call__ |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/concurrency.py |
_acquire_async_semaphore |
|
100% |
14 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/utils/concurrency.py |
_handle_async_concurrency |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/concurrency.py |
_handle_async_concurrency.async_wrapper |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/concurrency.py |
_acquire_sync_semaphore |
|
100% |
9 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/utils/concurrency.py |
_handle_sync_concurrency |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/concurrency.py |
_handle_sync_concurrency.wrapper |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/concurrency.py |
_validate_max_tasks |
|
100% |
2 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/concurrency.py |
_validate_timeout |
|
100% |
2 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/concurrency.py |
_validate_limit_concurrency_args |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/concurrency.py |
limit_concurrency |
|
100% |
3 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/concurrency.py |
limit_concurrency.decorator |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/concurrency.py |
(no function) |
|
100% |
22 |
0 |
8 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/context.py |
get_correlation_id |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/context.py |
set_correlation_id |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/context.py |
correlation_scope |
|
100% |
4 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/context.py |
(no function) |
|
100% |
9 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/filesystem.py |
FileNotFoundErr.message |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/filesystem.py |
NotAFileErr.message |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/filesystem.py |
_validate_path |
|
100% |
7 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/utils/filesystem.py |
FileTooLargeErr.message |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/filesystem.py |
_check_read_path_and_size |
|
100% |
11 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/utils/filesystem.py |
safe_read |
|
100% |
9 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/filesystem.py |
_validate_safe_write_path |
|
100% |
7 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/utils/filesystem.py |
_sanitize_write_path |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/filesystem.py |
_perform_atomic_write |
|
100% |
15 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/utils/filesystem.py |
_prepare_write_dir |
|
100% |
2 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/filesystem.py |
_create_write_backup |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/filesystem.py |
safe_write |
|
100% |
10 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/filesystem.py |
ensure_dir |
|
100% |
16 |
0 |
0 |
|
100% |
8 |
0 |
|
100% |
| src/taipanstack/utils/filesystem.py |
(no function) |
|
100% |
45 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
_is_sensitive |
|
100% |
5 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
_redact_mapping |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
_redact_list |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
_redact_tuple |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
_redact_set |
|
100% |
9 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
_redact_iterable |
|
100% |
7 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
_redact_collection |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
_redact |
|
100% |
7 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
_redact_dict |
|
100% |
6 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
mask_sensitive_data_processor |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
correlation_id_processor |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
StackLogger.__init__ |
|
100% |
9 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
StackLogger.bind |
|
100% |
4 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
StackLogger.unbind |
|
100% |
5 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
StackLogger._format_message |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
StackLogger.debug |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
StackLogger.info |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
StackLogger.warning |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
StackLogger.error |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
StackLogger.critical |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
StackLogger.exception |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
_configure_structlog |
|
100% |
5 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
_get_log_format |
|
100% |
5 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
setup_logging |
|
100% |
8 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
get_logger |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
log_operation |
|
100% |
3 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
log_operation._log_context |
|
100% |
15 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/logging.py |
(no function) |
|
100% |
48 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/rate_limit.py |
RateLimitError.__init__ |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/rate_limit.py |
RateLimiter.__init__ |
|
100% |
9 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/utils/rate_limit.py |
RateLimiter._is_valid_time_window |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/rate_limit.py |
RateLimiter._is_valid_capacity |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/rate_limit.py |
RateLimiter._is_valid_bucket_state |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/rate_limit.py |
RateLimiter._calculate_new_tokens |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/rate_limit.py |
RateLimiter._apply_new_tokens |
|
100% |
11 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/utils/rate_limit.py |
RateLimiter._add_tokens |
|
100% |
13 |
0 |
0 |
|
100% |
8 |
0 |
|
100% |
| src/taipanstack/utils/rate_limit.py |
RateLimiter._try_consume |
|
100% |
9 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/utils/rate_limit.py |
RateLimiter._process_consumption |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/rate_limit.py |
RateLimiter.consume |
|
100% |
9 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/utils/rate_limit.py |
RateLimitDecorator.__call__ |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/rate_limit.py |
RateLimitDecorator.__call__ |
|
100% |
0 |
0 |
1 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/rate_limit.py |
rate_limit |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/rate_limit.py |
rate_limit.decorator |
|
100% |
8 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/rate_limit.py |
rate_limit.decorator.async_wrapper |
|
100% |
6 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/rate_limit.py |
rate_limit.decorator.wrapper |
|
100% |
7 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/rate_limit.py |
(no function) |
|
100% |
26 |
0 |
8 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/resilience.py |
(no function) |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/retry.py |
(no function) |
|
100% |
2 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/serialization.py |
default_encoder |
|
100% |
7 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/utils/serialization.py |
(no function) |
|
100% |
3 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/subprocess.py |
SafeCommandResult.success |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/subprocess.py |
SafeCommandResult.raise_on_error |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/subprocess.py |
_validate_and_resolve_command |
|
100% |
11 |
0 |
0 |
|
100% |
6 |
0 |
|
100% |
| src/taipanstack/utils/subprocess.py |
_get_allowed_keys |
|
100% |
3 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/subprocess.py |
_filter_environment |
|
100% |
5 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/subprocess.py |
_extract_timeout_stdout |
|
100% |
5 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/utils/subprocess.py |
_execute_command |
|
100% |
8 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/subprocess.py |
_validate_cwd |
|
100% |
6 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/utils/subprocess.py |
_handle_dry_run |
|
100% |
1 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |
| src/taipanstack/utils/subprocess.py |
_validate_timeout |
|
100% |
2 |
0 |
0 |
|
100% |
2 |
0 |
|
100% |
| src/taipanstack/utils/subprocess.py |
run_safe_command |
|
100% |
10 |
0 |
0 |
|
100% |
4 |
0 |
|
100% |
| src/taipanstack/utils/subprocess.py |
(no function) |
|
100% |
29 |
0 |
0 |
|
100% |
0 |
0 |
|
100% |