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
« 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
6from typing import TYPE_CHECKING
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
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
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
22@require_POST
23@login_required
24def lock(request: AuthenticatedHttpRequest, path):
25 obj = parse_path(request, path, (Project, Component))
27 if not request.user.has_perm("component.lock", obj):
28 raise PermissionDenied
30 obj.do_lock(request.user)
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 )
41 return redirect_param(obj, "#repository")
44@require_POST
45@login_required
46def unlock(request: AuthenticatedHttpRequest, path):
47 obj = parse_path(request, path, (Project, Component))
49 if not request.user.has_perm("component.lock", obj):
50 raise PermissionDenied
52 obj.do_lock(request.user, False)
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 )
63 return redirect_param(obj, "#repository")