Skip to content

Commit 8fdb004

Browse files
committed
Add migration for converting existing Submission.authors to JSON
- Legacy-Id: 12746
1 parent 90051a1 commit 8fdb004

1 file changed

Lines changed: 44 additions & 0 deletions

File tree

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
from django.db import migrations
5+
import jsonfield.fields
6+
7+
def parse_email_line(line):
8+
"""Split line on the form 'Some Name <email@example.com>'"""
9+
import re
10+
m = re.match("([^<]+) <([^>]+)>$", line)
11+
if m:
12+
return dict(name=m.group(1), email=m.group(2))
13+
else:
14+
return dict(name=line, email="")
15+
16+
def parse_authors(author_lines):
17+
res = []
18+
for line in author_lines.replace("\r", "").split("\n"):
19+
line = line.strip()
20+
if line:
21+
res.append(parse_email_line(line))
22+
return res
23+
24+
def convert_author_lines_to_json(apps, schema_editor):
25+
import json
26+
27+
Submission = apps.get_model("submit", "Submission")
28+
for s in Submission.objects.all().iterator():
29+
Submission.objects.filter(pk=s.pk).update(authors=json.dumps(parse_authors(s.authors)))
30+
31+
class Migration(migrations.Migration):
32+
33+
dependencies = [
34+
('submit', '0018_auto_20170116_0927'),
35+
]
36+
37+
operations = [
38+
migrations.RunPython(convert_author_lines_to_json, migrations.RunPython.noop),
39+
migrations.AlterField(
40+
model_name='submission',
41+
name='authors',
42+
field=jsonfield.fields.JSONField(default=list, help_text=b'List of authors with name, email, affiliation and country code.'),
43+
),
44+
]

0 commit comments

Comments
 (0)