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

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 

8 

9from django.core.checks import ( 

10 Critical, 

11) 

12 

13from weblate.utils.docs import get_doc_url 

14 

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 ) 

23 

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} 

82 

83 

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) 

96 

97 

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)