from orm import orm
from django.utils.encoding import force_unicode
+from django.db.utils import IntegrityError
try:
from cPickle import loads, dumps
def userimport(path, options):
#users = readTable(dump, "Users")
- user_by_name = {}
+ usernames = []
+ openids = set()
uidmapper = IdMapper()
#merged_users = []
#print "\n".join(["%s : %s" % i for i in sxu.items()])
if int(sxu.get('id')) == int(owneruid):
osqau = orm.User.objects.get(id=1)
+ for assoc in orm.AuthKeyUserAssociation.objects.filter(user=osqau):
+ openids.add(assoc.key)
uidmapper[owneruid] = 1
uidmapper[-1] = 1
create = False
else:
- username = sxu.get('displayname',
- sxu.get('displaynamecleaned', sxu.get('realname', final_username_attempt(sxu))))
+ username = unicode(sxu.get('displayname',
+ sxu.get('displaynamecleaned', sxu.get('realname', final_username_attempt(sxu)))))[:30]
- if not isinstance(username, UnknownUser) and username in user_by_name:
+ if username in usernames:
#if options.get('mergesimilar', False) and sxu.get('email', 'INVALID') == user_by_name[username].email:
# osqau = user_by_name[username]
# create = False
# uidmapper[sxu.get('id')] = osqau.id
#else:
- inc = 1
- while ("%s %d" % (username, inc)) in user_by_name:
+ inc = 0
+
+ while True:
inc += 1
+ totest = "%s %d" % (username[:29 - len(str(inc))], inc)
- username = "%s %d" % (username, inc)
+ if not totest in usernames:
+ username = totest
+ break
sxbadges = sxu.get('badgesummary', None)
badges = {'1':'0', '2':'0', '3':'0'}
if create:
osqau = orm.User(
id = sxu.get('id'),
- username = unicode(username),
+ username = username,
password = '!',
email = sxu.get('email', ''),
is_superuser = sxu.get('usertypeid') == '5',
gold = int(badges['1']),
silver = int(badges['2']),
bronze = int(badges['3']),
- real_name = sxu.get('realname', ''),
+ real_name = sxu.get('realname', '')[:30],
location = sxu.get('location', ''),
)
#merged_users.append(osqau.id)
osqau.save()
- user_by_name[osqau.username] = osqau
+ usernames.append(osqau.username)
openid = sxu.get('openid', None)
- if openid and openidre.match(openid):
+ if openid and openidre.match(openid) and (not openid in openids):
assoc = orm.AuthKeyUserAssociation(user=osqau, key=openid, provider="openidurl")
assoc.save()
+ openids.add(openid)
+
+ openidalt = sxu.get('openidalt', None)
+ if openidalt and openidre.match(openidalt) and (not openidalt in openids):
+ assoc = orm.AuthKeyUserAssociation(user=osqau, key=openidalt, provider="openidurl")
+ assoc.save()
+ openids.add(openidalt)
readTable(path, "Users", callback)
def callback(set):
if unicode(set['name']) in sx2osqa_set_map:
- kv = orm.KeyValue(
- key = sx2osqa_set_map[set['name']],
- value = dbsafe_encode(html_decode(set['value']))
- )
+ try:
+ kv = orm.KeyValue.objects.get(key=sx2osqa_set_map[set['name']])
+ kv.value = dbsafe_encode(html_decode(set['value']))
+ except:
+ kv = orm.KeyValue(
+ key = sx2osqa_set_map[set['name']],
+ value = dbsafe_encode(html_decode(set['value']))
+ )
kv.save()
else:
from south.db import db
if db.backend_name == "postgres":
db.start_transaction()
- db.execute_many("UPDATE forum_node_revision set id = id WHERE TRUE;")
+ db.execute_many("UPDATE forum_noderevision set id = id WHERE TRUE;")
db.commit_transaction()
triggers_disabled = True
except:
triggers_disabled = False
+
uidmap = userimport(dump, options)
tagmap = tagsimport(dump, uidmap)
gc.collect()
-
\ No newline at end of file
+