From 7b15eb38ec0b22d15aa2800fa43c9d47528f491f Mon Sep 17 00:00:00 2001 From: richard Date: Thu, 4 Dec 2003 23:13:43 +0000 Subject: [PATCH] added contributed script for copying users between trackers git-svn-id: http://svn.roundup-tracker.org/svnroot/roundup/trunk@2011 57a73879-2fb5-44c3-a270-3262357dd7e2 --- CHANGES.txt | 2 + scripts/copy-user.py | 87 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100755 scripts/copy-user.py diff --git a/CHANGES.txt b/CHANGES.txt index b2a9409..836f5af 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -17,6 +17,8 @@ Feature: appended (so the demo tracker's template name is "classic-demo") - always sort MultilinkHTMLProperty in the correct order, usually alphabetically (sf feature 790512). +- added script for copying user(s) from tracker to tracker (sf patch + 828963) Fixed: - mysql documentation fixed to note requirement of 4.0+ and InnoDB diff --git a/scripts/copy-user.py b/scripts/copy-user.py new file mode 100755 index 0000000..f119955 --- /dev/null +++ b/scripts/copy-user.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python +# Copyright (C) 2003 by Intevation GmbH +# Author: +# Thomas Arendsen Hein +# +# This program is free software dual licensed under the GPL (>=v2) +# and the Roundup Licensing (see COPYING.txt in the roundup distribution). + +""" +copy-user [...] + +Copy one or more Roundup users from one tracker instance to another. +Example: + copy-user /roundup/tracker1 /roundup/tracker2 `seq 3 10` 14 16 + (copies users 3, 4, 5, 6, 7, 8, 9, 10, 14 and 16) +""" + +__version__ = "$Revision: 1.1 $" +# $Source: /home/stefan/projects/roundup-migrate/roundup/scripts/copy-user.py,v $ +# $Id: copy-user.py,v 1.1 2003-12-04 23:13:43 richard Exp $ + +import sys +import roundup.instance + + +def copy_user(home1, home2, *userids): + """Copy users which are listed by userids from home1 to home2""" + + copyattribs = ['username', 'password', 'address', 'realname', 'phone', + 'organisation', 'alternate_addresses', 'roles', 'timezone'] + + try: + instance1 = roundup.instance.open(home1) + print "Opened source instance: %s" % home1 + except: + print "Can't open source instance: %s" % home1 + sys.exit(1) + + try: + instance2 = roundup.instance.open(home2) + print "Opened target instance: %s" % home2 + except: + print "Can't open target instance: %s" % home2 + sys.exit(1) + + db1 = instance1.open('admin') + db2 = instance2.open('admin') + + userlist = db1.user.list() + for userid in userids: + try: + userid = str(int(userid)) + except ValueError, why: + print "Not a numeric user id: %s Skipping ..." % (userid,) + continue + if userid not in userlist: + print "User %s not in source instance. Skipping ..." % userid + continue + + user = {} + for attrib in copyattribs: + value = db1.user.get(userid, attrib) + if value: + user[attrib] = value + try: + db2.user.lookup(user['username']) + print "User %s: Username '%s' exists in target instance. Skipping ..." % (userid, user['username']) + continue + except KeyError, why: + pass + print "Copying user %s (%s) ..." % (userid, user['username']) + db2.user.create(**user) + + db2.commit() + db2.close() + print "Closed target instance." + db1.close() + print "Closed source instance." + + +if __name__ == "__main__": + if len(sys.argv) < 4: + print __doc__ + sys.exit(1) + else: + copy_user(*sys.argv[1:]) + -- 2.30.2