Coverage for src / mesh / views / forms / reviewer_forms.py: 92%

38 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-07-09 13:14 +0000

1from __future__ import annotations 

2 

3from typing import Any 

4 

5from django import forms 

6from django.contrib.auth import get_user_model 

7from django.core.exceptions import ValidationError 

8from django.utils.translation import gettext_lazy as _ 

9 

10from mesh.models.orm.user_models import SuggestedReviewer, User 

11 

12UserModel = get_user_model() 

13 

14 

15class SuggestedReviewerForm(forms.ModelForm): 

16 """ 

17 Form used to create a new SuggestedReviewer 

18 """ 

19 

20 custom_display = "block" 

21 first_name = forms.CharField( 

22 label=_("First name"), 

23 max_length=150, 

24 required=False, 

25 ) 

26 last_name = forms.CharField( 

27 label=_("Last name"), 

28 max_length=150, 

29 required=False, 

30 ) 

31 email = forms.EmailField( 

32 label=_("E-mail address"), 

33 required=True, 

34 ) 

35 keywords = forms.CharField( 

36 label=_("Keywords"), 

37 required=False, 

38 ) 

39 

40 class Meta: 

41 model = SuggestedReviewer 

42 fields = [ 

43 "first_name", 

44 "last_name", 

45 "email", 

46 "keywords", 

47 ] 

48 

49 def __init__(self, *args, **kwargs): 

50 self.current_user = kwargs.pop("current_user", None) 

51 super().__init__(*args, **kwargs) 

52 

53 def clean_email(self) -> str: 

54 email = self.cleaned_data["email"] 

55 

56 if (not self.instance or self.instance.email != email) and ( 

57 SuggestedReviewer.objects.filter(email=email).exists() 

58 ): 

59 raise ValidationError(_("The given e-mail address is already used.")) 

60 if self.current_user and self.current_user.email == email: 

61 raise ValidationError(_("You cannot add yourself as a suggested reviewer.")) 

62 return email 

63 

64 def clean(self) -> dict[str, Any]: 

65 cleaned_data = super().clean() 

66 if self.errors: 

67 return cleaned_data 

68 

69 return cleaned_data 

70 

71 

72class SimpleReviewerForm(forms.ModelForm): 

73 """ 

74 Form used to create a new SuggestedReviewer 

75 """ 

76 

77 custom_display = "block" 

78 keywords = forms.CharField( 

79 label=_("Keywords"), 

80 required=False, 

81 ) 

82 

83 class Meta: 

84 model = User 

85 fields = [ 

86 "keywords", 

87 ]