Mercurial > p > roundup > code
view scripts/copy-user.py @ 3909:e89bcb28f683
indexargs_url force ids to int
ids appear as hyperdb.String instances, which confused indexargs_url when they
appear in the filterspec. They need to be treated as treated as integers when
generating URLs.
It feels sort of hacky to check for 'id' like this but I'm at a loss for what
else to do in this case. Suggestions are welcome :)
Maybe we should look into using some other hyperdb class to represent ids?
this fixes [SF#783492]
Some trailing whitespace also got trimmed.
| author | Justus Pendleton <jpend@users.sourceforge.net> |
|---|---|
| date | Tue, 18 Sep 2007 16:59:42 +0000 |
| parents | bd9e2e998e9d |
| children | 6e3e4f24c753 |
line wrap: on
line source
#!/usr/bin/env python # Copyright (C) 2003 by Intevation GmbH # Author: # Thomas Arendsen Hein <thomas@intevation.de> # # This program is free software dual licensed under the GPL (>=v2) # and the Roundup Licensing (see COPYING.txt in the roundup distribution). """ copy-user <instance-home> <instance-home> <userid> [<userid>...] 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:])
