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
« prev ^ index » next coverage.py v7.13.1, created at 2026-07-09 13:14 +0000
1from __future__ import annotations
3from typing import Any
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 _
10from mesh.models.orm.user_models import SuggestedReviewer, User
12UserModel = get_user_model()
15class SuggestedReviewerForm(forms.ModelForm):
16 """
17 Form used to create a new SuggestedReviewer
18 """
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 )
40 class Meta:
41 model = SuggestedReviewer
42 fields = [
43 "first_name",
44 "last_name",
45 "email",
46 "keywords",
47 ]
49 def __init__(self, *args, **kwargs):
50 self.current_user = kwargs.pop("current_user", None)
51 super().__init__(*args, **kwargs)
53 def clean_email(self) -> str:
54 email = self.cleaned_data["email"]
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
64 def clean(self) -> dict[str, Any]:
65 cleaned_data = super().clean()
66 if self.errors:
67 return cleaned_data
69 return cleaned_data
72class SimpleReviewerForm(forms.ModelForm):
73 """
74 Form used to create a new SuggestedReviewer
75 """
77 custom_display = "block"
78 keywords = forms.CharField(
79 label=_("Keywords"),
80 required=False,
81 )
83 class Meta:
84 model = User
85 fields = [
86 "keywords",
87 ]