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

1# Copyright © Michal Čihař <michal@weblate.org> 

2# 

3# SPDX-License-Identifier: GPL-3.0-or-later 

4 

5from __future__ import annotations 

6 

7from typing import TYPE_CHECKING, ClassVar 

8 

9from django.utils.translation import gettext_lazy 

10 

11from weblate.addons.base import BaseAddon 

12from weblate.addons.events import AddonEvent 

13from weblate.addons.forms import DiscoveryForm 

14from weblate.trans.discovery import ComponentDiscovery 

15 

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 

20 

21 

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 

38 

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 ) 

50 

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) 

57 

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 )