X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/321d25482e17050f100ada2d737e8ff7e46b00da..0e7b2c952616c0d5001e07612d9ccc5b331f0cef:/forum_modules/sximporter/importer.py diff --git a/forum_modules/sximporter/importer.py b/forum_modules/sximporter/importer.py index e6f1ce7..25199dd 100644 --- a/forum_modules/sximporter/importer.py +++ b/forum_modules/sximporter/importer.py @@ -12,6 +12,7 @@ from forum.models.utils import dbsafe_encode from orm import orm from django.utils.encoding import force_unicode +from django.db.utils import IntegrityError try: from cPickle import loads, dumps @@ -169,7 +170,8 @@ openidre = re.compile('^https?\:\/\/') def userimport(path, options): #users = readTable(dump, "Users") - user_by_name = {} + usernames = [] + openids = set() uidmapper = IdMapper() #merged_users = [] @@ -186,24 +188,30 @@ def userimport(path, options): #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'} @@ -214,7 +222,7 @@ def userimport(path, options): 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', @@ -230,7 +238,7 @@ def userimport(path, options): 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', ''), ) @@ -283,12 +291,19 @@ def userimport(path, options): #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) @@ -819,10 +834,14 @@ def static_import(dump): 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: @@ -854,9 +873,21 @@ def reset_sequences(): db.execute_many(PG_SEQUENCE_RESETS) db.commit_transaction() +def reindex_fts(): + from south.db import db + if db.backend_name == "postgres": + db.start_transaction() + db.execute_many("UPDATE forum_noderevision set id = id WHERE TRUE;") + db.commit_transaction() + def sximport(dump, options): - disable_triggers() + try: + disable_triggers() + triggers_disabled = True + except: + triggers_disabled = False + uidmap = userimport(dump, options) tagmap = tagsimport(dump, uidmap) gc.collect() @@ -883,7 +914,10 @@ def sximport(dump, options): db.commit_transaction() reset_sequences() - enable_triggers() + + if triggers_disabled: + enable_triggers() + reindex_fts() PG_DISABLE_TRIGGERS = """ @@ -966,4 +1000,4 @@ SELECT setval('"forum_openidassociation_id_seq"', coalesce(max("id"), 1) + 2, ma - \ No newline at end of file +