Coverage for ivatar/tools/forms.py: 80%
41 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 11:51 +0000
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 11:51 +0000
1"""
2Classes for our ivatar.tools.forms
3"""
5from django import forms
6from django.utils.translation import gettext_lazy as _
7from django.core.exceptions import ValidationError
8from django.forms.utils import ErrorList
10from django.conf import settings
12# Access settings through django.conf.settings
13AVATAR_MAX_SIZE = getattr(settings, "AVATAR_MAX_SIZE", 512)
14MIN_LENGTH_URL = getattr(settings, "MIN_LENGTH_URL", 11)
15MAX_LENGTH_URL = getattr(settings, "MAX_LENGTH_URL", 255)
16MIN_LENGTH_EMAIL = getattr(settings, "MIN_LENGTH_EMAIL", 6)
17MAX_LENGTH_EMAIL = getattr(settings, "MAX_LENGTH_EMAIL", 254)
20class CheckDomainForm(forms.Form):
21 """
22 Form handling domain check
23 """
25 domain = forms.CharField(
26 label=_("Domain"),
27 required=True,
28 error_messages={"required": _("Cannot check without a domain name.")},
29 )
32class CheckForm(forms.Form):
33 """
34 Form handling check
35 """
37 mail = forms.EmailField(
38 label=_("E-Mail"),
39 required=False,
40 min_length=MIN_LENGTH_EMAIL,
41 max_length=MAX_LENGTH_EMAIL,
42 error_messages={"required": _("Cannot check without a domain name.")},
43 )
45 openid = forms.CharField(
46 label=_("OpenID"),
47 required=False,
48 min_length=MIN_LENGTH_URL,
49 max_length=MAX_LENGTH_URL,
50 error_messages={"required": _("Cannot check without an openid name.")},
51 )
53 size = forms.IntegerField(
54 label=_("Size"),
55 initial=80,
56 min_value=5,
57 max_value=AVATAR_MAX_SIZE,
58 required=True,
59 )
61 default_opt = forms.ChoiceField(
62 label=_("Default"),
63 required=False,
64 widget=forms.HiddenInput,
65 choices=[
66 ("retro", _("Retro (d=retro)")),
67 ("robohash", _("Roboter (d=robohash)")),
68 ("wavatar", _("Wavatar (d=wavatar)")),
69 ("monsterid", _("Monster (d=monsterid)")),
70 ("identicon", _("Identicon (d=identicon)")),
71 ("mm", _("Mystery man (d=mm)")),
72 ("mmng", _("Mystery man NG (d=mmng)")),
73 ("pagan", _("Retro adventure character (d=pagan)")),
74 ("none", _("None")),
75 ],
76 )
78 default_url = forms.URLField(
79 label=_("Default URL"),
80 min_length=1,
81 max_length=MAX_LENGTH_URL,
82 required=False,
83 )
85 def clean(self):
86 self.cleaned_data = super().clean()
87 mail = self.cleaned_data.get("mail")
88 openid = self.cleaned_data.get("openid")
89 default_url = self.cleaned_data.get("default_url")
90 default_opt = self.cleaned_data.get("default_opt")
91 if default_url and default_opt and default_opt != "none":
92 if "default_url" not in self._errors:
93 self._errors["default_url"] = ErrorList()
94 if "default_opt" not in self._errors:
95 self._errors["default_opt"] = ErrorList()
97 errstring = _("Only default URL OR default keyword may be specified")
98 self._errors["default_url"].append(errstring)
99 self._errors["default_opt"].append(errstring)
100 if not mail and not openid:
101 raise ValidationError(_("Either OpenID or mail must be specified"))
102 return self.cleaned_data
104 def clean_openid(self):
105 data = self.cleaned_data["openid"]
106 return data.lower()
108 def clean_mail(self):
109 data = self.cleaned_data["mail"]
110 return data.lower()