X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/7f4982393567a5f6827c12a089363d91338f9f13..7fc0c9f2c94f090d9f743798cd9ef835757dcbc2:/forum_modules/sximporter/importer.py?ds=inline diff --git a/forum_modules/sximporter/importer.py b/forum_modules/sximporter/importer.py index 8887f80..98c9dbd 100644 --- a/forum_modules/sximporter/importer.py +++ b/forum_modules/sximporter/importer.py @@ -6,7 +6,6 @@ import re import os import gc from django.utils.translation import ugettext as _ -from orm import orm from django.utils.encoding import force_unicode @@ -22,6 +21,33 @@ from zlib import compress, decompress from xml.sax import make_parser from xml.sax.handler import ContentHandler +def create_orm(): + from django.conf import settings + from south.orm import FakeORM + + get_migration_number_re = re.compile(r'^((\d+)_.*)\.py$') + + migrations_folder = os.path.join(settings.SITE_SRC_ROOT, 'forum/migrations') + + highest_number = 0 + highest_file = None + + for f in os.listdir(migrations_folder): + if os.path.isfile(os.path.join(migrations_folder, f)): + m = get_migration_number_re.match(f) + + if m: + found = int(m.group(2)) + + if found > highest_number: + highest_number = found + highest_file = m.group(1) + + mod = __import__('forum.migrations.%s' % highest_file, globals(), locals(), ['forum.migrations']) + return FakeORM(getattr(mod, 'Migration'), "forum") + +orm = create_orm() + class SXTableHandler(ContentHandler): def __init__(self, fname, callback): self.in_row = False @@ -148,9 +174,13 @@ class UnknownYahooUser(UnknownUser): class IdMapper(dict): + + def __init__(self): + self.default = 1 + def __getitem__(self, key): key = int(key) - return super(IdMapper, self).get(key, 1) + return super(IdMapper, self).get(key, self.default) def __setitem__(self, key, value): super(IdMapper, self).__setitem__(int(key), int(value)) @@ -174,15 +204,22 @@ def userimport(path, options): #check for empty values if not owneruid: owneruid = None + else: + owneruid = int(owneruid) def callback(sxu): create = True + set_mapper_defaults = False if sxu.get('id') == '-1': return #print "\n".join(["%s : %s" % i for i in sxu.items()]) - if int(sxu.get('id')) == int(owneruid): + if (owneruid and (int(sxu.get('id')) == owneruid)) or ( + (not owneruid) and len(uidmapper)): + + set_mapper_defaults = True + if authenticated_user: osqau = orm.User.objects.get(id=authenticated_user.id) @@ -190,12 +227,7 @@ def userimport(path, options): openids.add(assoc.key) uidmapper[owneruid] = osqau.id - uidmapper[-1] = osqau.id create = False - else: - uidmapper[owneruid] = int(owneruid) - uidmapper[-1] = int(owneruid) - sxbadges = sxu.get('badgesummary', None) badges = {'1':'0', '2':'0', '3':'0'} @@ -294,6 +326,10 @@ def userimport(path, options): #merged_users.append(osqau.id) osqau.save() + if set_mapper_defaults: + uidmapper[-1] = osqau.id + uidmapper.default = osqau.id + usernames.append(osqau.username) openid = sxu.get('openid', None) @@ -310,8 +346,8 @@ def userimport(path, options): readTable(path, "Users", callback) - if uidmapper[-1] == -1: - uidmapper[-1] = 1 + #if uidmapper[-1] == -1: + # uidmapper[-1] = 1 return uidmapper @@ -732,6 +768,7 @@ def badges_import(dump, uidmap, post_list): osqaa.save() badge.awarded_count += 1 + user_badge_count[user_id] += 1 readTable(dump, "Users2Badges", callback)