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
« 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
6import warnings
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.tasks import language_consistency
14from weblate.lang.models import Language
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
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"
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 )
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 )
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 )