Coverage report: 100%

Files Functions Classes

coverage.py v7.15.4, created at 2026-08-31 10:13 +0000

File function   statements missing excluded   coverage
app/aircraft/__init__.py (no function)   0 0 0   100%
app/aircraft/co_owner_form_parsing.py _parse_decimal   5 0 0   100%
app/aircraft/co_owner_form_parsing.py _exceeds_two_decimal_places   2 0 0   100%
app/aircraft/co_owner_form_parsing.py parse_owners_form   50 0 0   100%
app/aircraft/co_owner_form_parsing.py parse_reserve_fields   18 0 0   100%
app/aircraft/co_owner_form_parsing.py (no function)   11 0 0   100%
app/aircraft/gps_import.py _load_airports   16 0 0   100%
app/aircraft/gps_import.py _reset_airports_cache   1 0 0   100%
app/aircraft/gps_import.py _haversine_km   7 0 0   100%
app/aircraft/gps_import.py detect_format   10 0 0   100%
app/aircraft/gps_import.py classify_track   14 0 0   100%
app/aircraft/gps_import.py _extract_icao_hints   4 0 0   100%
app/aircraft/gps_import.py _parse_gpx   29 0 0   100%
app/aircraft/gps_import.py _parse_garmin_csv   47 0 0   100%
app/aircraft/gps_import.py _parse_kml   54 0 0   100%
app/aircraft/gps_import.py parse_gps_file   6 0 0   100%
app/aircraft/gps_import.py merge_and_sort   6 0 0   100%
app/aircraft/gps_import.py _split_into_raw_groups   31 0 0   100%
app/aircraft/gps_import.py _count_landings   8 0 0   100%
app/aircraft/gps_import.py detect_segments   23 0 0   100%
app/aircraft/gps_import.py resolve_icao   10 0 0   100%
app/aircraft/gps_import.py round_flight_time   6 0 0   100%
app/aircraft/gps_import.py downsample_track   8 0 0   100%
app/aircraft/gps_import.py build_geojson   2 0 0   100%
app/aircraft/gps_import.py score_gps_candidates   3 0 0   100%
app/aircraft/gps_import.py _score_gps_candidate   9 0 0   100%
app/aircraft/gps_import.py (no function)   80 0 0   100%
app/aircraft/routes.py _tenant_id   4 0 0   100%
app/aircraft/routes.py _get_aircraft_or_404   4 0 0   100%
app/aircraft/routes.py _get_tenant_aircraft_or_404   4 0 0   100%
app/aircraft/routes.py _shared_ownership_enabled   4 0 0   100%
app/aircraft/routes.py _registration_taken   5 0 0   100%
app/aircraft/routes.py _get_component_or_404   4 0 0   100%
app/aircraft/routes.py list_aircraft   20 0 0   100%
app/aircraft/routes.py new_aircraft   3 0 0   100%
app/aircraft/routes.py detail   46 0 0   100%
app/aircraft/routes.py edit_aircraft   4 0 0   100%
app/aircraft/routes.py _save_aircraft   118 0 0   100%
app/aircraft/routes.py manage_owners   36 0 0   100%
app/aircraft/routes.py _co_owner_billing_period   11 0 0   100%
app/aircraft/routes.py owners_billing   55 0 0   100%
app/aircraft/routes.py _get_current_owner_or_404   4 0 0   100%
app/aircraft/routes.py owner_record_payment   34 0 0   100%
app/aircraft/routes.py owner_reverse_entry   18 0 0   100%
app/aircraft/routes.py record_valuation_snapshot   23 0 0   100%
app/aircraft/routes.py owner_account   11 0 0   100%
app/aircraft/routes.py owner_statement_csv   15 0 0   100%
app/aircraft/routes.py my_share   12 0 0   100%
app/aircraft/routes.py my_share_statement_csv   16 0 0   100%
app/aircraft/routes.py archive_aircraft   8 0 0   100%
app/aircraft/routes.py unarchive_aircraft   7 0 0   100%
app/aircraft/routes.py delete_aircraft   7 0 0   100%
app/aircraft/routes.py quick_add_components   13 0 0   100%
app/aircraft/routes.py new_component   4 0 0   100%
app/aircraft/routes.py edit_component   5 0 0   100%
app/aircraft/routes.py _save_component   75 0 0   100%
app/aircraft/routes.py _save_component._parse_date   7 0 0   100%
app/aircraft/routes.py delete_component   8 0 0   100%
app/aircraft/routes.py _point_in_polygon   16 0 0   100%
app/aircraft/routes.py wb_config   70 0 0   100%
app/aircraft/routes.py wb_config._f   8 0 0   100%
app/aircraft/routes.py wb_list   6 0 0   100%
app/aircraft/routes.py wb_entry   76 0 0   100%
app/aircraft/routes.py wb_entry_delete   10 0 0   100%
app/aircraft/routes.py _gps_tmp_dir   4 0 0   100%
app/aircraft/routes.py _segment_to_dict   1 0 0   100%
app/aircraft/routes.py _linked_pilot_entries   11 0 0   100%
app/aircraft/routes.py _gps_candidate_str   6 0 0   100%
app/aircraft/routes.py _gps_candidate_dict   1 0 0   100%
app/aircraft/routes.py _load_segment_geojson   5 0 0   100%
app/aircraft/routes.py _segment_for_session   9 0 0   100%
app/aircraft/routes.py gps_import_upload   51 0 0   100%
app/aircraft/routes.py gps_import_review   62 0 0   100%
app/aircraft/routes.py _gps_import_create_segment   54 0 0   100%
app/aircraft/routes.py _gps_cleanup   12 0 0   100%
app/aircraft/routes.py gps_import_confirm_one   93 0 0   100%
app/aircraft/routes.py gps_import_prefill_segment   21 0 0   100%
app/aircraft/routes.py gps_import_history   3 0 0   100%
app/aircraft/routes.py gps_import_rollback   12 0 0   100%
app/aircraft/routes.py flight_detail   7 0 0   100%
app/aircraft/routes.py flight_tracks   7 0 0   100%
app/aircraft/routes.py flight_tracks_gif   17 0 0   100%
app/aircraft/routes.py _photo_folder   2 0 0   100%
app/aircraft/routes.py _save_photo_file   10 0 0   100%
app/aircraft/routes.py _trash_photo_file   15 0 0   100%
app/aircraft/routes.py _renumber_photos   17 0 0   100%
app/aircraft/routes.py upload_photo   27 0 0   100%
app/aircraft/routes.py serve_photo   11 0 0   100%
app/aircraft/routes.py delete_photo   16 0 0   100%
app/aircraft/routes.py reorder_photos   17 0 0   100%
app/aircraft/routes.py (no function)   188 0 0   100%
app/airworthiness/routes.py _tenant_id   4 0 0   100%
app/airworthiness/routes.py _get_aircraft_or_404   4 0 0   100%
app/airworthiness/routes.py _get_node_or_404   4 0 0   100%
app/airworthiness/routes.py _get_doc_or_404   7 0 0   100%
app/airworthiness/routes.py _get_stc_or_404   4 0 0   100%
app/airworthiness/routes.py _status_for   1 0 0   100%
app/airworthiness/routes.py dashboard   24 0 0   100%
app/airworthiness/routes.py trigger_sync   11 0 0   100%
app/airworthiness/routes.py add_node   14 0 0   100%
app/airworthiness/routes.py delete_node   6 0 0   100%
app/airworthiness/routes.py add_document   18 0 0   100%
app/airworthiness/routes.py delete_document   9 0 0   100%
app/airworthiness/routes.py update_status   20 0 0   100%
app/airworthiness/routes.py add_stc   9 0 0   100%
app/airworthiness/routes.py delete_stc   6 0 0   100%
app/airworthiness/routes.py (no function)   53 0 0   100%
app/airworthiness_sync.py _build_tree_path   1 0 0   100%
app/airworthiness_sync.py _fetch_references   11 0 0   100%
app/airworthiness_sync.py _easa_doc_url   2 0 0   100%
app/airworthiness_sync.py _process_node   23 0 0   100%
app/airworthiness_sync.py sync_aircraft   13 0 0   100%
app/airworthiness_sync.py sync_all_nodes   37 0 0   100%
app/airworthiness_sync.py (no function)   21 0 0   100%
app/auth/__init__.py (no function)   0 0 0   100%
app/auth/routes.py _sl   1 0 0   100%
app/auth/routes.py _ip_backoff_delay   4 0 0   100%
app/auth/routes.py _increment_ip_failures   3 0 0   100%
app/auth/routes.py _clear_ip_failures   1 0 0   100%
app/auth/routes.py _check_account_locked   9 0 0   100%
app/auth/routes.py _increment_account_failures   3 0 0   100%
app/auth/routes.py _lock_account   4 0 0   100%
app/auth/routes.py _clear_account_failures   2 0 0   100%
app/auth/routes.py _no_users   1 0 0   100%
app/auth/routes.py _is_demo   1 0 0   100%
app/auth/routes.py login   14 0 0   100%
app/auth/routes.py _login_post   6 0 0   100%
app/auth/routes.py _login_credentials   51 0 0   100%
app/auth/routes.py _login_totp   22 0 0   100%
app/auth/routes.py _login_totp_enrol   21 0 0   100%
app/auth/routes.py logout   5 0 0   100%
app/auth/routes.py _wizard_phase   7 0 0   100%
app/auth/routes.py _next_step   7 0 9   100%
app/auth/routes.py setup   52 0 0   100%
app/auth/routes.py _setup_account   20 0 0   100%
app/auth/routes.py _setup_totp   16 0 0   100%
app/auth/routes.py _setup_operating_model   11 0 0   100%
app/auth/routes.py _setup_aircraft_count   17 0 0   100%
app/auth/routes.py _setup_org_name   9 0 0   100%
app/auth/routes.py _setup_co_owners   14 0 0   100%
app/auth/routes.py _setup_finish   55 0 0   100%
app/auth/routes.py _clear_setup_session   2 0 0   100%
app/auth/routes.py profile   18 0 0   100%
app/auth/routes.py _profile_update_name   5 0 0   100%
app/auth/routes.py _profile_change_password   17 0 0   100%
app/auth/routes.py _profile_setup_totp   5 0 0   100%
app/auth/routes.py _profile_confirm_totp   16 0 0   100%
app/auth/routes.py _profile_disable_totp   13 0 0   100%
app/auth/routes.py reset_password   24 0 3   100%
app/auth/routes.py (no function)   70 0 0   100%
app/config/__init__.py (no function)   0 0 0   100%
app/config/routes.py _derive_key   3 0 0   100%
app/config/routes.py _encrypt_bytes   5 0 0   100%
app/config/routes.py _get_alembic_head   5 0 0   100%
app/config/routes.py _parse_gatus_env   8 0 0   100%
app/config/routes.py run_backup   43 0 0   100%
app/config/routes.py _add_uploads_to_zip   7 0 0   100%
app/config/routes.py _pg_dump   10 0 0   100%
app/config/routes.py _block_in_demo   12 0 0   100%
app/config/routes.py index   98 0 0   100%
app/config/routes.py update_tenant_slug   47 0 2   100%
app/config/routes.py update_map_tiles   13 0 0   100%
app/config/routes.py run_backup_now   8 0 0   100%
app/config/routes.py update_profile   41 0 1   100%
app/config/routes.py test_email   14 0 1   100%
app/config/routes.py check_version   15 0 0   100%
app/config/routes.py trigger_upgrade   24 0 0   100%
app/config/routes.py upgrade_status   23 0 0   100%
app/config/routes.py tenant_list   9 0 0   100%
app/config/routes.py tenant_create   29 0 0   100%
app/config/routes.py tenant_toggle_active   10 0 0   100%
app/config/routes.py tenant_reset_owner_password   19 0 0   100%
app/config/routes.py notification_preferences   55 0 0   100%
app/config/routes.py notification_preferences._user_has_cap   1 0 0   100%
app/config/routes.py backfill_aircraft_type_icao   12 0 0   100%
app/config/routes.py backfill_pilot_log_to_flight_entries   7 0 0   100%
app/config/routes.py _renter_auth_status   12 0 0   100%
app/config/routes.py _get_renter_auth_or_404   5 0 0   100%
app/config/routes.py renters_list   6 0 1   100%
app/config/routes.py _renter_auth_form_context   4 0 0   100%
app/config/routes.py _save_renter_authorization   67 0 0   100%
app/config/routes.py _save_renter_authorization._date_or_none   7 0 0   100%
app/config/routes.py renter_add   7 0 1   100%
app/config/routes.py renter_edit   8 0 1   100%
app/config/routes.py renter_revoke   8 0 1   100%
app/config/routes.py _renter_account_period   10 0 0   100%
app/config/routes.py renter_account   13 0 3   100%
app/config/routes.py renter_record_payment   35 0 1   100%
app/config/routes.py renter_statement_csv   15 0 1   100%
app/config/routes.py gatus_badge   19 0 0   100%
app/config/routes.py (no function)   103 0 0   100%
app/demo/__init__.py (no function)   1 0 0   100%
app/demo/routes.py _busy_window_minutes   4 0 0   100%
app/demo/routes.py _fix_stale_demo_session   5 0 0   100%
app/demo/routes.py enter   26 0 0   100%
app/demo/routes.py _slot_user_id   13 0 0   100%
app/demo/routes.py _touch_slot   2 0 0   100%
app/demo/routes.py next_wipe   2 0 0   100%
app/demo/routes.py demo_has_recent_activity   2 0 0   100%
app/demo/routes.py (no function)   23 0 0   100%
app/documents/__init__.py (no function)   0 0 0   100%
app/documents/routes.py _tenant_id   4 0 0   100%
app/documents/routes.py _get_tenant   4 0 1   100%
app/documents/routes.py _get_aircraft_or_404   4 0 0   100%
app/documents/routes.py active_document_for   3 0 0   100%
app/documents/routes.py _recompute_expiry_field   6 0 0   100%
app/documents/routes.py _parse_date_field   8 0 0   100%
app/documents/routes.py _get_aircraft_document_or_404   4 0 0   100%
app/documents/routes.py _delete_file   18 0 0   100%
app/documents/routes.py _resolve_component   9 0 0   100%
app/documents/routes.py _save_upload   9 0 0   100%
app/documents/routes.py _ensure_tenant_slug   11 0 0   100%
app/documents/routes.py _safe_path_component   1 0 0   100%
app/documents/routes.py _safe_join   5 0 0   100%
app/documents/routes.py _parse_reconcile_filename   10 0 0   100%
app/documents/routes.py _save_upload_canonical   20 0 0   100%
app/documents/routes.py _current_role   2 0 0   100%
app/documents/routes.py _doc_broken   2 0 0   100%
app/documents/routes.py title_suggestions   15 0 0   100%
app/documents/routes.py list_documents   19 0 0   100%
app/documents/routes.py upload_document   41 0 0   100%
app/documents/routes.py upload_document._re_render   3 0 0   100%
app/documents/routes.py edit_document   42 0 0   100%
app/documents/routes.py delete_document   12 0 0   100%
app/documents/routes.py download_all_documents   25 0 0   100%
app/documents/routes.py _upload_expiry_cert   27 0 0   100%
app/documents/routes.py upload_insurance_cert   1 0 0   100%
app/documents/routes.py upload_arc_cert   1 0 0   100%
app/documents/routes.py upload_pilot_document   27 0 0   100%
app/documents/routes.py delete_pilot_document   9 0 0   100%
app/documents/routes.py list_reconcile   15 0 0   100%
app/documents/routes.py scan_documents   52 0 0   100%
app/documents/routes.py rename_reconcile_folder   61 0 0   100%
app/documents/routes.py import_reconcile   28 0 0   100%
app/documents/routes.py ignore_reconcile   6 0 0   100%
app/documents/routes.py (no function)   101 0 0   100%
app/expenses/__init__.py (no function)   0 0 0   100%
app/expenses/cost_dashboard.py resolve_period   5 0 0   100%
app/expenses/cost_dashboard.py hours_flown   5 0 0   100%
app/expenses/cost_dashboard.py oil_added   5 0 0   100%
app/expenses/cost_dashboard.py _in_period   7 0 0   100%
app/expenses/cost_dashboard.py _prorated_amount   14 0 0   100%
app/expenses/cost_dashboard.py compute_cost_dashboard   22 0 0   100%
app/expenses/cost_dashboard.py compute_cost_dashboard._per_hour   1 0 0   100%
app/expenses/cost_dashboard.py (no function)   12 0 0   100%
app/expenses/form_parsing.py parse_expense_fields   66 0 0   100%
app/expenses/form_parsing.py (no function)   8 0 0   100%
app/expenses/routes.py _tenant_id   4 0 0   100%
app/expenses/routes.py _get_aircraft_or_404   4 0 0   100%
app/expenses/routes.py _get_expense_or_404   4 0 0   100%
app/expenses/routes.py _fuel_expense_prefill   19 0 0   100%
app/expenses/routes.py _compute_stats   10 0 0   100%
app/expenses/routes.py list_expenses   15 0 0   100%
app/expenses/routes.py cost_dashboard   9 0 0   100%
app/expenses/routes.py add_expense   8 0 0   100%
app/expenses/routes.py edit_expense   9 0 0   100%
app/expenses/routes.py delete_expense   6 0 0   100%
app/expenses/routes.py _validate_and_save   52 0 2   100%
app/expenses/routes.py (no function)   39 0 0   100%
app/extensions.py _rate_limiting_disabled   1 0 0   100%
app/extensions.py (no function)   7 0 0   100%
app/flights/__init__.py (no function)   0 0 0   100%
app/flights/airframe_import.py _num   1 0 0   100%
app/flights/airframe_import.py _dup_key   1 0 0   100%
app/flights/airframe_import.py _fetch_existing_dedup_keys   2 0 0   100%
app/flights/airframe_import.py propose_airframe_mapping   7 0 0   100%
app/flights/airframe_import.py airframe_type_hints   15 0 0   100%
app/flights/airframe_import.py _clean_icao   4 0 0   100%
app/flights/airframe_import.py _is_subtotal   2 0 0   100%
app/flights/airframe_import.py _is_blank_cell   4 0 0   100%
app/flights/airframe_import.py _row_get   3 0 0   100%
app/flights/airframe_import.py _parse_row_date   4 0 0   100%
app/flights/airframe_import.py _build_airframe_fields   23 0 0   100%
app/flights/airframe_import.py _fields_to_flight_entry_kwargs   1 0 0   100%
app/flights/airframe_import.py execute_airframe_import   47 0 0   100%
app/flights/airframe_import.py _score_airframe_non_time_signals   22 0 0   100%
app/flights/airframe_import.py _score_airframe_candidate   17 0 0   100%
app/flights/airframe_import.py find_conflicting_airframe_rows   25 0 0   100%
app/flights/airframe_import.py (no function)   48 0 0   100%
app/flights/form_parsing.py _parse_clock_time   4 0 0   100%
app/flights/form_parsing.py _hours_between   5 0 0   100%
app/flights/form_parsing.py flight_is_lenient   1 0 0   100%
app/flights/form_parsing.py parse_flight_fields   165 0 0   100%
app/flights/form_parsing.py apply_flight_fields   31 0 0   100%
app/flights/form_parsing.py (no function)   16 0 0   100%
app/flights/routes.py _openaip_key   2 0 0   100%
app/flights/routes.py _tenant_id   4 0 0   100%
app/flights/routes.py _check_flight_hour_milestone   12 0 0   100%
app/flights/routes.py _get_aircraft_or_404   4 0 0   100%
app/flights/routes.py _get_flight_or_404   11 0 0   100%
app/flights/routes.py _save_upload   8 0 0   100%
app/flights/routes.py _delete_upload   7 0 0   100%
app/flights/routes.py _nature_suggestions   2 0 0   100%
app/flights/routes.py _parse_gps_upload   19 0 0   100%
app/flights/routes.py _find_duplicate_flight   21 0 0   100%
app/flights/routes.py _get_counter_hint   4 0 0   100%
app/flights/routes.py _find_covering_reservation   6 0 0   100%
app/flights/routes.py _ac_category   1 0 0   100%
app/flights/routes.py apply_pilot_identity   19 0 0   100%
app/flights/routes.py serve_upload   16 0 0   100%
app/flights/routes.py fleet_flights   5 0 0   100%
app/flights/routes.py list_flights   4 0 0   100%
app/flights/routes.py component_logbook   24 0 0   100%
app/flights/routes.py log_flight   22 0 0   100%
app/flights/routes.py edit_flight   10 0 0   100%
app/flights/routes.py flight_track_image   24 0 0   100%
app/flights/routes.py flight_track_gif   24 0 0   100%
app/flights/routes.py registration_lookup   18 0 0   100%
app/flights/routes.py registration_lookup._norm   1 0 0   100%
app/flights/routes.py parse_gps_api   7 0 0   100%
app/flights/routes.py _suggested_aircraft_for_device   4 0 0   100%
app/flights/routes.py _check_gps_duplicate   11 0 0   100%
app/flights/routes.py _handle_log_flight_post   182 0 0   100%
app/flights/routes.py _handle_log_flight_post._parse_dec   7 0 0   100%
app/flights/routes.py _render_form   8 0 0   100%
app/flights/routes.py delete_flight   12 0 0   100%
app/flights/routes.py _airframe_tmp_dir   4 0 0   100%
app/flights/routes.py _airframe_cleanup_tmp   14 0 0   100%
app/flights/routes.py _render_airframe_map   3 0 0   100%
app/flights/routes.py airframe_import_upload   33 0 0   100%
app/flights/routes.py airframe_import_execute   94 0 0   100%
app/flights/routes.py _finalize_airframe_import_review   14 0 0   100%
app/flights/routes.py airframe_import_review   29 0 0   100%
app/flights/routes.py airframe_import_review_resolve   74 0 2   100%
app/flights/routes.py airframe_import_rollback   12 0 0   100%
app/flights/routes.py airframe_import_toggle_historical   11 0 0   100%
app/flights/routes.py (no function)   121 0 0   100%
app/hangar/__init__.py (no function)   0 0 0   100%
app/hangar/routes.py secret   1 0 0   100%
app/hangar/routes.py (no function)   5 0 0   100%
app/init.py _env_or_file   13 0 0   100%
app/init.py _normalize_database_url   4 0 0   100%
app/init.py _aviation_day_msgid   4 0 0   100%
app/init.py _static_folder_mtime_token   9 0 0   100%
app/init.py _static_cache_version   4 0 0   100%
app/init.py _set_sqlite_fk_pragma   4 0 0   100%
app/init.py _drop_and_restore_schema   24 0 0   100%
app/init.py _easa_sync_loop   23 0 0   100%
app/init.py _start_easa_sync_scheduler   3 0 0   100%
app/init.py _parse_notification_time   12 0 0   100%
app/init.py _notification_daily_loop   16 0 0   100%
app/init.py _start_notification_scheduler   4 0 0   100%
app/init.py create_app   164 0 0   100%
app/init.py create_app._get_locale   12 0 0   100%
app/init.py create_app._static_cache_bust   2 0 0   100%
app/init.py create_app._generate_csp_nonce   1 0 0   100%
app/init.py create_app._csp_nonce   1 0 0   100%
app/init.py create_app._security_headers   15 0 0   100%
app/init.py create_app._airport_name_filter   3 0 0   100%
app/init.py create_app.pwa_manifest   2 0 0   100%
app/init.py create_app.service_worker   9 0 0   100%
app/init.py create_app.api_check_flight_duplicate   36 0 0   100%
app/init.py create_app.airport_search   16 0 0   100%
app/init.py create_app.aircraft_type_search   18 0 0   100%
app/init.py create_app._current_theme   9 0 0   100%
app/init.py create_app.inject_globals   59 0 0   100%
app/init.py create_app.forbidden   1 0 0   100%
app/init.py create_app.not_found   1 0 0   100%
app/init.py create_app.internal_error   6 0 0   100%
app/init.py create_app.index   96 0 0   100%
app/init.py create_app.not_yet_implemented   2 0 0   100%
app/init.py create_app.set_language   17 0 0   100%
app/init.py create_app.set_theme   17 0 0   100%
app/init.py create_app.robots_txt   1 0 0   100%
app/init.py create_app.favicon   1 0 0   100%
app/init.py create_app.health   1 0 0   100%
app/init.py create_app.health_ready   11 0 0   100%
app/init.py create_app.check_empty_db_command   12 0 0   100%
app/init.py create_app.restore_backup_command   106 0 0   100%
app/init.py create_app.backup_now_command   8 0 0   100%
app/init.py create_app.reset_db_command   6 0 0   100%
app/init.py create_app.seed_demo_command   12 0 0   100%
app/init.py _validate_config   80 0 0   100%
app/init.py (no function)   36 0 3   100%
app/log_redaction.py redact_sensitive_path   1 0 0   100%
app/log_redaction.py (no function)   3 0 0   100%
app/maintenance/__init__.py (no function)   0 0 0   100%
app/maintenance/amp_import.py _norm   1 0 0   100%
app/maintenance/amp_import.py find_header   10 0 0   100%
app/maintenance/amp_import.py parse_interval   18 0 0   100%
app/maintenance/amp_import.py match_category   7 0 0   100%
app/maintenance/amp_import.py suggest_component_id   10 0 0   100%
app/maintenance/amp_import.py hours_basis_for_component   3 0 0   100%
app/maintenance/amp_import.py _cell   4 0 0   100%
app/maintenance/amp_import.py _text_or_none   4 0 0   100%
app/maintenance/amp_import.py parse_amp_rows   12 0 0   100%
app/maintenance/amp_import.py format_interval   12 0 0   100%
app/maintenance/amp_import.py compute_due_fields   9 0 0   100%
app/maintenance/amp_import.py (no function)   50 0 2   100%
app/maintenance/form_parsing.py _parse_iso_date   4 0 0   100%
app/maintenance/form_parsing.py _parse_positive_int   5 0 0   100%
app/maintenance/form_parsing.py _parse_nonneg_float   5 0 0   100%
app/maintenance/form_parsing.py _parse_nonneg_int   5 0 0   100%
app/maintenance/form_parsing.py _parse_positive_float   5 0 0   100%
app/maintenance/form_parsing.py _parse_optional_float   5 0 0   100%
app/maintenance/form_parsing.py parse_trigger_fields   71 0 0   100%
app/maintenance/form_parsing.py parse_service_fields   31 0 0   100%
app/maintenance/form_parsing.py (no function)   15 0 0   100%
app/maintenance/routes.py _tenant_id   4 0 0   100%
app/maintenance/routes.py _get_aircraft_or_404   4 0 0   100%
app/maintenance/routes.py _get_trigger_or_404   4 0 0   100%
app/maintenance/routes.py fleet_overview   45 0 0   100%
app/maintenance/routes.py fleet_overview._trigger_sort_key   3 0 0   100%
app/maintenance/routes.py _group_trigger_rows_by_component   13 0 0   100%
app/maintenance/routes.py list_triggers   15 0 0   100%
app/maintenance/routes.py list_triggers._status   1 0 0   100%
app/maintenance/routes.py new_trigger   4 0 0   100%
app/maintenance/routes.py edit_trigger   5 0 0   100%
app/maintenance/routes.py _save_trigger   31 0 0   100%
app/maintenance/routes.py delete_trigger   7 0 0   100%
app/maintenance/routes.py service_trigger   26 0 0   100%
app/maintenance/routes.py edit_amp_declaration   5 0 0   100%
app/maintenance/routes.py _save_amp_declaration   39 0 0   100%
app/maintenance/routes.py _save_amp_declaration._text   2 0 0   100%
app/maintenance/routes.py add_amp_revision   30 0 0   100%
app/maintenance/routes.py delete_amp_revision   15 0 0   100%
app/maintenance/routes.py _amp_import_tmp_dir   4 0 0   100%
app/maintenance/routes.py _cleanup_amp_import_tmp   9 0 0   100%
app/maintenance/routes.py _amp_preview_rows   10 0 0   100%
app/maintenance/routes.py import_amp_upload   36 0 0   100%
app/maintenance/routes.py import_amp_commit   42 0 0   100%
app/maintenance/routes.py import_amp_history   3 0 0   100%
app/maintenance/routes.py import_amp_rollback   10 0 0   100%
app/maintenance/routes.py _amp_export_context   13 0 0   100%
app/maintenance/routes.py _amp_export_context._installed   1 0 0   100%
app/maintenance/routes.py _amp_content_signature   5 0 0   100%
app/maintenance/routes.py _amp_content_signature._component   1 0 0   100%
app/maintenance/routes.py _amp_draft_status   6 0 0   100%
app/maintenance/routes.py _amp_pdf_filename   3 0 0   100%
app/maintenance/routes.py _amp_pdf_storage_path   2 0 0   100%
app/maintenance/routes.py _render_and_cache_amp_pdf   8 0 0   100%
app/maintenance/routes.py export_amp   7 0 0   100%
app/maintenance/routes.py export_amp_pdf   20 0 0   100%
app/maintenance/routes.py download_amp_revision_pdf   17 0 0   100%
app/maintenance/routes.py (no function)   103 0 0   100%
app/models.py reset_schema   5 0 0   100%
app/models.py User.display_name   1 0 0   100%
app/models.py UserInvitation.is_expired   4 0 0   100%
app/models.py UserInvitation.is_accepted   1 0 0   100%
app/models.py PasswordResetToken.is_expired   4 0 0   100%
app/models.py PasswordResetToken.is_used   1 0 0   100%
app/models.py Aircraft.cover_photo   1 0 0   100%
app/models.py Aircraft.total_engine_hours   2 0 0   100%
app/models.py Aircraft.total_flight_hours   2 0 0   100%
app/models.py Aircraft.engine_hours_by_id   7 0 0   100%
app/models.py Aircraft.flight_hours_by_id   7 0 0   100%
app/models.py Aircraft.total_landings   2 0 0   100%
app/models.py Aircraft.landings_by_id   7 0 0   100%
app/models.py Aircraft.is_archived   1 0 0   100%
app/models.py Aircraft.is_grounded   7 0 0   100%
app/models.py Aircraft._expiry_status   8 0 0   100%
app/models.py Aircraft.insurance_status   1 0 0   100%
app/models.py Aircraft.arc_status   1 0 0   100%
app/models.py Flight.total_flight_time   3 0 0   100%
app/models.py Flight.display_aircraft_type   3 0 0   100%
app/models.py Flight.display_aircraft_type_icao   3 0 0   100%
app/models.py Flight.display_registration   3 0 0   100%
app/models.py MaintenanceTrigger.status   34 0 0   100%
app/models.py MaintenanceTrigger.last_record   1 0 0   100%
app/models.py Document.owner_type   9 0 0   100%
app/models.py Document.is_image   1 0 0   100%
app/models.py Document.is_pdf   1 0 0   100%
app/models.py Document.is_expiring_soon   4 0 0   100%
app/models.py Document.is_upcoming   4 0 0   100%
app/models.py ShareToken.is_active   1 0 0   100%
app/models.py Snag.is_open   1 0 0   100%
app/models.py Reservation.duration_hours   2 0 0   100%
app/models.py DispatchRecord.is_checked_out   1 0 0   100%
app/models.py DispatchRecord.is_checked_in   1 0 0   100%
app/models.py RentalCharge.is_final   1 0 0   100%
app/models.py RenterAuthorization.is_valid   7 0 0   100%
app/models.py RenterAuthorization.valid_for   2 0 0   100%
app/models.py EASASourceNode.display_path   1 0 0   100%
app/models.py AirworthinessDocument.is_manual   1 0 0   100%
app/models.py NotificationSnooze.is_active   1 0 0   100%
app/models.py (no function)   1170 0 0   100%
app/notifications/__init__.py (no function)   0 0 0   100%
app/notifications/routes.py snooze   8 0 0   100%
app/notifications/routes.py (no function)   7 0 0   100%
app/offline/__init__.py (no function)   0 0 0   100%
app/offline/routes.py _csrf_error   1 0 0   100%
app/offline/routes.py api_login_required   3 0 0   100%
app/offline/routes.py api_login_required.decorated   3 0 0   100%
app/offline/routes.py _tenant_id   4 0 0   100%
app/offline/routes.py _get_aircraft_or_404   4 0 0   100%
app/offline/routes.py _get_flight_or_404   11 0 0   100%
app/offline/routes.py aircraft_logbook_snapshot   3 0 0   100%
app/offline/routes.py csrf_token   1 0 0   100%
app/offline/routes.py workbench   2 0 0   100%
app/offline/routes.py changes   1 0 0   100%
app/offline/routes.py pilot_workbench   1 0 0   100%
app/offline/routes.py _parse_easa_decimal   7 0 0   100%
app/offline/routes.py _parse_easa_int   7 0 0   100%
app/offline/routes.py _apply_easa_fields   4 0 0   100%
app/offline/routes.py _malformed_sync_body   1 0 0   100%
app/offline/routes.py sync_flight   36 0 0   100%
app/offline/routes.py pilot_logbook_snapshot   4 0 0   100%
app/offline/routes.py _malformed_pilot_sync_body   1 0 0   100%
app/offline/routes.py sync_pilot_entry   29 0 0   100%
app/offline/routes.py (no function)   60 0 0   100%
app/offline/serialize.py _fmt_decimal   3 0 0   100%
app/offline/serialize.py _fmt_int   1 0 0   100%
app/offline/serialize.py _fmt_time   1 0 0   100%
app/offline/serialize.py _fmt_str   1 0 0   100%
app/offline/serialize.py canonical_pilot_entry   1 0 0   100%
app/offline/serialize.py canonical_entry   1 0 0   100%
app/offline/serialize.py (no function)   10 0 3   100%
app/pilots/__init__.py (no function)   0 0 0   100%
app/pilots/currency.py _rolling_landing_currency   24 0 0   100%
app/pilots/currency.py _rolling_landing_currency._count   1 0 0   100%
app/pilots/currency.py _expiry_status   8 0 0   100%
app/pilots/currency.py per_type_currency   27 0 0   100%
app/pilots/currency.py passenger_currency   3 0 0   100%
app/pilots/currency.py night_currency   3 0 0   100%
app/pilots/currency.py medical_status   5 0 0   100%
app/pilots/currency.py sep_status   5 0 0   100%
app/pilots/currency.py currency_summary   16 0 0   100%
app/pilots/currency.py (no function)   20 0 0   100%
app/pilots/form_parsing.py _parse_time   9 0 0   100%
app/pilots/form_parsing.py _parse_decimal   12 0 0   100%
app/pilots/form_parsing.py _parse_int   10 0 0   100%
app/pilots/form_parsing.py _parse_date   7 0 0   100%
app/pilots/form_parsing.py parse_pilot_fields   64 0 0   100%
app/pilots/form_parsing.py parse_linked_pilot_fields   24 0 0   100%
app/pilots/form_parsing.py apply_pilot_fields   3 0 0   100%
app/pilots/form_parsing.py (no function)   14 0 0   100%
app/pilots/logbook_import.py _norm   1 0 0   100%
app/pilots/logbook_import.py _disambiguate   9 0 0   100%
app/pilots/logbook_import.py _fingerprint   2 0 0   100%
app/pilots/logbook_import.py _is_header_row   5 0 0   100%
app/pilots/logbook_import.py _is_numeric_str   5 0 0   100%
app/pilots/logbook_import.py _header_alias_score   1 0 0   100%
app/pilots/logbook_import.py _find_header_row   13 0 0   100%
app/pilots/logbook_import.py _trim_trailing_empty_cols   8 0 1   100%
app/pilots/logbook_import.py _merge_label_map   10 0 0   100%
app/pilots/logbook_import.py _group_labels_from_map   1 0 0   100%
app/pilots/logbook_import.py _group_labels_heuristic   18 0 0   100%
app/pilots/logbook_import.py _apply_group_labels   9 0 0   100%
app/pilots/logbook_import.py parse_file   6 0 0   100%
app/pilots/logbook_import.py _preferred_sheet_names   8 0 0   100%
app/pilots/logbook_import.py _pick_best_excel_sheet   17 0 0   100%
app/pilots/logbook_import.py _parse_excel   14 0 0   100%
app/pilots/logbook_import.py _parse_csv   15 0 0   100%
app/pilots/logbook_import.py _build_parsed_file   17 0 0   100%
app/pilots/logbook_import.py propose_mapping   24 0 0   100%
app/pilots/logbook_import.py _alias_mapping   4 0 0   100%
app/pilots/logbook_import.py _is_subtotal_row   10 0 0   100%
app/pilots/logbook_import.py parse_date_value   17 0 0   100%
app/pilots/logbook_import.py parse_time_value   16 0 0   100%
app/pilots/logbook_import.py parse_duration_value   25 0 0   100%
app/pilots/logbook_import.py parse_int_value   17 0 0   100%
app/pilots/logbook_import.py _is_nonempty   5 0 0   100%
app/pilots/logbook_import.py type_hints   17 0 0   100%
app/pilots/logbook_import.py preview_rows   15 0 0   100%
app/pilots/logbook_import.py _date_col_index   4 0 0   100%
app/pilots/logbook_import.py _row_get   2 0 0   100%
app/pilots/logbook_import.py _parse_row_date   4 0 0   100%
app/pilots/logbook_import.py _build_entry_kwargs   34 0 0   100%
app/pilots/logbook_import.py _num   1 0 0   100%
app/pilots/logbook_import.py _dup_key   1 0 0   100%
app/pilots/logbook_import.py _fetch_existing_dedup_keys   4 0 0   100%
app/pilots/logbook_import.py _assign_pilot_identity   11 0 0   100%
app/pilots/logbook_import.py execute_import   48 0 0   100%
app/pilots/logbook_import.py _kwargs_duration   3 0 0   100%
app/pilots/logbook_import.py _score_candidate   39 0 0   100%
app/pilots/logbook_import.py find_conflicting_rows   28 0 0   100%
app/pilots/logbook_import.py link_entries_to_aircraft   36 0 0   100%
app/pilots/logbook_import.py link_entries_to_aircraft._norm_reg   1 0 0   100%
app/pilots/logbook_import.py link_entries_to_aircraft._tenants_for_pilot   3 0 0   100%
app/pilots/logbook_import.py link_entries_to_aircraft._place_icao   4 0 0   100%
app/pilots/logbook_import.py (no function)   89 0 0   100%
app/pilots/personal_minimums.py get_active_revision   2 0 0   100%
app/pilots/personal_minimums.py recency_breaches   20 0 0   100%
app/pilots/personal_minimums.py (no function)   10 0 0   100%
app/pilots/routes.py _current_user_id   1 0 0   100%
app/pilots/routes.py _openaip_key   3 0 0   100%
app/pilots/routes.py _get_or_create_profile   6 0 0   100%
app/pilots/routes.py _my_entries_query   2 0 0   100%
app/pilots/routes.py _check_logbook_milestone   21 0 0   100%
app/pilots/routes.py profile   37 0 0   100%
app/pilots/routes.py _active_minimums_revision   1 0 0   100%
app/pilots/routes.py _draft_minimums_revision   2 0 0   100%
app/pilots/routes.py _get_own_revision_or_404   4 0 0   100%
app/pilots/routes.py _get_own_draft_section_or_404   4 0 0   100%
app/pilots/routes.py _get_own_draft_item_or_404   4 0 0   100%
app/pilots/routes.py _flew_or_reserved_today   5 0 0   100%
app/pilots/routes.py minimums_view   7 0 0   100%
app/pilots/routes.py minimums_create   21 0 0   100%
app/pilots/routes.py minimums_history   3 0 0   100%
app/pilots/routes.py minimums_revision_detail   3 0 0   100%
app/pilots/routes.py minimums_revise   21 0 0   100%
app/pilots/routes.py minimums_edit   5 0 0   100%
app/pilots/routes.py _validate_tag_and_numeric   12 0 0   100%
app/pilots/routes.py minimums_section_add   14 0 0   100%
app/pilots/routes.py minimums_section_edit   10 0 0   100%
app/pilots/routes.py minimums_section_delete   6 0 0   100%
app/pilots/routes.py _move_sort_order   7 0 0   100%
app/pilots/routes.py minimums_section_move_up   5 0 0   100%
app/pilots/routes.py minimums_section_move_down   5 0 0   100%
app/pilots/routes.py minimums_item_add   22 0 0   100%
app/pilots/routes.py minimums_item_edit   20 0 0   100%
app/pilots/routes.py minimums_item_delete   6 0 0   100%
app/pilots/routes.py minimums_item_move_up   5 0 0   100%
app/pilots/routes.py minimums_item_move_down   5 0 0   100%
app/pilots/routes.py minimums_publish   20 0 0   100%
app/pilots/routes.py minimums_delete_draft   8 0 0   100%
app/pilots/routes.py minimums_print   6 0 0   100%
app/pilots/routes.py pilot_tracks   5 0 0   100%
app/pilots/routes.py pilot_tracks_gif   15 0 0   100%
app/pilots/routes.py view_entry   5 0 0   100%
app/pilots/routes.py logbook   20 0 0   100%
app/pilots/routes.py _compute_totals_sql   9 0 0   100%
app/pilots/routes.py new_entry   17 0 0   100%
app/pilots/routes.py edit_entry   18 0 0   100%
app/pilots/routes.py _delete_upload   7 0 0   100%
app/pilots/routes.py delete_entry   12 0 0   100%
app/pilots/routes.py _apply_gps_to_pilot_entry   30 0 0   100%
app/pilots/routes.py _apply_gps_to_pilot_entry._parse_dt   4 0 0   100%
app/pilots/routes.py _import_tmp_dir   4 0 0   100%
app/pilots/routes.py _cleanup_previous_tmp   18 0 0   100%
app/pilots/routes.py import_upload   31 0 0   100%
app/pilots/routes.py import_execute   118 0 0   100%
app/pilots/routes.py _finalize_import_review   19 0 0   100%
app/pilots/routes.py import_review   27 0 0   100%
app/pilots/routes.py import_review_resolve   76 0 2   100%
app/pilots/routes.py import_history   3 0 0   100%
app/pilots/routes.py import_rollback   9 0 0   100%
app/pilots/routes.py _pilot_gps_tmp_dir   2 0 0   100%
app/pilots/routes.py _pilot_tenant_id   2 0 0   100%
app/pilots/routes.py _pilot_match_segment   3 0 0   100%
app/pilots/routes.py _pilot_fuzzy_match_segment   6 0 0   100%
app/pilots/routes.py _pilot_seg_match_dict   6 0 0   100%
app/pilots/routes.py pilot_gps_import_upload   57 0 1   100%
app/pilots/routes.py pilot_gps_import_review   47 0 0   100%
app/pilots/routes.py pilot_gps_import_confirm_one   130 0 0   100%
app/pilots/routes.py (no function)   201 0 0   100%
app/pw_hash.py hash   1 0 0   100%
app/pw_hash.py verify   12 0 0   100%
app/pw_hash.py needs_rehash   3 0 0   100%
app/pw_hash.py _is_bcrypt   1 0 0   100%
app/pw_hash.py (no function)   7 0 0   100%
app/pwa/__init__.py (no function)   0 0 0   100%
app/pwa/routes.py _allowed_destinations   2 0 0   100%
app/pwa/routes.py _dest_labels   1 0 0   100%
app/pwa/routes.py _category_labels   1 0 0   100%
app/pwa/routes.py _get_user_aircraft   4 0 0   100%
app/pwa/routes.py _ensure_tenant_slug   11 0 0   100%
app/pwa/routes.py _safe_path_component   1 0 0   100%
app/pwa/routes.py _cleanup_temp   2 0 0   100%
app/pwa/routes.py share_target_get   1 0 0   100%
app/pwa/routes.py share_target   20 0 0   100%
app/pwa/routes.py share_confirm   38 0 0   100%
app/pwa/routes.py _process_document   59 0 0   100%
app/pwa/routes.py (no function)   35 0 0   100%
app/quotes.py random_aviation_quote   3 0 0   100%
app/quotes.py (no function)   6 0 0   100%
app/refuels/__init__.py (no function)   0 0 0   100%
app/refuels/routes.py _tenant_id   4 0 0   100%
app/refuels/routes.py _get_aircraft_or_404   4 0 0   100%
app/refuels/routes.py _get_refuel_or_404   4 0 0   100%
app/refuels/routes.py _parse_required_date   10 0 0   100%
app/refuels/routes.py list_refuels   3 0 0   100%
app/refuels/routes.py new_refuel   4 0 0   100%
app/refuels/routes.py edit_refuel   5 0 0   100%
app/refuels/routes.py _save_refuel   36 0 0   100%
app/refuels/routes.py delete_refuel   6 0 0   100%
app/refuels/routes.py (no function)   29 0 0   100%
app/reports/__init__.py (no function)   0 0 0   100%
app/reports/routes.py _tenant_id   4 0 0   100%
app/reports/routes.py _get_aircraft_or_404   4 0 0   100%
app/reports/routes.py _resolve_report_range   16 0 0   100%
app/reports/routes.py utilization_report   5 0 0   100%
app/reports/routes.py utilization_report_csv   28 0 0   100%
app/reports/routes.py utilization_report_csv._fuel_str   3 0 0   100%
app/reports/routes.py utilization_report_csv._stat_row   6 0 0   100%
app/reports/routes.py (no function)   20 0 0   100%
app/reports/utilization.py flights_in_period   4 0 0   100%
app/reports/utilization.py engine_hours_flown   2 0 0   100%
app/reports/utilization.py fuel_added   11 0 0   100%
app/reports/utilization.py fuel_added._add   4 0 0   100%
app/reports/utilization.py _period_stats   3 0 0   100%
app/reports/utilization.py compute_utilization_report   8 0 0   100%
app/reports/utilization.py (no function)   13 0 0   100%
app/reservations/__init__.py (no function)   0 0 0   100%
app/reservations/routes.py _safe_next   8 0 0   100%
app/reservations/routes.py _tenant_id   3 0 1   100%
app/reservations/routes.py _get_aircraft_or_404   4 0 0   100%
app/reservations/routes.py _get_reservation_or_404   4 0 0   100%
app/reservations/routes.py _has_conflict   7 0 0   100%
app/reservations/routes.py _parse_datetime   4 0 0   100%
app/reservations/routes.py _computed_rate   1 0 0   100%
app/reservations/routes.py _effective_rate   6 0 0   100%
app/reservations/routes.py _rate_terms_label   5 0 0   100%
app/reservations/routes.py _is_owner_role   2 0 0   100%
app/reservations/routes.py _rental_authorization_policy   3 0 0   100%
app/reservations/routes.py _grounded_reservation_policy   3 0 0   100%
app/reservations/routes.py _has_open_grounding_snag   1 0 0   100%
app/reservations/routes.py _renter_authorization_ok   2 0 0   100%
app/reservations/routes.py _rate_divergence_warning   10 0 0   100%
app/reservations/routes.py _chargeable_days   4 0 0   100%
app/reservations/routes.py _estimated_hours   5 0 0   100%
app/reservations/routes.py _compute_cost   5 0 0   100%
app/reservations/routes.py _build_calendar_grid   2 0 0   100%
app/reservations/routes.py fleet_reservations   40 0 1   100%
app/reservations/routes.py calendar_view   39 0 0   100%
app/reservations/routes.py _get_downtime_or_404   4 0 0   100%
app/reservations/routes.py _save_downtime   30 0 0   100%
app/reservations/routes.py downtime_new   4 0 0   100%
app/reservations/routes.py downtime_edit   5 0 0   100%
app/reservations/routes.py downtime_delete   6 0 0   100%
app/reservations/routes.py new_reservation   13 0 0   100%
app/reservations/routes.py edit_reservation   12 0 0   100%
app/reservations/routes.py cancel_reservation   28 0 0   100%
app/reservations/routes.py confirm_reservation   34 0 0   100%
app/reservations/routes.py decline_reservation   12 0 0   100%
app/reservations/routes.py booking_settings   5 0 0   100%
app/reservations/routes.py _save_booking_settings   38 0 0   100%
app/reservations/routes.py _save_booking_settings._float_or_none   5 0 0   100%
app/reservations/routes.py _save_reservation   72 0 0   100%
app/reservations/routes.py _can_dispatch   1 0 0   100%
app/reservations/routes.py _discrepancy_warning   17 0 0   100%
app/reservations/routes.py reservation_detail   10 0 0   100%
app/reservations/routes.py checkout   57 0 0   100%
app/reservations/routes.py _checkout_counter_hint   2 0 0   100%
app/reservations/routes.py _draft_rental_charge   27 0 0   100%
app/reservations/routes.py _draft_rental_charge._delta   3 0 0   100%
app/reservations/routes.py checkin   48 0 0   100%
app/reservations/routes.py rental_charge   71 0 0   100%
app/reservations/routes.py rental_charge._float_field   5 0 0   100%
app/reservations/routes.py _my_account_period   9 0 0   100%
app/reservations/routes.py my_account   10 0 1   100%
app/reservations/routes.py my_account_statement_csv   13 0 1   100%
app/reservations/routes.py (no function)   103 0 0   100%
app/security_alerts.py SecurityAlertHandler.__init__   4 0 0   100%
app/security_alerts.py SecurityAlertHandler.emit   25 0 0   100%
app/security_alerts.py SecurityAlertHandler._dispatch   10 0 0   100%
app/security_alerts.py SecurityAlertHandler._send_ntfy   9 0 0   100%
app/security_alerts.py SecurityAlertHandler._send_email   25 0 0   100%
app/security_alerts.py SecurityAlertHandler._send_webhook   7 0 0   100%
app/security_alerts.py attach_to_logger   3 0 0   100%
app/security_alerts.py (no function)   22 0 0   100%
app/services/__init__.py (no function)   0 0 0   100%
app/services/advisory_lock.py advisory_lock_scope   12 0 0   100%
app/services/advisory_lock.py (no function)   5 0 0   100%
app/services/authorization.py AuthorizationService.effective_mask   26 0 0   100%
app/services/authorization.py AuthorizationService.can   14 0 0   100%
app/services/authorization.py AuthorizationService.maintenance_view_level   7 0 0   100%
app/services/authorization.py (no function)   8 0 0   100%
app/services/backup_format.py parse_backup_archive   26 0 0   100%
app/services/backup_format.py (no function)   8 0 0   100%
app/services/backup_scheduler.py parse_backup_time   14 0 0   100%
app/services/backup_scheduler.py _parse_positive_int   11 0 0   100%
app/services/backup_scheduler.py parse_backup_keep   1 0 0   100%
app/services/backup_scheduler.py parse_backup_retention   6 0 0   100%
app/services/backup_scheduler.py parse_backup_keep_days   1 0 0   100%
app/services/backup_scheduler.py parse_backup_keep_weeks   1 0 0   100%
app/services/backup_scheduler.py parse_backup_keep_months   1 0 0   100%
app/services/backup_scheduler.py _gfs_keep_ids   29 0 0   100%
app/services/backup_scheduler.py prune_old_backups   20 0 0   100%
app/services/backup_scheduler.py run_scheduled_backup   22 0 0   100%
app/services/backup_scheduler.py _backup_daily_loop   10 0 0   100%
app/services/backup_scheduler.py start_backup_scheduler   6 0 0   100%
app/services/backup_scheduler.py (no function)   24 0 0   100%
app/services/backup_verification.py _decrypt_if_needed   13 0 0   100%
app/services/backup_verification.py verify_backup_record   9 0 0   100%
app/services/backup_verification.py verify_and_alert   10 0 0   100%
app/services/backup_verification.py (no function)   10 0 0   100%
app/services/billing.py _quantize   1 0 0   100%
app/services/billing.py BillingService.get_or_create_account   14 0 2   100%
app/services/billing.py BillingService._insert   4 0 0   100%
app/services/billing.py BillingService.post   11 0 0   100%
app/services/billing.py BillingService.reverse   7 0 0   100%
app/services/billing.py BillingService.balance   6 0 0   100%
app/services/billing.py BillingService.statement   9 0 0   100%
app/services/billing.py BillingService.statement_csv   16 0 0   100%
app/services/billing.py (no function)   36 0 2   100%
app/services/co_owner_billing.py _quantize   1 0 0   100%
app/services/co_owner_billing.py _current_owners   2 0 0   100%
app/services/co_owner_billing.py _account_for   3 0 0   100%
app/services/co_owner_billing.py _live_entry   6 0 0   100%
app/services/co_owner_billing.py _sync_entry   9 0 0   100%
app/services/co_owner_billing.py _reverse_orphaned   10 0 0   100%
app/services/co_owner_billing.py _expense_desc   5 0 0   100%
app/services/co_owner_billing.py _route_str   3 0 0   100%
app/services/co_owner_billing.py _post_buy_ins   9 0 0   100%
app/services/co_owner_billing.py _post_fixed_expense_shares   18 0 0   100%
app/services/co_owner_billing.py _post_flight_usage   15 0 0   100%
app/services/co_owner_billing.py _post_reserve_contributions   37 0 0   100%
app/services/co_owner_billing.py reserve_fund_balance   9 0 0   100%
app/services/co_owner_billing.py run_co_owner_billing_pass   11 0 0   100%
app/services/co_owner_billing.py run_co_owner_billing_pass_all   12 0 2   100%
app/services/co_owner_billing.py overdue_since   12 0 0   100%
app/services/co_owner_billing.py (no function)   22 0 2   100%
app/services/component_limits.py component_hours   10 0 0   100%
app/services/component_limits.py component_limit_info   27 0 0   100%
app/services/component_limits.py aircraft_limit_infos   8 0 0   100%
app/services/component_limits.py fleet_limit_statuses   9 0 0   100%
app/services/component_limits.py (no function)   9 0 0   100%
app/services/email_service.py _smtp_settings   1 0 0   100%
app/services/email_service.py get_smtp_status   4 0 0   100%
app/services/email_service.py get_smtp_status._env   2 0 0   100%
app/services/email_service.py _record_health   20 0 0   100%
app/services/email_service.py get_email_health   16 0 0   100%
app/services/email_service.py send_email   45 0 0   100%
app/services/email_service.py (no function)   18 0 0   100%
app/services/notification_service.py get_effective_preference   9 0 0   100%
app/services/notification_service.py _user_caps   11 0 0   100%
app/services/notification_service.py _find_recipients   11 0 0   100%
app/services/notification_service.py _tenant_display_name   3 0 0   100%
app/services/notification_service.py _build_subject   2 0 0   100%
app/services/notification_service.py _render_email   9 0 0   100%
app/services/notification_service.py _text_for   11 0 0   100%
app/services/notification_service.py _already_sent_today   2 0 0   100%
app/services/notification_service.py _record_sent   7 0 0   100%
app/services/notification_service.py _resolve_snooze   13 0 0   100%
app/services/notification_service.py _snooze_url   5 0 0   100%
app/services/notification_service.py dispatch   54 0 0   100%
app/services/notification_service.py _recompute_all_expiry_fields   7 0 0   100%
app/services/notification_service.py run_daily_checks   23 0 0   100%
app/services/notification_service.py _check_maintenance   18 0 0   100%
app/services/notification_service.py _check_insurance   13 0 0   100%
app/services/notification_service.py _check_arc   13 0 0   100%
app/services/notification_service.py _check_medical_and_sep   19 0 0   100%
app/services/notification_service.py _check_documents   18 0 0   100%
app/services/notification_service.py _check_airworthiness_reviews   16 0 0   100%
app/services/notification_service.py _check_renter_authorizations   25 0 0   100%
app/services/notification_service.py _check_personal_minimums_recency   22 0 0   100%
app/services/notification_service.py _dispatch_in_context   4 0 0   100%
app/services/notification_service.py _try_welcome_lock   4 0 0   100%
app/services/notification_service.py send_welcome_email_if_needed   34 0 0   100%
app/services/notification_service.py (no function)   30 0 0   100%
app/services/recurring_expense_service.py _add_months   5 0 0   100%
app/services/recurring_expense_service.py _months_between   1 0 0   100%
app/services/recurring_expense_service.py materialize_recurring_expenses   25 0 0   100%
app/services/recurring_expense_service.py (no function)   7 0 0   100%
app/services/time_band_matching.py offset_ring_step_minutes   1 0 0   100%
app/services/time_band_matching.py _minutes   1 0 0   100%
app/services/time_band_matching.py shift_time   2 0 0   100%
app/services/time_band_matching.py time_band_score   13 0 0   100%
app/services/time_band_matching.py widened_span_score   4 0 0   100%
app/services/time_band_matching.py (no function)   9 0 0   100%
app/services/version_service.py fetch_versions   13 0 0   100%
app/services/version_service.py fetch_versions._StrictRedirect.redirect_request   4 0 0   100%
app/services/version_service.py fetch_latest_version   2 0 0   100%
app/services/version_service.py upsert_app_setting   5 0 0   100%
app/services/version_service.py _persist_update_flag   6 0 0   100%
app/services/version_service.py run_version_check   19 0 0   100%
app/services/version_service.py startup_recompute_update_flag   7 0 0   100%
app/services/version_service.py version_check_loop   10 0 0   100%
app/services/version_service.py start_version_check_thread   3 0 0   100%
app/services/version_service.py (no function)   13 0 0   100%
app/share/__init__.py (no function)   0 0 0   100%
app/share/routes.py _generate_token   4 0 0   100%
app/share/routes.py _get_aircraft_or_403   7 0 1   100%
app/share/routes.py create_token   8 0 0   100%
app/share/routes.py revoke_token   8 0 0   100%
app/share/routes.py token_qr   19 0 0   100%
app/share/routes.py public_view   19 0 0   100%
app/share/routes.py showcase_view   6 0 0   100%
app/share/routes.py showcase_photo   15 0 0   100%
app/share/routes.py (no function)   32 0 0   100%
app/snags/routes.py _tenant_id   4 0 0   100%
app/snags/routes.py _get_aircraft_or_404   4 0 0   100%
app/snags/routes.py _get_snag_or_404   4 0 0   100%
app/snags/routes.py _parse_required_date   10 0 0   100%
app/snags/routes.py list_snags   4 0 0   100%
app/snags/routes.py new_snag   4 0 0   100%
app/snags/routes.py edit_snag   5 0 0   100%
app/snags/routes.py _save_snag   77 0 0   100%
app/snags/routes.py resolve_snag   28 0 0   100%
app/snags/routes.py reopen_snag   12 0 0   100%
app/snags/routes.py delete_snag   10 0 0   100%
app/snags/routes.py (no function)   36 0 0   100%
app/squawk/__init__.py (no function)   0 0 0   100%
app/squawk/routes.py squawk   3 0 0   100%
app/squawk/routes.py (no function)   6 0 0   100%
app/sync_watcher.py _categories   4 0 0   100%
app/sync_watcher.py _scan_once   33 0 0   100%
app/sync_watcher.py _process_file   31 0 0   100%
app/sync_watcher.py _queue_pending   2 0 0   100%
app/sync_watcher.py _watcher_loop   7 0 0   100%
app/sync_watcher.py start_sync_watcher   6 0 0   100%
app/sync_watcher.py (no function)   18 0 0   100%
app/users/__init__.py (no function)   0 0 0   100%
app/users/routes.py _sl   1 0 0   100%
app/users/routes.py _block_in_demo   2 0 0   100%
app/users/routes.py _tenant_id   3 0 1   100%
app/users/routes.py list_users   10 0 0   100%
app/users/routes.py invite   38 0 0   100%
app/users/routes.py _try_send_invite_email   6 0 0   100%
app/users/routes.py accept_invite   37 0 0   100%
app/users/routes.py change_role   20 0 0   100%
app/users/routes.py revoke_access   13 0 0   100%
app/users/routes.py revoke_invite   6 0 0   100%
app/users/routes.py update_aircraft_access   19 0 0   100%
app/users/routes.py toggle_all_planes   12 0 0   100%
app/users/routes.py update_user_flags   14 0 0   100%
app/users/routes.py edit_permissions   28 0 0   100%
app/users/routes.py edit_permissions._parse_mask   5 0 0   100%
app/users/routes.py edit_permissions._bits_for   2 0 0   100%
app/users/routes.py (no function)   59 0 0   100%
app/utils.py to_libpq_url   2 0 0   100%
app/utils.py _mercator_y   2 0 0   100%
app/utils.py _build_gif_projection   24 0 0   100%
app/utils.py _build_gif_projection.project   3 0 0   100%
app/utils.py _coords_from_geojson   21 0 0   100%
app/utils.py _make_tile_background   60 0 0   100%
app/utils.py _make_tile_background._lon_to_tx   1 0 0   100%
app/utils.py _make_tile_background._lat_to_ty   2 0 0   100%
app/utils.py _make_tile_background._tile_nw_lonlat   3 0 0   100%
app/utils.py _canvas_geo_bounds   24 0 0   100%
app/utils.py sort_tracks_oldest_first   1 0 0   100%
app/utils.py generate_tracks_gif   62 0 0   100%
app/utils.py generate_tracks_gif.draw_shadow_text   2 0 0   100%
app/utils.py generate_tracks_gif.draw_track   8 0 0   100%
app/utils.py generate_tracks_gif._frame_bg   7 0 0   100%
app/utils.py generate_single_track_image   44 0 0   100%
app/utils.py generate_single_track_image._blank_png   3 0 0   100%
app/utils.py generate_single_track_gif   71 0 0   100%
app/utils.py generate_single_track_gif._blank_gif   3 0 0   100%
app/utils.py generate_single_track_gif.draw_shadow_text   2 0 0   100%
app/utils.py generate_single_track_gif.draw_track   8 0 0   100%
app/utils.py generate_single_track_gif._frame_bg   7 0 0   100%
app/utils.py _load_aircraft_types   13 0 0   100%
app/utils.py _load_aircraft_type_variants   16 0 0   100%
app/utils.py _load_aircraft_type_engine_data   17 0 0   100%
app/utils.py get_aircraft_type_engine_info   1 0 0   100%
app/utils.py _build_model_name_prefix_lookup   16 0 0   100%
app/utils.py _sorted_model_prefix_keys   1 0 0   100%
app/utils.py resolve_aircraft_type_icao   19 0 0   100%
app/utils.py _load_airport_names   12 0 0   100%
app/utils.py _sl   1 0 0   100%
app/utils.py activity   6 0 0   100%
app/utils.py AircraftRefConverter.to_python   8 0 0   100%
app/utils.py AircraftRefConverter.to_url   7 0 0   100%
app/utils.py login_required   3 0 0   100%
app/utils.py login_required.decorated   3 0 0   100%
app/utils.py require_instance_admin   3 0 0   100%
app/utils.py require_instance_admin.decorated   8 0 0   100%
app/utils.py current_user_role   6 0 0   100%
app/utils.py check_update_available   14 0 0   100%
app/utils.py check_legacy_logbook_data   6 0 0   100%
app/utils.py require_role   3 0 0   100%
app/utils.py require_role.decorator   2 0 0   100%
app/utils.py require_role.decorator.decorated   3 0 0   100%
app/utils.py require_pilot_access   3 0 0   100%
app/utils.py require_pilot_access.decorated   10 0 0   100%
app/utils.py require_maint_access   3 0 0   100%
app/utils.py require_maint_access.decorated   10 0 0   100%
app/utils.py user_can_access_aircraft   11 0 0   100%
app/utils.py accessible_aircraft   18 0 0   100%
app/utils.py compute_aircraft_statuses   28 0 0   100%
app/utils.py (no function)   61 0 0   100%
Total     15327 0 56   100%

No items found using the specified filter.