Coverage for app/venv/lib/python3.14/site-packages/weblate/trans/views/lock.py: 41%

34 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 

6from typing import TYPE_CHECKING 

7 

8from django.contrib.auth.decorators import login_required 

9from django.core.exceptions import PermissionDenied 

10from django.utils.translation import gettext 

11from django.views.decorators.http import require_POST 

12 

13from weblate.trans.models import Component, Project 

14from weblate.trans.util import redirect_param 

15from weblate.utils import messages 

16from weblate.utils.views import parse_path 

17 

18if TYPE_CHECKING: 18 ↛ 19line 18 didn't jump to line 19 because the condition on line 18 was never true

19 from weblate.auth.models import AuthenticatedHttpRequest 

20 

21 

22@require_POST 

23@login_required 

24def lock(request: AuthenticatedHttpRequest, path): 

25 obj = parse_path(request, path, (Project, Component)) 

26 

27 if not request.user.has_perm("component.lock", obj): 

28 raise PermissionDenied 

29 

30 obj.do_lock(request.user) 

31 

32 if isinstance(obj, Component): 

33 messages.success( 

34 request, gettext("Component is now locked for translation updates!") 

35 ) 

36 else: 

37 messages.success( 

38 request, gettext("All components are now locked for translation updates!") 

39 ) 

40 

41 return redirect_param(obj, "#repository") 

42 

43 

44@require_POST 

45@login_required 

46def unlock(request: AuthenticatedHttpRequest, path): 

47 obj = parse_path(request, path, (Project, Component)) 

48 

49 if not request.user.has_perm("component.lock", obj): 

50 raise PermissionDenied 

51 

52 obj.do_lock(request.user, False) 

53 

54 if isinstance(obj, Component): 

55 messages.success( 

56 request, gettext("Component is now open for translation updates.") 

57 ) 

58 else: 

59 messages.success( 

60 request, gettext("All components are now open for translation updates.") 

61 ) 

62 

63 return redirect_param(obj, "#repository")