Coverage report: 93%

Files Functions Classes

coverage.py v7.13.5, created at 2026-03-23 15:19 +0000

      Statements   Branches   Total
File class   coverage statements missing excluded   coverage branches partial   coverage
app / backend / src / app.py (no class)   0% 66 66 0   0% 22 0   0%
app / backend / src / couchers / __init__.py (no class)   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / config.py (no class)   52% 56 27 0   33% 48 4   43%
app / backend / src / couchers / constants.py (no class)   100% 46 0 0   100% 0 0   100%
app / backend / src / couchers / context.py NonInteractiveContextException   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / context.py NotLoggedInContextException   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / context.py NonInteractiveAbortException   0% 6 6 0   100% 0 0   0%
app / backend / src / couchers / context.py CouchersContext   82% 45 8 0   62% 16 6   77%
app / backend / src / couchers / context.py (no class)   100% 40 0 0   100% 0 0   100%
app / backend / src / couchers / crypto.py (no class)   97% 123 4 0   75% 8 2   95%
app / backend / src / couchers / db.py (no class)   79% 117 25 0   50% 8 4   77%
app / backend / src / couchers / descriptor_pool.py (no class)   100% 15 0 0   100% 2 0   100%
app / backend / src / couchers / email / __init__.py (no class)   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / email / dev.py (no class)   100% 9 0 0   100% 0 0   100%
app / backend / src / couchers / email / dump_emails.py CommandLineArgs   0% 6 6 0   100% 0 0   0%
app / backend / src / couchers / email / dump_emails.py (no class)   0% 42 42 0   0% 6 0   0%
app / backend / src / couchers / email / emails.py EmailBase   0% 13 13 4   0% 4 0   0%
app / backend / src / couchers / email / emails.py HostRequestReceived   0% 4 4 0   100% 0 0   0%
app / backend / src / couchers / email / emails.py (no class)   0% 33 33 7   100% 0 0   0%
app / backend / src / couchers / email / queuing.py (no class)   100% 37 0 0   100% 0 0   100%
app / backend / src / couchers / email / rendering.py EmailBlock   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / email / rendering.py ParaBlock   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / email / rendering.py UserBlock   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / email / rendering.py UserInfo   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / email / rendering.py QuoteBlock   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / email / rendering.py ActionBlock   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / email / rendering.py EmailFooter   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / email / rendering.py UnsubscribeInfo   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / email / rendering.py UnsubscribeLink   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / email / rendering.py HTMLRenderer   0% 24 24 0   0% 10 0   0%
app / backend / src / couchers / email / rendering.py (no class)   0% 97 97 0   0% 24 0   0%
app / backend / src / couchers / email / smtp.py (no class)   90% 49 5 0   64% 14 5   84%
app / backend / src / couchers / event_log.py (no class)   100% 8 0 0   100% 0 0   100%
app / backend / src / couchers / experimentation.py ExperimentationNotInitializedError   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / experimentation.py (no class)   31% 65 45 2   9% 22 2   25%
app / backend / src / couchers / helpers / __init__.py (no class)   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / helpers / badges.py (no class)   100% 23 0 0   100% 2 0   100%
app / backend / src / couchers / helpers / clusters.py (no class)   97% 29 1 0   50% 2 1   94%
app / backend / src / couchers / helpers / completed_profile.py (no class)   100% 12 0 0   100% 2 0   100%
app / backend / src / couchers / helpers / geoip.py (no class)   24% 41 31 0   10% 10 1   22%
app / backend / src / couchers / helpers / postal_verification.py (no class)   100% 12 0 0   100% 0 0   100%
app / backend / src / couchers / helpers / strong_verification.py StrongVerificationFields   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / helpers / strong_verification.py (no class)   100% 27 0 0   100% 8 0   100%
app / backend / src / couchers / i18n / __init__.py (no class)   100% 2 0 0   100% 0 0   100%
app / backend / src / couchers / i18n / context.py LocalizationContext   100% 13 0 0   75% 4 1   94%
app / backend / src / couchers / i18n / context.py (no class)   100% 21 0 0   100% 0 0   100%
app / backend / src / couchers / i18n / i18next.py I18Next   89% 18 2 0   83% 12 2   87%
app / backend / src / couchers / i18n / i18next.py Translation   70% 30 9 0   70% 20 2   70%
app / backend / src / couchers / i18n / i18next.py String   100% 2 0 0   100% 0 0   100%
app / backend / src / couchers / i18n / i18next.py StringTemplate   97% 30 1 0   95% 22 1   96%
app / backend / src / couchers / i18n / i18next.py StringSegment   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / i18n / i18next.py LocalizationError   100% 3 0 0   100% 0 0   100%
app / backend / src / couchers / i18n / i18next.py (no class)   100% 46 0 0   100% 0 0   100%
app / backend / src / couchers / i18n / locales.py (no class)   96% 27 1 0   92% 12 1   95%
app / backend / src / couchers / i18n / localize.py (no class)   84% 43 7 0   50% 8 2   78%
app / backend / src / couchers / interceptors.py UserAuthInfo   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / interceptors.py CouchersMiddlewareInterceptor   94% 62 4 0   75% 20 5   89%
app / backend / src / couchers / interceptors.py CouchersHeaders   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / interceptors.py BadHeaders   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / interceptors.py AbortError   100% 2 0 0   100% 0 0   100%
app / backend / src / couchers / interceptors.py MediaInterceptor   80% 15 3 0   50% 6 3   71%
app / backend / src / couchers / interceptors.py OTelInterceptor   5% 22 21 0   0% 4 0   4%
app / backend / src / couchers / interceptors.py ErrorSanitizationInterceptor   89% 19 2 0   67% 6 2   84%
app / backend / src / couchers / interceptors.py (no class)   98% 146 3 4   95% 44 2   97%
app / backend / src / couchers / jobs / __init__.py (no class)   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / jobs / definitions.py JobHandler   100% 0 0 2   100% 0 0   100%
app / backend / src / couchers / jobs / definitions.py Job   100% 2 0 0   100% 0 0   100%
app / backend / src / couchers / jobs / definitions.py (no class)   100% 22 0 4   100% 0 0   100%
app / backend / src / couchers / jobs / enqueue.py (no class)   92% 13 1 0   75% 4 1   88%
app / backend / src / couchers / jobs / handlers.py DatabaseInconsistencyError   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / jobs / handlers.py (no class)   94% 458 28 0   78% 130 22   90%
app / backend / src / couchers / jobs / worker.py (no class)   80% 101 20 0   92% 12 1   81%
app / backend / src / couchers / materialized_views.py ClusterSubscriptionCount   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / materialized_views.py ClusterAdminCount   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / materialized_views.py LiteUser   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / materialized_views.py ClusteredUser   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / materialized_views.py UserResponseRate   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / materialized_views.py (no class)   99% 82 1 0   100% 6 0   99%
app / backend / src / couchers / metrics.py (no class)   100% 105 0 0   100% 2 0   100%
app / backend / src / couchers / migrations / env.py (no class)   55% 53 24 0   11% 18 2   44%
app / backend / src / couchers / models / __init__.py (no class)   100% 22 0 0   100% 0 0   100%
app / backend / src / couchers / models / activeness_probe.py ActivenessProbeStatus   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / activeness_probe.py ActivenessProbe   100% 1 0 0   100% 0 0   100%
app / backend / src / couchers / models / activeness_probe.py (no class)   100% 24 0 2   100% 0 0   100%
app / backend / src / couchers / models / admin.py AdminActionLevel   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / admin.py AdminAction   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / admin.py AdminTag   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / admin.py UserAdminTag   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / admin.py (no class)   100% 37 0 2   100% 0 0   100%
app / backend / src / couchers / models / auth.py UserSession   100% 1 0 0   100% 0 0   100%
app / backend / src / couchers / models / auth.py LoginToken   50% 2 1 0   100% 0 0   50%
app / backend / src / couchers / models / auth.py PasswordResetToken   50% 2 1 0   100% 0 0   50%
app / backend / src / couchers / models / auth.py (no class)   100% 45 0 2   100% 0 0   100%
app / backend / src / couchers / models / background_jobs.py BackgroundJobState   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / background_jobs.py BackgroundJob   100% 2 0 0   100% 0 0   100%
app / backend / src / couchers / models / background_jobs.py (no class)   100% 29 0 0   100% 0 0   100%
app / backend / src / couchers / models / base.py MatViewBase   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / base.py Base   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / base.py (no class)   100% 11 0 0   100% 0 0   100%
app / backend / src / couchers / models / clusters.py NodeType   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / clusters.py Node   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / clusters.py Cluster   100% 1 0 0   100% 0 0   100%
app / backend / src / couchers / models / clusters.py NodeClusterAssociation   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / clusters.py ClusterRole   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / clusters.py ClusterSubscription   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / clusters.py ClusterPageAssociation   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / clusters.py PageType   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / clusters.py Page   0% 1 1 0   100% 0 0   0%
app / backend / src / couchers / models / clusters.py PageVersion   50% 2 1 0   100% 0 0   50%
app / backend / src / couchers / models / clusters.py (no class)   100% 123 0 3   100% 0 0   100%
app / backend / src / couchers / models / conversations.py Conversation   0% 1 1 0   100% 0 0   0%
app / backend / src / couchers / models / conversations.py GroupChat   0% 1 1 0   100% 0 0   0%
app / backend / src / couchers / models / conversations.py GroupChatRole   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / conversations.py GroupChatSubscription   86% 7 1 0   100% 4 0   91%
app / backend / src / couchers / models / conversations.py MessageType   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / conversations.py Message   50% 2 1 0   100% 0 0   50%
app / backend / src / couchers / models / conversations.py (no class)   100% 76 0 2   100% 0 0   100%
app / backend / src / couchers / models / discussions.py Discussion   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / discussions.py DiscussionSubscription   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / discussions.py Thread   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / discussions.py Comment   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / discussions.py Reply   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / discussions.py ClusterDiscussionAssociation   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / discussions.py (no class)   100% 60 0 2   100% 0 0   100%
app / backend / src / couchers / models / donations.py DonationType   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / donations.py InvoiceType   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / donations.py DonationInitiation   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / donations.py Invoice   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / donations.py (no class)   100% 32 0 2   100% 0 0   100%
app / backend / src / couchers / models / events.py ClusterEventAssociation   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / events.py Event   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / events.py EventOccurrence   100% 5 0 0   100% 0 0   100%
app / backend / src / couchers / models / events.py EventSubscription   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / events.py EventOrganizer   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / events.py AttendeeStatus   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / events.py EventOccurrenceAttendee   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / events.py EventCommunityInviteRequest   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / events.py (no class)   100% 122 0 3   100% 0 0   100%
app / backend / src / couchers / models / host_requests.py HostRequestStatus   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / host_requests.py HostRequestQuality   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / host_requests.py HostRequest   33% 3 2 0   100% 0 0   33%
app / backend / src / couchers / models / host_requests.py HostRequestFeedback   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / host_requests.py (no class)   100% 71 0 5   100% 0 0   100%
app / backend / src / couchers / models / logging.py EventSource   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / logging.py APICall   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / logging.py EventLog   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / logging.py (no class)   100% 45 0 0   100% 0 0   100%
app / backend / src / couchers / models / mod_note.py ModNote   50% 2 1 0   100% 0 0   50%
app / backend / src / couchers / models / mod_note.py (no class)   100% 20 0 2   100% 0 0   100%
app / backend / src / couchers / models / moderation.py ModerationVisibility   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / moderation.py ModerationTrigger   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / moderation.py ModerationAction   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / moderation.py ModerationObjectType   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / moderation.py ModerationState   0% 1 1 0   100% 0 0   0%
app / backend / src / couchers / models / moderation.py ModerationQueueItem   0% 1 1 0   100% 0 0   0%
app / backend / src / couchers / models / moderation.py ModerationLog   0% 1 1 0   100% 0 0   0%
app / backend / src / couchers / models / moderation.py (no class)   100% 61 0 2   100% 0 0   100%
app / backend / src / couchers / models / notifications.py NotificationDeliveryType   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / notifications.py NotificationTopicAction   86% 7 1 0   100% 0 0   86%
app / backend / src / couchers / models / notifications.py NotificationPreference   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / notifications.py Notification   100% 2 0 0   100% 0 0   100%
app / backend / src / couchers / models / notifications.py NotificationDelivery   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / notifications.py DeviceType   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / notifications.py PushNotificationPlatform   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / notifications.py PushNotificationDeliveryOutcome   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / notifications.py PushNotificationSubscription   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / notifications.py PushNotificationDeliveryAttempt   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / notifications.py (no class)   100% 157 0 2   100% 0 0   100%
app / backend / src / couchers / models / postal_verification.py PostalVerificationStatus   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / postal_verification.py PostalVerificationAttempt   50% 2 1 0   100% 0 0   50%
app / backend / src / couchers / models / postal_verification.py (no class)   100% 40 0 2   100% 0 0   100%
app / backend / src / couchers / models / public_trips.py PublicTripStatus   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / public_trips.py PublicTrip   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / public_trips.py (no class)   100% 23 0 3   100% 0 0   100%
app / backend / src / couchers / models / rest.py UserBadge   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py FriendStatus   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py FriendRelationship   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py ContributeOption   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py ContributorForm   100% 2 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py SignupFlow   100% 3 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py AccountDeletionToken   50% 2 1 0   100% 0 0   50%
app / backend / src / couchers / models / rest.py UserActivity   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py InviteCode   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py ContentReport   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py Email   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py SMS   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py ReferenceType   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py Reference   100% 1 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py UserBlock   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py AccountDeletionReason   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py ModerationUserList   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py ModerationUserListMember   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py AntiBotLog   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py RateLimitAction   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py RateLimitViolation   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py Volunteer   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / rest.py (no class)   100% 246 0 3   100% 0 0   100%
app / backend / src / couchers / models / static.py Language   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / static.py TimezoneArea   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / static.py Region   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / static.py (no class)   100% 18 0 0   100% 0 0   100%
app / backend / src / couchers / models / uploads.py InitiatedUpload   100% 1 0 0   100% 0 0   100%
app / backend / src / couchers / models / uploads.py Upload   100% 3 0 0   100% 0 0   100%
app / backend / src / couchers / models / uploads.py PhotoGallery   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / uploads.py PhotoGalleryItem   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / uploads.py (no class)   100% 55 0 2   100% 0 0   100%
app / backend / src / couchers / models / users.py HostingStatus   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / users.py MeetupStatus   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / users.py SmokingLocation   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / users.py SleepingArrangement   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / users.py ParkingDetails   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / users.py ProfilePublicVisibility   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / users.py User   100% 17 0 0   100% 0 0   100%
app / backend / src / couchers / models / users.py LanguageFluency   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / users.py LanguageAbility   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / users.py RegionVisited   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / users.py RegionLived   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / users.py (no class)   100% 213 0 6   100% 0 0   100%
app / backend / src / couchers / models / verification.py StrongVerificationAttemptStatus   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / verification.py PassportSex   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / verification.py StrongVerificationAttempt   100% 8 0 0   100% 0 0   100%
app / backend / src / couchers / models / verification.py StrongVerificationCallbackEvent   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / models / verification.py (no class)   100% 65 0 2   100% 0 0   100%
app / backend / src / couchers / moderation / __init__.py (no class)   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / moderation / utils.py (no class)   100% 20 0 0   100% 2 0   100%
app / backend / src / couchers / notifications / __init__.py (no class)   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / notifications / background.py (no class)   85% 106 16 0   76% 34 2   83%
app / backend / src / couchers / notifications / expo_api.py (no class)   37% 41 26 0   30% 10 1   35%
app / backend / src / couchers / notifications / locales.py (no class)   100% 7 0 0   100% 0 0   100%
app / backend / src / couchers / notifications / notify.py (no class)   100% 16 0 0   100% 0 0   100%
app / backend / src / couchers / notifications / push.py PushNotificationContent   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / notifications / push.py (no class)   97% 36 1 0   50% 2 1   95%
app / backend / src / couchers / notifications / quick_links.py (no class)   80% 69 14 0   50% 16 4   74%
app / backend / src / couchers / notifications / render_email.py RenderedEmailNotification   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / notifications / render_email.py UserTemplateArgs   100% 1 0 0   100% 0 0   100%
app / backend / src / couchers / notifications / render_email.py (no class)   88% 241 29 0   79% 134 16   85%
app / backend / src / couchers / notifications / render_push.py (no class)   88% 291 36 0   85% 132 16   87%
app / backend / src / couchers / notifications / send_raw_push_notification.py PushNotificationError   0% 3 3 0   100% 0 0   0%
app / backend / src / couchers / notifications / send_raw_push_notification.py PermanentSubscriptionFailure   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / notifications / send_raw_push_notification.py PermanentMessageFailure   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / notifications / send_raw_push_notification.py MessageTooLong   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / notifications / send_raw_push_notification.py PushDeliveryResult   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / notifications / send_raw_push_notification.py (no class)   31% 96 66 0   0% 28 0   24%
app / backend / src / couchers / notifications / settings.py PreferenceNotUserEditableError   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / notifications / settings.py (no class)   91% 47 4 0   86% 14 0   90%
app / backend / src / couchers / notifications / utils.py (no class)   100% 9 0 0   100% 0 0   100%
app / backend / src / couchers / notifications / web_push_api.py (no class)   57% 37 16 0   100% 0 0   57%
app / backend / src / couchers / phone / check.py (no class)   88% 8 1 0   50% 2 1   80%
app / backend / src / couchers / phone / sms.py (no class)   100% 27 0 0   100% 2 0   100%
app / backend / src / couchers / postal / __init__.py (no class)   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / postal / address_validation.py ValidatedAddress   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / postal / address_validation.py AddressValidationError   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / postal / address_validation.py (no class)   100% 7 0 0   100% 0 0   100%
app / backend / src / couchers / postal / postcard_service.py PostcardResult   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / postal / postcard_service.py PostcardServiceError   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / postal / postcard_service.py (no class)   86% 7 1 0   100% 0 0   86%
app / backend / src / couchers / rate_limits / __init__.py (no class)   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / rate_limits / check.py (no class)   100% 30 0 0   100% 8 0   100%
app / backend / src / couchers / rate_limits / definitions.py RateLimitDefinition   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / rate_limits / definitions.py (no class)   100% 18 0 0   100% 0 0   100%
app / backend / src / couchers / reranker.py (no class)   90% 20 2 0   83% 12 2   88%
app / backend / src / couchers / resources.py Badge   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / resources.py (no class)   94% 70 4 0   62% 8 1   91%
app / backend / src / couchers / server.py (no class)   100% 72 0 0   100% 0 0   100%
app / backend / src / couchers / servicers / __init__.py (no class)   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / servicers / account.py Account   92% 223 17 0   83% 76 13   90%
app / backend / src / couchers / servicers / account.py Iris   89% 18 2 0   62% 8 1   81%
app / backend / src / couchers / servicers / account.py (no class)   100% 83 0 0   100% 6 0   100%
app / backend / src / couchers / servicers / admin.py Admin   75% 355 87 0   61% 174 52   71%
app / backend / src / couchers / servicers / admin.py (no class)   100% 85 0 0   100% 2 0   100%
app / backend / src / couchers / servicers / api.py GhostUserSerializationError   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / servicers / api.py API   97% 317 8 0   96% 192 8   97%
app / backend / src / couchers / servicers / api.py (no class)   98% 153 3 0   96% 68 3   97%
app / backend / src / couchers / servicers / auth.py Auth   86% 242 35 0   74% 94 12   82%
app / backend / src / couchers / servicers / auth.py (no class)   99% 77 1 0   93% 14 1   98%
app / backend / src / couchers / servicers / blocking.py Blocking   91% 23 2 0   80% 10 2   88%
app / backend / src / couchers / servicers / blocking.py (no class)   100% 21 0 0   100% 2 0   100%
app / backend / src / couchers / servicers / bugs.py Bugs   95% 37 2 0   100% 12 0   96%
app / backend / src / couchers / servicers / bugs.py (no class)   100% 29 0 0   100% 0 0   100%
app / backend / src / couchers / servicers / communities.py Communities   78% 148 33 0   63% 60 18   74%
app / backend / src / couchers / servicers / communities.py (no class)   100% 57 0 0   100% 0 0   100%
app / backend / src / couchers / servicers / conversations.py Conversations   87% 201 26 0   77% 112 26   83%
app / backend / src / couchers / servicers / conversations.py (no class)   100% 112 0 0   100% 16 0   100%
app / backend / src / couchers / servicers / discussions.py Discussions   85% 27 4 0   69% 16 5   79%
app / backend / src / couchers / servicers / discussions.py (no class)   95% 40 2 0   75% 8 2   92%
app / backend / src / couchers / servicers / donations.py Donations   86% 21 3 0   67% 12 4   79%
app / backend / src / couchers / servicers / donations.py Stripe   90% 40 4 0   100% 6 0   91%
app / backend / src / couchers / servicers / donations.py (no class)   100% 30 0 0   100% 0 0   100%
app / backend / src / couchers / servicers / editor.py Editor   92% 97 8 0   81% 54 8   88%
app / backend / src / couchers / servicers / editor.py (no class)   100% 51 0 0   100% 4 0   100%
app / backend / src / couchers / servicers / events.py Events   88% 389 48 0   74% 194 50   83%
app / backend / src / couchers / servicers / events.py (no class)   90% 157 15 0   80% 40 6   88%
app / backend / src / couchers / servicers / galleries.py Galleries   95% 86 4 0   89% 46 5   93%
app / backend / src / couchers / servicers / galleries.py (no class)   100% 22 0 0   100% 0 0   100%
app / backend / src / couchers / servicers / gis.py GIS   30% 10 7 0   100% 0 0   30%
app / backend / src / couchers / servicers / gis.py (no class)   100% 27 0 0   100% 0 0   100%
app / backend / src / couchers / servicers / groups.py Groups   70% 77 23 0   50% 24 8   65%
app / backend / src / couchers / servicers / groups.py (no class)   100% 40 0 0   100% 0 0   100%
app / backend / src / couchers / servicers / jail.py Jail   95% 41 2 0   88% 16 2   93%
app / backend / src / couchers / servicers / jail.py (no class)   100% 28 0 0   100% 4 0   100%
app / backend / src / couchers / servicers / media.py Media   86% 7 1 0   50% 2 1   78%
app / backend / src / couchers / servicers / media.py (no class)   100% 17 0 0   100% 0 0   100%
app / backend / src / couchers / servicers / moderation.py Moderation   80% 116 23 0   77% 52 6   79%
app / backend / src / couchers / servicers / moderation.py (no class)   98% 48 1 2   88% 8 1   96%
app / backend / src / couchers / servicers / notifications.py Notifications   91% 85 8 0   75% 36 9   86%
app / backend / src / couchers / servicers / notifications.py (no class)   100% 42 0 0   100% 0 0   100%
app / backend / src / couchers / servicers / pages.py Pages   92% 116 9 0   86% 66 9   90%
app / backend / src / couchers / servicers / pages.py (no class)   100% 42 0 0   100% 10 0   100%
app / backend / src / couchers / servicers / postal_verification.py PostalVerification   92% 93 7 0   86% 44 6   91%
app / backend / src / couchers / servicers / postal_verification.py (no class)   100% 31 0 0   100% 0 0   100%
app / backend / src / couchers / servicers / public.py Public   94% 16 1 0   88% 8 1   92%
app / backend / src / couchers / servicers / public.py (no class)   95% 59 3 0   50% 6 1   91%
app / backend / src / couchers / servicers / references.py References   98% 96 2 0   91% 34 3   96%
app / backend / src / couchers / servicers / references.py (no class)   97% 76 2 0   86% 14 2   96%
app / backend / src / couchers / servicers / reporting.py Reporting   100% 9 0 0   100% 2 0   100%
app / backend / src / couchers / servicers / reporting.py (no class)   100% 12 0 0   100% 0 0   100%
app / backend / src / couchers / servicers / requests.py Requests   92% 233 19 0   84% 116 17   89%
app / backend / src / couchers / servicers / requests.py (no class)   100% 62 0 0   100% 6 0   100%
app / backend / src / couchers / servicers / resources.py Resources   100% 5 0 0   100% 0 0   100%
app / backend / src / couchers / servicers / resources.py (no class)   100% 14 0 0   100% 0 0   100%
app / backend / src / couchers / servicers / search.py Search   95% 77 4 0   88% 34 2   93%
app / backend / src / couchers / servicers / search.py (no class)   85% 206 30 0   68% 94 26   80%
app / backend / src / couchers / servicers / threads.py Threads   97% 35 1 0   94% 16 1   96%
app / backend / src / couchers / servicers / threads.py (no class)   91% 91 8 0   72% 32 9   86%
app / backend / src / couchers / slack.py (no class)   92% 13 1 0   75% 4 1   88%
app / backend / src / couchers / sql.py (no class)   99% 67 1 5   85% 20 3   95%
app / backend / src / couchers / tasks.py (no class)   96% 73 3 0   83% 18 3   93%
app / backend / src / couchers / templating.py Jinja2Template   100% 3 0 0   100% 0 0   100%
app / backend / src / couchers / templating.py _FilterContext   100% 2 0 0   100% 0 0   100%
app / backend / src / couchers / templating.py (no class)   94% 121 7 0   73% 30 8   90%
app / backend / src / couchers / tracing.py (no class)   58% 19 8 0   0% 2 0   52%
app / backend / src / couchers / urls.py (no class)   92% 74 6 0   50% 2 1   91%
app / backend / src / couchers / utils.py (no class)   96% 185 7 8   86% 44 6   94%
app / backend / src / run_locally.py (no class)   0% 31 31 0   0% 10 0   0%
app / backend / src / tests / __init__.py (no class)   100% 0 0 0   100% 0 0   100%
app / backend / src / tests / conftest.py (no class)   99% 154 1 2   80% 10 2   98%
app / backend / src / tests / fixtures / __init__.py (no class)   100% 0 0 0   100% 0 0   100%
app / backend / src / tests / fixtures / db.py (no class)   100% 127 0 0   100% 20 0   100%
app / backend / src / tests / fixtures / misc.py EmailData   100% 0 0 0   100% 0 0   100%
app / backend / src / tests / fixtures / misc.py Push   100% 0 0 0   100% 0 0   100%
app / backend / src / tests / fixtures / misc.py PushCollector   100% 11 0 0   100% 4 0   100%
app / backend / src / tests / fixtures / misc.py Moderator   100% 14 0 0   100% 0 0   100%
app / backend / src / tests / fixtures / misc.py (no class)   100% 39 0 0   100% 2 0   100%
app / backend / src / tests / fixtures / sessions.py _MockCouchersContext   100% 1 0 0   100% 0 0   100%
app / backend / src / tests / fixtures / sessions.py CookieMetadataPlugin   100% 2 0 0   100% 0 0   100%
app / backend / src / tests / fixtures / sessions.py MetadataKeeperInterceptor   100% 5 0 0   100% 0 0   100%
app / backend / src / tests / fixtures / sessions.py FakeRpcError   100% 4 0 0   100% 0 0   100%
app / backend / src / tests / fixtures / sessions.py MockGrpcContext   80% 5 1 0   100% 0 0   80%
app / backend / src / tests / fixtures / sessions.py FakeChannel   100% 16 0 0   100% 0 0   100%
app / backend / src / tests / fixtures / sessions.py (no class)   100% 249 0 0   100% 2 0   100%
app / backend / src / tests / test_account.py (no class)   100% 698 0 0   100% 2 0   100%
app / backend / src / tests / test_activeness_probes.py (no class)   100% 102 0 0   100% 0 0   100%
app / backend / src / tests / test_admin.py (no class)   100% 674 0 0   100% 0 0   100%
app / backend / src / tests / test_api.py (no class)   100% 1147 0 0   100% 8 0   100%
app / backend / src / tests / test_app.py (no class)   100% 12 0 0   100% 0 0   100%
app / backend / src / tests / test_auth.py (no class)   100% 701 0 0   100% 0 0   100%
app / backend / src / tests / test_bg_jobs.py test_service_jobs.HitSleep   100% 0 0 0   100% 0 0   100%
app / backend / src / tests / test_bg_jobs.py test_scheduler.EndOfTime   100% 0 0 0   100% 0 0   100%
app / backend / src / tests / test_bg_jobs.py test_send_message_notifications_empty_unseen_simple.DummyUser   100% 0 0 0   100% 0 0   100%
app / backend / src / tests / test_bg_jobs.py test_send_message_notifications_empty_unseen_simple.FirstResult   100% 2 0 0   100% 0 0   100%
app / backend / src / tests / test_bg_jobs.py test_send_message_notifications_empty_unseen_simple.SecondResult   100% 1 0 0   100% 0 0   100%
app / backend / src / tests / test_bg_jobs.py test_send_message_notifications_empty_unseen_simple.DummySession   60% 5 2 0   100% 0 0   60%
app / backend / src / tests / test_bg_jobs.py test_send_message_notifications_empty_unseen_simple.fake_session_scope.Ctx   100% 2 0 0   100% 0 0   100%
app / backend / src / tests / test_bg_jobs.py (no class)   99% 677 3 0   95% 20 1   99%
app / backend / src / tests / test_blocking.py (no class)   100% 179 0 0   100% 0 0   100%
app / backend / src / tests / test_bugs.py test_bugs.dud_post._PostReturn   100% 1 0 0   100% 0 0   100%
app / backend / src / tests / test_bugs.py test_bugs_with_user.dud_post._PostReturn   100% 1 0 0   100% 0 0   100%
app / backend / src / tests / test_bugs.py test_bugs_fails_on_network_error.dud_post._PostReturn   100% 0 0 0   100% 0 0   100%
app / backend / src / tests / test_bugs.py (no class)   99% 160 1 0   30% 10 7   95%
app / backend / src / tests / test_communities.py TestCommunities   100% 413 0 0   100% 10 0   100%
app / backend / src / tests / test_communities.py (no class)   100% 271 0 0   100% 10 0   100%
app / backend / src / tests / test_conversations.py (no class)   100% 1228 0 0   100% 34 0   100%
app / backend / src / tests / test_crypto.py (no class)   100% 129 0 0   75% 4 1   99%
app / backend / src / tests / test_db.py (no class)   95% 177 8 0   61% 18 7   92%
app / backend / src / tests / test_discussions.py (no class)   100% 119 0 0   100% 0 0   100%
app / backend / src / tests / test_donations.py (no class)   100% 229 0 0   100% 0 0   100%
app / backend / src / tests / test_dummy_data.py (no class)   100% 8 0 0   100% 0 0   100%
app / backend / src / tests / test_editor.py (no class)   100% 293 0 0   100% 2 0   100%
app / backend / src / tests / test_email.py (no class)   100% 270 0 0   100% 0 0   100%
app / backend / src / tests / test_event_log.py (no class)   100% 410 0 0   100% 2 0   100%
app / backend / src / tests / test_events.py (no class)   99% 1514 5 0   87% 38 5   99%
app / backend / src / tests / test_galleries.py (no class)   100% 508 0 0   100% 26 0   100%
app / backend / src / tests / test_gis.py TestGIS   100% 18 0 0   100% 0 0   100%
app / backend / src / tests / test_gis.py (no class)   100% 15 0 0   100% 0 0   100%
app / backend / src / tests / test_groups.py TestGroups   100% 186 0 0   100% 4 0   100%
app / backend / src / tests / test_groups.py (no class)   100% 69 0 0   100% 0 0   100%
app / backend / src / tests / test_i18n.py (no class)   100% 30 0 0   100% 2 0   100%
app / backend / src / tests / test_i18next.py (no class)   100% 137 0 0   100% 0 0   100%
app / backend / src / tests / test_interceptors.py test_logging_interceptor_raise_custom._TestingException   100% 0 0 0   100% 0 0   100%
app / backend / src / tests / test_interceptors.py (no class)   100% 584 0 0   100% 8 0   100%
app / backend / src / tests / test_jail.py (no class)   100% 237 0 0   100% 4 0   100%
app / backend / src / tests / test_localize.py (no class)   100% 17 0 0   100% 0 0   100%
app / backend / src / tests / test_media.py (no class)   100% 32 0 0   100% 0 0   100%
app / backend / src / tests / test_model_constraints.py (no class)   96% 102 4 0   100% 0 0   96%
app / backend / src / tests / test_models.py (no class)   100% 25 0 0   100% 0 0   100%
app / backend / src / tests / test_moderation.py (no class)   100% 1011 0 0   100% 16 0   100%
app / backend / src / tests / test_notification_settings.py (no class)   100% 21 0 0   100% 12 0   100%
app / backend / src / tests / test_notifications.py (no class)   99% 763 3 0   84% 38 6   99%
app / backend / src / tests / test_pages.py (no class)   100% 518 0 0   100% 0 0   100%
app / backend / src / tests / test_postal_verification.py (no class)   100% 297 0 0   100% 20 0   100%
app / backend / src / tests / test_public.py (no class)   100% 233 0 0   100% 4 0   100%
app / backend / src / tests / test_references.py (no class)   100% 607 0 0   67% 12 4   99%
app / backend / src / tests / test_reporting.py (no class)   100% 31 0 0   100% 0 0   100%
app / backend / src / tests / test_requests.py (no class)   99% 732 2 0   75% 12 3   99%
app / backend / src / tests / test_resources.py (no class)   100% 53 0 0   100% 0 0   100%
app / backend / src / tests / test_sanitized_bytes.py TestSanitizedBytes   100% 99 0 0   100% 0 0   100%
app / backend / src / tests / test_sanitized_bytes.py (no class)   100% 17 0 0   100% 0 0   100%
app / backend / src / tests / test_search.py (no class)   100% 436 0 0   100% 16 0   100%
app / backend / src / tests / test_slack.py (no class)   100% 19 0 0   100% 0 0   100%
app / backend / src / tests / test_strong_verification.py (no class)   99% 381 1 0   93% 14 1   99%
app / backend / src / tests / test_templating.py (no class)   95% 97 5 0   0% 2 0   93%
app / backend / src / tests / test_threads.py (no class)   100% 94 0 0   100% 4 0   100%
app / backend / src / tests / test_utils.py (no class)   100% 38 0 0   100% 2 0   100%
app / backend / src / tests / test_verification.py (no class)   100% 164 0 0   75% 4 1   99%
app / backend / src / tests / test_visible_users.py _FakeContext   100% 1 0 0   100% 0 0   100%
app / backend / src / tests / test_visible_users.py (no class)   100% 48 0 0   100% 0 0   100%
Total     95% 28550 1355 87   76% 3322 496   93%

No items found using the specified filter.