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

23 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.shortcuts import render 

10from django.views.decorators.cache import never_cache 

11 

12from weblate.trans.forms import ContributorAgreementForm 

13from weblate.trans.models import Component, ContributorAgreement 

14from weblate.trans.util import redirect_next 

15from weblate.utils.views import parse_path 

16 

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

18 from weblate.auth.models import AuthenticatedHttpRequest 

19 

20 

21@never_cache 

22@login_required 

23def agreement_confirm(request: AuthenticatedHttpRequest, path): 

24 component = parse_path(request, path, (Component,)) 

25 

26 has_agreed = ContributorAgreement.objects.has_agreed(request.user, component) 

27 

28 if request.method == "POST": 

29 form = ContributorAgreementForm(request.POST) 

30 if form.is_valid() and not has_agreed: 

31 ContributorAgreement.objects.create(user=request.user, component=component) 

32 return redirect_next(request.GET.get("next"), component.get_absolute_url()) 

33 else: 

34 form = ContributorAgreementForm( 

35 initial={"next": request.GET.get("next"), "confirm": has_agreed} 

36 ) 

37 

38 return render( 

39 request, 

40 "contributor-agreement.html", 

41 {"form": form, "object": component, "has_agreed": has_agreed}, 

42 )