Coverage report: 93%

Files Functions Classes

coverage.py v7.13.3, created at 2026-02-04 14:46 +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% 41 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% 27 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 / send.py (no class)   100% 17 0 0   100% 0 0   100%
app / backend / src / couchers / email / smtp.py (no class)   90% 49 5 0   64% 14 5   84%
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)   96% 28 1 0   50% 2 1   93%
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   92% 13 1 0   50% 4 2   82%
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   87% 15 2 0   80% 10 2   84%
app / backend / src / couchers / i18n / i18next.py Language   77% 22 5 0   75% 16 2   76%
app / backend / src / couchers / i18n / i18next.py String   100% 1 0 0   100% 0 0   100%
app / backend / src / couchers / i18n / i18next.py StringTemplate   96% 23 1 0   94% 18 1   95%
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% 39 0 0   100% 0 0   100%
app / backend / src / couchers / i18n / locales.py (no class)   97% 29 1 0   92% 12 1   95%
app / backend / src / couchers / i18n / localize.py (no class)   100% 34 0 0   50% 4 2   95%
app / backend / src / couchers / i18n / plurals.py PluralCategory   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / i18n / plurals.py PluralRules   12% 58 51 0   7% 28 0   10%
app / backend / src / couchers / i18n / plurals.py (no class)   100% 52 0 0   100% 0 0   100%
app / backend / src / couchers / interceptors.py UserAuthInfo   100% 0 0 0   100% 0 0   100%
app / backend / src / couchers / interceptors.py CouchersMiddlewareInterceptor   93% 61 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% 143 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)   92% 462 39 0   75% 132 23   88%
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)   60% 40 16 0   17% 12 2   50%
app / backend / src / couchers / models / __init__.py (no class)   100% 20 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 / 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 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% 114 0 2   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% 119 0 2   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% 69 0 4   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 (no class)   100% 26 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% 59 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   71% 7 2 0   100% 0 0   71%
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 / 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% 240 0 2   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% 209 0 4   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% 13 0 0   100% 0 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)   79% 96 20 0   67% 30 4   76%
app / backend / src / couchers / notifications / expo_api.py (no class)   38% 39 24 0   38% 8 1   38%
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% 65 13 0   50% 14 3   75%
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)   86% 237 32 0   77% 130 18   83%
app / backend / src / couchers / notifications / render_push.py (no class)   86% 296 40 0   83% 132 18   86%
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)   32% 90 61 0   0% 26 0   25%
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)   93% 61 4 0   92% 24 0   93%
app / backend / src / couchers / notifications / utils.py (no class)   100% 2 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% 217 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% 82 0 0   100% 6 0   100%
app / backend / src / couchers / servicers / admin.py Admin   62% 288 108 0   44% 148 29   56%
app / backend / src / couchers / servicers / admin.py (no class)   100% 74 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% 301 8 0   96% 192 8   97%
app / backend / src / couchers / servicers / api.py (no class)   98% 151 3 0   96% 68 3   97%
app / backend / src / couchers / servicers / auth.py Auth   85% 226 35 0   73% 90 12   81%
app / backend / src / couchers / servicers / auth.py (no class)   99% 76 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   92% 24 2 0   100% 6 0   93%
app / backend / src / couchers / servicers / bugs.py (no class)   100% 22 0 0   100% 0 0   100%
app / backend / src / couchers / servicers / communities.py Communities   77% 145 33 0   63% 60 18   73%
app / backend / src / couchers / servicers / communities.py (no class)   100% 55 0 0   100% 0 0   100%
app / backend / src / couchers / servicers / conversations.py Conversations   87% 198 26 0   77% 112 26   83%
app / backend / src / couchers / servicers / conversations.py (no class)   100% 111 0 0   100% 16 0   100%
app / backend / src / couchers / servicers / discussions.py Discussions   85% 26 4 0   69% 16 5   79%
app / backend / src / couchers / servicers / discussions.py (no class)   95% 39 2 0   75% 8 2   91%
app / backend / src / couchers / servicers / donations.py Donations   85% 20 3 0   67% 12 4   78%
app / backend / src / couchers / servicers / donations.py Stripe   100% 24 0 0   100% 6 0   100%
app / backend / src / couchers / servicers / donations.py (no class)   100% 27 0 0   100% 0 0   100%
app / backend / src / couchers / servicers / editor.py Editor   96% 90 4 0   86% 50 7   92%
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   87% 368 49 0   74% 194 51   82%
app / backend / src / couchers / servicers / events.py (no class)   79% 154 33 0   63% 38 4   76%
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   69% 74 23 0   50% 24 8   64%
app / backend / src / couchers / servicers / groups.py (no class)   100% 39 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% 114 23 0   76% 50 6   79%
app / backend / src / couchers / servicers / moderation.py (no class)   97% 39 1 0   75% 4 1   95%
app / backend / src / couchers / servicers / notifications.py Notifications   91% 86 8 0   75% 36 9   86%
app / backend / src / couchers / servicers / notifications.py (no class)   100% 43 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% 94 2 0   91% 34 3   96%
app / backend / src / couchers / servicers / references.py (no class)   97% 75 2 0   86% 14 2   96%
app / backend / src / couchers / servicers / reporting.py Reporting   100% 8 0 0   100% 2 0   100%
app / backend / src / couchers / servicers / reporting.py (no class)   100% 11 0 0   100% 0 0   100%
app / backend / src / couchers / servicers / requests.py Requests   92% 225 19 0   84% 116 17   89%
app / backend / src / couchers / servicers / requests.py (no class)   100% 61 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% 75 4 0   88% 34 2   93%
app / backend / src / couchers / servicers / search.py (no class)   85% 205 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 / sql.py (no class)   98% 65 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% 151 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)   97% 122 4 0   100% 20 0   97%
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% 8 0 0   100% 0 0   100%
app / backend / src / tests / fixtures / misc.py (no class)   100% 37 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% 246 0 0   100% 2 0   100%
app / backend / src / tests / pytest_split / __init__.py (no class)   100% 0 0 0   100% 0 0   100%
app / backend / src / tests / pytest_split / algorithms.py TestGroup   100% 0 0 0   100% 0 0   100%
app / backend / src / tests / pytest_split / algorithms.py AlgorithmBase   60% 5 2 0   50% 2 1   57%
app / backend / src / tests / pytest_split / algorithms.py LeastDurationAlgorithm   100% 24 0 0   100% 8 0   100%
app / backend / src / tests / pytest_split / algorithms.py DurationBasedChunksAlgorithm   0% 15 15 0   0% 8 0   0%
app / backend / src / tests / pytest_split / algorithms.py Algorithms   100% 1 0 0   100% 0 0   100%
app / backend / src / tests / pytest_split / algorithms.py (no class)   97% 38 1 2   50% 2 1   95%
app / backend / src / tests / pytest_split / plugin.py Base   67% 9 3 0   50% 2 1   64%
app / backend / src / tests / pytest_split / plugin.py PytestSplitPlugin   85% 13 2 0   50% 2 1   80%
app / backend / src / tests / pytest_split / plugin.py PytestSplitCachePlugin   0% 18 18 2   0% 12 0   0%
app / backend / src / tests / pytest_split / plugin.py (no class)   91% 45 4 5   71% 14 4   86%
app / backend / src / tests / test_account.py (no class)   100% 697 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% 504 0 0   100% 0 0   100%
app / backend / src / tests / test_api.py (no class)   100% 1112 0 0   100% 6 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% 598 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% 178 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)   100% 82 0 0   25% 8 6   93%
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% 262 0 0   100% 8 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)   100% 139 0 0   50% 2 1   99%
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% 157 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% 253 0 0   100% 0 0   100%
app / backend / src / tests / test_events.py (no class)   100% 1230 0 0   100% 22 0   100%
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% 20 0 0   100% 0 0   100%
app / backend / src / tests / test_i18next.py (no class)   100% 118 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_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% 992 0 0   100% 16 0   100%
app / backend / src / tests / test_notifications.py (no class)   99% 624 3 0   84% 32 5   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% 728 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% 430 0 0   100% 14 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% 98 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% 26690 1250 72   75% 3218 472   93%

No items found using the specified filter.