|
| 1 | +# -*- coding: utf-8 -*- |
| 2 | +# Generated by Django 1.11.29 on 2020-05-01 12:54 |
| 3 | +from __future__ import unicode_literals |
| 4 | + |
| 5 | +from django.db import migrations |
| 6 | +from django.utils.text import slugify |
| 7 | + |
| 8 | +robots = [ |
| 9 | + ('Mail Archive', '/api/v2/person/person', 'secretariat', 'mailarchive@ietf.org'), |
| 10 | + ('Registration System', '/api/notify/meeting/registration', 'secretariat', 'registration@ietf.org'), |
| 11 | +] |
| 12 | + |
| 13 | +def forward(apps, schema_editor): |
| 14 | + RoleName = apps.get_model('name', 'RoleName') |
| 15 | + Role = apps.get_model('group', 'Role') |
| 16 | + Group = apps.get_model('group', 'Group') |
| 17 | + User = apps.get_model('auth', 'User') |
| 18 | + Person = apps.get_model('person', 'Person') |
| 19 | + Email = apps.get_model('person', 'Email') |
| 20 | + PersonalApiKey = apps.get_model('person', 'PersonalApiKey') |
| 21 | + # |
| 22 | + rname, __ = RoleName.objects.get_or_create(slug='robot') |
| 23 | + # |
| 24 | + for (name, endpoint, acronym, address) in robots: |
| 25 | + first_name, last_name = name.rsplit(None, 1) |
| 26 | + user, created = User.objects.get_or_create(username=slugify(name)) |
| 27 | + if created: |
| 28 | + user.first_name=first_name |
| 29 | + user.last_name=last_name |
| 30 | + user.is_staff=True |
| 31 | + user.is_active=True |
| 32 | + user.save() |
| 33 | + # |
| 34 | + person, created = Person.objects.get_or_create(name=name) |
| 35 | + if created: |
| 36 | + person.user = user |
| 37 | + person.ascii = name |
| 38 | + person.consent = True |
| 39 | + person.save() |
| 40 | + else: |
| 41 | + assert person.user == user |
| 42 | + # |
| 43 | + email, created = Email.objects.get_or_create(address=address) |
| 44 | + if created: |
| 45 | + email.origin = 'registration' |
| 46 | + email.person = person |
| 47 | + email.active = True |
| 48 | + email.save() |
| 49 | + else: |
| 50 | + assert email.person == person |
| 51 | + # |
| 52 | + group = Group.objects.get(acronym=acronym) |
| 53 | + role, created = Role.objects.get_or_create(person=person, name=rname, group=group, email=email) |
| 54 | + # |
| 55 | + key, created = PersonalApiKey.objects.get_or_create(person=person, endpoint=endpoint, valid=True) |
| 56 | + |
| 57 | +def reverse(apps, schema_editor): |
| 58 | + Person = apps.get_model('person', 'Person') |
| 59 | + for (name, endpoint, acronym, address) in robots: |
| 60 | + deleted = Person.objects.filter(name=name).delete() |
| 61 | + print('deleted: %s' % deleted) |
| 62 | + |
| 63 | +class Migration(migrations.Migration): |
| 64 | + |
| 65 | + dependencies = [ |
| 66 | + ('group', '0027_programs_have_parents'), |
| 67 | + ('name', '0012_role_name_robots'), |
| 68 | + ] |
| 69 | + |
| 70 | + operations = [ |
| 71 | + migrations.RunPython(forward, reverse), |
| 72 | + ] |
0 commit comments