Coverage for src/mesh/views/forms/reviewer_forms.py: 68%
36 statements
« prev ^ index » next coverage.py v7.7.0, created at 2025-04-28 07:45 +0000
« prev ^ index » next coverage.py v7.7.0, created at 2025-04-28 07:45 +0000
1from __future__ import annotations
3from typing import Any
5from allauth.account.models import EmailAddress
6from django import forms
7from django.contrib.auth import get_user_model
8from django.core.exceptions import ValidationError
9from django.utils.translation import gettext_lazy as _
11from ...models.user_models import SuggestedReviewer, User
13UserModel = get_user_model()
16class SuggestedReviewerForm(forms.ModelForm):
17 """
18 Form used to create a new SuggestedReviewer
19 """
21 custom_display = "block"
22 first_name = forms.CharField(
23 label=_("First name"),
24 max_length=150,
25 required=False,
26 )
27 last_name = forms.CharField(
28 label=_("Last name"),
29 max_length=150,
30 required=False,
31 )
32 email = forms.EmailField(
33 label=_("E-mail address"),
34 required=True,
35 )
36 keywords = forms.CharField(
37 label=_("Keywords"),
38 required=False,
39 )
41 class Meta:
42 model = SuggestedReviewer
43 fields = [
44 "first_name",
45 "last_name",
46 "email",
47 "keywords",
48 ]
50 def __init__(self, *args, **kwargs):
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 EmailAddress.objects.filter(email=email).exists()
58 or UserModel.objects.filter(email=email).exists()
59 or SuggestedReviewer.objects.filter(email=email).exists()
60 ):
61 raise ValidationError(_("The given e-mail address is already used."))
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 ]