Coverage report: 90%

Files Functions Classes

coverage.py v7.16.0, created at 2026-09-02 17:07 +0000

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
object_streams/__init__.py (no function)   100% 24 0 0   100% 0 0   100%
object_streams/apps.py (no function)   100% 6 0 0   100% 0 0   100%
object_streams/events.py _model_label   100% 3 0 0   100% 2 0   100%
object_streams/events.py _coerce_pk   50% 4 2 0   50% 2 1   50%
object_streams/events.py ObjectRef.__post_init__   100% 2 0 0   100% 0 0   100%
object_streams/events.py ObjectRef.for_model   100% 1 0 0   100% 0 0   100%
object_streams/events.py ObjectRef.from_instance   100% 1 0 0   100% 0 0   100%
object_streams/events.py ObjectRef.as_dict   100% 1 0 0   100% 0 0   100%
object_streams/events.py SourceRef.__post_init__   100% 9 0 0   75% 8 2   88%
object_streams/events.py SourceRef.from_instance   100% 1 0 0   100% 0 0   100%
object_streams/events.py SourceRef.as_dict   75% 12 3 0   50% 10 5   64%
object_streams/events.py StreamEvent.__post_init__   89% 9 1 0   83% 6 1   87%
object_streams/events.py StreamEvent.as_dict   81% 16 3 0   57% 14 6   70%
object_streams/events.py (no function)   100% 58 0 0   100% 0 0   100%
object_streams/exceptions.py FilterValidationError.__init__   100% 2 0 0   100% 0 0   100%
object_streams/exceptions.py (no function)   100% 6 0 0   100% 0 0   100%
object_streams/filters.py FilterSetLike.is_valid   100% 0 0 0   100% 0 0   100%
object_streams/filters.py apply_filterset   75% 8 2 0   67% 6 2   71%
object_streams/filters.py (no function)   100% 12 0 0   100% 0 0   100%
object_streams/history/__init__.py (no function)   100% 3 0 0   100% 0 0   100%
object_streams/history/base.py HistoryRecordRef.as_source_ref   100% 1 0 0   100% 0 0   100%
object_streams/history/base.py HistoryAdapter.source_ref_for_history   100% 0 0 0   100% 0 0   100%
object_streams/history/base.py (no function)   100% 15 0 0   100% 0 0   100%
object_streams/history/pghistory.py PgHistoryAdapter.source_ref_for_history   100% 1 0 1   100% 0 0   100%
object_streams/history/pghistory.py (no function)   100% 6 0 0   100% 0 0   100%
object_streams/history/simple_history.py SimpleHistoryAdapter.source_ref_for_history   100% 1 0 1   100% 0 0   100%
object_streams/history/simple_history.py (no function)   100% 6 0 0   100% 0 0   100%
object_streams/management/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
object_streams/management/commands/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
object_streams/management/commands/object_streams_listen.py Command.add_arguments   100% 6 0 0   100% 0 0   100%
object_streams/management/commands/object_streams_listen.py Command.handle   95% 37 2 0   90% 10 1   94%
object_streams/management/commands/object_streams_listen.py Command._listen_once   60% 10 4 0   50% 6 1   56%
object_streams/management/commands/object_streams_listen.py Command._listen_once.drain_after_listen   100% 3 0 0   100% 0 0   100%
object_streams/management/commands/object_streams_listen.py Command._drain_pending_on_worker   100% 2 0 0   100% 0 0   100%
object_streams/management/commands/object_streams_listen.py Command._drain_pending   87% 15 2 0   50% 8 4   74%
object_streams/management/commands/object_streams_listen.py (no function)   100% 24 0 0   100% 0 0   100%
object_streams/management/commands/object_streams_prune.py Command.add_arguments   100% 4 0 0   100% 0 0   100%
object_streams/management/commands/object_streams_prune.py Command.handle   100% 20 0 0   100% 4 0   100%
object_streams/management/commands/object_streams_prune.py (no function)   100% 12 0 0   100% 0 0   100%
object_streams/models.py _content_type_model_label   75% 4 1 0   50% 2 1   67%
object_streams/models.py ObjectStreamEvent.__str__   0% 1 1 0   100% 0 0   0%
object_streams/models.py ObjectStreamEvent.to_stream_event   100% 4 0 0   100% 2 0   100%
object_streams/models.py ObjectStreamOutboxState.__str__   0% 1 1 0   100% 0 0   0%
object_streams/models.py (no function)   100% 34 0 0   100% 0 0   100%
object_streams/outbox.py _model_label   67% 3 1 0   50% 2 1   60%
object_streams/outbox.py _content_type_for_model_label   67% 9 3 0   50% 4 2   62%
object_streams/outbox.py _source_content_type   71% 7 2 0   67% 6 2   69%
object_streams/outbox.py _source_object_id   100% 3 0 0   100% 2 0   100%
object_streams/outbox.py create_outbox_event   94% 16 1 0   88% 8 1   92%
object_streams/outbox.py enqueue_outbox_event   100% 1 0 0   100% 0 0   100%
object_streams/outbox.py _state_manager   100% 4 0 0   100% 2 0   100%
object_streams/outbox.py assign_outbox_cursors   100% 19 0 0   100% 8 0   100%
object_streams/outbox.py latest_outbox_cursor   75% 4 1 0   50% 2 1   67%
object_streams/outbox.py pruned_through_cursor   100% 1 0 0   100% 0 0   100%
object_streams/outbox.py broadcasted_through_cursor   100% 1 0 0   100% 0 0   100%
object_streams/outbox.py record_pruned_through   100% 4 0 0   50% 2 1   83%
object_streams/outbox.py record_broadcasted_through   100% 5 0 0   50% 2 1   86%
object_streams/outbox.py replay_is_complete   100% 1 0 0   100% 0 0   100%
object_streams/outbox.py outbox_events_after   100% 10 0 0   100% 8 0   100%
object_streams/outbox.py outbox_events_pending_broadcast   86% 7 1 0   50% 4 2   73%
object_streams/outbox.py (no function)   100% 28 0 0   100% 0 0   100%
object_streams/postgres.py get_notify_channel   100% 1 0 0   100% 0 0   100%
object_streams/postgres.py validate_notify_channel   71% 7 2 0   75% 4 1   73%
object_streams/postgres.py notify_outbox_event   100% 4 0 0   100% 0 0   100%
object_streams/postgres.py listen_outbox_event_ids   92% 25 2 0   88% 8 1   91%
object_streams/postgres.py (no function)   100% 15 0 0   100% 0 0   100%
object_streams/producers.py build_source_events   92% 12 1 0   90% 10 1   91%
object_streams/producers.py create_source_events   100% 1 0 0   100% 0 0   100%
object_streams/producers.py enqueue_source_events   100% 4 0 0   100% 2 0   100%
object_streams/producers.py _source_matches   78% 9 2 0   67% 6 2   73%
object_streams/producers.py _source_changed_fields   75% 4 1 0   50% 2 1   67%
object_streams/producers.py _source_ref   100% 4 0 0   100% 2 0   100%
object_streams/producers.py _subjects_for_source   100% 1 0 0   100% 0 0   100%
object_streams/producers.py (no function)   100% 23 0 0   100% 0 0   100%
object_streams/registry.py _normalize_model_label   100% 3 0 0   100% 2 0   100%
object_streams/registry.py _resolve_model   17% 12 10 0   25% 4 1   19%
object_streams/registry.py ObjectStreamRegistration.__post_init__   100% 8 0 0   75% 4 1   92%
object_streams/registry.py ObjectStreamRegistration.model_label   100% 1 0 0   100% 0 0   100%
object_streams/registry.py ObjectStreamRegistration.get_queryset   100% 2 0 0   100% 0 0   100%
object_streams/registry.py ObjectStreamRegistry.__init__   100% 1 0 0   100% 0 0   100%
object_streams/registry.py ObjectStreamRegistry.register   75% 4 1 0   50% 2 1   67%
object_streams/registry.py ObjectStreamRegistry.register.do_register   100% 7 0 0   100% 2 0   100%
object_streams/registry.py ObjectStreamRegistry.unregister   0% 6 6 0   100% 0 0   0%
object_streams/registry.py ObjectStreamRegistry.get   100% 6 0 0   100% 0 0   100%
object_streams/registry.py ObjectStreamRegistry.clear   0% 1 1 0   100% 0 0   0%
object_streams/registry.py ObjectStreamRegistry.__contains__   0% 1 1 0   100% 0 0   0%
object_streams/registry.py ObjectStreamRegistry.__iter__   100% 1 0 0   100% 0 0   100%
object_streams/registry.py (no function)   100% 39 0 0   100% 0 0   100%
object_streams/retention.py _positive_int_setting   100% 8 0 0   100% 4 0   100%
object_streams/retention.py get_retention_days   100% 1 0 0   100% 0 0   100%
object_streams/retention.py get_retention_max_rows   100% 1 0 0   100% 0 0   100%
object_streams/retention.py retention_cutoff   100% 4 0 0   100% 2 0   100%
object_streams/retention.py _manager   100% 4 0 0   100% 2 0   100%
object_streams/retention.py _age_prune_through   100% 1 0 0   100% 0 0   100%
object_streams/retention.py _row_limit_prune_through   71% 7 2 0   75% 4 1   73%
object_streams/retention.py prune_outbox   96% 28 1 0   89% 18 2   93%
object_streams/retention.py (no function)   100% 18 0 0   100% 0 0   100%
object_streams/sessions.py ActiveSubscription.subscription_id   50% 4 2 0   50% 2 1   50%
object_streams/sessions.py _BaseSubscriptionSession.__init__   100% 10 0 0   100% 0 0   100%
object_streams/sessions.py _BaseSubscriptionSession.subscriptions   100% 1 0 0   100% 0 0   100%
object_streams/sessions.py _BaseSubscriptionSession._coerce_subscription_request   67% 3 1 0   50% 2 1   60%
object_streams/sessions.py _BaseSubscriptionSession._next_subscription_id   67% 3 1 0   50% 2 1   60%
object_streams/sessions.py _BaseSubscriptionSession._subscription_queryset   100% 6 0 0   100% 4 0   100%
object_streams/sessions.py _BaseSubscriptionSession._current_member_pks   100% 1 0 0   100% 0 0   100%
object_streams/sessions.py _BaseSubscriptionSession._member_pks_exceed_limit   75% 4 1 0   50% 2 1   67%
object_streams/sessions.py _BaseSubscriptionSession._connection_rejection   100% 5 0 0   100% 4 0   100%
object_streams/sessions.py _BaseSubscriptionSession._is_current_member   100% 3 0 0   100% 2 0   100%
object_streams/sessions.py _BaseSubscriptionSession._list_action   100% 9 0 0   100% 8 0   100%
object_streams/sessions.py _BaseSubscriptionSession._replay_is_complete   100% 1 0 0   100% 0 0   100%
object_streams/sessions.py _BaseSubscriptionSession._has_collection_replay_events   100% 1 0 0   100% 0 0   100%
object_streams/sessions.py _BaseSubscriptionSession._object_replay_events   100% 10 0 0   100% 4 0   100%
object_streams/sessions.py _BaseSubscriptionSession._subscription_catch_up   93% 14 1 0   75% 8 2   86%
object_streams/sessions.py SubscriptionSession.handle_message   100% 11 0 0   100% 6 0   100%
object_streams/sessions.py SubscriptionSession.subscribe   100% 38 0 0   100% 10 0   100%
object_streams/sessions.py SubscriptionSession.unsubscribe   100% 6 0 0   100% 2 0   100%
object_streams/sessions.py SubscriptionSession.publish   100% 13 0 0   88% 8 1   95%
object_streams/sessions.py SubscriptionSession.evaluate   80% 15 3 0   70% 10 3   76%
object_streams/sessions.py SubscriptionSession._replay_requested_cursor   100% 10 0 0   88% 8 1   94%
object_streams/sessions.py SubscriptionSession._send_catch_up_messages   75% 4 1 0   75% 4 1   75%
object_streams/sessions.py SubscriptionSession._replay_object_subscription   100% 6 0 0   100% 4 0   100%
object_streams/sessions.py SubscriptionSession._send_subscribed   100% 1 0 0   100% 0 0   100%
object_streams/sessions.py SubscriptionSession._prepare_subscription   100% 3 0 0   100% 2 0   100%
object_streams/sessions.py SubscriptionSession._send_unsubscribed   100% 1 0 0   100% 0 0   100%
object_streams/sessions.py SubscriptionSession._send_event   100% 1 0 0   100% 0 0   100%
object_streams/sessions.py SubscriptionSession._send_resync   100% 1 0 0   100% 0 0   100%
object_streams/sessions.py SubscriptionSession._send_error   100% 1 0 0   100% 0 0   100%
object_streams/sessions.py AsyncSubscriptionSession.handle_message   100% 11 0 0   100% 6 0   100%
object_streams/sessions.py AsyncSubscriptionSession.subscribe   100% 38 0 0   100% 10 0   100%
object_streams/sessions.py AsyncSubscriptionSession.unsubscribe   100% 6 0 0   100% 2 0   100%
object_streams/sessions.py AsyncSubscriptionSession.publish   93% 15 1 0   80% 10 2   88%
object_streams/sessions.py AsyncSubscriptionSession.evaluate   80% 15 3 0   70% 10 3   76%
object_streams/sessions.py AsyncSubscriptionSession._replay_requested_cursor   100% 11 0 0   88% 8 1   95%
object_streams/sessions.py AsyncSubscriptionSession._prepare_subscription   100% 3 0 0   100% 2 0   100%
object_streams/sessions.py AsyncSubscriptionSession._send_catch_up_messages   75% 4 1 0   75% 4 1   75%
object_streams/sessions.py AsyncSubscriptionSession._replay_object_subscription   100% 6 0 0   100% 4 0   100%
object_streams/sessions.py (no function)   100% 77 0 0   100% 0 0   100%
object_streams/sources/__init__.py (no function)   100% 3 0 0   100% 0 0   100%
object_streams/sources/model.py Source.subjects_for_source   100% 0 0 0   100% 0 0   100%
object_streams/sources/model.py Source.changed_fields   100% 0 0 0   100% 0 0   100%
object_streams/sources/model.py ModelSource.matches   100% 1 0 0   100% 0 0   100%
object_streams/sources/model.py ModelSource.subjects_for_source   67% 3 1 0   50% 2 1   60%
object_streams/sources/model.py ModelSource.changed_fields   100% 1 0 0   100% 0 0   100%
object_streams/sources/model.py (no function)   100% 19 0 0   100% 0 0   100%
object_streams/subscriptions.py ResyncRequired.as_dict   100% 1 0 0   100% 0 0   100%
object_streams/subscriptions.py SubscriptionRequest.__post_init__   88% 16 2 0   88% 8 1   88%
object_streams/subscriptions.py SubscriptionRequest.from_message   43% 7 4 0   50% 4 2   45%
object_streams/subscriptions.py SubscriptionRequest.as_dict   86% 14 2 0   83% 12 2   85%
object_streams/subscriptions.py (no function)   100% 33 0 0   100% 0 0   100%
object_streams/transports/__init__.py (no function)   100% 2 0 0   100% 0 0   100%
object_streams/transports/base.py Transport.prepare_subscription   100% 0 0 0   100% 0 0   100%
object_streams/transports/base.py Transport.send_subscribed   100% 0 0 0   100% 0 0   100%
object_streams/transports/base.py Transport.send_unsubscribed   100% 0 0 0   100% 0 0   100%
object_streams/transports/base.py Transport.send_event   100% 0 0 0   100% 0 0   100%
object_streams/transports/base.py Transport.send_resync   100% 0 0 0   100% 0 0   100%
object_streams/transports/base.py Transport.send_error   100% 0 0 0   100% 0 0   100%
object_streams/transports/base.py (no function)   100% 14 0 0   100% 0 0   100%
object_streams/transports/channels.py _digest   100% 1 0 0   100% 0 0   100%
object_streams/transports/channels.py object_group_name   100% 1 0 0   100% 0 0   100%
object_streams/transports/channels.py model_group_name   100% 1 0 0   100% 0 0   100%
object_streams/transports/channels.py subscription_group_names   67% 6 2 0   75% 4 1   70%
object_streams/transports/channels.py outbox_event_group_names   100% 1 0 0   100% 0 0   100%
object_streams/transports/channels.py broadcast_outbox_event   78% 9 2 0   75% 4 1   77%
object_streams/transports/channels.py broadcast_outbox_event_sync   100% 1 0 0   100% 0 0   100%
object_streams/transports/channels.py _coerce_outbox_event   67% 3 1 0   50% 2 1   60%
object_streams/transports/channels.py _get_outbox_event   100% 1 0 0   100% 0 0   100%
object_streams/transports/channels.py ObjectStreamConsumer.__init__   89% 9 1 0   75% 4 1   85%
object_streams/transports/channels.py ObjectStreamConsumer.connect   100% 2 0 0   100% 0 0   100%
object_streams/transports/channels.py ObjectStreamConsumer.disconnect   100% 1 0 0   100% 0 0   100%
object_streams/transports/channels.py ObjectStreamConsumer.receive_json   50% 4 2 0   50% 2 1   50%
object_streams/transports/channels.py ObjectStreamConsumer.object_stream_event   53% 17 8 0   75% 4 1   57%
object_streams/transports/channels.py ObjectStreamConsumer.send_subscribed   100% 4 0 0   100% 0 0   100%
object_streams/transports/channels.py ObjectStreamConsumer.prepare_subscription   100% 1 0 0   100% 0 0   100%
object_streams/transports/channels.py ObjectStreamConsumer.send_unsubscribed   100% 2 0 0   100% 0 0   100%
object_streams/transports/channels.py ObjectStreamConsumer.send_event   100% 1 0 0   100% 0 0   100%
object_streams/transports/channels.py ObjectStreamConsumer.send_resync   100% 1 0 0   100% 0 0   100%
object_streams/transports/channels.py ObjectStreamConsumer.send_error   75% 4 1 0   50% 2 1   67%
object_streams/transports/channels.py ObjectStreamConsumer._add_subscription_groups   86% 7 1 0   75% 4 1   82%
object_streams/transports/channels.py ObjectStreamConsumer._discard_subscription_groups   100% 3 0 0   100% 2 0   100%
object_streams/transports/channels.py ObjectStreamConsumer._discard_all_groups   100% 4 0 0   100% 2 0   100%
object_streams/transports/channels.py ObjectStreamConsumer._add_group   100% 4 0 0   100% 2 0   100%
object_streams/transports/channels.py ObjectStreamConsumer._discard_group   100% 7 0 0   100% 4 0   100%
object_streams/transports/channels.py ObjectStreamConsumer._remember_outbox_id   100% 8 0 0   100% 4 0   100%
object_streams/transports/channels.py (no function)   100% 53 0 0   100% 0 0   100%
object_streams/triggers.py _quote   100% 2 0 0   100% 0 0   100%
object_streams/triggers.py ObjectStreamTrigger.__init__   100% 7 0 0   100% 0 0   100%
object_streams/triggers.py ObjectStreamTrigger._sql   100% 1 0 0   100% 0 0   100%
object_streams/triggers.py ObjectStreamTrigger.get_func_template_kwargs   100% 7 0 0   100% 2 0   100%
object_streams/triggers.py (no function)   100% 13 0 0   100% 0 0   100%
object_streams/visibility.py VisibilityPolicy.get_queryset   100% 0 0 0   100% 0 0   100%
object_streams/visibility.py AllowAllVisibilityPolicy.get_queryset   100% 1 0 0   100% 0 0   100%
object_streams/visibility.py DenyAllVisibilityPolicy.get_queryset   0% 1 1 0   100% 0 0   0%
object_streams/visibility.py (no function)   100% 11 0 0   100% 0 0   100%
Total     93% 1467 104 2   80% 424 80   90%

No items found using the specified filter.