chrono/chrono/agendas/migrations/0034_initial_source.py

46 lines
1.7 KiB
Python

from django.db import migrations
def create_source(apps, schema_editor):
Desk = apps.get_model('agendas', 'Desk')
TimePeriodExceptionSource = apps.get_model('agendas', 'TimePeriodExceptionSource')
for desk in Desk.objects.exclude(timeperiod_exceptions_remote_url=''):
# create a source for each remote url
source = TimePeriodExceptionSource.objects.create(
desk=desk, ics_url=desk.timeperiod_exceptions_remote_url
)
# clear timeperiod_exceptions_remote_url
desk.timeperiod_exceptions_remote_url = None
desk.save()
# attach exceptions to the created source
desk.timeperiodexception_set.filter(external_id__isnull=False).exclude(external_id='').update(
source=source
)
def init_remote_url(apps, schema_editor):
Desk = apps.get_model('agendas', 'Desk')
TimePeriodExceptionSource = apps.get_model('agendas', 'TimePeriodExceptionSource')
for source in TimePeriodExceptionSource.objects.filter(ics_url__isnull=False):
# set timeperiod_exceptions_remote_url
source.desk.timeperiod_exceptions_remote_url = source.ics_url
source.desk.save()
# unlink exceptions
source.timeperiodexception_set.update(source=None)
# delete the source
source.delete()
# reset remote_url
for desk in Desk.objects.filter(timeperiod_exceptions_remote_url__isnull=True):
desk.timeperiod_exceptions_remote_url = ''
desk.save()
class Migration(migrations.Migration):
dependencies = [
('agendas', '0033_timeperiodexceptionsource'),
]
operations = [
migrations.RunPython(create_source, init_remote_url),
]