Coverage for product_risk_suite / product / views.py: 56%

32 statements  

« prev     ^ index     » next       coverage.py v7.14.0, created at 2026-05-13 23:42 +0000

1from django.shortcuts import get_object_or_404, render 

2from django.views.decorators.csrf import csrf_protect 

3from django.contrib.auth.decorators import login_required 

4from django.core.exceptions import PermissionDenied 

5 

6from guardian.decorators import permission_required_or_403 

7from guardian.shortcuts import get_objects_for_user 

8 

9from .models import Product, ProductRiskAnalysis, ProductRiskEntry 

10 

11@csrf_protect 

12@login_required 

13def product_index(request): 

14 products = get_objects_for_user(request.user, 'product.view_product') 

15 

16 context = {"product_list": products} 

17 return render(request, "product_index.html", context) 

18 

19@csrf_protect 

20@login_required 

21@permission_required_or_403("product.view_product", (Product, "slug", "product_slug")) 

22def product(request, product_slug): 

23 product = get_object_or_404(Product, slug=product_slug) 

24 

25 all_analysis = ProductRiskAnalysis.objects.filter(id__in=product.analyzes.all()) 

26 

27 context = {"product": product, "all_analysis": all_analysis} 

28 return render(request, "product.html", context) 

29 

30@csrf_protect 

31@login_required 

32@permission_required_or_403("product.view_product", (Product, "slug", "product_slug")) 

33def product_analysis(request, product_slug, analysis_slug): 

34 product = get_object_or_404(Product, slug=product_slug) 

35 product_analysis = get_object_or_404(ProductRiskAnalysis, slug=analysis_slug) 

36 product_analysis_entries = ProductRiskEntry.objects.filter(id__in=product_analysis.risk_entries.all()).order_by("risk__custom_id") 

37 

38 risk_summery = ProductRiskAnalysis.get_risk_summary(product_analysis_entries) 

39 

40 pr_edit_allowed = request.user.has_perm("product.change_product", product) 

41 

42 context = {"product_edit": pr_edit_allowed, "product": product, "product_analysis": product_analysis, "product_analysis_entries": product_analysis_entries, "risk_summery": risk_summery} 

43 return render(request, "product_analysis.html", context)