From 877e683270c5ebad7cf3f2f847ae17468dc14689 Mon Sep 17 00:00:00 2001 From: Ryan Cross <rcross@amsl.com> Date: Tue, 17 Feb 2015 23:24:11 +0000 Subject: [PATCH] Add ietf/bin script merge-person-records. Commit ready for merge. - Legacy-Id: 9099 --- ietf/bin/merge-person-records | 66 +++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100755 ietf/bin/merge-person-records diff --git a/ietf/bin/merge-person-records b/ietf/bin/merge-person-records new file mode 100755 index 000000000..b11e8a07b --- /dev/null +++ b/ietf/bin/merge-person-records @@ -0,0 +1,66 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# -*- Python -*- +# + +import os, sys +basedir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")) +sys.path = [ basedir ] + sys.path +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ietf.settings") + +import django +django.setup() + +import argparse +import pprint +from django.contrib import admin +from django.contrib.auth.models import User +from ietf.person.models import Person + +parser = argparse.ArgumentParser() +parser.add_argument("source",type=int) +parser.add_argument("target",type=int) +args = parser.parse_args() + +source = Person.objects.get(pk=args.source) +target = Person.objects.get(pk=args.target) + +print "Merging person {}({}) to {}({})".format(source.name,source.pk,target.name,target.pk) +response = raw_input('Ok to continue y/n? ') +if response.lower() != 'y': + sys.exit() + +# merge emails +for email in source.email_set.all(): + print "Merging email: {}".format(email.address) + email.person = target + email.save() + +# merge aliases +target_aliases = [ a.name for a in target.alias_set.all() ] +for alias in source.alias_set.all(): + if alias.name in target_aliases: + alias.delete() + else: + print "Merging alias: {}".format(alias.name) + alias.person = target + alias.save() + +# check for any remaining relationships and delete if none +objs = [source] +opts = Person._meta +user = User.objects.filter(is_superuser=True).first() +admin_site = admin.site +using = 'default' + +deletable_objects, perms_needed, protected = admin.utils.get_deleted_objects( + objs, opts, user, admin_site, using) + +if len(deletable_objects) > 1: + print "Not Deleting Person: {}({})".format(source.name,source.pk) + print "Related objects remain:" + pprint.pprint(deletable_objects[1]) + +else: + print "Deleting Person: {}({})".format(source.name,source.pk) + source.delete()