agendas: split failing migration (#54969)
This commit is contained in:
parent
785341cecc
commit
f9b5089f06
|
@ -1,44 +1,9 @@
|
|||
# Generated by Django 2.2.19 on 2021-04-21 13:56
|
||||
|
||||
import django.contrib.postgres.fields
|
||||
from dateutil.rrule import DAILY, WEEKLY
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
def migrate_recurrence_fields(apps, schema_editor):
|
||||
Event = apps.get_model('agendas', 'Event')
|
||||
|
||||
for event in Event.objects.filter(recurrence_rule__isnull=False):
|
||||
if event.recurrence_rule['freq'] == DAILY:
|
||||
event.recurrence_days = list(range(7))
|
||||
elif event.recurrence_rule['freq'] == WEEKLY:
|
||||
event.recurrence_days = event.recurrence_rule['byweekday']
|
||||
event.recurrence_week_interval = event.recurrence_rule.get('interval', 1)
|
||||
event.save()
|
||||
|
||||
|
||||
def reverse_migrate_recurrence_fields(apps, schema_editor):
|
||||
Event = apps.get_model('agendas', 'Event')
|
||||
|
||||
for event in Event.objects.filter(recurrence_days__isnull=False):
|
||||
rrule = {}
|
||||
if event.recurrence_days == list(range(7)):
|
||||
event.repeat = 'daily'
|
||||
rrule['freq'] = DAILY
|
||||
else:
|
||||
rrule['freq'] = WEEKLY
|
||||
rrule['byweekday'] = event.recurrence_days
|
||||
if event.recurrence_days == list(range(5)):
|
||||
event.repeat = 'weekdays'
|
||||
elif event.recurrence_week_interval == 2:
|
||||
event.repeat = '2-weeks'
|
||||
rrule['interval'] = 2
|
||||
else:
|
||||
event.repeat = 'weekly'
|
||||
event.recurrence_rule = rrule
|
||||
event.save()
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
|
@ -68,13 +33,4 @@ class Migration(migrations.Migration):
|
|||
verbose_name='Repeat',
|
||||
),
|
||||
),
|
||||
migrations.RunPython(migrate_recurrence_fields, reverse_migrate_recurrence_fields),
|
||||
migrations.RemoveField(
|
||||
model_name='event',
|
||||
name='recurrence_rule',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='event',
|
||||
name='repeat',
|
||||
),
|
||||
]
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
from dateutil.rrule import DAILY, WEEKLY
|
||||
from django.db import migrations
|
||||
from django.db.utils import ProgrammingError
|
||||
|
||||
|
||||
def migrate_recurrence_fields(apps, schema_editor):
|
||||
Event = apps.get_model('agendas', 'Event')
|
||||
|
||||
for event in Event.objects.filter(recurrence_rule__isnull=False):
|
||||
if event.recurrence_rule['freq'] == DAILY:
|
||||
event.recurrence_days = list(range(7))
|
||||
elif event.recurrence_rule['freq'] == WEEKLY:
|
||||
event.recurrence_days = event.recurrence_rule['byweekday']
|
||||
event.recurrence_week_interval = event.recurrence_rule.get('interval', 1)
|
||||
event.save()
|
||||
|
||||
|
||||
def reverse_migrate_recurrence_fields(apps, schema_editor):
|
||||
Event = apps.get_model('agendas', 'Event')
|
||||
|
||||
for event in Event.objects.filter(recurrence_days__isnull=False):
|
||||
rrule = {}
|
||||
if event.recurrence_days == list(range(7)):
|
||||
event.repeat = 'daily'
|
||||
rrule['freq'] = DAILY
|
||||
else:
|
||||
rrule['freq'] = WEEKLY
|
||||
rrule['byweekday'] = event.recurrence_days
|
||||
if event.recurrence_days == list(range(5)):
|
||||
event.repeat = 'weekdays'
|
||||
elif event.recurrence_week_interval == 2:
|
||||
event.repeat = '2-weeks'
|
||||
rrule['interval'] = 2
|
||||
else:
|
||||
event.repeat = 'weekly'
|
||||
event.recurrence_rule = rrule
|
||||
event.save()
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('agendas', '0092_change_recurrence_fields'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(migrate_recurrence_fields, reverse_migrate_recurrence_fields),
|
||||
]
|
||||
|
||||
def _check_db(self, project_state, schema_editor):
|
||||
try:
|
||||
# check if the column exists
|
||||
schema_editor.execute('SELECT recurrence_rule FROM agendas_event')
|
||||
except ProgrammingError:
|
||||
# if not exists, ignore the migration
|
||||
return project_state
|
||||
|
||||
def apply(self, project_state, schema_editor, *args, **kwargs):
|
||||
result = self._check_db(project_state, schema_editor)
|
||||
return result or super().apply(project_state, schema_editor, *args, **kwargs)
|
|
@ -0,0 +1,32 @@
|
|||
from django.db import migrations
|
||||
from django.db.utils import ProgrammingError
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('agendas', '0093_change_recurrence_fields'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='event',
|
||||
name='recurrence_rule',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='event',
|
||||
name='repeat',
|
||||
),
|
||||
]
|
||||
|
||||
def _check_db(self, project_state, schema_editor):
|
||||
try:
|
||||
# check if the column exists
|
||||
schema_editor.execute('SELECT recurrence_rule FROM agendas_event')
|
||||
except ProgrammingError:
|
||||
# if not exists, ignore the migration
|
||||
return project_state
|
||||
|
||||
def apply(self, project_state, schema_editor, *args, **kwargs):
|
||||
result = self._check_db(project_state, schema_editor)
|
||||
return result or super().apply(project_state, schema_editor, *args, **kwargs)
|
Loading…
Reference in New Issue