Coverage report: 87%

Files Functions Classes

coverage.py v7.11.0, created at 2025-11-17 18:19 +0000

File statements missing excluded coverage
src/app.py 56 56 0 0%
src/couchers/__init__.py 0 0 0 100%
src/couchers/config.py 53 24 0 55%
src/couchers/constants.py 27 0 0 100%
src/couchers/context.py 88 15 0 83%
src/couchers/crypto.py 101 4 0 96%
src/couchers/db.py 113 28 0 75%
src/couchers/descriptor_pool.py 15 0 0 100%
src/couchers/email/__init__.py 26 0 0 100%
src/couchers/email/dev.py 9 0 0 100%
src/couchers/email/smtp.py 49 5 0 90%
src/couchers/helpers/__init__.py 0 0 0 100%
src/couchers/helpers/badges.py 19 0 0 100%
src/couchers/helpers/clusters.py 24 1 0 96%
src/couchers/helpers/geoip.py 41 31 0 24%
src/couchers/helpers/strong_verification.py 24 0 0 100%
src/couchers/i18n/__init__.py 0 0 0 100%
src/couchers/i18n/constants.py 2 0 0 100%
src/couchers/i18n/i18n.py 60 3 0 95%
src/couchers/interceptors.py 226 32 0 86%
src/couchers/jobs/__init__.py 0 0 0 100%
src/couchers/jobs/enqueue.py 7 0 0 100%
src/couchers/jobs/handlers.py 394 16 0 96%
src/couchers/jobs/worker.py 107 19 0 82%
src/couchers/materialized_views.py 90 1 0 99%
src/couchers/metrics.py 84 0 0 100%
src/couchers/migrations/env.py 38 15 0 61%
src/couchers/migrations/versions/02156b1739ad_add_volunteer_overrides.py 12 2 0 83%
src/couchers/migrations/versions/0613ce600e4b_add_source_to_donation_initiations.py 10 1 0 90%
src/couchers/migrations/versions/07ecff50fe93_add_blog_post_notifs.py 9 1 0 89%
src/couchers/migrations/versions/0ad661585a57_add_invite_codes.py 14 3 0 79%
src/couchers/migrations/versions/128252798bc4_add_new_email_pattern_constraint.py 9 1 0 89%
src/couchers/migrations/versions/12de0481c47d_add_has_passport_sex_gender_exception.py 10 1 0 90%
src/couchers/migrations/versions/13fe6ada1535_add_index_on_background_jobs.py 9 1 0 89%
src/couchers/migrations/versions/14585a4e1868_add_event__reminder_to_.py 11 1 0 91%
src/couchers/migrations/versions/18d100ed2803_added_host_request_reminders.py 13 1 0 92%
src/couchers/migrations/versions/1c7784767710_add_superuser_column.py 10 1 0 90%
src/couchers/migrations/versions/1c809d111871_1996_language_list_yue.py 13 1 0 92%
src/couchers/migrations/versions/1c999dea180d_add_new_notification_types.py 18 1 0 94%
src/couchers/migrations/versions/1e9b694d08c0_expand_content_reporting.py 17 4 0 76%
src/couchers/migrations/versions/20842baa0c53_is_deleted_on_reference.py 10 1 0 90%
src/couchers/migrations/versions/217651c73ca8_drop_unsupported_languages.py 16 1 0 94%
src/couchers/migrations/versions/2630bc1387d1_add_notification_table.py 25 7 0 72%
src/couchers/migrations/versions/27a2782784d0_regenerate_all_migrations.py 185 87 0 53%
src/couchers/migrations/versions/2c084379cb84_add_event_community_invites.py 15 1 0 93%
src/couchers/migrations/versions/2c6aaada8bff_add_onboarding_email_fields_to_user.py 16 3 0 81%
src/couchers/migrations/versions/2d656b6ad999_fix_slugify.py 9 1 0 89%
src/couchers/migrations/versions/2fc64cf68321_add_sv_to_lite_users.py 10 1 0 90%
src/couchers/migrations/versions/2fd7096c6d4f_remove_unused_profile_fields.py 12 2 0 83%
src/couchers/migrations/versions/30ee8ff72171_add_volunteers_table.py 10 1 0 90%
src/couchers/migrations/versions/33116a094637_add_rate_limit_violations.py 12 2 0 83%
src/couchers/migrations/versions/33944292a259_add_thread_notifications.py 12 1 0 92%
src/couchers/migrations/versions/34db9c02d305_add_event_community_toggle.py 12 2 0 83%
src/couchers/migrations/versions/39295ed931f6_update_tz_table_and_add_index.py 14 1 0 93%
src/couchers/migrations/versions/3937eb39a4ca_add_host_request_archive_status.py 12 2 0 83%
src/couchers/migrations/versions/3ac39dcf3b5a_add_mod_notes.py 13 1 0 92%
src/couchers/migrations/versions/3b63c4706f0d_add_more_email_fields.py 12 2 0 83%
src/couchers/migrations/versions/3b8d963e0b7d_regions_and_languages.py 38 12 0 68%
src/couchers/migrations/versions/4023fed9a8db_database_improvements.py 17 1 0 94%
src/couchers/migrations/versions/45e7e0254963_move_api_calls_to_logging_schema.py 11 2 0 82%
src/couchers/migrations/versions/461446320dfa_force_passwords_fully.py 17 1 0 94%
src/couchers/migrations/versions/46e6b6a3d9ed_added_is_cancelled_and_is_deleted_for_events.py 13 1 0 92%
src/couchers/migrations/versions/49669627f688_remove_name_from_sv.py 10 1 0 90%
src/couchers/migrations/versions/584f70c6a0d4_add_host_request_message_bg_job.py 11 1 0 91%
src/couchers/migrations/versions/5e89dd9ef181_adding_tokens_and_booleans_to_user_model.py 23 7 0 70%
src/couchers/migrations/versions/61b4c6b2df72_add_api_keys.py 12 2 0 83%
src/couchers/migrations/versions/62fcd41e4dcd_implement_signup_flow_v2.py 18 4 0 78%
src/couchers/migrations/versions/64d94faabb20_switch_lite_user_to_use_geom.py 10 1 0 90%
src/couchers/migrations/versions/69ce91d4db5e_add_badges.py 14 1 0 93%
src/couchers/migrations/versions/6aa87f3539f9_add_private_text_to_references.py 13 2 0 85%
src/couchers/migrations/versions/6c05f801b0c6_add_account_deletion.py 22 6 0 73%
src/couchers/migrations/versions/6db90129a4da_add_profile_completeness_to_lite_user.py 10 1 0 90%
src/couchers/migrations/versions/71a33b6af395_add_sami.py 13 1 0 92%
src/couchers/migrations/versions/723394ace6b5_add_filled_contributor_form_to_user.py 10 1 0 90%
src/couchers/migrations/versions/725813da484d_use_brackets_for_language_dialects.py 13 1 0 92%
src/couchers/migrations/versions/74e7f371be76_make_contribute_ways_a_non_null_array.py 10 1 0 90%
src/couchers/migrations/versions/763e0bd674a5_add_user_removed.py 9 1 0 89%
src/couchers/migrations/versions/7f9f32e4b055_simplify_donation_tables.py 14 1 0 93%
src/couchers/migrations/versions/80d30951919d_phone_verifications.py 26 8 0 69%
src/couchers/migrations/versions/8121c15b01c0_add_breton_language.py 13 1 0 92%
src/couchers/migrations/versions/82289f7fdeab_add_active_user_index.py 10 1 0 90%
src/couchers/migrations/versions/83201c4b8bf3_update_to_tz_2024b.py 13 1 0 92%
src/couchers/migrations/versions/83eff0255b38_add_antibot.py 10 1 0 90%
src/couchers/migrations/versions/87cfd4c70e1e_adding_is_deleted_and_userblocks.py 13 2 0 85%
src/couchers/migrations/versions/888ec31ad793_add_my_home_completeness.py 9 1 0 89%
src/couchers/migrations/versions/88b6bb559332_add_strong_verification.py 20 6 0 70%
src/couchers/migrations/versions/8a62223e4cbd_add_background_job_priority.py 10 0 0 100%
src/couchers/migrations/versions/8c878b177151_add_hosting_location_to_host_request.py 18 3 0 83%
src/couchers/migrations/versions/8f056dd44a58_add_profile_public_visibility.py 17 3 0 82%
src/couchers/migrations/versions/91bd06f6a96a_add_trigram_index_on_clusters_name.py 9 1 0 89%
src/couchers/migrations/versions/9261e9647b69_make_hosting_status_non_nullable.py 15 2 0 87%
src/couchers/migrations/versions/989c7f1803f4_add_perf_report.py 10 1 0 90%
src/couchers/migrations/versions/999cf4ffb47a_add_user_activity.py 13 2 0 85%
src/couchers/migrations/versions/99aece5bdc42_add_didnt_meetup_feature.py 14 2 0 86%
src/couchers/migrations/versions/9b738767992c_adds_language_preference_to_user_model.py 10 1 0 90%
src/couchers/migrations/versions/9b9a9eb3873a_add_new_chat_notifications.py 10 1 0 90%
src/couchers/migrations/versions/9c0b3af4feb6_add_lite_user_view.py 9 1 0 89%
src/couchers/migrations/versions/a0d1c7fdfe5b_fix_slugify_for_empty_slugs.py 9 1 0 89%
src/couchers/migrations/versions/a0d344cfb455_add_is_seen_to_notifications.py 10 1 0 90%
src/couchers/migrations/versions/a19fc23547ce_add_reference_reminder_emails.py 13 2 0 85%
src/couchers/migrations/versions/a3700d2af277_add_call_traces.py 10 1 0 90%
src/couchers/migrations/versions/a6c8b3a9a986_switch_to_new_stripe_account.py 11 1 0 91%
src/couchers/migrations/versions/a84888e4cb0a_add_new_languages_to_database.py 13 1 0 92%
src/couchers/migrations/versions/b16903ba2c18_add_response_rate_view.py 9 1 0 89%
src/couchers/migrations/versions/b5355a1f60f6_add_do_not_email.py 11 1 0 91%
src/couchers/migrations/versions/b8487ad90a52_auto_recommendation_score.py 10 1 0 90%
src/couchers/migrations/versions/b9791722e1c0_change_background_job_type_to_a_string.py 12 1 0 92%
src/couchers/migrations/versions/bc79d9a6fd26_notify_v2_1.py 15 1 0 93%
src/couchers/migrations/versions/bc7b6ebf50ea_add_donation_status.py 11 1 0 91%
src/couchers/migrations/versions/bf12729fa8eb_sms_verification_constraints.py 9 1 0 89%
src/couchers/migrations/versions/c035cdcabd40_add_new_events_tables.py 40 1 0 98%
src/couchers/migrations/versions/c21437364eb6_add_sms_log.py 10 1 0 90%
src/couchers/migrations/versions/c29307a66e4b_update_volunteer_table.py 9 1 0 89%
src/couchers/migrations/versions/c7079437149a_add_opt_out_of_newsletter.py 12 1 0 92%
src/couchers/migrations/versions/c7b0540a7b6b_add_more_info_to_sv_state.py 13 1 0 92%
src/couchers/migrations/versions/ca9d20814704_add_ip_and_user_agent.py 12 2 0 83%
src/couchers/migrations/versions/cd456767d2f7_add_more_perf_indexes.py 24 8 0 67%
src/couchers/migrations/versions/d1a68f873ee3_rename_hostrequest_user_columns.py 18 1 0 94%
src/couchers/migrations/versions/d345174cb002_update_materialized_views.py 10 1 0 90%
src/couchers/migrations/versions/d3cee8207c3d_enforce_community_membership_background_.py 9 1 0 89%
src/couchers/migrations/versions/d3f2cb24b948_add_clustered_users_materialized_view.py 9 1 0 89%
src/couchers/migrations/versions/d45f557f87e8_add_admin_note_to_users.py 10 1 0 90%
src/couchers/migrations/versions/dc3e31bb80f3_make_geom_required.py 17 3 0 82%
src/couchers/migrations/versions/dc57b0bfab39_add_sv_duplicate.py 14 1 0 93%
src/couchers/migrations/versions/e3815ef8b1e3_add_moderation_user_list.py 12 2 0 83%
src/couchers/migrations/versions/e54417789a02_add_daily_order_key.py 11 1 0 91%
src/couchers/migrations/versions/e6205511239b_remove_shared_space_sleeping_arrangement.py 11 0 0 100%
src/couchers/migrations/versions/e6d03b494119_add_donation_tables.py 18 5 0 72%
src/couchers/migrations/versions/e938e80b67a4_make_stripe_payment_intent_id_unique_in_.py 9 1 0 89%
src/couchers/migrations/versions/e96f385d0f66_add_mute_to_group_chat_subscription.py 10 1 0 90%
src/couchers/migrations/versions/ed8f8aad559c_notify_v2.py 30 1 0 97%
src/couchers/migrations/versions/f176b9395ba1_add_last_antibot.py 10 1 0 90%
src/couchers/migrations/versions/f2abd32dee6e_add_contributor_form_time_created.py 10 1 0 90%
src/couchers/migrations/versions/f40be9aecae7_fix_datetime_timezone.py 11 1 0 91%
src/couchers/migrations/versions/f4a49acd8801_coordinate_wrapping_for_users_events_.py 11 1 0 91%
src/couchers/migrations/versions/f53ecea60964_notify_v2_2.py 11 1 0 91%
src/couchers/migrations/versions/f555ed35e4d0_add_invoice_type_to_invoices.py 20 4 0 80%
src/couchers/migrations/versions/f77ccd92eb4d_add_user_field_for_accepting_community_.py 12 2 0 83%
src/couchers/migrations/versions/f7d5de383e11_add_perf_indexes.py 14 3 0 79%
src/couchers/migrations/versions/f7fa767c2999_add_host_req_feedback.py 16 4 0 75%
src/couchers/migrations/versions/ff3ee8951d1b_add_activeness_probes.py 12 0 0 100%
src/couchers/migrations/versions/ffe7d9a87925_update_session_token_default_expiry.py 10 1 0 90%
src/couchers/models/__init__.py 18 0 0 100%
src/couchers/models/activeness_probe.py 25 0 2 100%
src/couchers/models/auth.py 50 2 2 96%
src/couchers/models/background_jobs.py 31 0 0 100%
src/couchers/models/base.py 8 0 0 100%
src/couchers/models/clusters.py 113 2 0 98%
src/couchers/models/conversations.py 81 4 0 95%
src/couchers/models/discussions.py 59 0 0 100%
src/couchers/models/donations.py 32 0 2 100%
src/couchers/models/events.py 118 0 0 100%
src/couchers/models/host_requests.py 69 2 3 97%
src/couchers/models/logging.py 25 0 0 100%
src/couchers/models/mod_note.py 22 1 2 95%
src/couchers/models/notifications.py 139 1 0 99%
src/couchers/models/rest.py 249 1 0 99%
src/couchers/models/static.py 18 0 0 100%
src/couchers/models/uploads.py 33 0 2 100%
src/couchers/models/users.py 224 0 2 100%
src/couchers/models/verification.py 71 0 2 100%
src/couchers/notifications/__init__.py 0 0 0 100%
src/couchers/notifications/background.py 129 41 0 68%
src/couchers/notifications/notify.py 16 0 0 100%
src/couchers/notifications/push.py 22 1 0 95%
src/couchers/notifications/push_api.py 37 16 0 57%
src/couchers/notifications/quick_links.py 65 14 0 78%
src/couchers/notifications/render.py 252 33 0 87%
src/couchers/notifications/settings.py 61 4 0 93%
src/couchers/notifications/utils.py 2 0 0 100%
src/couchers/phone/check.py 8 1 0 88%
src/couchers/phone/sms.py 27 0 0 100%
src/couchers/proto/account_pb2.py 100 83 0 17%
src/couchers/proto/account_pb2_grpc.py 195 92 0 53%
src/couchers/proto/admin_pb2.py 125 109 0 13%
src/couchers/proto/admin_pb2_grpc.py 293 140 0 52%
src/couchers/proto/annotations_pb2.py 14 3 0 79%
src/couchers/proto/api_pb2.py 98 83 0 15%
src/couchers/proto/api_pb2_grpc.py 123 56 0 54%
src/couchers/proto/auth_pb2.py 91 77 0 15%
src/couchers/proto/auth_pb2_grpc.py 123 56 0 54%
src/couchers/proto/blocking_pb2.py 25 13 0 48%
src/couchers/proto/blocking_pb2_grpc.py 35 12 0 66%
src/couchers/proto/bugs_pb2.py 37 23 0 38%
src/couchers/proto/bugs_pb2_grpc.py 44 16 0 64%
src/couchers/proto/communities_pb2.py 78 61 0 22%
src/couchers/proto/communities_pb2_grpc.py 139 64 0 54%
src/couchers/proto/conversations_pb2.py 94 79 0 16%
src/couchers/proto/conversations_pb2_grpc.py 147 68 0 54%
src/couchers/proto/discussions_pb2.py 24 11 0 54%
src/couchers/proto/discussions_pb2_grpc.py 26 8 0 69%
src/couchers/proto/donations_pb2.py 23 11 0 52%
src/couchers/proto/donations_pb2_grpc.py 27 8 0 70%
src/couchers/proto/events_pb2.py 74 59 0 20%
src/couchers/proto/events_pb2_grpc.py 147 68 0 54%
src/couchers/proto/gis_pb2_grpc.py 51 20 0 61%
src/couchers/proto/google/api/annotations_pb2.py 14 2 0 86%
src/couchers/proto/google/api/http_pb2.py 18 8 0 56%
src/couchers/proto/google/api/httpbody_pb2.py 15 4 0 73%
src/couchers/proto/groups_pb2.py 63 47 0 25%
src/couchers/proto/groups_pb2_grpc.py 91 40 0 56%
src/couchers/proto/internal/jobs_pb2.py 37 27 0 27%
src/couchers/proto/internal/unsubscribe_pb2.py 22 11 0 50%
src/couchers/proto/internal/verification_pb2.py 13 3 0 77%
src/couchers/proto/iris_pb2_grpc.py 18 4 0 78%
src/couchers/proto/jail_pb2.py 32 19 0 41%
src/couchers/proto/jail_pb2_grpc.py 59 24 0 59%
src/couchers/proto/media_pb2.py 21 9 0 57%
src/couchers/proto/media_pb2_grpc.py 19 4 0 79%
src/couchers/proto/notification_data_pb2.py 100 83 0 17%
src/couchers/proto/notifications_pb2.py 46 33 0 28%
src/couchers/proto/notifications_pb2_grpc.py 75 32 0 57%
src/couchers/proto/pages_pb2.py 43 29 0 33%
src/couchers/proto/pages_pb2_grpc.py 66 28 0 58%
src/couchers/proto/public_pb2.py 41 25 0 39%
src/couchers/proto/public_pb2_grpc.py 44 16 0 64%
src/couchers/proto/references_pb2.py 44 31 0 30%
src/couchers/proto/references_pb2_grpc.py 67 28 0 58%
src/couchers/proto/reporting_pb2.py 19 7 0 63%
src/couchers/proto/reporting_pb2_grpc.py 19 4 0 79%
src/couchers/proto/requests_pb2.py 70 55 0 21%
src/couchers/proto/requests_pb2_grpc.py 99 44 0 56%
src/couchers/proto/resources_pb2.py 35 23 0 34%
src/couchers/proto/resources_pb2_grpc.py 51 20 0 61%
src/couchers/proto/search_pb2.py 46 27 0 41%
src/couchers/proto/search_pb2_grpc.py 42 16 0 62%
src/couchers/proto/stripe_pb2_grpc.py 18 4 0 78%
src/couchers/proto/threads_pb2.py 29 17 0 41%
src/couchers/proto/threads_pb2_grpc.py 26 8 0 69%
src/couchers/rate_limits/__init__.py 0 0 0 100%
src/couchers/rate_limits/check.py 30 0 0 100%
src/couchers/rate_limits/definitions.py 22 0 0 100%
src/couchers/reranker.py 20 2 0 90%
src/couchers/resources.py 73 4 0 95%
src/couchers/server.py 64 0 0 100%
src/couchers/servicers/__init__.py 0 0 0 100%
src/couchers/servicers/account.py 310 19 0 94%
src/couchers/servicers/admin.py 435 133 0 69%
src/couchers/servicers/api.py 398 12 0 97%
src/couchers/servicers/auth.py 289 37 0 87%
src/couchers/servicers/blocking.py 38 2 0 95%
src/couchers/servicers/bugs.py 38 0 0 100%
src/couchers/servicers/communities.py 191 32 0 83%
src/couchers/servicers/conversations.py 292 27 0 91%
src/couchers/servicers/discussions.py 60 6 0 90%
src/couchers/servicers/donations.py 75 3 0 96%
src/couchers/servicers/events.py 499 80 0 84%
src/couchers/servicers/gis.py 31 7 0 77%
src/couchers/servicers/groups.py 108 22 0 80%
src/couchers/servicers/jail.py 66 2 0 97%
src/couchers/servicers/media.py 22 1 0 95%
src/couchers/servicers/notifications.py 76 6 0 92%
src/couchers/servicers/pages.py 148 8 0 95%
src/couchers/servicers/public.py 63 23 0 63%
src/couchers/servicers/references.py 140 4 0 97%
src/couchers/servicers/reporting.py 16 0 0 100%
src/couchers/servicers/requests.py 284 19 0 93%
src/couchers/servicers/resources.py 15 1 0 93%
src/couchers/servicers/search.py 269 34 0 87%
src/couchers/servicers/threads.py 121 9 0 93%
src/couchers/sql.py 42 1 4 98%
src/couchers/tasks.py 74 3 0 96%
src/couchers/templates/__init__.py 0 0 0 100%
src/couchers/templates/v2.py 72 1 0 99%
src/couchers/tracing.py 19 8 0 58%
src/couchers/urls.py 72 4 0 94%
src/couchers/utils.py 179 13 0 93%
src/dummy_data.py 140 5 0 96%
src/tests/conftest.py 7 1 0 86%
src/tests/test_account.py 704 1 0 99%
src/tests/test_activeness_probes.py 95 0 0 100%
src/tests/test_admin.py 478 0 0 100%
src/tests/test_api.py 769 0 0 100%
src/tests/test_app.py 13 0 0 100%
src/tests/test_auth.py 606 0 0 100%
src/tests/test_bg_jobs.py 492 2 0 99%
src/tests/test_blocking.py 85 0 0 100%
src/tests/test_bugs.py 83 0 0 100%
src/tests/test_communities.py 603 0 0 100%
src/tests/test_conversations.py 989 0 0 100%
src/tests/test_crypto.py 42 0 0 100%
src/tests/test_db.py 107 0 0 100%
src/tests/test_discussions.py 110 0 0 100%
src/tests/test_donations.py 169 0 0 100%
src/tests/test_dummy_data.py 9 0 0 100%
src/tests/test_email.py 235 0 0 100%
src/tests/test_events.py 1199 0 0 100%
src/tests/test_fixtures.py 577 10 0 98%
src/tests/test_gis.py 32 0 0 100%
src/tests/test_groups.py 254 0 0 100%
src/tests/test_i18n.py 53 0 0 100%
src/tests/test_interceptors.py 279 0 0 100%
src/tests/test_jail.py 233 0 0 100%
src/tests/test_media.py 31 0 0 100%
src/tests/test_model_constraints.py 81 0 0 100%
src/tests/test_models.py 26 0 0 100%
src/tests/test_notifications.py 286 3 0 99%
src/tests/test_pages.py 506 0 0 100%
src/tests/test_public.py 35 0 0 100%
src/tests/test_references.py 536 0 0 100%
src/tests/test_reporting.py 30 0 0 100%
src/tests/test_requests.py 676 1 0 99%
src/tests/test_resources.py 32 0 0 100%
src/tests/test_search.py 428 0 0 100%
src/tests/test_strong_verification.py 376 1 0 99%
src/tests/test_threads.py 93 0 0 100%
src/tests/test_utils.py 29 0 0 100%
src/tests/test_verification.py 168 0 0 100%
src/tests/test_visible_users.py 45 0 0 100%
Total 25279 3162 21 87%

No items found using the specified filter.