From 8fdb0047e10b2becfe36fcbdbdca6872b0c3b4a0 Mon Sep 17 00:00:00 2001 From: Ole Laursen Date: Fri, 27 Jan 2017 16:12:10 +0000 Subject: [PATCH] Add migration for converting existing Submission.authors to JSON - Legacy-Id: 12746 --- .../migrations/0019_auto_20170127_0538.py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 ietf/submit/migrations/0019_auto_20170127_0538.py diff --git a/ietf/submit/migrations/0019_auto_20170127_0538.py b/ietf/submit/migrations/0019_auto_20170127_0538.py new file mode 100644 index 000000000..972edc41e --- /dev/null +++ b/ietf/submit/migrations/0019_auto_20170127_0538.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations +import jsonfield.fields + +def parse_email_line(line): + """Split line on the form 'Some Name '""" + import re + m = re.match("([^<]+) <([^>]+)>$", line) + if m: + return dict(name=m.group(1), email=m.group(2)) + else: + return dict(name=line, email="") + +def parse_authors(author_lines): + res = [] + for line in author_lines.replace("\r", "").split("\n"): + line = line.strip() + if line: + res.append(parse_email_line(line)) + return res + +def convert_author_lines_to_json(apps, schema_editor): + import json + + Submission = apps.get_model("submit", "Submission") + for s in Submission.objects.all().iterator(): + Submission.objects.filter(pk=s.pk).update(authors=json.dumps(parse_authors(s.authors))) + +class Migration(migrations.Migration): + + dependencies = [ + ('submit', '0018_auto_20170116_0927'), + ] + + operations = [ + migrations.RunPython(convert_author_lines_to_json, migrations.RunPython.noop), + migrations.AlterField( + model_name='submission', + name='authors', + field=jsonfield.fields.JSONField(default=list, help_text=b'List of authors with name, email, affiliation and country code.'), + ), + ]