Coverage for app/venv/lib/python3.14/site-packages/weblate/trans/views/labels.py: 35%
52 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.db.models import Count
11from django.shortcuts import get_object_or_404, redirect
12from django.views.decorators.cache import never_cache
13from django.views.decorators.http import require_POST
15from weblate.trans.forms import LabelForm
16from weblate.trans.models import Label, Project
17from weblate.trans.util import render
18from weblate.utils.views import parse_path
20if TYPE_CHECKING: 20 ↛ 21line 20 didn't jump to line 21 because the condition on line 20 was never true
21 from weblate.auth.models import AuthenticatedHttpRequest
24@login_required
25@never_cache
26def project_labels(request: AuthenticatedHttpRequest, project):
27 obj = parse_path(request, [project], (Project,))
29 if not request.user.has_perm("project.edit", obj):
30 raise PermissionDenied
32 if request.method == "POST":
33 form = LabelForm(project=obj, data=request.POST)
34 if form.is_valid():
35 form.instance.project = obj
36 form.save()
37 return redirect("labels", project=project)
38 else:
39 form = LabelForm(project=obj)
41 return render(
42 request,
43 "project-labels.html",
44 {
45 "object": obj,
46 "project": obj,
47 "form": form,
48 "labels": obj.label_set.annotate(string_count=Count("unit__id")),
49 },
50 )
53@login_required
54@never_cache
55def label_edit(request: AuthenticatedHttpRequest, project, pk):
56 obj = parse_path(request, [project], (Project,))
58 if not request.user.has_perm("project.edit", obj):
59 raise PermissionDenied
61 label = get_object_or_404(Label, pk=pk, project=obj)
63 if request.method == "POST":
64 form = LabelForm(project=label.project, data=request.POST, instance=label)
65 if form.is_valid():
66 form.save()
67 return redirect("labels", project=project)
68 else:
69 form = LabelForm(project=label.project, instance=label)
71 return render(
72 request,
73 "project-label-edit.html",
74 {"object": obj, "project": obj, "form": form},
75 )
78@login_required
79@never_cache
80@require_POST
81def label_delete(request: AuthenticatedHttpRequest, project, pk):
82 obj = parse_path(request, [project], (Project,))
84 if not request.user.has_perm("project.edit", obj):
85 raise PermissionDenied
87 label = get_object_or_404(Label, pk=pk, project=obj)
89 label.delete()
91 return redirect("labels", project=project)