Coverage report: 88%

Files Functions Classes

coverage.py v7.13.1, created at 2026-01-13 12:05 +0000

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
src / app.py log_unhandled_exception   0% 4 4 0   0% 2 0   0%
src / app.py (no function)   0% 32 32 23   0% 2 0   0%
src / couchers / config.py check_config   0% 21 21 0   0% 26 0   0%
src / couchers / config.py make_config   79% 28 6 0   73% 22 4   76%
src / couchers / context.py NonInteractiveAbortException.__init__   0% 3 3 0   100% 0 0   0%
src / couchers / context.py NonInteractiveAbortException.code   0% 1 1 0   100% 0 0   0%
src / couchers / context.py NonInteractiveAbortException.details   0% 1 1 0   100% 0 0   0%
src / couchers / context.py NonInteractiveAbortException.__str__   0% 1 1 0   100% 0 0   0%
src / couchers / context.py CouchersContext.__init__   87% 15 2 0   75% 8 2   83%
src / couchers / context.py CouchersContext.__verify_interactive   50% 2 1 0   50% 2 1   50%
src / couchers / context.py CouchersContext.__verify_logged_in   50% 2 1 0   50% 2 1   50%
src / couchers / context.py CouchersContext.abort   75% 4 1 0   50% 2 1   67%
src / couchers / context.py CouchersContext.abort_with_error_code   80% 5 1 0   50% 2 1   71%
src / couchers / context.py CouchersContext.is_api_key   0% 2 2 0   100% 0 0   0%
src / couchers / context.py CouchersContext.ui_language_preference   0% 1 1 0   100% 0 0   0%
src / couchers / crypto.py verify_password   60% 5 2 0   100% 0 0   60%
src / couchers / crypto.py simple_hash_signature   75% 4 1 0   50% 2 1   67%
src / couchers / crypto.py aead_generate_key   0% 1 1 0   100% 0 0   0%
src / couchers / crypto.py aead_encrypt   100% 4 0 0   50% 2 1   83%
src / couchers / db.py session_scope   57% 23 10 0   50% 4 2   56%
src / couchers / db.py worker_repeatable_read_session_scope   57% 23 10 0   50% 4 2   56%
src / couchers / db.py db_post_fork   0% 1 1 0   100% 0 0   0%
src / couchers / db.py _can_moderate_any_cluster   0% 2 2 0   100% 0 0   0%
src / couchers / db.py timezone_at_coordinate   0% 2 2 0   100% 0 0   0%
src / couchers / email / smtp.py send_smtp_email   85% 34 5 0   64% 14 5   79%
src / couchers / experimentation.py setup_experimentation   0% 18 18 0   0% 4 0   0%
src / couchers / experimentation.py _shutdown_experimentation   0% 6 6 0   0% 4 0   0%
src / couchers / experimentation.py _check_initialized   50% 2 1 0   50% 2 1   50%
src / couchers / experimentation.py _get_statsig_user   0% 3 3 0   0% 2 0   0%
src / couchers / experimentation.py check_gate   50% 6 3 0   25% 4 1   40%
src / couchers / experimentation.py get_experiment   0% 5 5 0   0% 2 0   0%
src / couchers / experimentation.py get_dynamic_config   0% 5 5 0   0% 2 0   0%
src / couchers / experimentation.py log_event   0% 4 4 0   0% 2 0   0%
src / couchers / helpers / clusters.py create_cluster   93% 15 1 0   50% 2 1   88%
src / couchers / helpers / geoip.py geoip_approximate_location   13% 15 13 0   25% 4 1   16%
src / couchers / helpers / geoip.py geoip_asn   0% 18 18 0   0% 6 0   0%
src / couchers / i18n / i18next.py I18Next.localize   67% 3 1 0   50% 2 1   60%
src / couchers / i18n / i18next.py Language.load_json_dict.add_strings   86% 7 1 0   83% 6 1   85%
src / couchers / i18n / i18next.py Language.find_string   100% 8 0 0   88% 8 1   94%
src / couchers / i18n / i18next.py Language.localize   0% 4 4 0   0% 2 0   0%
src / couchers / i18n / i18next.py StringTemplate.render   88% 8 1 0   83% 6 1   86%
src / couchers / i18n / localize.py get_i18next   95% 21 1 0   90% 10 1   94%
src / couchers / i18n / localize.py localize_datetime   100% 8 0 0   50% 4 2   83%
src / couchers / i18n / plurals.py PluralRules.ca   0% 1 1 0   100% 0 0   0%
src / couchers / i18n / plurals.py PluralRules.cs   0% 6 6 0   0% 4 0   0%
src / couchers / i18n / plurals.py PluralRules.de   0% 1 1 0   100% 0 0   0%
src / couchers / i18n / plurals.py PluralRules.es   0% 6 6 0   0% 4 0   0%
src / couchers / i18n / plurals.py PluralRules.fr   0% 6 6 0   0% 4 0   0%
src / couchers / i18n / plurals.py PluralRules.he   0% 6 6 0   0% 4 0   0%
src / couchers / i18n / plurals.py PluralRules.hi   0% 4 4 0   0% 2 0   0%
src / couchers / i18n / plurals.py PluralRules.hu   0% 1 1 0   100% 0 0   0%
src / couchers / i18n / plurals.py PluralRules.it   0% 1 1 0   100% 0 0   0%
src / couchers / i18n / plurals.py PluralRules.ja   0% 1 1 0   100% 0 0   0%
src / couchers / i18n / plurals.py PluralRules.nl   0% 1 1 0   100% 0 0   0%
src / couchers / i18n / plurals.py PluralRules.pl   0% 6 6 0   0% 4 0   0%
src / couchers / i18n / plurals.py PluralRules.pt   0% 1 1 0   100% 0 0   0%
src / couchers / i18n / plurals.py PluralRules.ru   0% 6 6 0   0% 4 0   0%
src / couchers / i18n / plurals.py PluralRules.sv   0% 1 1 0   100% 0 0   0%
src / couchers / i18n / plurals.py PluralRules.tr   0% 1 1 0   100% 0 0   0%
src / couchers / i18n / plurals.py PluralRules.uk   0% 1 1 0   100% 0 0   0%
src / couchers / i18n / plurals.py PluralRules.zh   0% 1 1 0   100% 0 0   0%
src / couchers / interceptors.py _store_log   80% 10 2 0   50% 2 1   75%
src / couchers / interceptors.py CouchersMiddlewareInterceptor.intercept_service   90% 21 2 0   50% 4 2   84%
src / couchers / interceptors.py CouchersMiddlewareInterceptor.intercept_service.function_without_couchers_stuff   94% 33 2 0   75% 12 3   89%
src / couchers / interceptors.py validate_auth_level   75% 4 1 0   75% 4 1   75%
src / couchers / interceptors.py MediaInterceptor.intercept_service   75% 12 3 0   50% 6 3   67%
src / couchers / interceptors.py OTelInterceptor.intercept_service   0% 11 11 0   0% 4 0   0%
src / couchers / interceptors.py OTelInterceptor.intercept_service.tracing_function   0% 10 10 0   100% 0 0   0%
src / couchers / interceptors.py ErrorSanitizationInterceptor.intercept_service   75% 8 2 0   50% 4 2   67%
src / couchers / jobs / enqueue.py queue_job   83% 6 1 0   75% 4 1   80%
src / couchers / jobs / handlers.py add_users_to_email_list   84% 19 3 0   75% 8 2   81%
src / couchers / jobs / handlers.py finalize_strong_verification   96% 46 2 0   83% 12 2   93%
src / couchers / jobs / handlers.py send_activeness_probes   97% 29 1 0   81% 16 3   91%
src / couchers / jobs / handlers.py send_event_reminders   0% 10 10 0   0% 4 0   0%
src / couchers / jobs / handlers.py check_expo_push_receipts   93% 28 2 0   79% 14 3   88%
src / couchers / jobs / handlers.py send_postal_verification_postcard   85% 13 2 0   75% 4 1   82%
src / couchers / jobs / handlers.py check_database_consistency   63% 52 19 0   47% 34 12   57%
src / couchers / jobs / worker.py process_job   90% 42 4 0   100% 6 0   92%
src / couchers / jobs / worker.py run_scheduler   100% 5 0 0   75% 4 1   89%
src / couchers / jobs / worker.py _run_forever   0% 10 10 0   100% 0 0   0%
src / couchers / jobs / worker.py start_jobs_scheduler   0% 3 3 0   100% 0 0   0%
src / couchers / jobs / worker.py start_jobs_worker   0% 3 3 0   100% 0 0   0%
src / couchers / materialized_views.py float_   0% 1 1 0   100% 0 0   0%
src / couchers / migrations / env.py include_name   0% 5 5 0   0% 4 0   0%
src / couchers / migrations / env.py include_object   0% 3 3 0   0% 2 0   0%
src / couchers / migrations / env.py run_migrations_offline   0% 4 4 0   100% 0 0   0%
src / couchers / migrations / env.py (no function)   83% 23 4 0   33% 6 2   72%
src / couchers / models / host_requests.py HostRequest.can_write_reference_expr   0% 1 1 0   100% 0 0   0%
src / couchers / models / notifications.py NotificationTopicAction.unpack   0% 1 1 0   100% 0 0   0%
src / couchers / models / notifications.py NotificationTopicAction.__str__   0% 1 1 0   100% 0 0   0%
src / couchers / models / postal_verification.py PostalVerificationAttempt.is_valid   0% 1 1 0   100% 0 0   0%
src / couchers / notifications / background.py _send_email_notification   79% 24 5 0   70% 10 3   76%
src / couchers / notifications / background.py handle_notification   100% 24 0 0   93% 14 1   97%
src / couchers / notifications / background.py handle_email_digests   0% 16 16 0   0% 6 0   0%
src / couchers / notifications / expo_api.py send_expo_push_notification   0% 17 17 0   0% 4 0   0%
src / couchers / notifications / expo_api.py get_expo_push_receipts   53% 15 7 0   75% 4 1   58%
src / couchers / notifications / push.py _push_to_user   67% 3 1 0   50% 2 1   60%
src / couchers / notifications / quick_links.py respond_quick_link   61% 33 13 0   50% 14 3   57%
src / couchers / notifications / render_email.py render_email_notification   86% 214 31 1   81% 116 12   84%
src / couchers / notifications / render_push.py render_push_notification   87% 110 14 0   88% 106 13   88%
src / couchers / notifications / render_push.py _chat__missed_messages   0% 1 1 0   100% 0 0   0%
src / couchers / notifications / render_push.py _event__create_any   0% 2 2 0   100% 0 0   0%
src / couchers / notifications / render_push.py _event__update   0% 1 1 0   100% 0 0   0%
src / couchers / notifications / render_push.py _event__invite_organizer   0% 1 1 0   100% 0 0   0%
src / couchers / notifications / render_push.py _event__cancel   0% 1 1 0   100% 0 0   0%
src / couchers / notifications / render_push.py _event__delete   0% 1 1 0   100% 0 0   0%
src / couchers / notifications / render_push.py _host_request__missed_messages   0% 1 1 0   100% 0 0   0%
src / couchers / notifications / render_push.py _host_request__reject   0% 2 2 0   100% 0 0   0%
src / couchers / notifications / render_push.py _host_request__cancel   0% 2 2 0   100% 0 0   0%
src / couchers / notifications / render_push.py _postal_verification__success   0% 1 1 0   100% 0 0   0%
src / couchers / notifications / render_push.py _postal_verification__failed   0% 6 6 0   0% 4 0   0%
src / couchers / notifications / render_push.py _reference__receive   67% 6 2 0   50% 2 1   62%
src / couchers / notifications / render_push.py _reference__receive_hosted   0% 1 1 0   100% 0 0   0%
src / couchers / notifications / render_push.py _thread__reply   89% 9 1 0   75% 4 1   85%
src / couchers / notifications / render_push.py _verification__sv_fail   75% 8 2 0   67% 6 2   71%
src / couchers / notifications / send_raw_push_notification.py PushNotificationError.__init__   0% 3 3 0   100% 0 0   0%
src / couchers / notifications / send_raw_push_notification.py _send_web_push   0% 9 9 0   0% 6 0   0%
src / couchers / notifications / send_raw_push_notification.py _send_expo   0% 20 20 0   0% 12 0   0%
src / couchers / notifications / send_raw_push_notification.py send_raw_push_notification_v2   0% 32 32 0   0% 8 0   0%
src / couchers / notifications / settings.py reset_preference   0% 4 4 0   0% 2 0   0%
src / couchers / notifications / web_push_api.py gen_vapid_keys   0% 5 5 0   100% 0 0   0%
src / couchers / notifications / web_push_api.py generate_vapid_authorization   0% 3 3 0   100% 0 0   0%
src / couchers / notifications / web_push_api.py send_web_push   0% 4 4 0   100% 0 0   0%
src / couchers / notifications / web_push_api.py parse_subscription_info   0% 4 4 0   100% 0 0   0%
src / couchers / phone / check.py is_known_operator   75% 4 1 0   50% 2 1   67%
src / couchers / postal / postcard_service.py send_postcard   0% 1 1 0   100% 0 0   0%
src / couchers / reranker.py reranker   87% 15 2 0   83% 12 2   85%
src / couchers / resources.py copy_resources_to_database   81% 21 4 0   62% 8 1   76%
src / couchers / servicers / account.py Account.VerifyPhone   89% 19 2 0   80% 10 2   86%
src / couchers / servicers / account.py Account.InitiateStrongVerification   89% 18 2 0   67% 6 2   83%
src / couchers / servicers / account.py Account.GetStrongVerificationAttemptStatus   80% 5 1 0   50% 2 1   71%
src / couchers / servicers / account.py Account.SetProfilePublicVisibility   0% 4 4 0   100% 0 0   0%
src / couchers / servicers / account.py Account.DisableInviteCode   83% 6 1 0   50% 2 1   75%
src / couchers / servicers / account.py Account.UpdateMyVolunteerInfo   79% 33 7 0   68% 22 7   75%
src / couchers / servicers / account.py Iris.Webhook   89% 18 2 0   62% 8 1   81%
src / couchers / servicers / admin.py Admin.GetUserDetails   75% 4 1 0   50% 2 1   67%
src / couchers / servicers / admin.py Admin.GetUser   75% 4 1 0   50% 2 1   67%
src / couchers / servicers / admin.py Admin.SearchUsers   0% 46 46 0   0% 40 0   0%
src / couchers / servicers / admin.py Admin.ChangeUserGender   86% 7 1 0   50% 2 1   78%
src / couchers / servicers / admin.py Admin.ChangeUserBirthdate   78% 9 2 0   50% 4 2   69%
src / couchers / servicers / admin.py Admin.AddBadge   92% 12 1 0   88% 8 1   90%
src / couchers / servicers / admin.py Admin.RemoveBadge   77% 13 3 0   62% 8 3   71%
src / couchers / servicers / admin.py Admin.SetPassportSexGenderException   80% 5 1 0   50% 2 1   71%
src / couchers / servicers / admin.py Admin.BanUser   83% 6 1 0   50% 2 1   75%
src / couchers / servicers / admin.py Admin.UnbanUser   83% 6 1 0   50% 2 1   75%
src / couchers / servicers / admin.py Admin.AddAdminNote   80% 5 1 0   50% 2 1   71%
src / couchers / servicers / admin.py Admin.GetContentReportsForAuthor   80% 5 1 0   50% 2 1   71%
src / couchers / servicers / admin.py Admin.SendModNote   88% 8 1 0   75% 4 1   83%
src / couchers / servicers / admin.py Admin.MarkUserNeedsLocationUpdate   80% 5 1 0   50% 2 1   71%
src / couchers / servicers / admin.py Admin.DeleteUser   80% 5 1 0   50% 2 1   71%
src / couchers / servicers / admin.py Admin.RecoverDeletedUser   80% 5 1 0   50% 2 1   71%
src / couchers / servicers / admin.py Admin.CreateApiKey   83% 6 1 0   50% 2 1   75%
src / couchers / servicers / admin.py Admin.GetChats   92% 13 1 0   50% 2 1   87%
src / couchers / servicers / admin.py Admin.GetChats.get_user_details   100% 4 0 0   50% 2 1   83%
src / couchers / servicers / admin.py Admin.GetChats.message_to_pb   0% 1 1 0   100% 0 0   0%
src / couchers / servicers / admin.py Admin.GetChats.get_messages_for_conversation   0% 2 2 0   100% 0 0   0%
src / couchers / servicers / admin.py Admin.GetChats.get_host_request_pb   0% 1 1 0   100% 0 0   0%
src / couchers / servicers / admin.py Admin.GetChats.get_group_chat_pb   0% 3 3 0   100% 0 0   0%
src / couchers / servicers / admin.py Admin.DeleteEvent   86% 7 1 0   50% 2 1   78%
src / couchers / servicers / admin.py Admin.EditReferenceText   71% 7 2 0   50% 4 2   64%
src / couchers / servicers / admin.py Admin.DeleteReference   80% 5 1 0   50% 2 1   71%
src / couchers / servicers / admin.py Admin.EditDiscussion   0% 8 8 0   0% 6 0   0%
src / couchers / servicers / admin.py Admin.EditReply   0% 10 10 0   0% 6 0   0%
src / couchers / servicers / admin.py Admin.AddUsersToModerationUserList   100% 18 0 0   92% 12 1   97%
src / couchers / servicers / admin.py Admin.ListModerationUserLists   80% 5 1 0   50% 2 1   71%
src / couchers / servicers / admin.py Admin.RemoveUserFromModerationUserList   93% 14 1 0   90% 10 1   92%
src / couchers / servicers / admin.py Admin.CreateAccountDeletionLink   83% 6 1 0   50% 2 1   75%
src / couchers / servicers / admin.py Admin.AccessStats   0% 12 12 0   0% 4 0   0%
src / couchers / servicers / api.py API.GetUser   75% 4 1 0   50% 2 1   67%
src / couchers / servicers / api.py API.GetLiteUser   75% 4 1 0   50% 2 1   67%
src / couchers / servicers / api.py API.UpdateProfile   98% 166 3 0   98% 162 1   98%
src / couchers / servicers / api.py API.ListMutualFriends   92% 12 1 0   75% 4 1   88%
src / couchers / servicers / api.py API.SendFriendRequest   87% 15 2 0   75% 8 2   83%
src / couchers / servicers / api.py API.RespondFriendRequest   92% 12 1 0   75% 4 1   88%
src / couchers / servicers / api.py API.CancelFriendRequest   90% 10 1 0   50% 2 1   83%
src / couchers / servicers / api.py API.ListBadgeUsers   90% 10 1 0   50% 2 1   83%
src / couchers / servicers / api.py user_model_to_pb   97% 65 2 0   96% 54 2   97%
src / couchers / servicers / api.py lite_user_to_pb   83% 6 1 0   75% 4 1   80%
src / couchers / servicers / auth.py delete_session   83% 6 1 0   50% 2 1   75%
src / couchers / servicers / auth.py Auth.SignupFlow   91% 117 11 0   81% 58 9   87%
src / couchers / servicers / auth.py Auth.Deauthenticate   100% 6 0 0   50% 2 1   88%
src / couchers / servicers / auth.py Auth.ConfirmDeleteAccount   92% 12 1 0   50% 2 1   86%
src / couchers / servicers / auth.py Auth.RecoverAccount   89% 9 1 0   50% 2 1   82%
src / couchers / servicers / auth.py Auth.AntiBot   0% 16 16 0   0% 4 0   0%
src / couchers / servicers / auth.py Auth.AntiBotPolicy   0% 6 6 0   0% 6 0   0%
src / couchers / servicers / blocking.py Blocking.BlockUser   91% 11 1 0   83% 6 1   88%
src / couchers / servicers / blocking.py Blocking.UnblockUser   89% 9 1 0   75% 4 1   85%
src / couchers / servicers / bugs.py Bugs.GeolocationSearchInfo   0% 1 1 0   100% 0 0   0%
src / couchers / servicers / bugs.py Bugs.GeolocationClickInfo   0% 1 1 0   100% 0 0   0%
src / couchers / servicers / communities.py Communities.GetCommunity   75% 4 1 0   50% 2 1   67%
src / couchers / servicers / communities.py Communities.ListAdmins   86% 7 1 0   50% 2 1   78%
src / couchers / servicers / communities.py Communities.AddAdmin   87% 15 2 0   80% 10 2   84%
src / couchers / servicers / communities.py Communities.RemoveAdmin   80% 15 3 0   70% 10 3   76%
src / couchers / servicers / communities.py Communities.ListMembers   80% 10 2 0   50% 4 2   71%
src / couchers / servicers / communities.py Communities.ListNearbyUsers   86% 7 1 0   50% 2 1   78%
src / couchers / servicers / communities.py Communities.ListPlaces   0% 7 7 0   0% 2 0   0%
src / couchers / servicers / communities.py Communities.ListGuides   0% 7 7 0   0% 2 0   0%
src / couchers / servicers / communities.py Communities.ListEvents   78% 23 5 0   60% 10 4   73%
src / couchers / servicers / communities.py Communities.ListDiscussions   78% 9 2 0   50% 4 2   69%
src / couchers / servicers / communities.py Communities.JoinCommunity   88% 8 1 0   75% 4 1   83%
src / couchers / servicers / communities.py Communities.LeaveCommunity   90% 10 1 0   83% 6 1   88%
src / couchers / servicers / conversations.py Conversations.GetUpdates   0% 2 2 0   100% 0 0   0%
src / couchers / servicers / conversations.py Conversations.MarkLastSeenGroupChat   71% 7 2 0   50% 4 2   64%
src / couchers / servicers / conversations.py Conversations.MuteGroupChat   85% 13 2 0   70% 10 3   78%
src / couchers / servicers / conversations.py Conversations.CreateGroupChat   83% 24 4 0   75% 16 4   80%
src / couchers / servicers / conversations.py Conversations.SendMessage   92% 12 1 0   83% 6 1   89%
src / couchers / servicers / conversations.py Conversations.SendDirectMessage   79% 24 5 0   58% 12 5   72%
src / couchers / servicers / conversations.py Conversations.EditGroupChat   100% 11 0 0   88% 8 1   95%
src / couchers / servicers / conversations.py Conversations.MakeGroupChatAdmin   82% 17 3 0   75% 12 3   79%
src / couchers / servicers / conversations.py Conversations.RemoveGroupChatAdmin   88% 17 2 0   83% 12 2   86%
src / couchers / servicers / conversations.py Conversations.InviteToGroupChat   89% 19 2 0   83% 12 2   87%
src / couchers / servicers / conversations.py Conversations.RemoveGroupChatUser   77% 13 3 0   62% 8 3   71%
src / couchers / servicers / discussions.py generate_create_discussion_notifications   89% 9 1 1   75% 4 1   85%
src / couchers / servicers / discussions.py Discussions.CreateDiscussion   86% 22 3 0   71% 14 4   81%
src / couchers / servicers / discussions.py Discussions.GetDiscussion   75% 4 1 0   50% 2 1   67%
src / couchers / servicers / donations.py Donations.InitiateDonation   85% 13 2 0   62% 8 3   76%
src / couchers / servicers / donations.py Donations.GetDonationPortalLink   86% 7 1 0   75% 4 1   82%
src / couchers / servicers / editor.py Editor.UpdateCommunity   100% 15 0 0   70% 10 3   88%
src / couchers / servicers / editor.py Editor.DecideEventCommunityInviteRequest   87% 15 2 0   75% 8 2   83%
src / couchers / servicers / editor.py Editor.SendBlogPostNotification   67% 6 2 0   50% 4 2   60%
src / couchers / servicers / events.py _get_event_and_occurrence_query   100% 4 0 0   50% 2 1   83%
src / couchers / servicers / events.py get_users_to_notify_for_new_event   67% 9 3 0   75% 4 1   69%
src / couchers / servicers / events.py generate_event_create_notifications   81% 16 3 0   67% 6 2   77%
src / couchers / servicers / events.py generate_event_update_notifications   0% 10 10 0   0% 4 0   0%
src / couchers / servicers / events.py generate_event_cancel_notifications   0% 10 10 0   0% 4 0   0%
src / couchers / servicers / events.py generate_event_delete_notifications   0% 7 7 0   0% 2 0   0%
src / couchers / servicers / events.py Events.CreateEvent   93% 54 4 0   82% 28 5   89%
src / couchers / servicers / events.py Events.ScheduleEvent   78% 37 8 0   60% 20 8   72%
src / couchers / servicers / events.py Events.UpdateEvent   87% 63 8 0   79% 38 8   84%
src / couchers / servicers / events.py Events.GetEvent   75% 4 1 0   50% 2 1   67%
src / couchers / servicers / events.py Events.CancelEvent   73% 11 3 0   50% 6 3   65%
src / couchers / servicers / events.py Events.RequestCommunityInvite   86% 22 3 0   75% 12 3   82%
src / couchers / servicers / events.py Events.ListEventOccurrences   81% 16 3 0   67% 6 2   77%
src / couchers / servicers / events.py Events.ListEventAttendees   86% 7 1 0   50% 2 1   78%
src / couchers / servicers / events.py Events.ListEventSubscribers   88% 8 1 0   50% 2 1   80%
src / couchers / servicers / events.py Events.ListEventOrganizers   88% 8 1 0   50% 2 1   80%
src / couchers / servicers / events.py Events.TransferEvent   85% 20 3 0   71% 14 4   79%
src / couchers / servicers / events.py Events.SetEventSubscription   87% 15 2 0   80% 10 2   84%
src / couchers / servicers / events.py Events.SetEventAttendance   88% 17 2 0   75% 12 3   83%
src / couchers / servicers / events.py Events.ListMyEvents   95% 37 2 0   93% 14 1   94%
src / couchers / servicers / events.py Events.ListAllEvents   100% 13 0 0   75% 4 1   94%
src / couchers / servicers / events.py Events.InviteEventOrganizer   83% 18 3 0   70% 10 3   79%
src / couchers / servicers / events.py Events.RemoveEventOrganizer   78% 18 4 0   67% 12 4   73%
src / couchers / servicers / galleries.py Galleries.RemovePhotoFromGallery   92% 12 1 0   83% 6 1   89%
src / couchers / servicers / galleries.py Galleries.MovePhoto   93% 28 2 0   83% 18 3   89%
src / couchers / servicers / galleries.py Galleries.UpdatePhotoCaption   92% 12 1 0   83% 6 1   89%
src / couchers / servicers / gis.py GIS.GetCommunities   0% 1 1 0   100% 0 0   0%
src / couchers / servicers / gis.py GIS.GetPlaces   0% 3 3 0   100% 0 0   0%
src / couchers / servicers / gis.py GIS.GetGuides   0% 3 3 0   100% 0 0   0%
src / couchers / servicers / groups.py Groups.GetGroup   75% 4 1 0   50% 2 1   67%
src / couchers / servicers / groups.py Groups.ListAdmins   86% 7 1 0   50% 2 1   78%
src / couchers / servicers / groups.py Groups.ListMembers   86% 7 1 0   50% 2 1   78%
src / couchers / servicers / groups.py Groups.ListPlaces   0% 7 7 0   0% 2 0   0%
src / couchers / servicers / groups.py Groups.ListGuides   0% 7 7 0   0% 2 0   0%
src / couchers / servicers / groups.py Groups.ListEvents   79% 14 3 0   50% 4 2   72%
src / couchers / servicers / groups.py Groups.ListDiscussions   86% 7 1 0   50% 2 1   78%
src / couchers / servicers / groups.py Groups.JoinGroup   88% 8 1 0   75% 4 1   83%
src / couchers / servicers / groups.py Groups.LeaveGroup   88% 8 1 0   75% 4 1   83%
src / couchers / servicers / jail.py Jail.SetLocation   89% 9 1 0   50% 2 1   82%
src / couchers / servicers / jail.py Jail.RespondToActivenessProbe   92% 12 1 0   83% 6 1   89%
src / couchers / servicers / media.py Media.UploadConfirmation   86% 7 1 0   50% 2 1   78%
src / couchers / servicers / moderation.py moderation_state_to_pb   90% 10 1 0   75% 4 1   86%
src / couchers / servicers / moderation.py Moderation.GetModerationQueue   89% 37 4 0   82% 22 2   86%
src / couchers / servicers / moderation.py Moderation.GetModerationLog   100% 12 0 0   83% 6 1   94%
src / couchers / servicers / moderation.py Moderation.ModerateContent   93% 30 2 0   83% 12 2   90%
src / couchers / servicers / moderation.py Moderation.FlagContentForReview   92% 12 1 0   50% 2 1   86%
src / couchers / servicers / moderation.py Moderation.UnflagContent   0% 16 16 0   0% 4 0   0%
src / couchers / servicers / notifications.py Notifications.SetNotificationSettings   89% 18 2 0   75% 8 2   85%
src / couchers / servicers / notifications.py Notifications.MarkNotificationSeen   80% 5 1 0   50% 2 1   71%
src / couchers / servicers / notifications.py Notifications.GetVapidPublicKey   67% 3 1 0   50% 2 1   60%
src / couchers / servicers / notifications.py Notifications.RegisterPushNotificationSubscription   88% 8 1 0   50% 2 1   80%
src / couchers / servicers / notifications.py Notifications.SendTestPushNotification   75% 4 1 0   50% 2 1   67%
src / couchers / servicers / notifications.py Notifications.RegisterMobilePushNotificationSubscription   94% 17 1 0   75% 8 2   88%
src / couchers / servicers / notifications.py Notifications.SendTestMobilePushNotification   75% 4 1 0   50% 2 1   67%
src / couchers / servicers / pages.py Pages.CreatePlace   92% 26 2 0   86% 14 2   90%
src / couchers / servicers / pages.py Pages.CreateGuide   93% 30 2 0   88% 16 2   91%
src / couchers / servicers / pages.py Pages.GetPage   75% 4 1 0   50% 2 1   67%
src / couchers / servicers / pages.py Pages.UpdatePage   93% 30 2 0   92% 24 2   93%
src / couchers / servicers / pages.py Pages.TransferPage   88% 16 2 0   80% 10 2   85%
src / couchers / servicers / postal_verification.py PostalVerification.InitiatePostalVerification   88% 24 3 0   93% 14 1   89%
src / couchers / servicers / postal_verification.py PostalVerification.ConfirmPostalAddress   90% 10 1 0   75% 4 1   86%
src / couchers / servicers / postal_verification.py PostalVerification.GetPostalVerificationStatus   96% 28 1 0   86% 14 2   93%
src / couchers / servicers / postal_verification.py PostalVerification.VerifyPostalCode   95% 21 1 0   88% 8 1   93%
src / couchers / servicers / postal_verification.py PostalVerification.CancelPostalVerification   88% 8 1 0   75% 4 1   83%
src / couchers / servicers / public.py _get_signup_page_info   67% 9 3 0   25% 4 1   54%
src / couchers / servicers / public.py Public.GetPublicUser   91% 11 1 0   88% 8 1   89%
src / couchers / servicers / references.py get_host_req_and_check_can_write_ref   95% 20 1 0   90% 10 1   93%
src / couchers / servicers / references.py check_valid_reference   75% 4 1 0   75% 4 1   75%
src / couchers / servicers / references.py References.WriteFriendReference   94% 17 1 0   88% 8 1   92%
src / couchers / servicers / references.py References.HostRequestIndicateDidntMeetup   83% 6 1 0   50% 2 1   75%
src / couchers / servicers / references.py References.GetHostRequestReferenceStatus   100% 15 0 0   75% 4 1   95%
src / couchers / servicers / requests.py Requests.ListHostRequests   96% 27 1 0   93% 14 1   95%
src / couchers / servicers / requests.py Requests.RespondHostRequest   92% 64 5 0   86% 36 5   90%
src / couchers / servicers / requests.py Requests.GetHostRequestMessages   82% 11 2 0   50% 4 2   73%
src / couchers / servicers / requests.py Requests.GetHostRequestUpdates   79% 19 4 0   60% 10 4   72%
src / couchers / servicers / requests.py Requests.MarkLastSeenHostRequest   64% 14 5 0   50% 10 3   58%
src / couchers / servicers / requests.py Requests.SetHostRequestArchiveStatus   71% 7 2 0   50% 4 2   64%
src / couchers / servicers / search.py _join_with_space   83% 6 1 0   75% 4 1   80%
src / couchers / servicers / search.py _build_tsv   100% 11 0 0   67% 6 2   88%
src / couchers / servicers / search.py _search_users   80% 5 1 0   50% 2 1   71%
src / couchers / servicers / search.py _search_pages   83% 6 1 0   50% 2 1   75%
src / couchers / servicers / search.py _search_clusters   83% 6 1 0   50% 2 1   75%
src / couchers / servicers / search.py _user_search_inner   71% 91 26 0   66% 70 20   69%
src / couchers / servicers / search.py Search.EventSearch   93% 55 4 0   88% 34 2   91%
src / couchers / servicers / threads.py generate_reply_notifications   91% 55 5 3   77% 26 6   86%
src / couchers / servicers / threads.py Threads.GetThread   94% 18 1 0   90% 10 1   93%
src / couchers / sql.py username_or_email_or_id   86% 7 1 0   83% 6 1   85%
src / couchers / sql.py where_moderated_content_visible_to_user_column   100% 6 0 0   50% 2 1   88%
src / couchers / sql.py where_moderated_content_visible   100% 7 0 0   75% 4 1   91%
src / couchers / tasks.py send_email_changed_confirmation_to_new_email   71% 7 2 0   50% 4 2   64%
src / couchers / tasks.py maybe_send_contributor_form_email   50% 2 1 0   50% 2 1   50%
src / couchers / templates / v2.py v2phone   0% 1 1 0   100% 0 0   0%
src / couchers / templates / v2.py v2date   100% 4 0 0   50% 2 1   83%
src / couchers / tracing.py setup_tracing   0% 8 8 0   0% 2 0   0%
src / couchers / urls.py feature_preview_link   0% 1 1 0   100% 0 0   0%
src / couchers / urls.py host_request_link_host   0% 1 1 0   100% 0 0   0%
src / couchers / urls.py host_request_link_guest   0% 1 1 0   100% 0 0   0%
src / couchers / urls.py messages_link   0% 1 1 0   100% 0 0   0%
src / couchers / urls.py leave_reference_link   75% 4 1 0   50% 2 1   67%
src / couchers / urls.py unsubscribe_link   0% 1 1 0   100% 0 0   0%
src / couchers / utils.py wrap_coordinate   93% 14 1 0   83% 6 1   90%
src / couchers / utils.py _create_tasty_cookie   82% 11 2 0   50% 2 1   77%
src / couchers / utils.py parse_session_cookie   71% 7 2 0   50% 4 2   64%
src / couchers / utils.py parse_api_key   75% 8 2 0   67% 6 2   71%
src / couchers / utils.py get_tz_as_text   0% 1 1 0   100% 0 0   0%
src / couchers / utils.py not_none   67% 3 1 0   50% 2 1   60%
src / couchers / utils.py is_geom   67% 3 1 0   50% 2 1   60%
src / tests / conftest.py postgres_engine   83% 6 1 0   50% 2 1   75%
src / tests / fixtures / db.py get_friend_relationship   0% 4 4 0   100% 0 0   0%
src / tests / fixtures / sessions.py MockGrpcContext.send_initial_metadata   0% 1 1 0   100% 0 0   0%
src / tests / test_bg_jobs.py test_scheduler.purge_login_tokens   0% 1 1 0   100% 0 0   0%
src / tests / test_bg_jobs.py test_scheduler.send_message_notifications   0% 1 1 0   100% 0 0   0%
src / tests / test_bg_jobs.py test_send_host_request_reminders_blocked_users_no_notification   96% 23 1 0   75% 4 1   93%
src / tests / test_bg_jobs.py test_send_message_notifications_empty_unseen_simple.DummySession.commit   0% 1 1 0   100% 0 0   0%
src / tests / test_bg_jobs.py test_send_message_notifications_empty_unseen_simple.DummySession.flush   0% 1 1 0   100% 0 0   0%
src / tests / test_bugs.py test_bugs   100% 9 0 0   0% 2 2   82%
src / tests / test_bugs.py test_bugs_with_user   100% 10 0 0   0% 2 2   83%
src / tests / test_bugs.py test_bugs_fails_on_network_error   100% 9 0 0   0% 2 2   82%
src / tests / test_db.py test_migrations   100% 17 0 0   50% 2 1   95%
src / tests / test_model_constraints.py test_page_constraints   94% 63 4 0   100% 0 0   94%
src / tests / test_notifications.py test_unsubscribe   94% 33 2 0   79% 14 3   89%
src / tests / test_notifications.py test_unsubscribe_do_not_email   96% 28 1 0   83% 6 1   94%
src / tests / test_notifications.py test_list_notifications   100% 34 0 0   83% 6 1   98%
src / tests / test_references.py test_WriteFriendReference_with_private_text   100% 15 0 0   0% 2 2   88%
src / tests / test_references.py test_WriteHostRequestReference_private_text   100% 16 0 0   0% 2 2   89%
src / tests / test_requests.py valid_request_text   80% 5 1 0   50% 2 1   71%
src / tests / test_requests.py test_quick_decline   98% 44 1 0   67% 6 2   94%
src / tests / test_strong_verification.py do_and_check_sv   98% 53 1 0   88% 8 1   97%
src / tests / test_verification.py test_VerifyPhone_antibrute   100% 8 0 0   75% 4 1   92%
Total     91% 12246 1121 60   75% 2832 444   88%

No items found using the specified filter.

759 functions skipped due to complete coverage.