import os
import gc
from django.utils.translation import ugettext as _
-from orm import orm
from django.utils.encoding import force_unicode
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
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))
#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)
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'}
#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)
readTable(path, "Users", callback)
- if uidmapper[-1] == -1:
- uidmapper[-1] = 1
+ #if uidmapper[-1] == -1:
+ # uidmapper[-1] = 1
return uidmapper
post.state_string = "".join("(%s)" % s for s in re.findall('\w+', post.state_string) if s != name)
def postimport(dump, uidmap, tagmap):
- all = []
+ all = {}
def callback(sxpost):
nodetype = (sxpost.get('posttypeid') == '1') and "nodetype" or "answer"
post.extra_count = sxpost.get('viewcount', 0)
add_tags_to_post(post, tagmap)
+ all[int(post.id)] = int(post.id)
else:
post.parent_id = sxpost['parentid']
+ post.abs_parent_id = sxpost['parentid']
+ all[int(post.id)] = int(sxpost['parentid'])
post.save()
- all.append(int(post.id))
create_and_activate_revision(post)
del post
return all
-def comment_import(dump, uidmap, posts):
+def comment_import(dump, uidmap, absparent_map):
+ posts = absparent_map.keys()
+
currid = IdIncrementer(max(posts))
mapping = {}
author_id = uidmap[sxc.get('userid', 1)],
body = sxc['text'],
parent_id = sxc.get('postid'),
+ abs_parent_id = absparent_map.get(int(sxc.get('postid')), sxc.get('postid'))
)
if sxc.get('deletiondate', None):
osqaa.save()
badge.awarded_count += 1
+
user_badge_count[user_id] += 1
readTable(dump, "Users2Badges", callback)
kv.save()
-def pages_import(dump, currid):
+def pages_import(dump, currid, owner):
currid = IdIncrementer(currid)
registry = {}
'sidebar_render': "html",
'comments': False
}),
- author_id = 1
+ author_id = owner
)
create_and_activate_revision(page)
badges_import(dump, uidmap, posts)
- pages_import(dump, max(posts))
+ pages_import(dump, max(posts), uidmap.default)
static_import(dump)
gc.collect()