Coverage for app/venv/lib/python3.14/site-packages/weblate/addons/consistency.py: 77%

28 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 

4from __future__ import annotations 

5 

6import warnings 

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.tasks import language_consistency 

14from weblate.lang.models import Language 

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.models import Addon 

18 from weblate.trans.models import Component, Translation 

19 

20 

21class LanguageConsistencyAddon(BaseAddon): 

22 events: ClassVar[set[AddonEvent]] = { 

23 AddonEvent.EVENT_DAILY, 

24 AddonEvent.EVENT_POST_ADD, 

25 } 

26 name = "weblate.consistency.languages" 

27 verbose = gettext_lazy("Add missing languages") 

28 description = gettext_lazy( 

29 "Ensures a consistent set of languages is used for all components " 

30 "within a project." 

31 ) 

32 icon = "language.svg" 

33 project_scope = True 

34 user_name = "languages" 

35 user_verbose = "Languages add-on" 

36 

37 def daily(self, component: Component, activity_log_id: int | None = None) -> None: 

38 # The languages list is built here because we want to exclude shared 

39 # component's languages that are included in Project.languages 

40 language_consistency.delay_on_commit( 

41 self.instance.id, 

42 list( 

43 Language.objects.filter( 

44 translation__component__project=component.project 

45 ).values_list("id", flat=True) 

46 ), 

47 component.project_id, 

48 activity_log_id=activity_log_id, 

49 ) 

50 

51 def post_add( 

52 self, translation: Translation, activity_log_id: int | None = None, **kwargs 

53 ) -> None: 

54 language_consistency.delay_on_commit( 

55 self.instance.id, 

56 [translation.language_id], 

57 translation.component.project_id, 

58 activity_log_id=activity_log_id, 

59 ) 

60 

61 

62class LangaugeConsistencyAddon(LanguageConsistencyAddon): 

63 def __init__(self, storage: Addon) -> None: 

64 super().__init__(storage) 

65 # TODO: Remove in Weblate 5.14 

66 warnings.warn( 

67 "LangaugeConsistencyAddon is deprecated, use LanguageConsistencyAddon", 

68 DeprecationWarning, 

69 stacklevel=1, 

70 )