Coverage report: 76.83%

Files Functions Classes

coverage.py v7.14.1, created at 2026-07-25 15:51 +0000

File function   statements missing excluded   coverage
app/celery_app.py (no function)   4 0 2   100.00%
app/config.py (no function)   26 0 0   100.00%
app/crud/app_version_approvals.py submit_version   13 0 0   100.00%
app/crud/app_version_approvals.py get_pending_approvals   1 0 0   100.00%
app/crud/app_version_approvals.py get_approvals_for_app   1 0 0   100.00%
app/crud/app_version_approvals.py has_approved_version   1 0 0   100.00%
app/crud/app_version_approvals.py has_any_approved_version   1 0 0   100.00%
app/crud/app_version_approvals.py withdraw   5 0 0   100.00%
app/crud/app_version_approvals.py _get_approval_or_404   4 0 0   100.00%
app/crud/app_version_approvals.py approve   10 0 0   100.00%
app/crud/app_version_approvals.py reject   10 0 0   100.00%
app/crud/app_version_approvals.py revoke   10 0 0   100.00%
app/crud/app_version_approvals.py (no function)   15 0 0   100.00%
app/crud/apps.py get_app   4 0 0   100.00%
app/crud/apps.py get_apps   6 0 0   100.00%
app/crud/apps.py get_visible_apps   2 0 0   100.00%
app/crud/apps.py create_app   5 0 0   100.00%
app/crud/apps.py update_app   9 0 0   100.00%
app/crud/apps.py set_app_image   8 0 0   100.00%
app/crud/apps.py soft_delete_app   6 0 0   100.00%
app/crud/apps.py (no function)   12 0 0   100.00%
app/crud/courses.py get_course   1 0 0   100.00%
app/crud/courses.py get_courses   1 0 0   100.00%
app/crud/courses.py create_course   5 0 0   100.00%
app/crud/courses.py update_course   9 0 0   100.00%
app/crud/courses.py delete_course   7 0 0   100.00%
app/crud/courses.py get_course_members   1 0 0   100.00%
app/crud/courses.py add_users_to_course   6 0 0   100.00%
app/crud/courses.py remove_user_from_course   6 0 0   100.00%
app/crud/courses.py (no function)   13 0 0   100.00%
app/crud/deployments.py _is_destroyed_subq   1 0 0   100.00%
app/crud/deployments.py count_active_user_deployments   1 0 0   100.00%
app/crud/deployments.py get_deployment   4 0 0   100.00%
app/crud/deployments.py get_deployment_with_details   4 0 0   100.00%
app/crud/deployments.py get_latest_task   1 0 0   100.00%
app/crud/deployments.py get_first_task   1 0 0   100.00%
app/crud/deployments.py derive_status   22 2 0   90.91%
app/crud/deployments.py get_deployment_status   4 1 0   75.00%
app/crud/deployments.py get_deployment_created_at   2 0 0   100.00%
app/crud/deployments.py bulk_get_task_summary   10 1 0   90.00%
app/crud/deployments.py get_team_members   5 1 0   80.00%
app/crud/deployments.py get_deployment_teams_with_members   6 2 0   66.67%
app/crud/deployments.py get_deployment_outputs   7 4 0   42.86%
app/crud/deployments.py get_latest_successful_deploy_outputs   7 2 0   71.43%
app/crud/deployments.py get_deployments   29 4 0   86.21%
app/crud/deployments.py create_deployment   8 0 0   100.00%
app/crud/deployments.py soft_delete_deployment   6 6 0   0.00%
app/crud/deployments.py create_user_to_deployments   6 6 0   0.00%
app/crud/deployments.py (no function)   27 0 0   100.00%
app/crud/locks.py acquire_user_xact_lock   1 0 0   100.00%
app/crud/locks.py acquire_deployment_xact_lock   1 0 0   100.00%
app/crud/locks.py (no function)   6 0 0   100.00%
app/crud/openstack_credentials.py get_for_user   1 0 0   100.00%
app/crud/openstack_credentials.py upsert   24 0 0   100.00%
app/crud/openstack_credentials.py stamp_validation   8 0 0   100.00%
app/crud/openstack_credentials.py delete   6 0 0   100.00%
app/crud/openstack_credentials.py _common_metadata   1 0 0   100.00%
app/crud/openstack_credentials.py get_dispatch_envelope   7 0 0   100.00%
app/crud/openstack_credentials.py get_decrypted_for_backend   7 0 0   100.00%
app/crud/openstack_credentials.py (no function)   16 0 0   100.00%
app/crud/tasks.py get_task   1 0 0   100.00%
app/crud/tasks.py get_tasks   8 0 0   100.00%
app/crud/tasks.py create_task   5 0 0   100.00%
app/crud/tasks.py update_task   11 0 0   100.00%
app/crud/tasks.py delete_task   6 0 0   100.00%
app/crud/tasks.py (no function)   9 0 0   100.00%
app/crud/teams.py get_team   1 0 0   100.00%
app/crud/teams.py get_teams   4 0 0   100.00%
app/crud/teams.py _add_team_members   3 0 0   100.00%
app/crud/teams.py create_team   8 0 0   100.00%
app/crud/teams.py update_team   9 0 0   100.00%
app/crud/teams.py delete_team   6 0 0   100.00%
app/crud/teams.py add_user_to_team   7 0 0   100.00%
app/crud/teams.py remove_user_from_team   6 0 0   100.00%
app/crud/teams.py create_teams_for_deployment   8 0 0   100.00%
app/crud/teams.py (no function)   13 0 0   100.00%
app/crud/users.py get_user   1 0 0   100.00%
app/crud/users.py get_user_by_username   1 0 0   100.00%
app/crud/users.py get_user_by_email   1 0 0   100.00%
app/crud/users.py get_users   6 0 0   100.00%
app/crud/users.py create_user   5 0 0   100.00%
app/crud/users.py update_user   9 0 0   100.00%
app/crud/users.py delete_user   6 0 0   100.00%
app/crud/users.py search_users   1 0 0   100.00%
app/crud/users.py (no function)   13 0 0   100.00%
app/database.py get_db   4 4 0   0.00%
app/database.py (no function)   8 0 0   100.00%
app/main.py _background_tasks_disabled   1 0 0   100.00%
app/main.py lifespan   27 19 0   29.63%
app/main.py health_check   1 0 0   100.00%
app/main.py (no function)   32 0 0   100.00%
app/models.py (no function)   162 0 0   100.00%
app/routers/admin_apps.py list_pending_versions   1 0 0   100.00%
app/routers/admin_apps.py approve_version   10 4 0   60.00%
app/routers/admin_apps.py reject_version   2 0 0   100.00%
app/routers/admin_apps.py revoke_version   2 0 0   100.00%
app/routers/admin_apps.py deactivate_app   4 0 0   100.00%
app/routers/admin_apps.py _require_app   4 0 0   100.00%
app/routers/admin_apps.py (no function)   22 0 0   100.00%
app/routers/apps.py _serialize_app   6 2 0   66.67%
app/routers/apps.py _version_tag   3 3 0   0.00%
app/routers/apps.py MarkerError.__init__   4 0 0   100.00%
app/routers/apps.py _parse_var_scope   8 0 0   100.00%
app/routers/apps.py _forbid_packer_team_user_scope   2 0 0   100.00%
app/routers/apps.py _reject_malformed_markers   15 4 0   73.33%
app/routers/apps.py _select_marker   14 6 0   57.14%
app/routers/apps.py _parse_scope_only_marker   8 1 0   87.50%
app/routers/apps.py _parse_file_marker   24 2 0   91.67%
app/routers/apps.py _parse_marker_mode   14 8 0   42.86%
app/routers/apps.py _parse_marker_multi   12 4 0   66.67%
app/routers/apps.py _collection_check_type   17 1 0   94.12%
app/routers/apps.py _check_multi_type_conflict   5 2 0   60.00%
app/routers/apps.py _parse_resource_marker   8 0 0   100.00%
app/routers/apps.py _parse_marker   13 1 0   92.31%
app/routers/apps.py _apply_defaults   6 0 0   100.00%
app/routers/apps.py _closest_match   4 1 0   75.00%
app/routers/apps.py _line_number_at   1 0 0   100.00%
app/routers/apps.py _validate_file_var_shape   5 0 0   100.00%
app/routers/apps.py _validate_scoped_var_shape   5 0 0   100.00%
app/routers/apps.py _coerce_hcl_default   34 19 0   44.12%
app/routers/apps.py _parse_one_variable   37 4 0   89.19%
app/routers/apps.py _iter_variable_blocks   20 1 0   95.00%
app/routers/apps.py _parse_terraform_variables   12 0 0   100.00%
app/routers/apps.py _parse_packer_variables   10 1 0   90.00%
app/routers/apps.py _discover_packer_templates   25 2 0   92.00%
app/routers/apps.py list_apps   4 1 0   75.00%
app/routers/apps.py get_app   18 18 0   0.00%
app/routers/apps.py load_variable_definitions   28 3 0   89.29%
app/routers/apps.py get_app_variables   11 3 0   72.73%
app/routers/apps.py create_app   20 14 0   30.00%
app/routers/apps.py update_app   12 2 0   83.33%
app/routers/apps.py submit_version   15 2 0   86.67%
app/routers/apps.py withdraw_version   6 1 0   83.33%
app/routers/apps.py list_version_approvals   5 1 0   80.00%
app/routers/apps.py delete_app   8 2 0   75.00%
app/routers/apps.py (no function)   107 0 0   100.00%
app/routers/auth_keycloak.py auth_health   1 1 0   0.00%
app/routers/auth_keycloak.py (no function)   4 0 0   100.00%
app/routers/courses.py _find_course_teacher   1 0 0   100.00%
app/routers/courses.py list_courses   2 0 0   100.00%
app/routers/courses.py get_course   4 1 0   75.00%
app/routers/courses.py create_course   6 0 0   100.00%
app/routers/courses.py update_course   8 2 0   75.00%
app/routers/courses.py delete_course   8 2 0   75.00%
app/routers/courses.py list_course_members   4 1 0   75.00%
app/routers/courses.py add_course_members   5 1 0   80.00%
app/routers/courses.py remove_course_member   7 2 0   71.43%
app/routers/courses.py add_course_teacher   13 3 0   76.92%
app/routers/courses.py remove_course_teacher   9 1 0   88.89%
app/routers/courses.py (no function)   33 0 0   100.00%
app/routers/dashboard.py get_dashboard_stats   18 1 0   94.44%
app/routers/dashboard.py (no function)   16 0 0   100.00%
app/routers/deployments.py _list_course_scope_deployments   21 21 0   0.00%
app/routers/deployments.py list_deployments   15 1 0   93.33%
app/routers/deployments.py get_deployment   27 5 0   81.48%
app/routers/deployments.py _attach_files_to_user_input   48 7 0   85.42%
app/routers/deployments.py _validate_scoped_user_input   51 16 0   68.63%
app/routers/deployments.py _validate_scoped_user_input._user_slot_team_prefix   6 1 0   83.33%
app/routers/deployments.py _validate_scoped_user_input._is_empty_slot_value   5 5 0   0.00%
app/routers/deployments.py _strip_file_vars_from_user_input   15 4 0   73.33%
app/routers/deployments.py _parse_and_strip_user_input   6 2 0   66.67%
app/routers/deployments.py _looks_like_file_var   8 2 0   75.00%
app/routers/deployments.py _file_var_metadata_only   4 0 0   100.00%
app/routers/deployments.py create_deployment   46 17 0   63.04%
app/routers/deployments.py delete_deployment   14 5 0   64.29%
app/routers/deployments.py _fetch_dispatch_envelope   6 4 0   33.33%
app/routers/deployments.py _commit_and_dispatch   13 6 0   53.85%
app/routers/deployments.py _dispatch_destroy   1 0 0   100.00%
app/routers/deployments.py _dispatch_lifecycle_task   16 5 0   68.75%
app/routers/deployments.py _latest_tf_state_for   2 0 0   100.00%
app/routers/deployments.py list_deployment_resources   8 1 0   87.50%
app/routers/deployments.py get_deployment_resource_detail   11 1 0   90.91%
app/routers/deployments.py redeploy_deployment_resource   15 2 0   86.67%
app/routers/deployments.py _view_asdict   1 0 0   100.00%
app/routers/deployments.py pause_deployment   7 0 0   100.00%
app/routers/deployments.py resume_deployment   7 1 0   85.71%
app/routers/deployments.py download_deployment_file   24 6 0   75.00%
app/routers/deployments.py get_my_access   8 0 0   100.00%
app/routers/deployments.py resend_access_credentials   23 3 0   86.96%
app/routers/deployments.py stream_deployment_events   10 10 0   0.00%
app/routers/deployments.py stream_deployment_events.event_stream   23 23 0   0.00%
app/routers/deployments.py _event_name_for   1 1 0   0.00%
app/routers/deployments.py _sse_frame   2 2 0   0.00%
app/routers/deployments.py (no function)   79 0 0   100.00%
app/routers/openstack_credentials.py _lock_state   2 0 0   100.00%
app/routers/openstack_credentials.py _assert_unlocked   3 1 0   66.67%
app/routers/openstack_credentials.py _to_response   3 0 0   100.00%
app/routers/openstack_credentials.py get_my_credentials   3 0 0   100.00%
app/routers/openstack_credentials.py upsert_my_credentials   6 0 0   100.00%
app/routers/openstack_credentials.py upsert_my_credentials_from_yaml   7 0 0   100.00%
app/routers/openstack_credentials.py test_my_credentials   9 1 0   88.89%
app/routers/openstack_credentials.py delete_my_credentials   6 0 0   100.00%
app/routers/openstack_credentials.py (no function)   25 0 0   100.00%
app/routers/openstack_resources.py _safe_get   8 3 0   62.50%
app/routers/openstack_resources.py _list_with_oserror   7 5 0   28.57%
app/routers/openstack_resources.py refresh_cache   3 0 0   100.00%
app/routers/openstack_resources.py list_networks   2 2 0   0.00%
app/routers/openstack_resources.py list_networks.fetch   2 2 0   0.00%
app/routers/openstack_resources.py list_subnets   5 0 0   100.00%
app/routers/openstack_resources.py list_subnets.fetch   5 0 0   100.00%
app/routers/openstack_resources.py list_flavors   2 0 0   100.00%
app/routers/openstack_resources.py list_flavors.fetch   5 0 0   100.00%
app/routers/openstack_resources.py list_images   3 0 0   100.00%
app/routers/openstack_resources.py list_images.fetch   8 0 0   100.00%
app/routers/openstack_resources.py list_keypairs   2 2 0   0.00%
app/routers/openstack_resources.py list_keypairs.fetch   2 2 0   0.00%
app/routers/openstack_resources.py list_security_groups   2 2 0   0.00%
app/routers/openstack_resources.py list_security_groups.fetch   2 2 0   0.00%
app/routers/openstack_resources.py list_floating_ip_pools   2 2 0   0.00%
app/routers/openstack_resources.py list_floating_ip_pools.fetch   8 8 0   0.00%
app/routers/openstack_resources.py list_volumes   2 2 0   0.00%
app/routers/openstack_resources.py list_volumes.fetch   2 2 0   0.00%
app/routers/openstack_resources.py list_routers   2 2 0   0.00%
app/routers/openstack_resources.py list_routers.fetch   2 2 0   0.00%
app/routers/openstack_resources.py list_availability_zones   3 3 0   0.00%
app/routers/openstack_resources.py list_availability_zones.fetch   15 15 0   0.00%
app/routers/openstack_resources.py (no function)   35 0 0   100.00%
app/routers/quotas.py _build_connect_kwargs   5 1 0   80.00%
app/routers/quotas.py _quota_item   2 0 0   100.00%
app/routers/quotas.py _get_openstack_conn_for_user   5 2 0   60.00%
app/routers/quotas.py get_quota_overview   29 8 0   72.41%
app/routers/quotas.py (no function)   40 0 0   100.00%
app/routers/tasks.py get_deployment_tasks   6 1 0   83.33%
app/routers/tasks.py get_task   9 1 0   88.89%
app/routers/tasks.py (no function)   15 0 0   100.00%
app/routers/teams.py list_teams   2 0 0   100.00%
app/routers/teams.py get_team   4 0 0   100.00%
app/routers/teams.py create_team   1 0 0   100.00%
app/routers/teams.py update_team   4 1 0   75.00%
app/routers/teams.py delete_team   4 1 0   75.00%
app/routers/teams.py add_user_to_team   4 1 0   75.00%
app/routers/teams.py remove_user_from_team   4 1 0   75.00%
app/routers/teams.py (no function)   24 0 0   100.00%
app/routers/users.py get_me   1 0 0   100.00%
app/routers/users.py list_users   17 5 0   70.59%
app/routers/users.py search_users_keycloak   9 1 0   88.89%
app/routers/users.py get_user   6 1 0   83.33%
app/routers/users.py get_user_statistics   7 1 0   85.71%
app/routers/users.py update_user   10 2 0   80.00%
app/routers/users.py (no function)   25 0 0   100.00%
app/schemas.py OpenStackCredentialUpsert._validate_required_fields   6 0 0   100.00%
app/schemas.py (no function)   284 0 0   100.00%
app/services/celery_event_listener.py clean_log_line   4 0 0   100.00%
app/services/celery_event_listener.py is_verbose_line   2 0 0   100.00%
app/services/celery_event_listener.py filter_logs   11 0 0   100.00%
app/services/celery_event_listener.py format_logs   20 0 0   100.00%
app/services/celery_event_listener.py _get_icon   2 0 0   100.00%
app/services/celery_event_listener.py _translate_celery_infra_exception   6 0 0   100.00%
app/services/celery_event_listener.py _update_task_progress   18 18 0   0.00%
app/services/celery_event_listener.py _handle_custom_event   6 6 0   0.00%
app/services/celery_event_listener.py _handle_task_started   2 2 0   0.00%
app/services/celery_event_listener.py _handle_task_succeeded   17 17 0   0.00%
app/services/celery_event_listener.py _parse_structured_failure   16 16 0   0.00%
app/services/celery_event_listener.py _apply_structured_failure   21 21 0   0.00%
app/services/celery_event_listener.py _apply_infra_failure   6 6 0   0.00%
app/services/celery_event_listener.py _handle_task_failed   17 17 0   0.00%
app/services/celery_event_listener.py _handle_task_revoked   2 2 0   0.00%
app/services/celery_event_listener.py _auto_soft_delete_on_destroy   5 5 0   0.00%
app/services/celery_event_listener.py _notify_deploy_succeeded   4 4 0   0.00%
app/services/celery_event_listener.py _publish_lifecycle_transition   4 4 0   0.00%
app/services/celery_event_listener.py _handle_lifecycle_event   30 30 0   0.00%
app/services/celery_event_listener.py start_event_listener   6 6 0   0.00%
app/services/celery_event_listener.py start_event_listener.handle_event   8 8 0   0.00%
app/services/celery_event_listener.py (no function)   37 0 2   100.00%
app/services/clouds_yaml_parser.py _bad   1 0 0   100.00%
app/services/clouds_yaml_parser.py parse   44 10 0   77.27%
app/services/clouds_yaml_parser.py (no function)   8 0 0   100.00%
app/services/deployment_notifier.py _display_name   4 0 0   100.00%
app/services/deployment_notifier.py _output_value   6 2 0   66.67%
app/services/deployment_notifier.py _team_vms   2 0 0   100.00%
app/services/deployment_notifier.py _user_accounts   2 0 0   100.00%
app/services/deployment_notifier.py _vm_for_team   4 1 0   75.00%
app/services/deployment_notifier.py _normalise_account_key   12 2 0   83.33%
app/services/deployment_notifier.py _find_account_for_user   17 2 0   88.24%
app/services/deployment_notifier.py _access_for_user   12 1 0   91.67%
app/services/deployment_notifier.py _team_members   1 0 0   100.00%
app/services/deployment_notifier.py _send_user_mail   3 0 0   100.00%
app/services/deployment_notifier.py _send_owner_mail   3 0 0   100.00%
app/services/deployment_notifier.py notify_deployment_succeeded   32 8 0   75.00%
app/services/deployment_notifier.py resend_user_access   25 8 0   68.00%
app/services/deployment_notifier.py get_user_access   26 3 0   88.46%
app/services/deployment_notifier.py (no function)   26 0 0   100.00%
app/services/deployment_pubsub.py DeploymentPubSub.__init__   4 0 0   100.00%
app/services/deployment_pubsub.py DeploymentPubSub.set_loop   1 1 0   0.00%
app/services/deployment_pubsub.py DeploymentPubSub.subscribe   5 5 0   0.00%
app/services/deployment_pubsub.py DeploymentPubSub.recent   3 3 0   0.00%
app/services/deployment_pubsub.py DeploymentPubSub.unsubscribe   9 9 0   0.00%
app/services/deployment_pubsub.py DeploymentPubSub.publish   10 10 0   0.00%
app/services/deployment_pubsub.py DeploymentPubSub._enqueue_or_drop   6 6 0   0.00%
app/services/deployment_pubsub.py (no function)   20 0 0   100.00%
app/services/deployment_status.py build_resource_views   12 2 0   83.33%
app/services/deployment_status.py _view_from_cached   1 0 0   100.00%
app/services/deployment_status.py _enrich_instances_stage1   14 6 0   57.14%
app/services/deployment_status.py _enrich_instances_stage1._one   12 4 0   66.67%
app/services/deployment_status.py build_resource_detail   26 6 0   76.92%
app/services/deployment_status.py _fetch_ports   13 3 0   76.92%
app/services/deployment_status.py _fetch_sg_summaries   21 5 0   76.19%
app/services/deployment_status.py _fetch_sg_summaries._direction   1 0 0   100.00%
app/services/deployment_status.py _fetch_volumes   30 9 0   70.00%
app/services/deployment_status.py _resolve_image_name   6 3 0   50.00%
app/services/deployment_status.py _lifecycle_from   8 0 0   100.00%
app/services/deployment_status.py _translate_power_state   7 0 0   100.00%
app/services/deployment_status.py _hardware_from   6 0 0   100.00%
app/services/deployment_status.py _addresses_from   20 0 0   100.00%
app/services/deployment_status.py (no function)   88 0 0   100.00%
app/services/email_service.py render   2 2 0   0.00%
app/services/email_service.py is_smtp_enabled   1 0 0   100.00%
app/services/email_service.py send_email   33 33 0   0.00%
app/services/email_service.py (no function)   17 0 0   100.00%
app/services/git_service.py GitService.__init__   3 0 0   100.00%
app/services/git_service.py GitService._create_http_session   6 0 0   100.00%
app/services/git_service.py GitService._get_authenticated_url   10 2 0   80.00%
app/services/git_service.py GitService._parse_git_url   9 9 0   0.00%
app/services/git_service.py GitService._request_tags   7 7 0   0.00%
app/services/git_service.py GitService._fetch_github_tags   5 5 0   0.00%
app/services/git_service.py GitService._fetch_github_releases   6 6 0   0.00%
app/services/git_service.py GitService._fetch_gitlab_tags   5 5 0   0.00%
app/services/git_service.py GitService._fetch_gitlab_releases   7 7 0   0.00%
app/services/git_service.py GitService._accept_github_invite   19 19 0   0.00%
app/services/git_service.py GitService._accept_gitlab_invite   13 13 0   0.00%
app/services/git_service.py GitService.verify_repository_access   36 36 0   0.00%
app/services/git_service.py GitService.clone_release_vars   22 1 0   95.45%
app/services/git_service.py GitService.get_versions   22 22 0   0.00%
app/services/git_service.py GitService.get_versions.sort_key   4 4 0   0.00%
app/services/git_service.py GitService.cleanup_repository   4 4 0   0.00%
app/services/git_service.py (no function)   30 0 0   100.00%
app/services/lifecycle.py allowed_actions   5 1 0   80.00%
app/services/lifecycle.py ensure_action_allowed   5 0 0   100.00%
app/services/lifecycle.py (no function)   14 0 0   100.00%
app/services/openstack_client.py _build_connect_kwargs   5 1 0   80.00%
app/services/openstack_client.py user_connection   16 7 0   56.25%
app/services/openstack_client.py _make_key   2 0 0   100.00%
app/services/openstack_client.py cached_list   10 0 0   100.00%
app/services/openstack_client.py invalidate_user   11 1 0   90.91%
app/services/openstack_client.py (no function)   24 0 0   100.00%
app/services/openstack_validator.py _build_connect_kwargs   5 0 0   100.00%
app/services/openstack_validator.py validate   20 7 0   65.00%
app/services/openstack_validator.py (no function)   9 0 0   100.00%
app/services/reconciler.py run_reconciler   13 13 0   0.00%
app/services/reconciler.py _reconcile_once   16 16 0   0.00%
app/services/reconciler.py _try_acquire_lock   3 3 0   0.00%
app/services/reconciler.py _release_lock   2 2 0   0.00%
app/services/reconciler.py _reconcile_task   28 28 0   0.00%
app/services/reconciler.py _extract_success_payload   9 9 0   0.00%
app/services/reconciler.py _extract_failure_logs   7 7 0   0.00%
app/services/reconciler.py (no function)   26 0 0   100.00%
app/services/task_service.py prepare_task_in_tx   14 5 0   64.29%
app/services/task_service.py dispatch_to_celery   14 7 0   50.00%
app/services/task_service.py (no function)   13 0 0   100.00%
app/services/tf_state_parser.py parse_tf_state   15 0 0   100.00%
app/services/tf_state_parser.py _coerce_state   9 0 0   100.00%
app/services/tf_state_parser.py _build_entry   8 0 0   100.00%
app/services/tf_state_parser.py _format_address   10 2 0   80.00%
app/services/tf_state_parser.py _pick_display_name   8 1 0   87.50%
app/services/tf_state_parser.py _extract_team   9 1 0   88.89%
app/services/tf_state_parser.py (no function)   23 0 0   100.00%
app/utils/app_image.py parse_image_data_url   13 0 0   100.00%
app/utils/app_image.py build_image_data_url   4 0 0   100.00%
app/utils/app_image.py (no function)   8 0 0   100.00%
app/utils/capabilities.py _is_admin   1 0 0   100.00%
app/utils/capabilities.py _is_staff   1 0 0   100.00%
app/utils/capabilities.py _is_owner   1 0 0   100.00%
app/utils/capabilities.py _forbidden   4 0 0   100.00%
app/utils/capabilities.py can_view_app   9 1 0   88.89%
app/utils/capabilities.py ensure_view_app   2 0 0   100.00%
app/utils/capabilities.py can_list_all_apps   1 0 0   100.00%
app/utils/capabilities.py ensure_list_all_apps   2 0 0   100.00%
app/utils/capabilities.py can_edit_app   1 0 0   100.00%
app/utils/capabilities.py ensure_edit_app   2 0 0   100.00%
app/utils/capabilities.py can_delete_app   1 0 0   100.00%
app/utils/capabilities.py ensure_delete_app   2 0 0   100.00%
app/utils/capabilities.py can_submit_app_version   1 0 0   100.00%
app/utils/capabilities.py ensure_submit_app_version   2 0 0   100.00%
app/utils/capabilities.py can_approve_app_version   1 0 0   100.00%
app/utils/capabilities.py ensure_approve_app_version   2 0 0   100.00%
app/utils/capabilities.py can_view_deployment_member   1 0 0   100.00%
app/utils/capabilities.py ensure_view_deployment_member   2 0 0   100.00%
app/utils/capabilities.py can_view_deployment_owner   10 0 0   100.00%
app/utils/capabilities.py ensure_view_deployment_owner   2 0 0   100.00%
app/utils/capabilities.py can_operate_deployment   2 0 0   100.00%
app/utils/capabilities.py ensure_operate_deployment   2 0 0   100.00%
app/utils/capabilities.py can_resend_access   3 0 0   100.00%
app/utils/capabilities.py ensure_resend_access   2 0 0   100.00%
app/utils/capabilities.py is_course_teacher   1 0 0   100.00%
app/utils/capabilities.py is_course_teacher_id   4 0 0   100.00%
app/utils/capabilities.py get_my_course_teacher_ids   4 0 0   100.00%
app/utils/capabilities.py can_view_course_detail   1 0 0   100.00%
app/utils/capabilities.py ensure_view_course_detail   2 0 0   100.00%
app/utils/capabilities.py can_edit_course   3 0 0   100.00%
app/utils/capabilities.py ensure_edit_course   2 0 0   100.00%
app/utils/capabilities.py can_view_user   3 0 0   100.00%
app/utils/capabilities.py ensure_view_user   2 0 0   100.00%
app/utils/capabilities.py can_change_user_role   1 0 0   100.00%
app/utils/capabilities.py ensure_change_user_role   2 0 0   100.00%
app/utils/capabilities.py (no function)   43 0 0   100.00%
app/utils/crypto.py _build_cipher   7 0 0   100.00%
app/utils/crypto.py encrypt   1 0 0   100.00%
app/utils/crypto.py decrypt   1 0 0   100.00%
app/utils/crypto.py encrypt_b64   1 0 0   100.00%
app/utils/crypto.py decrypt_b64   1 0 0   100.00%
app/utils/crypto.py (no function)   11 0 0   100.00%
app/utils/keycloak_auth.py get_keycloak_client   1 1 0   0.00%
app/utils/keycloak_auth.py get_keycloak_admin   1 1 0   0.00%
app/utils/keycloak_auth.py _get_realm_public_key_pem   8 8 0   0.00%
app/utils/keycloak_auth.py verify_keycloak_token   12 12 0   0.00%
app/utils/keycloak_auth.py verify_keycloak_token_offline   7 7 0   0.00%
app/utils/keycloak_auth.py map_keycloak_roles_to_app_role   5 1 0   80.00%
app/utils/keycloak_auth.py sync_user_from_keycloak   36 12 0   66.67%
app/utils/keycloak_auth.py get_current_user_keycloak   5 5 0   0.00%
app/utils/keycloak_auth.py _project_keycloak_user   4 4 0   0.00%
app/utils/keycloak_auth.py search_keycloak_users   6 6 0   0.00%
app/utils/keycloak_auth.py get_keycloak_users_by_ids   22 22 0   0.00%
app/utils/keycloak_auth.py refresh_user_from_keycloak   21 4 0   80.95%
app/utils/keycloak_auth.py (no function)   26 0 0   100.00%
app/utils/permissions.py get_current_active_user   1 0 0   100.00%
app/utils/permissions.py require_roles   5 0 0   100.00%
app/utils/permissions.py require_roles._dep   3 0 0   100.00%
app/utils/permissions.py has_deployment_access   9 0 0   100.00%
app/utils/permissions.py ensure_deployment_access   2 0 0   100.00%
app/utils/permissions.py is_deployment_owner_view   3 0 0   100.00%
app/utils/permissions.py ensure_deployment_owner_view   2 0 0   100.00%
app/utils/permissions.py (no function)   15 0 0   100.00%
app/utils/time.py utcnow   1 0 0   100.00%
app/utils/time.py (no function)   2 0 0   100.00%
Total     4561 1057 4   76.83%

No items found using the specified filter.