Coverage for app/venv/lib/python3.14/site-packages/weblate/addons/discovery.py: 52%
36 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 07:15 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 07:15 +0000
1# Copyright © Michal Čihař <michal@weblate.org>
2#
3# SPDX-License-Identifier: GPL-3.0-or-later
5from __future__ import annotations
7from typing import TYPE_CHECKING, ClassVar
9from django.utils.translation import gettext_lazy
11from weblate.addons.base import BaseAddon
12from weblate.addons.events import AddonEvent
13from weblate.addons.forms import DiscoveryForm
14from weblate.trans.discovery import ComponentDiscovery
16if TYPE_CHECKING: 16 ↛ 17line 16 didn't jump to line 17 because the condition on line 16 was never true
17 from weblate.addons.forms import BaseAddonForm
18 from weblate.auth.models import User
19 from weblate.trans.models import Component
22class DiscoveryAddon(BaseAddon):
23 events: ClassVar[set[AddonEvent]] = {
24 AddonEvent.EVENT_POST_UPDATE,
25 }
26 name = "weblate.discovery.discovery"
27 verbose = gettext_lazy("Component discovery")
28 description = gettext_lazy(
29 "Automatically adds or removes project components based on file changes "
30 "in the version control system."
31 )
32 settings_form = DiscoveryForm
33 multiple = True
34 icon = "magnify.svg"
35 repo_scope = True
36 needs_component = True
37 trigger_update = True
39 def post_update(
40 self,
41 component: Component,
42 previous_head: str,
43 skip_push: bool,
44 activity_log_id: int | None = None,
45 ) -> None:
46 discovery = self.get_discovery(component)
47 discovery.perform(
48 remove=self.instance.configuration.get("remove"), background=True
49 )
51 def get_settings_form(self, user: User | None, **kwargs) -> BaseAddonForm | None:
52 """Return configuration form for this addon."""
53 if "data" not in kwargs:
54 kwargs["data"] = self.instance.configuration
55 kwargs["data"]["confirm"] = False
56 return super().get_settings_form(user, **kwargs)
58 def get_discovery(self, component: Component) -> ComponentDiscovery:
59 # Handle old settings which did not have this set
60 if "new_base_template" not in self.instance.configuration:
61 self.instance.configuration["new_base_template"] = ""
62 if "intermediate_template" not in self.instance.configuration:
63 self.instance.configuration["intermediate_template"] = ""
64 return ComponentDiscovery(
65 component,
66 **ComponentDiscovery.extract_kwargs(self.instance.configuration),
67 )