Coverage for app/venv/lib/python3.14/site-packages/weblate/utils/checks.py: 59%
21 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
9from django.core.checks import (
10 Critical,
11)
13from weblate.utils.docs import get_doc_url
15if TYPE_CHECKING: 15 ↛ 16line 15 didn't jump to line 16 because the condition on line 15 was never true
16 from django.core.checks import (
17 CheckMessage,
18 Debug,
19 Error,
20 Info,
21 Warning, # noqa: A004
22 )
24DOC_LINKS: dict[str, str | tuple[str] | tuple[str, str]] = {
25 "security.W001": ("admin/upgdade", "up-3-1"),
26 "security.W002": ("admin/upgdade", "up-3-1"),
27 "security.W003": ("admin/upgdade", "up-3-1"),
28 "security.W004": ("admin/install", "production-ssl"),
29 "security.W005": ("admin/install", "production-ssl"),
30 "security.W006": ("admin/upgdade", "up-3-1"),
31 "security.W007": ("admin/upgdade", "up-3-1"),
32 "security.W008": ("admin/install", "production-ssl"),
33 "security.W009": ("admin/install", "production-secret"),
34 "security.W010": ("admin/install", "production-ssl"),
35 "security.W011": ("admin/install", "production-ssl"),
36 "security.W012": ("admin/install", "production-ssl"),
37 "security.W018": ("admin/install", "production-debug"),
38 "security.W019": ("admin/upgdade", "up-3-1"),
39 "security.W020": ("admin/install", "production-hosts"),
40 "security.W021": ("admin/install", "production-ssl"),
41 "weblate.E002": ("admin/install", "file-permissions"),
42 "weblate.E003": ("admin/install", "out-mail"),
43 "weblate.E005": ("admin/install", "celery"),
44 "weblate.E006": ("admin/install", "production-database"),
45 "weblate.E007": ("admin/install", "production-cache"),
46 "weblate.E008": ("admin/install", "production-cache-avatar"),
47 "weblate.E009": ("admin/install", "celery"),
48 "weblate.E011": ("admin/install", "production-admins"),
49 "weblate.E012": ("admin/install", "production-email"),
50 "weblate.E013": ("admin/install", "production-email"),
51 "weblate.E014": ("admin/install", "production-secret"),
52 "weblate.E015": ("admin/install", "production-hosts"),
53 "weblate.E017": ("admin/install", "production-site"),
54 "weblate.E018": ("admin/optionals", "avatars"),
55 "weblate.E019": ("admin/install", "celery"),
56 "weblate.E020": ("admin/install", "celery"),
57 "weblate.I021": ("admin/install", "collecting-errors"),
58 "weblate.E022": ("admin/optionals", "git-exporter"),
59 "weblate.C023": ("admin/install", "production-encoding"),
60 "weblate.C024": ("admin/install", "pangocairo"),
61 "weblate.W025": ("admin/install", "optional-deps"),
62 "weblate.E026": ("admin/install", "celery"),
63 "weblate.E027": ("admin/install", "file-permissions"),
64 "weblate.E028": ("admin/config",),
65 "weblate.I028": ("admin/backup",),
66 "weblate.C029": ("admin/backup",),
67 "weblate.C030": ("admin/install", "celery"),
68 "weblate.I031": ("admin/upgrade",),
69 "weblate.C031": ("admin/upgrade",),
70 "weblate.C032": ("admin/install",),
71 "weblate.W033": ("vcs",),
72 "weblate.E034": ("admin/install", "celery"),
73 "weblate.C035": ("vcs",),
74 "weblate.C036": ("admin/optionals", "gpg-sign"),
75 "weblate.C037": ("admin/install", "production-database"),
76 "weblate.C038": ("admin/install", "production-database"),
77 "weblate.W039": ("admin/machine",),
78 "weblate.C040": ("vcs",),
79 "weblate.C041": "https://weblate.org/user/",
80 "weblate.C042": ("admin/config", "std-setting-REGISTRATION_ALLOW_BACKENDS"),
81}
84def check_doc_link(docid: str, strict: bool = False) -> str | None:
85 while docid.count(".") > 1: 85 ↛ 86line 85 didn't jump to line 86 because the condition on line 85 was never true
86 docid = docid.rsplit(".", 1)[0]
87 try:
88 doc_link = DOC_LINKS[docid]
89 except KeyError:
90 if strict:
91 raise
92 return None
93 if isinstance(doc_link, str): 93 ↛ 94line 93 didn't jump to line 94 because the condition on line 93 was never true
94 return doc_link
95 return get_doc_url(*doc_link)
98def weblate_check(
99 check_id: str,
100 message: str,
101 cls: type[Critical | Debug | Error | Info | Warning] = Critical,
102) -> CheckMessage:
103 """Return Django check instance."""
104 return cls(message, hint=check_doc_link(check_id), id=check_id)