Coverage report: 76%

Files Functions Classes

coverage.py v7.13.4, created at 2026-03-03 23:58 +0000

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
src / updates2mqtt / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / updates2mqtt / __main__.py (no function)   0% 3 3 0   0% 2 0   0%
src / updates2mqtt / app.py App.__init__   77% 22 5 0   50% 4 2   73%
src / updates2mqtt / app.py App.scan   81% 16 3 0   75% 8 2   79%
src / updates2mqtt / app.py App.main_loop   74% 19 5 0   50% 10 3   66%
src / updates2mqtt / app.py App.on_discovery   47% 19 10 0   40% 10 4   45%
src / updates2mqtt / app.py App.interrupt_tasks   88% 8 1 0   100% 4 0   92%
src / updates2mqtt / app.py App.shutdown   86% 14 2 0   83% 6 1   85%
src / updates2mqtt / app.py App.healthcheck   40% 5 3 0   50% 2 1   43%
src / updates2mqtt / app.py repeated_call   0% 8 8 0   100% 0 0   0%
src / updates2mqtt / app.py run   100% 10 0 0   100% 0 0   100%
src / updates2mqtt / app.py (no function)   97% 31 1 0   50% 2 1   94%
src / updates2mqtt / cli.py dump_url   0% 32 32 0   0% 18 0   0%
src / updates2mqtt / cli.py docker_provider   0% 3 3 0   100% 0 0   0%
src / updates2mqtt / cli.py dump   0% 11 11 0   0% 6 0   0%
src / updates2mqtt / cli.py main   0% 17 17 0   0% 12 0   0%
src / updates2mqtt / cli.py (no function)   0% 30 30 2   0% 2 0   0%
src / updates2mqtt / config.py is_autogen_config   100% 2 0 0   100% 0 0   100%
src / updates2mqtt / config.py load_app_config   58% 31 13 0   67% 12 2   60%
src / updates2mqtt / config.py (no function)   100% 135 0 0   100% 0 0   100%
src / updates2mqtt / hass_formatter.py hass_format_config   88% 16 2 0   79% 14 3   83%
src / updates2mqtt / hass_formatter.py hass_format_state   33% 9 6 0   12% 8 1   24%
src / updates2mqtt / hass_formatter.py (no function)   100% 8 0 0   100% 0 0   100%
src / updates2mqtt / helpers.py timestamp   100% 6 0 0   100% 2 0   100%
src / updates2mqtt / helpers.py Selection.__init__   100% 15 0 0   100% 10 0   100%
src / updates2mqtt / helpers.py Selection.__bool__   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / helpers.py ThrottledError.__init__   0% 2 2 0   100% 0 0   0%
src / updates2mqtt / helpers.py Throttler.__init__   100% 4 0 0   100% 0 0   100%
src / updates2mqtt / helpers.py Throttler.check_throttle   90% 10 1 0   83% 6 1   88%
src / updates2mqtt / helpers.py Throttler.throttle   83% 6 1 0   50% 2 1   75%
src / updates2mqtt / helpers.py CacheMetadata.__init__   100% 7 0 0   100% 2 0   100%
src / updates2mqtt / helpers.py CacheMetadata.__str__   0% 1 1 0   100% 0 0   0%
src / updates2mqtt / helpers.py APIStats.__init__   100% 6 0 0   100% 0 0   100%
src / updates2mqtt / helpers.py APIStats.tick   100% 16 0 0   88% 8 1   96%
src / updates2mqtt / helpers.py APIStats.hit_ratio   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / helpers.py APIStats.average_elapsed   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / helpers.py APIStats.__str__   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / helpers.py APIStatsCounter.__init__   100% 4 0 0   100% 0 0   100%
src / updates2mqtt / helpers.py APIStatsCounter.stats   67% 9 3 0   50% 2 1   64%
src / updates2mqtt / helpers.py fetch_url   81% 26 5 0   71% 14 2   78%
src / updates2mqtt / helpers.py validate_url   100% 2 0 0   100% 0 0   100%
src / updates2mqtt / helpers.py sanitize_name   80% 15 3 0   60% 10 4   72%
src / updates2mqtt / helpers.py (no function)   100% 39 0 0   100% 0 0   100%
src / updates2mqtt / integrations / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / updates2mqtt / integrations / docker.py safe_json_dt   0% 1 1 0   100% 0 0   0%
src / updates2mqtt / integrations / docker.py ContainerCustomization.__init__   97% 32 1 0   95% 20 1   96%
src / updates2mqtt / integrations / docker.py DockerProvider.__init__   100% 10 0 0   100% 0 0   100%
src / updates2mqtt / integrations / docker.py DockerProvider.initialize   0% 3 3 0   0% 2 0   0%
src / updates2mqtt / integrations / docker.py DockerProvider.update   0% 7 7 0   100% 0 0   0%
src / updates2mqtt / integrations / docker.py DockerProvider.fetch   95% 22 1 0   90% 10 1   94%
src / updates2mqtt / integrations / docker.py DockerProvider.full_repo_path   60% 5 2 0   50% 4 2   56%
src / updates2mqtt / integrations / docker.py DockerProvider.build   71% 7 2 0   50% 2 1   67%
src / updates2mqtt / integrations / docker.py DockerProvider.execute_compose   68% 19 6 0   60% 10 4   66%
src / updates2mqtt / integrations / docker.py DockerProvider.restart   0% 9 9 0   0% 4 0   0%
src / updates2mqtt / integrations / docker.py DockerProvider.rescan   93% 14 1 0   50% 4 2   83%
src / updates2mqtt / integrations / docker.py DockerProvider.analyze   71% 92 27 0   65% 46 14   69%
src / updates2mqtt / integrations / docker.py DockerProvider.scan   87% 23 3 0   62% 8 3   81%
src / updates2mqtt / integrations / docker.py DockerProvider.command   100% 27 0 0   90% 10 1   97%
src / updates2mqtt / integrations / docker.py DockerProvider.resolve   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / integrations / docker.py DockerProvider.default_metadata   80% 5 1 0   75% 4 1   78%
src / updates2mqtt / integrations / docker.py select_versions   80% 74 15 0   79% 48 8   80%
src / updates2mqtt / integrations / docker.py select_versions.basis   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / integrations / docker.py select_versions.condense_repo_id   100% 2 0 0   100% 0 0   100%
src / updates2mqtt / integrations / docker.py (no function)   100% 44 0 2   100% 0 0   100%
src / updates2mqtt / integrations / docker_enrich.py DockerImageInfo.__init__   96% 53 2 0   90% 20 2   95%
src / updates2mqtt / integrations / docker_enrich.py DockerImageInfo.repo_digests   100% 4 0 0   100% 2 0   100%
src / updates2mqtt / integrations / docker_enrich.py DockerImageInfo.pinned   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / integrations / docker_enrich.py DockerImageInfo.os   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / integrations / docker_enrich.py DockerImageInfo.arch   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / integrations / docker_enrich.py DockerImageInfo.variant   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / integrations / docker_enrich.py DockerImageInfo.condense_digest   67% 9 3 0   100% 2 0   73%
src / updates2mqtt / integrations / docker_enrich.py DockerImageInfo.reuse   100% 3 0 0   100% 0 0   100%
src / updates2mqtt / integrations / docker_enrich.py DockerImageInfo.as_dict   0% 5 5 0   0% 2 0   0%
src / updates2mqtt / integrations / docker_enrich.py id_source_platform   100% 2 0 0   100% 0 0   100%
src / updates2mqtt / integrations / docker_enrich.py _select_annotation   90% 10 1 0   75% 8 2   83%
src / updates2mqtt / integrations / docker_enrich.py cherrypick_annotations   100% 7 0 0   100% 4 0   100%
src / updates2mqtt / integrations / docker_enrich.py DockerServiceDetails.__init__   100% 6 0 0   100% 0 0   100%
src / updates2mqtt / integrations / docker_enrich.py DockerServiceDetails.as_dict   0% 6 6 0   0% 4 0   0%
src / updates2mqtt / integrations / docker_enrich.py LocalContainerInfo.build_image_info   100% 11 0 0   50% 2 1   92%
src / updates2mqtt / integrations / docker_enrich.py PackageEnricher.__init__   100% 3 0 0   100% 0 0   100%
src / updates2mqtt / integrations / docker_enrich.py PackageEnricher.initialize   0% 1 1 0   100% 0 0   0%
src / updates2mqtt / integrations / docker_enrich.py PackageEnricher.enrich   100% 7 0 0   83% 6 1   92%
src / updates2mqtt / integrations / docker_enrich.py PackageEnricher.enrich.match   100% 6 0 0   83% 6 1   92%
src / updates2mqtt / integrations / docker_enrich.py DefaultPackageEnricher.enrich   100% 2 0 0   100% 0 0   100%
src / updates2mqtt / integrations / docker_enrich.py CommonPackageEnricher.initialize   64% 14 5 0   50% 2 1   62%
src / updates2mqtt / integrations / docker_enrich.py LinuxServerIOPackageEnricher.initialize   100% 16 0 0   88% 8 1   96%
src / updates2mqtt / integrations / docker_enrich.py SourceReleaseEnricher.__init__   100% 2 0 0   100% 0 0   100%
src / updates2mqtt / integrations / docker_enrich.py SourceReleaseEnricher.enrich   75% 67 17 0   64% 42 9   71%
src / updates2mqtt / integrations / docker_enrich.py httpx_json_content   64% 11 4 0   100% 4 0   73%
src / updates2mqtt / integrations / docker_enrich.py VersionLookup.__init__   0% 1 1 0   100% 0 0   0%
src / updates2mqtt / integrations / docker_enrich.py VersionLookup.lookup   0% 1 1 0   100% 0 0   0%
src / updates2mqtt / integrations / docker_enrich.py ContainerDistributionAPIVersionLookup.__init__   100% 4 0 0   100% 0 0   100%
src / updates2mqtt / integrations / docker_enrich.py ContainerDistributionAPIVersionLookup.fetch_token   32% 41 28 0   20% 20 4   28%
src / updates2mqtt / integrations / docker_enrich.py ContainerDistributionAPIVersionLookup.fetch_index   76% 17 4 0   62% 8 3   72%
src / updates2mqtt / integrations / docker_enrich.py ContainerDistributionAPIVersionLookup.fetch_object   81% 16 3 0   60% 10 4   73%
src / updates2mqtt / integrations / docker_enrich.py ContainerDistributionAPIVersionLookup.lookup   77% 81 19 0   79% 38 8   77%
src / updates2mqtt / integrations / docker_enrich.py DockerClientVersionLookup.__init__   100% 5 0 0   100% 0 0   100%
src / updates2mqtt / integrations / docker_enrich.py DockerClientVersionLookup.lookup   80% 41 8 0   58% 12 3   75%
src / updates2mqtt / integrations / docker_enrich.py (no function)   100% 83 0 3   100% 0 0   100%
src / updates2mqtt / integrations / git_utils.py git_trust   50% 6 3 0   100% 0 0   50%
src / updates2mqtt / integrations / git_utils.py git_iso_timestamp   44% 9 5 0   100% 0 0   44%
src / updates2mqtt / integrations / git_utils.py git_local_digest   82% 11 2 0   50% 2 1   77%
src / updates2mqtt / integrations / git_utils.py git_check_update_available   93% 14 1 0   75% 4 1   89%
src / updates2mqtt / integrations / git_utils.py git_pull   100% 7 0 0   100% 2 0   100%
src / updates2mqtt / integrations / git_utils.py (no function)   100% 12 0 0   100% 0 0   100%
src / updates2mqtt / model.py DiscoveryDetail.__init__   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / model.py DiscoveryDetail.as_dict   0% 1 1 0   100% 0 0   0%
src / updates2mqtt / model.py DiscoveryDetail.__str__   0% 1 1 0   100% 0 0   0%
src / updates2mqtt / model.py DiscoveryArtefactDetail.__init__   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / model.py DiscoveryInstallationDetail.__init__   0% 1 1 0   100% 0 0   0%
src / updates2mqtt / model.py ReleaseDetail.__init__   100% 11 0 0   100% 0 0   100%
src / updates2mqtt / model.py ReleaseDetail.as_dict   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / model.py Discovery.__init__   100% 40 0 0   100% 6 0   100%
src / updates2mqtt / model.py Discovery.__repr__   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / model.py Discovery.__str__   100% 3 0 0   100% 0 0   100%
src / updates2mqtt / model.py Discovery.__str__.stringify   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / model.py Discovery.can_update   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / model.py Discovery.features   100% 7 0 0   100% 4 0   100%
src / updates2mqtt / model.py Discovery.title   100% 3 0 0   100% 2 0   100%
src / updates2mqtt / model.py Discovery.as_dict   100% 6 0 0   100% 4 0   100%
src / updates2mqtt / model.py ReleaseProvider.__init__   100% 5 0 0   100% 0 0   100%
src / updates2mqtt / model.py ReleaseProvider.initialize   0% 1 1 0   100% 0 0   0%
src / updates2mqtt / model.py ReleaseProvider.stop   100% 2 0 0   100% 0 0   100%
src / updates2mqtt / model.py ReleaseProvider.__str__   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / model.py ReleaseProvider.update   100% 0 0 0   100% 0 0   100%
src / updates2mqtt / model.py ReleaseProvider.rescan   100% 0 0 0   100% 0 0   100%
src / updates2mqtt / model.py ReleaseProvider.scan   0% 1 1 0   100% 0 0   0%
src / updates2mqtt / model.py ReleaseProvider.command   100% 0 0 0   100% 0 0   100%
src / updates2mqtt / model.py ReleaseProvider.resolve   100% 0 0 0   100% 0 0   100%
src / updates2mqtt / model.py (no function)   100% 49 0 0   100% 0 0   100%
src / updates2mqtt / mqtt.py MqttPublisher.__init__   100% 9 0 0   100% 0 0   100%
src / updates2mqtt / mqtt.py MqttPublisher.start   100% 26 0 0   100% 6 0   100%
src / updates2mqtt / mqtt.py MqttPublisher.stop   100% 4 0 0   50% 2 1   83%
src / updates2mqtt / mqtt.py MqttPublisher.is_available   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / mqtt.py MqttPublisher.on_connect   77% 13 3 0   75% 8 2   76%
src / updates2mqtt / mqtt.py MqttPublisher.on_disconnect   67% 3 1 0   50% 2 1   60%
src / updates2mqtt / mqtt.py MqttPublisher.clean_topics   90% 20 2 0   100% 4 0   92%
src / updates2mqtt / mqtt.py MqttPublisher.clean_topics.cleanup   63% 27 10 0   57% 14 4   61%
src / updates2mqtt / mqtt.py MqttPublisher.safe_json_decode   100% 11 0 0   100% 2 0   100%
src / updates2mqtt / mqtt.py MqttPublisher.execute_command   86% 35 5 0   80% 20 4   84%
src / updates2mqtt / mqtt.py MqttPublisher.local_message   100% 2 0 0   100% 0 0   100%
src / updates2mqtt / mqtt.py MqttPublisher.on_subscribe   0% 1 1 0   100% 0 0   0%
src / updates2mqtt / mqtt.py MqttPublisher.on_unsubscribe   0% 1 1 0   100% 0 0   0%
src / updates2mqtt / mqtt.py MqttPublisher.on_message   100% 3 0 0   100% 2 0   100%
src / updates2mqtt / mqtt.py MqttPublisher.handle_message   83% 6 1 0   50% 2 1   75%
src / updates2mqtt / mqtt.py MqttPublisher.handle_message.update_start   0% 5 5 0   0% 4 0   0%
src / updates2mqtt / mqtt.py MqttPublisher.handle_message.update_end   0% 5 5 0   0% 4 0   0%
src / updates2mqtt / mqtt.py MqttPublisher.config_topic   100% 2 0 0   100% 0 0   100%
src / updates2mqtt / mqtt.py MqttPublisher.reverse_config_topic   100% 7 0 0   75% 4 1   91%
src / updates2mqtt / mqtt.py MqttPublisher.state_topic   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / mqtt.py MqttPublisher.reverse_state_topic   0% 7 7 0   0% 4 0   0%
src / updates2mqtt / mqtt.py MqttPublisher.general_topic   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / mqtt.py MqttPublisher.reverse_general_topic   0% 7 7 0   0% 4 0   0%
src / updates2mqtt / mqtt.py MqttPublisher.command_topic   100% 1 0 0   100% 0 0   100%
src / updates2mqtt / mqtt.py MqttPublisher.publish_discovery   83% 6 1 0   50% 2 1   75%
src / updates2mqtt / mqtt.py MqttPublisher.publish_hass_state   75% 4 1 0   50% 2 1   67%
src / updates2mqtt / mqtt.py MqttPublisher.publish_hass_config   80% 5 1 0   50% 2 1   71%
src / updates2mqtt / mqtt.py MqttPublisher.subscribe_hass_command   100% 8 0 0   100% 2 0   100%
src / updates2mqtt / mqtt.py MqttPublisher.loop_once   100% 2 0 0   100% 2 0   100%
src / updates2mqtt / mqtt.py MqttPublisher.publish   83% 6 1 0   75% 4 1   80%
src / updates2mqtt / mqtt.py (no function)   100% 52 0 0   100% 0 0   100%
Total     79% 2038 426 7   65% 668 128   76%

No items found using the specified filter.