bornhack-website/src/program/signal_handlers.py

47 lines
1.9 KiB
Python
Raw Normal View History

2017-08-14 16:58:19 +00:00
import logging
2017-01-23 17:57:30 +00:00
from django.core.exceptions import ValidationError
2019-06-16 12:32:24 +00:00
2017-08-14 16:58:19 +00:00
logger = logging.getLogger("bornhack.%s" % __name__)
2017-01-23 17:57:30 +00:00
2017-07-09 14:54:21 +00:00
def check_speaker_event_camp_consistency(sender, instance, **kwargs):
2019-06-16 12:32:24 +00:00
if kwargs["action"] == "pre_add":
2017-07-11 20:50:31 +00:00
from program.models import Speaker, Event
2019-06-16 12:32:24 +00:00
2017-07-11 20:50:31 +00:00
if isinstance(instance, Event):
# loop over speakers being added to this event
2019-06-16 12:32:24 +00:00
for pk in kwargs["pk_set"]:
2017-07-11 20:50:31 +00:00
# check if this speaker belongs to a different Camp than the event does
speaker = Speaker.objects.get(id=pk)
if speaker.camp != instance.camp:
2019-06-16 12:32:24 +00:00
raise ValidationError(
{
"speakers": "The speaker (%s) belongs to a different camp (%s) than the event does (%s)"
% (speaker, speaker.camp, instance.camp)
}
)
2017-07-11 20:50:31 +00:00
elif isinstance(instance, Speaker):
# loop over events being added to this speaker
2019-06-16 12:32:24 +00:00
for pk in kwargs["pk_set"]:
2017-07-11 20:50:31 +00:00
# check if this event belongs to a different Camp than the speaker does
event = Event.objects.get(id=pk)
if event.camp != instance.camp:
2019-06-16 12:32:24 +00:00
raise ValidationError(
{
"events": "The event (%s) belongs to a different camp (%s) than the event does (%s)"
% (event, event.camp, instance.camp)
}
)
2017-01-23 17:57:30 +00:00
def check_speaker_camp_change(sender, instance, **kwargs):
2017-01-25 22:48:37 +00:00
if instance.pk:
for event in instance.events.all():
if event.camp != instance.camp:
2019-06-16 12:32:24 +00:00
raise ValidationError(
{
"camp": "You cannot change the camp a speaker belongs to if the speaker is associated with one or more events."
}
)