Coverage for webpage/views.py: 78%

69 statements  

« prev     ^ index     » next       coverage.py v7.6.0, created at 2024-07-27 11:19 +0000

1from copy import deepcopy 

2 

3import requests 

4from django.conf import settings 

5from django.contrib.auth import authenticate 

6from django.contrib.auth import login 

7from django.contrib.auth import logout 

8from django.http import HttpResponse 

9from django.http import HttpResponseRedirect 

10from django.http import JsonResponse 

11from django.shortcuts import render 

12from django.template import loader 

13from django.template.exceptions import TemplateDoesNotExist 

14from django.views.generic import TemplateView 

15 

16from .forms import form_user_login 

17from .metadata import PROJECT_METADATA as PM 

18 

19 

20class ImprintView(TemplateView): 

21 template_name = "webpage/imprint.html" 

22 

23 def get_context_data(self, **kwargs): 

24 context = super().get_context_data(**kwargs) 

25 try: 

26 imprint_url = f"{settings.ACDH_IMPRINT_URL}{settings.REDMINE_ID}" 

27 except Exception as e: 

28 context["imprint_body"] = e 

29 return context 

30 r = requests.get(imprint_url) 

31 if r.status_code == 200: 

32 context["imprint_body"] = f"{r.text}" 

33 else: 

34 context[ 

35 "imprint_body" 

36 ] = """ 

37 On of our services is currently not available.\ 

38 Please try it later or write an email to\ 

39 acdh-ch-helpdesk@oeaw.ac.at; if you are service provide,\ 

40 make sure that you provided ACDH_IMPRINT_URL and REDMINE_ID 

41 """ 

42 return context 

43 

44 

45class GenericWebpageView(TemplateView): 

46 template_name = "webpage/index.html" 

47 

48 def get_context_data(self, **kwargs): 

49 context = super(GenericWebpageView, self).get_context_data(**kwargs) 

50 context["apps"] = settings.INSTALLED_APPS 

51 return context 

52 

53 def get_template_names(self): 

54 template_name = "webpage/{}.html".format(self.kwargs.get("template", "index")) 

55 try: 

56 loader.select_template([template_name]) 

57 template_name = "webpage/{}.html".format( 

58 self.kwargs.get("template", "index") 

59 ) 

60 except TemplateDoesNotExist: 

61 template_name = "webpage/index.html" 

62 return [template_name] 

63 

64 

65################################################################# 

66# views for login/logout # 

67################################################################# 

68 

69 

70def user_login(request): 

71 if request.method == "POST": 

72 form = form_user_login(request.POST) 

73 if form.is_valid(): 

74 cd = form.cleaned_data 

75 user = authenticate(username=cd["username"], password=cd["password"]) 

76 if user and user.is_active: 

77 login(request, user) 

78 return HttpResponseRedirect(request.GET.get("next", "/")) 

79 return HttpResponse("user does not exist") 

80 else: 

81 form = form_user_login() 

82 return render(request, "webpage/user_login.html", {"form": form}) 

83 

84 

85def user_logout(request): 

86 logout(request) 

87 return render(request, "webpage/user_logout.html") 

88 

89 

90def handler404(request, exception): 

91 return render(request, "webpage/404-error.html", locals()) 

92 

93 

94def project_info(request): 

95 """ 

96 returns a dict providing metadata about the current project 

97 """ 

98 

99 info_dict = deepcopy(PM) 

100 

101 if request.user.is_authenticated: 

102 pass 

103 else: 

104 del info_dict["matomo_id"] 

105 del info_dict["matomo_url"] 

106 info_dict["base_tech"] = "django" 

107 info_dict["framework"] = "djangobaseproject" 

108 return JsonResponse(info_dict)