Coverage report: 39%

Files Functions Classes

coverage.py v7.15.4, created at 2026-08-26 07:17 +0800

File function   statements missing excluded   coverage
src/lexigram/notification/__init__.py (no function)   22 0 0   100%
src/lexigram/notification/admin/__init__.py (no function)   5 5 0   0%
src/lexigram/notification/admin/contributor.py NotificationAdminContributor.__init__   1 1 0   0%
src/lexigram/notification/admin/contributor.py NotificationAdminContributor.on_admin_boot   2 2 0   0%
src/lexigram/notification/admin/contributor.py NotificationAdminContributor.get_routes   1 1 0   0%
src/lexigram/notification/admin/contributor.py NotificationAdminContributor.get_navigation_items   1 1 0   0%
src/lexigram/notification/admin/contributor.py NotificationAdminContributor.get_health_definitions   1 1 0   0%
src/lexigram/notification/admin/contributor.py NotificationAdminContributor.get_management_pages   1 1 0   0%
src/lexigram/notification/admin/contributor.py NotificationAdminContributor.render_health_check   9 9 0   0%
src/lexigram/notification/admin/contributor.py (no function)   26 26 4   0%
src/lexigram/notification/backends/__init__.py (no function)   6 0 0   100%
src/lexigram/notification/backends/push/__init__.py (no function)   5 0 0   100%
src/lexigram/notification/backends/push/apns.py APNsPush.__init__   6 6 0   0%
src/lexigram/notification/backends/push/apns.py APNsPush._load_private_key   5 5 0   0%
src/lexigram/notification/backends/push/apns.py APNsPush._make_jwt   5 5 0   0%
src/lexigram/notification/backends/push/apns.py APNsPush._send_to_token   31 31 0   0%
src/lexigram/notification/backends/push/apns.py APNsPush.send   3 3 0   0%
src/lexigram/notification/backends/push/apns.py APNsPush.send_batch   2 2 0   0%
src/lexigram/notification/backends/push/apns.py APNsPush.health_check   9 9 0   0%
src/lexigram/notification/backends/push/apns.py (no function)   22 0 2   100%
src/lexigram/notification/backends/push/fcm.py FCMPush.__init__   2 2 0   0%
src/lexigram/notification/backends/push/fcm.py FCMPush.send   30 30 0   0%
src/lexigram/notification/backends/push/fcm.py FCMPush.send_batch   2 2 0   0%
src/lexigram/notification/backends/push/fcm.py FCMPush.health_check   8 8 0   0%
src/lexigram/notification/backends/push/fcm.py (no function)   18 0 2   100%
src/lexigram/notification/backends/push/web_push.py WebPushChannel.__init__   4 4 0   0%
src/lexigram/notification/backends/push/web_push.py WebPushChannel.send   30 30 0   0%
src/lexigram/notification/backends/push/web_push.py WebPushChannel.send_batch   2 2 0   0%
src/lexigram/notification/backends/push/web_push.py WebPushChannel.health_check   10 10 0   0%
src/lexigram/notification/backends/push/web_push.py (no function)   24 4 2   83%
src/lexigram/notification/backends/slack/__init__.py (no function)   3 0 0   100%
src/lexigram/notification/backends/slack/slack_notifier.py _escape_mrkdwn   1 1 0   0%
src/lexigram/notification/backends/slack/slack_notifier.py SlackNotificationError.__init__   2 2 0   0%
src/lexigram/notification/backends/slack/slack_notifier.py SlackMessage.__init__   4 4 0   0%
src/lexigram/notification/backends/slack/slack_notifier.py SlackNotifier.__init__   6 6 0   0%
src/lexigram/notification/backends/slack/slack_notifier.py SlackNotifier._mode   1 1 0   0%
src/lexigram/notification/backends/slack/slack_notifier.py SlackNotifier.send   3 3 0   0%
src/lexigram/notification/backends/slack/slack_notifier.py SlackNotifier.send_text   1 1 0   0%
src/lexigram/notification/backends/slack/slack_notifier.py SlackNotifier.health_check   3 3 0   0%
src/lexigram/notification/backends/slack/slack_notifier.py SlackNotifier._send_webhook   16 16 0   0%
src/lexigram/notification/backends/slack/slack_notifier.py SlackNotifier._health_webhook   8 8 0   0%
src/lexigram/notification/backends/slack/slack_notifier.py SlackNotifier._send_bot   21 21 0   0%
src/lexigram/notification/backends/slack/slack_notifier.py SlackNotifier._health_bot   12 12 0   0%
src/lexigram/notification/backends/slack/slack_notifier.py (no function)   30 0 0   100%
src/lexigram/notification/backends/sms/__init__.py (no function)   3 0 0   100%
src/lexigram/notification/backends/sms/twilio.py TwilioSMS.__init__   4 4 0   0%
src/lexigram/notification/backends/sms/twilio.py TwilioSMS._get_auth_header   3 3 0   0%
src/lexigram/notification/backends/sms/twilio.py TwilioSMS.send   16 16 0   0%
src/lexigram/notification/backends/sms/twilio.py TwilioSMS.health_check   9 9 0   0%
src/lexigram/notification/backends/sms/twilio.py (no function)   18 0 2   100%
src/lexigram/notification/backends/sms/whatsapp.py WhatsAppNotificationError.__init__   2 2 0   0%
src/lexigram/notification/backends/sms/whatsapp.py WhatsAppMetaNotificationError.__init__   3 3 0   0%
src/lexigram/notification/backends/sms/whatsapp.py WhatsAppBackend.__init__   9 9 0   0%
src/lexigram/notification/backends/sms/whatsapp.py WhatsAppBackend.send   3 3 0   0%
src/lexigram/notification/backends/sms/whatsapp.py WhatsAppBackend.health_check   3 3 0   0%
src/lexigram/notification/backends/sms/whatsapp.py WhatsAppBackend._twilio_auth_header   2 2 0   0%
src/lexigram/notification/backends/sms/whatsapp.py WhatsAppBackend._whatsapp_number   3 3 0   0%
src/lexigram/notification/backends/sms/whatsapp.py WhatsAppBackend._send_twilio   17 17 0   0%
src/lexigram/notification/backends/sms/whatsapp.py WhatsAppBackend._health_twilio   9 9 0   0%
src/lexigram/notification/backends/sms/whatsapp.py WhatsAppBackend._send_meta   22 22 0   0%
src/lexigram/notification/backends/sms/whatsapp.py WhatsAppBackend._health_meta   12 12 0   0%
src/lexigram/notification/backends/sms/whatsapp.py (no function)   31 0 2   100%
src/lexigram/notification/cli/__init__.py (no function)   0 0 0   100%
src/lexigram/notification/cli/checks.py check_notification_channels   1 1 0   0%
src/lexigram/notification/cli/checks.py (no function)   3 3 2   0%
src/lexigram/notification/cli/commands.py create_notify_app   16 16 0   0%
src/lexigram/notification/cli/commands.py create_notify_app.list_channels   1 1 0   0%
src/lexigram/notification/cli/commands.py create_notify_app.test_email   1 1 0   0%
src/lexigram/notification/cli/commands.py create_notify_app.test_push   1 1 0   0%
src/lexigram/notification/cli/commands.py create_notify_app.list_inbox   1 1 0   0%
src/lexigram/notification/cli/commands.py (no function)   3 3 0   0%
src/lexigram/notification/cli/contributor.py NotificationCliContributor.contributor_id   1 1 0   0%
src/lexigram/notification/cli/contributor.py NotificationCliContributor.get_generators   1 1 0   0%
src/lexigram/notification/cli/contributor.py NotificationCliContributor.get_commands   1 1 0   0%
src/lexigram/notification/cli/contributor.py NotificationCliContributor.get_health_checks   1 1 0   0%
src/lexigram/notification/cli/contributor.py NotificationCliContributor.get_doctor_checks   1 1 0   0%
src/lexigram/notification/cli/contributor.py NotificationCliContributor.get_shell_context   1 1 0   0%
src/lexigram/notification/cli/contributor.py NotificationCliContributor.get_hooks   1 1 0   0%
src/lexigram/notification/cli/contributor.py NotificationCliContributor.get_schema_setup   1 1 0   0%
src/lexigram/notification/cli/contributor.py (no function)   17 17 0   0%
src/lexigram/notification/cli/doctor.py check_smtp_config   3 3 0   0%
src/lexigram/notification/cli/doctor.py check_push_credentials   5 5 0   0%
src/lexigram/notification/cli/doctor.py (no function)   4 4 0   0%
src/lexigram/notification/cli/generators/__init__.py (no function)   0 0 0   100%
src/lexigram/notification/cli/generators/template.py NotificationTemplateGenerator.generate   1 1 0   0%
src/lexigram/notification/cli/generators/template.py (no function)   6 6 0   0%
src/lexigram/notification/cli/schema_setup.py ensure_inbox_messages   7 7 0   0%
src/lexigram/notification/cli/schema_setup.py (no function)   5 5 0   0%
src/lexigram/notification/config/__init__.py (no function)   13 0 0   100%
src/lexigram/notification/config/inbox.py (no function)   15 0 0   100%
src/lexigram/notification/config/mailer.py SMTPDriverConfig._coerce_password   3 3 0   0%
src/lexigram/notification/config/mailer.py SendGridDriverConfig._coerce_api_key   3 3 0   0%
src/lexigram/notification/config/mailer.py MailerConfig.from_named   1 1 0   0%
src/lexigram/notification/config/mailer.py (no function)   46 0 0   100%
src/lexigram/notification/config/push.py FCMDriverConfig._coerce_server_key   3 3 0   0%
src/lexigram/notification/config/push.py APNsDriverConfig._coerce_apns_auth_key   3 3 0   0%
src/lexigram/notification/config/push.py WebPushDriverConfig._coerce_vapid_private_key   3 3 0   0%
src/lexigram/notification/config/push.py (no function)   42 0 0   100%
src/lexigram/notification/config/sms.py TwilioDriverConfig._coerce_auth_token   3 3 0   0%
src/lexigram/notification/config/sms.py (no function)   22 0 0   100%
src/lexigram/notification/config/top_level.py NotificationConfig.from_named_sms   1 1 0   0%
src/lexigram/notification/config/top_level.py NotificationConfig.from_named_push   1 1 0   0%
src/lexigram/notification/config/top_level.py (no function)   19 0 0   100%
src/lexigram/notification/constants.py (no function)   23 2 0   91%
src/lexigram/notification/decorators.py (no function)   2 2 0   0%
src/lexigram/notification/delivery/__init__.py (no function)   4 0 0   100%
src/lexigram/notification/delivery/exceptions.py PermanentDeliveryFailure.__init__   2 2 0   0%
src/lexigram/notification/delivery/exceptions.py (no function)   6 0 0   100%
src/lexigram/notification/delivery/retry.py RetryingMailer.__init__   4 0 0   100%
src/lexigram/notification/delivery/retry.py RetryingMailer.backend   1 1 0   0%
src/lexigram/notification/delivery/retry.py RetryingMailer.store   1 1 0   0%
src/lexigram/notification/delivery/retry.py RetryingMailer.send   16 6 0   62%
src/lexigram/notification/delivery/retry.py (no function)   14 0 2   100%
src/lexigram/notification/delivery/stores.py MemoryDeliveryStore.__init__   2 0 0   100%
src/lexigram/notification/delivery/stores.py MemoryDeliveryStore.record_attempt   1 1 0   0%
src/lexigram/notification/delivery/stores.py MemoryDeliveryStore.create_pending   3 0 0   100%
src/lexigram/notification/delivery/stores.py MemoryDeliveryStore.mark_delivered   3 0 0   100%
src/lexigram/notification/delivery/stores.py MemoryDeliveryStore.get_retry_count   2 2 0   0%
src/lexigram/notification/delivery/stores.py MemoryDeliveryStore.increment_retry   6 1 0   83%
src/lexigram/notification/delivery/stores.py MemoryDeliveryStore.schedule_retry   3 0 0   100%
src/lexigram/notification/delivery/stores.py MemoryDeliveryStore.mark_failed   4 4 0   0%
src/lexigram/notification/delivery/stores.py MemoryDeliveryStore.due_deliveries   3 0 0   100%
src/lexigram/notification/delivery/stores.py SqlDeliveryStore.__init__   2 2 0   0%
src/lexigram/notification/delivery/stores.py SqlDeliveryStore._ensure_table   4 4 0   0%
src/lexigram/notification/delivery/stores.py SqlDeliveryStore._row_to_state   1 1 0   0%
src/lexigram/notification/delivery/stores.py SqlDeliveryStore.record_attempt   1 1 0   0%
src/lexigram/notification/delivery/stores.py SqlDeliveryStore.create_pending   4 4 0   0%
src/lexigram/notification/delivery/stores.py SqlDeliveryStore.mark_delivered   3 3 0   0%
src/lexigram/notification/delivery/stores.py SqlDeliveryStore.get_retry_count   4 4 0   0%
src/lexigram/notification/delivery/stores.py SqlDeliveryStore.increment_retry   4 4 0   0%
src/lexigram/notification/delivery/stores.py SqlDeliveryStore.schedule_retry   2 2 0   0%
src/lexigram/notification/delivery/stores.py SqlDeliveryStore.mark_failed   1 1 0   0%
src/lexigram/notification/delivery/stores.py SqlDeliveryStore.due_deliveries   16 16 0   0%
src/lexigram/notification/delivery/stores.py (no function)   33 0 0   100%
src/lexigram/notification/delivery/worker.py flush_retries   27 11 0   59%
src/lexigram/notification/delivery/worker.py (no function)   9 0 0   100%
src/lexigram/notification/di/__init__.py (no function)   5 5 0   0%
src/lexigram/notification/di/inbox_provider.py InboxProvider.__init__   3 3 0   0%
src/lexigram/notification/di/inbox_provider.py InboxProvider.register   11 11 0   0%
src/lexigram/notification/di/inbox_provider.py InboxProvider.register._database_store_factory   2 2 0   0%
src/lexigram/notification/di/inbox_provider.py InboxProvider.boot   4 4 0   0%
src/lexigram/notification/di/inbox_provider.py InboxProvider.shutdown   1 1 0   0%
src/lexigram/notification/di/inbox_provider.py InboxProvider.health_check   4 4 0   0%
src/lexigram/notification/di/inbox_provider.py (no function)   17 17 2   0%
src/lexigram/notification/di/mailer_provider.py MailerProvider.__init__   3 3 0   0%
src/lexigram/notification/di/mailer_provider.py MailerProvider.from_config   1 1 0   0%
src/lexigram/notification/di/mailer_provider.py MailerProvider._create_mailer   18 18 0   0%
src/lexigram/notification/di/mailer_provider.py MailerProvider.register   14 14 0   0%
src/lexigram/notification/di/mailer_provider.py MailerProvider.boot   0 0 0   100%
src/lexigram/notification/di/mailer_provider.py MailerProvider.shutdown   1 1 0   0%
src/lexigram/notification/di/mailer_provider.py MailerProvider.health_check   17 17 0   0%
src/lexigram/notification/di/mailer_provider.py (no function)   20 20 2   0%
src/lexigram/notification/di/provider.py NotificationProvider.__init__   5 5 0   0%
src/lexigram/notification/di/provider.py NotificationProvider.from_config   1 1 0   0%
src/lexigram/notification/di/provider.py NotificationProvider._create_sms   7 7 0   0%
src/lexigram/notification/di/provider.py NotificationProvider._create_push   17 17 0   0%
src/lexigram/notification/di/provider.py NotificationProvider.register   17 17 0   0%
src/lexigram/notification/di/provider.py NotificationProvider.boot   7 7 0   0%
src/lexigram/notification/di/provider.py NotificationProvider.shutdown   4 4 0   0%
src/lexigram/notification/di/provider.py NotificationProvider.health_check   17 17 0   0%
src/lexigram/notification/di/provider.py (no function)   40 40 2   0%
src/lexigram/notification/events.py (no function)   32 0 0   100%
src/lexigram/notification/exceptions.py TwilioNotificationError.__init__   2 2 0   0%
src/lexigram/notification/exceptions.py FCMNotificationError.__init__   2 2 0   0%
src/lexigram/notification/exceptions.py APNsNotificationError.__init__   2 2 0   0%
src/lexigram/notification/exceptions.py WebPushNotificationError.__init__   3 3 0   0%
src/lexigram/notification/exceptions.py SMTPMailerError.__init__   2 2 0   0%
src/lexigram/notification/exceptions.py SendGridMailerError.__init__   2 2 0   0%
src/lexigram/notification/exceptions.py (no function)   30 0 0   100%
src/lexigram/notification/hooks.py (no function)   29 0 0   100%
src/lexigram/notification/inbox/__init__.py (no function)   5 0 0   100%
src/lexigram/notification/inbox/database.py DatabaseInboxStore.__init__   2 2 0   0%
src/lexigram/notification/inbox/database.py DatabaseInboxStore._ensure_table   5 5 0   0%
src/lexigram/notification/inbox/database.py DatabaseInboxStore.save   3 3 0   0%
src/lexigram/notification/inbox/database.py DatabaseInboxStore.get   5 5 0   0%
src/lexigram/notification/inbox/database.py DatabaseInboxStore.list_for_user   5 5 0   0%
src/lexigram/notification/inbox/database.py DatabaseInboxStore.mark_read   3 3 0   0%
src/lexigram/notification/inbox/database.py DatabaseInboxStore.mark_all_read   3 3 0   0%
src/lexigram/notification/inbox/database.py DatabaseInboxStore.delete   3 3 0   0%
src/lexigram/notification/inbox/database.py DatabaseInboxStore.count_unread   5 5 0   0%
src/lexigram/notification/inbox/database.py DatabaseInboxStore.clear_all   6 6 0   0%
src/lexigram/notification/inbox/database.py DatabaseInboxStore.health_check   5 5 0   0%
src/lexigram/notification/inbox/database.py DatabaseInboxStore._row_to_message   9 9 0   0%
src/lexigram/notification/inbox/database.py (no function)   26 0 0   100%
src/lexigram/notification/inbox/memory.py InMemoryInboxStore.__init__   1 1 0   0%
src/lexigram/notification/inbox/memory.py InMemoryInboxStore.save   2 2 0   0%
src/lexigram/notification/inbox/memory.py InMemoryInboxStore.get   1 1 0   0%
src/lexigram/notification/inbox/memory.py InMemoryInboxStore.list_for_user   3 3 0   0%
src/lexigram/notification/inbox/memory.py InMemoryInboxStore.mark_read   4 4 0   0%
src/lexigram/notification/inbox/memory.py InMemoryInboxStore.mark_all_read   5 5 0   0%
src/lexigram/notification/inbox/memory.py InMemoryInboxStore.delete   4 4 0   0%
src/lexigram/notification/inbox/memory.py InMemoryInboxStore.count_unread   1 1 0   0%
src/lexigram/notification/inbox/memory.py InMemoryInboxStore.clear_all   5 5 0   0%
src/lexigram/notification/inbox/memory.py InMemoryInboxStore.health_check   2 2 0   0%
src/lexigram/notification/inbox/memory.py (no function)   19 0 0   100%
src/lexigram/notification/inbox/service.py InboxService.__init__   1 1 0   0%
src/lexigram/notification/inbox/service.py InboxService.send   5 5 0   0%
src/lexigram/notification/inbox/service.py InboxService.get_inbox   1 1 0   0%
src/lexigram/notification/inbox/service.py InboxService.get_message   1 1 0   0%
src/lexigram/notification/inbox/service.py InboxService.mark_read   1 1 0   0%
src/lexigram/notification/inbox/service.py InboxService.mark_all_read   1 1 0   0%
src/lexigram/notification/inbox/service.py InboxService.delete   1 1 0   0%
src/lexigram/notification/inbox/service.py InboxService.count_unread   1 1 0   0%
src/lexigram/notification/inbox/service.py InboxService.clear_all   3 3 0   0%
src/lexigram/notification/inbox/service.py (no function)   18 0 2   100%
src/lexigram/notification/mailer/__init__.py (no function)   7 0 0   100%
src/lexigram/notification/mailer/console_mailer.py ConsoleMailer.__init__   1 1 0   0%
src/lexigram/notification/mailer/console_mailer.py ConsoleMailer.send   3 3 0   0%
src/lexigram/notification/mailer/console_mailer.py ConsoleMailer.health_check   1 1 0   0%
src/lexigram/notification/mailer/console_mailer.py (no function)   13 13 2   0%
src/lexigram/notification/mailer/mailable.py Mailable.to_message   0 0 0   100%
src/lexigram/notification/mailer/mailable.py escape_html   1 1 0   0%
src/lexigram/notification/mailer/mailable.py (no function)   9 0 0   100%
src/lexigram/notification/mailer/module.py MailerModule.configure   2 2 0   0%
src/lexigram/notification/mailer/module.py MailerModule.stub   6 6 0   0%
src/lexigram/notification/mailer/module.py (no function)   11 0 3   100%
src/lexigram/notification/mailer/retrying_mailer.py RetryingMailer.__init__   4 4 0   0%
src/lexigram/notification/mailer/retrying_mailer.py RetryingMailer.send   26 26 0   0%
src/lexigram/notification/mailer/retrying_mailer.py (no function)   13 0 4   100%
src/lexigram/notification/mailer/sendgrid_mailer.py SendGridMailer.__init__   5 5 0   0%
src/lexigram/notification/mailer/sendgrid_mailer.py SendGridMailer._build_payload   18 18 0   0%
src/lexigram/notification/mailer/sendgrid_mailer.py SendGridMailer.send   15 15 0   0%
src/lexigram/notification/mailer/sendgrid_mailer.py SendGridMailer.health_check   8 8 0   0%
src/lexigram/notification/mailer/sendgrid_mailer.py (no function)   16 0 2   100%
src/lexigram/notification/mailer/smtp_mailer.py SMTPMailer.__init__   9 9 0   0%
src/lexigram/notification/mailer/smtp_mailer.py SMTPMailer._build_mime   15 15 0   0%
src/lexigram/notification/mailer/smtp_mailer.py SMTPMailer._send_sync   10 10 0   0%
src/lexigram/notification/mailer/smtp_mailer.py SMTPMailer.send   11 11 0   0%
src/lexigram/notification/mailer/smtp_mailer.py SMTPMailer.health_check   7 7 0   0%
src/lexigram/notification/mailer/smtp_mailer.py SMTPMailer.health_check._check   2 2 0   0%
src/lexigram/notification/mailer/smtp_mailer.py (no function)   23 0 2   100%
src/lexigram/notification/module.py NotificationModule.configure   2 2 0   0%
src/lexigram/notification/module.py NotificationModule.stub   3 3 0   0%
src/lexigram/notification/module.py (no function)   11 0 3   100%
src/lexigram/notification/protocols.py (no function)   5 0 0   100%
src/lexigram/notification/push/__init__.py (no function)   3 3 0   0%
src/lexigram/notification/push/events.py (no function)   13 13 0   0%
src/lexigram/notification/types.py (no function)   28 28 0   0%
Total     1851 1126 42   39%

No items found using the specified filter.