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

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.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 

14 

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 

19 

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 

22 

23 

24@login_required 

25@never_cache 

26def project_labels(request: AuthenticatedHttpRequest, project): 

27 obj = parse_path(request, [project], (Project,)) 

28 

29 if not request.user.has_perm("project.edit", obj): 

30 raise PermissionDenied 

31 

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) 

40 

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 ) 

51 

52 

53@login_required 

54@never_cache 

55def label_edit(request: AuthenticatedHttpRequest, project, pk): 

56 obj = parse_path(request, [project], (Project,)) 

57 

58 if not request.user.has_perm("project.edit", obj): 

59 raise PermissionDenied 

60 

61 label = get_object_or_404(Label, pk=pk, project=obj) 

62 

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) 

70 

71 return render( 

72 request, 

73 "project-label-edit.html", 

74 {"object": obj, "project": obj, "form": form}, 

75 ) 

76 

77 

78@login_required 

79@never_cache 

80@require_POST 

81def label_delete(request: AuthenticatedHttpRequest, project, pk): 

82 obj = parse_path(request, [project], (Project,)) 

83 

84 if not request.user.has_perm("project.edit", obj): 

85 raise PermissionDenied 

86 

87 label = get_object_or_404(Label, pk=pk, project=obj) 

88 

89 label.delete() 

90 

91 return redirect("labels", project=project)