OpenSlides/openslides/agenda/migrations/0002_item_duration.py

58 lines
1.7 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
# Generated by Django 1.10.1 on 2016-09-22 11:08
from __future__ import unicode_literals
from django.db import migrations, models
def convert_duration(apps, schema_editor):
"""
Converts the values of the old duration CharField to new duration
IntegerField. It uses the temporary field for proper renaming the field
in the end.
"""
2019-01-06 16:22:33 +01:00
Item = apps.get_model("agenda", "Item")
for item in Item.objects.all():
duration = item.duration
item.duration_tmp = None
if is_int(duration):
# Assuming that these are minutes.
item.duration_tmp = int(duration)
2016-09-23 14:42:25 +02:00
elif isinstance(duration, str):
# Assuming format (h)h:(m)m. If not, new value is None.
2019-01-06 16:22:33 +01:00
split = duration.split(":")
if len(split) == 2 and is_int(split[0]) and is_int(split[1]):
# Calculate new duration: hours * 60 + minutes.
item.duration_tmp = int(split[0]) * 60 + int(split[1])
item.save(skip_autoupdate=True)
def is_int(s):
"""
Short helper for duration conversion.
"""
try:
int(s)
2016-09-23 14:42:25 +02:00
except (ValueError, TypeError):
return False
2016-09-22 21:43:49 +02:00
else:
return True
class Migration(migrations.Migration):
2019-01-06 16:22:33 +01:00
dependencies = [("agenda", "0001_initial")]
operations = [
migrations.AddField(
2019-01-06 16:22:33 +01:00
model_name="item",
name="duration_tmp",
field=models.IntegerField(blank=True, null=True),
),
2019-01-06 16:22:33 +01:00
migrations.RunPython(convert_duration),
migrations.RemoveField(model_name="item", name="duration"),
migrations.RenameField(
2019-01-06 16:22:33 +01:00
model_name="item", old_name="duration_tmp", new_name="duration"
),
]