agendas: fix import with duplicated exceptins (#48615)
This commit is contained in:
parent
fa9e11354c
commit
735a4785cd
|
@ -614,8 +614,7 @@ class TimePeriod(models.Model):
|
|||
@classmethod
|
||||
def import_json(cls, data):
|
||||
data = clean_import_data(cls, data)
|
||||
timeperiod, _ = cls.objects.update_or_create(defaults=data, **data)
|
||||
return timeperiod
|
||||
cls.objects.update_or_create(defaults=data, **data)
|
||||
|
||||
def export_json(self):
|
||||
return {
|
||||
|
@ -786,10 +785,7 @@ class MeetingType(models.Model):
|
|||
@classmethod
|
||||
def import_json(cls, data):
|
||||
data = clean_import_data(cls, data)
|
||||
meeting_type, created = cls.objects.update_or_create(
|
||||
slug=data['slug'], agenda=data['agenda'], defaults=data
|
||||
)
|
||||
return meeting_type
|
||||
cls.objects.update_or_create(slug=data['slug'], agenda=data['agenda'], defaults=data)
|
||||
|
||||
def export_json(self):
|
||||
return {
|
||||
|
@ -977,11 +973,10 @@ class Event(models.Model):
|
|||
)
|
||||
data = clean_import_data(cls, data)
|
||||
if data.get('slug'):
|
||||
event, created = cls.objects.update_or_create(slug=data['slug'], defaults=data)
|
||||
return event
|
||||
cls.objects.update_or_create(slug=data['slug'], defaults=data)
|
||||
return
|
||||
event = cls(**data)
|
||||
event.save()
|
||||
return event
|
||||
|
||||
def export_json(self):
|
||||
return {
|
||||
|
@ -1171,8 +1166,6 @@ class Desk(models.Model):
|
|||
raise AgendaImportError(_('The unavailability calendar "%s" does not exist.') % slug)
|
||||
desk.unavailability_calendars.add(target_calendar)
|
||||
|
||||
return desk
|
||||
|
||||
def export_json(self):
|
||||
time_period_exceptions = self.timeperiodexception_set.filter(source__settings_slug__isnull=True)
|
||||
time_period_exception_sources = self.timeperiodexceptionsource_set.filter(settings_slug__isnull=False)
|
||||
|
@ -1511,7 +1504,6 @@ class TimePeriodExceptionSource(models.Model):
|
|||
source, _ = cls.objects.update_or_create(**data)
|
||||
if source.enabled:
|
||||
source.enable()
|
||||
return source
|
||||
|
||||
def export_json(self):
|
||||
'''Export only sources from settings.'''
|
||||
|
@ -1692,8 +1684,10 @@ class TimePeriodException(models.Model):
|
|||
data = clean_import_data(cls, data)
|
||||
query_data = data.copy()
|
||||
query_data.pop('update_datetime')
|
||||
exception, _ = cls.objects.update_or_create(defaults=data, **query_data)
|
||||
return exception
|
||||
try:
|
||||
cls.objects.update_or_create(defaults=data, **query_data)
|
||||
except cls.MultipleObjectsReturned:
|
||||
cls.objects.filter(**query_data).update(update_datetime=data['update_datetime'])
|
||||
|
||||
def export_json(self):
|
||||
def export_datetime(dt):
|
||||
|
@ -1844,8 +1838,7 @@ class AgendaNotificationsSettings(models.Model):
|
|||
def import_json(cls, data):
|
||||
data = clean_import_data(cls, data)
|
||||
agenda = data.pop('agenda')
|
||||
notification_settings, created = cls.objects.update_or_create(agenda=agenda, defaults=data)
|
||||
return notification_settings
|
||||
cls.objects.update_or_create(agenda=agenda, defaults=data)
|
||||
|
||||
def export_json(self):
|
||||
return {
|
||||
|
@ -1905,8 +1898,7 @@ class AgendaReminderSettings(models.Model):
|
|||
def import_json(cls, data):
|
||||
data = clean_import_data(cls, data)
|
||||
agenda = data.pop('agenda')
|
||||
reminder_settings, created = cls.objects.update_or_create(agenda=agenda, defaults=data)
|
||||
return reminder_settings
|
||||
cls.objects.update_or_create(agenda=agenda, defaults=data)
|
||||
|
||||
def export_json(self):
|
||||
return {
|
||||
|
|
|
@ -578,7 +578,7 @@ def test_import_export_do_not_duplicate_timeperiod_and_exceptions():
|
|||
TimePeriod.objects.create(
|
||||
desk=desk, weekday=3, start_time=datetime.time(10, 0), end_time=datetime.time(11, 0)
|
||||
)
|
||||
TimePeriodException.objects.create(
|
||||
tpe1 = TimePeriodException.objects.create(
|
||||
desk=desk,
|
||||
start_datetime=make_aware(datetime.datetime(2017, 5, 22, 8, 0)),
|
||||
end_datetime=make_aware(datetime.datetime(2017, 5, 22, 12, 30)),
|
||||
|
@ -597,6 +597,26 @@ def test_import_export_do_not_duplicate_timeperiod_and_exceptions():
|
|||
assert TimePeriod.objects.count() == 2
|
||||
assert TimePeriodException.objects.count() == 2
|
||||
|
||||
# duplicated exception
|
||||
output = get_output_of_command('export_site')
|
||||
payload = json.loads(output)
|
||||
assert len(payload['agendas'][0]['desks'][0]['exceptions']) == 2
|
||||
tpe2 = TimePeriodException.objects.create(
|
||||
desk=desk,
|
||||
start_datetime=make_aware(datetime.datetime(2017, 5, 22, 8, 0)),
|
||||
end_datetime=make_aware(datetime.datetime(2017, 5, 22, 12, 30)),
|
||||
)
|
||||
assert TimePeriod.objects.count() == 2
|
||||
assert TimePeriodException.objects.count() == 3
|
||||
assert tpe1.update_datetime < tpe2.update_datetime
|
||||
|
||||
import_site(payload)
|
||||
assert TimePeriod.objects.count() == 2
|
||||
assert TimePeriodException.objects.count() == 3
|
||||
tpe1.refresh_from_db()
|
||||
tpe2.refresh_from_db()
|
||||
assert tpe1.update_datetime == tpe2.update_datetime
|
||||
|
||||
|
||||
def test_import_export_unavailability_calendar(app):
|
||||
output = get_output_of_command('export_site')
|
||||
|
|
Loading…
Reference in New Issue