ruff check; update ValidationError params
This commit is contained in:
@@ -27,7 +27,7 @@ def create_perms(sender, **kwargs):
|
|||||||
from django.contrib.auth.models import Group, Permission
|
from django.contrib.auth.models import Group, Permission
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
|
||||||
group, created = Group.objects.get_or_create(name=sender.label)
|
group, _ = Group.objects.get_or_create(name=sender.label)
|
||||||
|
|
||||||
content_types = ContentType.objects.filter(app_label=sender.label)
|
content_types = ContentType.objects.filter(app_label=sender.label)
|
||||||
for content_type in content_types:
|
for content_type in content_types:
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
import datetime
|
|
||||||
import decimal
|
import decimal
|
||||||
|
|
||||||
from dateutil.relativedelta import relativedelta
|
from dateutil.relativedelta import relativedelta
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.core.validators import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.db.models import Count, Q
|
from django.db.models import Count, Q
|
||||||
from django.forms import DateInput
|
from django.forms import DateInput
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
@@ -451,8 +450,8 @@ class ResolutionAdminForm(forms.ModelForm):
|
|||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs) # to get the self.fields set
|
super().__init__(*args, **kwargs) # to get the self.fields set
|
||||||
|
|
||||||
budget = decimal.Decimal(0.0)
|
budget = decimal.Decimal("0.0")
|
||||||
total = decimal.Decimal(0.0)
|
total = decimal.Decimal("0.0")
|
||||||
if resolution := kwargs.get("instance"):
|
if resolution := kwargs.get("instance"):
|
||||||
for elem in Bill.objects.filter(resolution=resolution):
|
for elem in Bill.objects.filter(resolution=resolution):
|
||||||
total += elem.amount
|
total += elem.amount
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
|
import logging
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from django.core.validators import FileExtensionValidator, ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
|
from django.core.validators import FileExtensionValidator
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
@@ -8,6 +10,8 @@ from members.models import Member
|
|||||||
|
|
||||||
from .validators import validate_bill_file_extension
|
from .validators import validate_bill_file_extension
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class BankData(models.Model):
|
class BankData(models.Model):
|
||||||
# members can be deleted but never their bank datas
|
# members can be deleted but never their bank datas
|
||||||
@@ -86,8 +90,18 @@ class Resolution(models.Model):
|
|||||||
if not Resolution.objects.filter(id=_id).exists():
|
if not Resolution.objects.filter(id=_id).exists():
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
|
msg = (
|
||||||
|
"Es wurden zu viele Beschlüsse in dieser Woche %(week)s vom Jahr %(year)s "
|
||||||
|
"erstellt."
|
||||||
|
)
|
||||||
|
logger.error(
|
||||||
|
"Too many resolutions created in week %(week)s of year %(year)s.",
|
||||||
|
extra={"week": week, "year": year},
|
||||||
|
)
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
f"Es wurden zu viele Beschlüsse in dieser Woche angelegt. (ID: {_id})"
|
msg,
|
||||||
|
code="too_many_resolutions",
|
||||||
|
params={"week": week, "year": year},
|
||||||
)
|
)
|
||||||
|
|
||||||
self.id = _id
|
self.id = _id
|
||||||
|
|||||||
@@ -27,11 +27,11 @@ def get_image_list(folder_name: str) -> list:
|
|||||||
|
|
||||||
Path(thumb_path).mkdir(exist_ok=True)
|
Path(thumb_path).mkdir(exist_ok=True)
|
||||||
|
|
||||||
for _file in os.listdir(image_path):
|
for _file in image_path.iterdir():
|
||||||
if Path(_file).suffix.lower()[1:] not in get_available_image_extensions():
|
if _file.suffix.lower()[1:] not in get_available_image_extensions():
|
||||||
continue
|
continue
|
||||||
|
|
||||||
thumb_file_path = Path(thumb_path) / f"thumb_{_file}"
|
thumb_file_path = Path(thumb_path) / f"thumb_{_file.name}"
|
||||||
if not Path(thumb_file_path).exists():
|
if not Path(thumb_file_path).exists():
|
||||||
with Image.open(Path(image_path) / _file, "r") as im:
|
with Image.open(Path(image_path) / _file, "r") as im:
|
||||||
if im._getexif() is not None:
|
if im._getexif() is not None:
|
||||||
|
|||||||
@@ -60,6 +60,8 @@ class DraftAlbumDetailView(LoginRequiredMixin, DetailView):
|
|||||||
)
|
)
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
raise Http404("Album slug not found.")
|
msg = f"Album mit dem Slug '{slug}' nicht gefunden."
|
||||||
|
logger.error("Album with slug '%s' not found.", slug)
|
||||||
|
raise Http404(msg)
|
||||||
|
|
||||||
return album
|
return album
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import logging
|
|||||||
from datetime import date
|
from datetime import date
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from django.core.validators import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models.constraints import UniqueConstraint
|
from django.db.models.constraints import UniqueConstraint
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
@@ -156,11 +156,20 @@ class Etherpad(models.Model):
|
|||||||
def clean(self):
|
def clean(self):
|
||||||
pad_name = slugify(str(self.slug_id) + "-" + self.title[:40])
|
pad_name = slugify(str(self.slug_id) + "-" + self.title[:40])
|
||||||
if len(pad_name) > 50:
|
if len(pad_name) > 50:
|
||||||
raise ValidationError(
|
msg = (
|
||||||
|
"Name ist zum Erstellen des Etherpads zu lange - max. 50 Zeichen. (Länge: "
|
||||||
|
"%(length)s, Name: %(pad_name)s)"
|
||||||
|
)
|
||||||
|
logger.error(
|
||||||
(
|
(
|
||||||
"Name zum Erstellen des Etherpads ist zu lange - max. 50 Zeichen. ("
|
"Name '%(pad_name)s' is too long for creating a new etherpad - max. 50 "
|
||||||
"Länge: %(length)s, Name: %(pad_name)s)"
|
"characters. (Length: %(length)s)",
|
||||||
),
|
),
|
||||||
|
extra={"length": len(pad_name), "pad_name": pad_name},
|
||||||
|
)
|
||||||
|
raise ValidationError(
|
||||||
|
msg,
|
||||||
|
code="pad_name_too_long",
|
||||||
params={"length": len(pad_name), "pad_name": pad_name},
|
params={"length": len(pad_name), "pad_name": pad_name},
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -168,8 +177,13 @@ class Etherpad(models.Model):
|
|||||||
if ep_create_new_pad(pad_name):
|
if ep_create_new_pad(pad_name):
|
||||||
self.etherpad_key = pad_name
|
self.etherpad_key = pad_name
|
||||||
else:
|
else:
|
||||||
|
msg = "Etherpad '%(pad_name)s' konnte nicht erstellt werden."
|
||||||
|
logger.error(
|
||||||
|
"Etherpad '%(pad_name)s' could not be created. This should never happen!",
|
||||||
|
extra={"pad_name": pad_name},
|
||||||
|
)
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
f"Etherpad '{pad_name}' konnte nicht erstellt werden. This should never happen!"
|
msg, code="pad_creation_failed", params={"pad_name": pad_name}
|
||||||
)
|
)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ class MemberRoleFilter(admin.SimpleListFilter):
|
|||||||
if self.value() in Member.MemberRole:
|
if self.value() in Member.MemberRole:
|
||||||
return queryset.filter(role=self.value())
|
return queryset.filter(role=self.value())
|
||||||
|
|
||||||
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
class JobMemberInline(admin.TabularInline):
|
class JobMemberInline(admin.TabularInline):
|
||||||
model = JobMember
|
model = JobMember
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import logging
|
|||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.core.validators import ValidationError, validate_email
|
from django.core.validators import validate_email
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models import F
|
from django.db.models import F
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
@@ -81,9 +81,6 @@ class Member(models.Model):
|
|||||||
return reverse("members:member", kwargs={"pk": self.pk})
|
return reverse("members:member", kwargs={"pk": self.pk})
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
if not self.image:
|
|
||||||
raise ValidationError("Es fehlt das Profilbild.")
|
|
||||||
|
|
||||||
if self.username:
|
if self.username:
|
||||||
try:
|
try:
|
||||||
user = User.objects.get(username=self.username.lower())
|
user = User.objects.get(username=self.username.lower())
|
||||||
|
|||||||
@@ -24,10 +24,8 @@ def get_jobs_sidebar(slug):
|
|||||||
)
|
)
|
||||||
active_job_group = JobGroup.objects.filter(slug=slug).first()
|
active_job_group = JobGroup.objects.filter(slug=slug).first()
|
||||||
|
|
||||||
context = {
|
return {
|
||||||
"job_groups": job_groups,
|
"job_groups": job_groups,
|
||||||
"job_members": job_members,
|
"job_members": job_members,
|
||||||
"active_job_group": active_job_group,
|
"active_job_group": active_job_group,
|
||||||
}
|
}
|
||||||
|
|
||||||
return context
|
|
||||||
|
|||||||
@@ -1,20 +1,24 @@
|
|||||||
from django.core.validators import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
|
|
||||||
|
|
||||||
def validate_domainonly_email(value):
|
def validate_domainonly_email(value):
|
||||||
if "fet.at" not in value:
|
if "fet.at" not in value:
|
||||||
raise ValidationError("In der Mailadresse fehlt die richtige Domäne.")
|
msg = "In der Mailadresse fehlt die richtige Domäne."
|
||||||
|
raise ValidationError(msg, code="invalid_domain")
|
||||||
|
|
||||||
|
|
||||||
def validate_file_size(value):
|
def validate_file_size(value):
|
||||||
if value.size > 10 * 1024 * 1024:
|
if value.size > 10 * 1024 * 1024:
|
||||||
raise ValidationError("Die maximale Dateigröße ist 10MB.")
|
msg = "Die maximale Dateigröße ist 10MB."
|
||||||
|
raise ValidationError(msg, code="file_too_large")
|
||||||
|
|
||||||
|
|
||||||
def validate_image_dimension(value):
|
def validate_image_dimension(value):
|
||||||
if value.height < 150 or value.width < 150:
|
if value.height < 150 or value.width < 150:
|
||||||
|
msg = "Das Bild ist zu klein. (Höhe: %(height)s, Breite: %(width)s)"
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
"Das Bild ist zu klein. (Höhe: %(height)s, Breite: %(width)s)",
|
msg,
|
||||||
|
code="image_too_small",
|
||||||
params={
|
params={
|
||||||
"height": value.height,
|
"height": value.height,
|
||||||
"width": value.width,
|
"width": value.width,
|
||||||
|
|||||||
@@ -23,10 +23,7 @@ def create_token(username, masterpassword):
|
|||||||
|
|
||||||
@authenticated_user
|
@authenticated_user
|
||||||
def index(request):
|
def index(request):
|
||||||
context = {
|
context = {"mctoken": "", "valid_master_pwd": True}
|
||||||
"mctoken": "",
|
|
||||||
"valid_master_pwd": True
|
|
||||||
}
|
|
||||||
|
|
||||||
masterpassword = settings.MC_MASTERPASSWORD
|
masterpassword = settings.MC_MASTERPASSWORD
|
||||||
|
|
||||||
|
|||||||
@@ -179,8 +179,7 @@ class EventManager(PublishedManager, models.Manager):
|
|||||||
|
|
||||||
def past_events(self, public=True):
|
def past_events(self, public=True):
|
||||||
date_today = timezone.now().date()
|
date_today = timezone.now().date()
|
||||||
qs = self.published(public).filter(event_start__lt=date_today)
|
return self.published(public).filter(event_start__lt=date_today)
|
||||||
return qs
|
|
||||||
|
|
||||||
|
|
||||||
class FetMeetingManager(PublishedManager, models.Manager):
|
class FetMeetingManager(PublishedManager, models.Manager):
|
||||||
@@ -204,5 +203,4 @@ class FetMeetingManager(PublishedManager, models.Manager):
|
|||||||
|
|
||||||
def past_events(self):
|
def past_events(self):
|
||||||
date_today = timezone.now().date()
|
date_today = timezone.now().date()
|
||||||
qs = self.published().filter(event_start__lt=date_today)
|
return self.published().filter(event_start__lt=date_today)
|
||||||
return qs
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ from datetime import timedelta
|
|||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.core.validators import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
@@ -252,9 +252,11 @@ class Post(models.Model):
|
|||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
if self.event_end and self.event_end < self.event_start:
|
if self.event_end and self.event_end < self.event_start:
|
||||||
raise ValidationError("Das Ende des Events liegt vor dem Beginn.")
|
msg = "Das Ende des Events liegt vor dem Beginn."
|
||||||
|
raise ValidationError(msg, code="invalid_event_end")
|
||||||
if self.event_start and self.post_type not in ["E", "F"]:
|
if self.event_start and self.post_type not in ["E", "F"]:
|
||||||
raise ValidationError("Für diesen Post Typ ist kein Event Start zulässig.")
|
msg = "Für diesen Post Typ ist kein Event Start zulässig."
|
||||||
|
raise ValidationError(msg, code="invalid_event_start")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def published(self):
|
def published(self):
|
||||||
@@ -302,7 +304,8 @@ class Event(Post):
|
|||||||
def clean(self):
|
def clean(self):
|
||||||
super().clean()
|
super().clean()
|
||||||
if not self.event_start:
|
if not self.event_start:
|
||||||
raise ValidationError("Das Datum des Events fehlt.")
|
msg = "Das Datum des Events fehlt."
|
||||||
|
raise ValidationError(msg, code="missing_event_start")
|
||||||
|
|
||||||
|
|
||||||
class FetMeeting(Event):
|
class FetMeeting(Event):
|
||||||
@@ -355,7 +358,12 @@ class FetMeeting(Event):
|
|||||||
slug = slugify(self.event_start.date()) + "-" + slugify("Fachschaftssitzung")
|
slug = slugify(self.event_start.date()) + "-" + slugify("Fachschaftssitzung")
|
||||||
|
|
||||||
if Post.objects.filter(slug=slug).exists() and Post.objects.get(slug=slug).id != self.id:
|
if Post.objects.filter(slug=slug).exists() and Post.objects.get(slug=slug).id != self.id:
|
||||||
raise ValidationError("Es existiert bereits eine Sitzung mit demselben Datum.")
|
msg = "Es existiert bereits eine Sitzung mit demselben Datum."
|
||||||
|
logger.error(
|
||||||
|
"A fet meeting with same date (slug: %(slug)s) is already existing.",
|
||||||
|
extra={"slug": slug},
|
||||||
|
)
|
||||||
|
raise ValidationError(msg, code="duplicate_fet_meeting")
|
||||||
|
|
||||||
return slug
|
return slug
|
||||||
|
|
||||||
|
|||||||
@@ -20,11 +20,11 @@ class PostIndex(indexes.SearchIndex, indexes.Indexable):
|
|||||||
return self.get_model().objects.date_sorted(public=False)
|
return self.get_model().objects.date_sorted(public=False)
|
||||||
|
|
||||||
def prepare_date(self, obj):
|
def prepare_date(self, obj):
|
||||||
if obj.post_type == "N":
|
if obj.post_type == "E" or obj.post_type == "F":
|
||||||
return obj.public_date
|
|
||||||
elif obj.post_type == "E" or obj.post_type == "F":
|
|
||||||
return obj.event_start.date()
|
return obj.event_start.date()
|
||||||
|
|
||||||
|
return obj.public_date # obj.post_type == "N"
|
||||||
|
|
||||||
def prepare_agenda(self, obj):
|
def prepare_agenda(self, obj):
|
||||||
if obj.has_agenda and obj.agenda_html:
|
if obj.has_agenda and obj.agenda_html:
|
||||||
return html2text(obj.agenda_html)
|
return html2text(obj.agenda_html)
|
||||||
|
|||||||
@@ -117,7 +117,8 @@ class PostDetailView(DetailView):
|
|||||||
if not obj.published:
|
if not obj.published:
|
||||||
related_posts.remove(obj)
|
related_posts.remove(obj)
|
||||||
|
|
||||||
context = {
|
context.update(
|
||||||
|
{
|
||||||
"post": self.object,
|
"post": self.object,
|
||||||
"files": files,
|
"files": files,
|
||||||
"author": author,
|
"author": author,
|
||||||
@@ -126,6 +127,7 @@ class PostDetailView(DetailView):
|
|||||||
"prev": self.post_prev(),
|
"prev": self.post_prev(),
|
||||||
"related_posts": related_posts[:4],
|
"related_posts": related_posts[:4],
|
||||||
}
|
}
|
||||||
|
)
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
@@ -309,7 +311,8 @@ def show_pdf(request, html, filename):
|
|||||||
html = html[:idx] + rendered + html[idx:]
|
html = html[:idx] + rendered + html[idx:]
|
||||||
|
|
||||||
if not (pdf := render_to_pdf(html)):
|
if not (pdf := render_to_pdf(html)):
|
||||||
raise Http404("can't create pdf file.")
|
msg = "PDF konnte nicht erstellt werden."
|
||||||
|
raise Http404(msg)
|
||||||
|
|
||||||
response = HttpResponse(pdf, content_type="application/pdf")
|
response = HttpResponse(pdf, content_type="application/pdf")
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
from django.core.exceptions import ValidationError
|
||||||
from django.core.validators import FileExtensionValidator
|
from django.core.validators import FileExtensionValidator
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.forms import ValidationError
|
|
||||||
|
|
||||||
from .mails import send_mail_approved, send_mail_rejected, send_mail_returned
|
from .mails import send_mail_approved, send_mail_rejected, send_mail_returned
|
||||||
from .managers import RentalItemsManager
|
from .managers import RentalItemsManager
|
||||||
@@ -116,7 +116,8 @@ class Rental(models.Model):
|
|||||||
self.date_end = self.date_start
|
self.date_end = self.date_start
|
||||||
|
|
||||||
if self.date_start > self.date_end:
|
if self.date_start > self.date_end:
|
||||||
raise ValidationError("Das Abholdatum muss vor dem Rückgabedatum liegen.")
|
msg = "Das Abholdatum muss vor dem Rückgabedatum liegen."
|
||||||
|
raise ValidationError(msg, code="invalid_date_range")
|
||||||
|
|
||||||
def calc_total_deposit(self) -> int:
|
def calc_total_deposit(self) -> int:
|
||||||
total_deposit = 0
|
total_deposit = 0
|
||||||
|
|||||||
Reference in New Issue
Block a user