DATE_AND_AUTHOR_INF_SECTION = 'DateAndAuthor'
OPTIONS_INF_SECTION = 'Options'
+META_INF_SECTION = 'Meta'
DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
DATE_FORMAT = "%Y-%m-%d"
if xmlns: xmlns_items.append(xmlns)
except TypeError:
raise #_raise_serialization_error(v)
- file.write(" %s=\"%s\"" % (_encode(k, encoding),
+ file.write(u" %s=\"%s\"" % (_encode(k, encoding),
_escape_attrib(v, encoding)))
for k, v in xmlns_items:
- file.write(" %s=\"%s\"" % (_encode(k, encoding),
+ file.write(u" %s=\"%s\"" % (_encode(k, encoding),
_escape_attrib(v, encoding)))
if node.text or len(node):
file.write(">")
if node.text:
- file.write(_escape_cdata(node.text.replace("\n", (level + 1) * identator + "\n"), encoding))
+ file.write(_escape_cdata(node.text, encoding))
for n in node:
self._write(file, n, encoding, namespaces, level + 1, identator)
if node.text and len(node.text) < 125:
for k, v in xmlns_items:
del namespaces[v]
if node.tail:
- file.write(_escape_cdata(node.tail.replace("\n", level * identator + "\n"), encoding))
+ file.write(_escape_cdata(node.tail.replace("\n", (level * identator )+ "\n"), encoding))
+
+def make_date(date, with_time=True):
+ try:
+ return date.strftime(with_time and DATETIME_FORMAT or DATE_FORMAT)
+ except ValueError, e:
+ return date.replace(year=1900).strftime(with_time and DATETIME_FORMAT or DATE_FORMAT)
-def _add_tag(el, name, content = None):
- tag = ET.SubElement(el, name)
- if content:
- tag.text = content
- return tag
def ET_Element_add_tag(el, tag_name, content = None, **attrs):
tag = ET.SubElement(el, tag_name)
if content:
- tag.text = unicode(content).encode('utf-8')
+ tag.text = unicode(content)
for k, v in attrs.items():
tag.set(k, unicode(v))
set_state()
for f in files:
- t.add(os.path.join(tmp, f), arcname=f)
+ t.add(os.path.join(tmp, f), arcname="/%s" % f)
if options.get('uplodaded_files', False):
state['overall']['status'] = _('Importing uploaded files')
inf.set(OPTIONS_INF_SECTION, 'with-upfiles', str(options.get('uplodaded_files', False)))
inf.set(OPTIONS_INF_SECTION, 'with-skins', str(options.get('import_skins_folder', False)))
+ inf.add_section(META_INF_SECTION)
+
+ for id, s in state.items():
+ inf.set(META_INF_SECTION, id, str(s['count']))
+
with open(os.path.join(tmp, 'backup.inf'), 'wb') as inffile:
inf.write(inffile)
folder = str(settings.UPFILES_FOLDER)
if os.path.exists(folder):
- tf.add(folder, arcname='upfiles')
+ tf.add(folder, arcname='/upfiles')
def export_skinsfolder(tf):
folder = djsettings.TEMPLATE_DIRS[0]
if os.path.exists(folder):
- tf.add(folder, arcname='skins')
+ tf.add(folder, arcname='/skins')
def export(options, user):
el.add('email', u.email, validated=u.email_isvalid and 'true' or 'false')
el.add('reputation', u.reputation)
el.add('badges', bronze=u.bronze, silver=u.silver, gold=u.gold)
- el.add('joindate', u.date_joined.strftime(DATETIME_FORMAT))
+ el.add('joindate', make_date(u.date_joined))
el.add('active', u.is_active and 'true' or 'false')
el.add('realname', u.real_name)
el.add('bio', u.about)
el.add('location', u.location)
el.add('website', u.website)
- el.add('birthdate', u.date_of_birth and u.date_of_birth.strftime(DATE_FORMAT) or "")
+ el.add('birthdate', u.date_of_birth and make_date(u.date_of_birth, with_time=False) or "")
roles = el.add('roles')
if not anon_data:
el.add('author', n.author.id)
- el.add('date', n.added_at.strftime(DATETIME_FORMAT))
+ el.add('date', make_date(n.added_at))
el.add('parent', n.parent and n.parent.id or "")
el.add('absparent', n.abs_parent and n.abs_parent or "")
act = el.add('lastactivity')
act.add('by', n.last_activity_by and n.last_activity_by.id or "")
- act.add('at', n.last_activity_at and n.last_activity_at.strftime(DATETIME_FORMAT) or "")
+ act.add('at', n.last_activity_at and make_date(n.last_activity_at) or "")
el.add('title', n.title)
el.add('body', n.body)
+ el.add('score', n.score)
+
tags = el.add('tags')
for t in n.tagname_list():
tags.add('tag', t)
- revs = el.add('revisions', active=n.active_revision and n.active_revision.revision or n.revisions.order_by('revision')[0].revision)
+ try:
+ active = n.active_revision and n.active_revision.revision or n.revisions.order_by('revision')[0].revision
+ except IndexError:
+ active = 0
+
+ revs = el.add('revisions', active=active)
for r in n.revisions.order_by('revision'):
- rev = _add_tag(revs, 'revision')
+ rev = revs.add('revision')
rev.add('number', r.revision)
rev.add('summary', r.summary)
if not anon_data:
rev.add('author', r.author.id)
- rev.add('date', r.revised_at.strftime(DATETIME_FORMAT))
+ rev.add('date', make_date(r.revised_at))
rev.add('title', r.title)
rev.add('body', r.body)
def export_actions(a, el, anon_data):
el.add('id', a.id)
el.add('type', a.action_type)
- el.add('date', a.action_date)
+ el.add('date', make_date(a.action_date))
if not anon_data:
el.add('user', a.user.id)
canceled.add('user', a.canceled_by.id)
canceled.add('ip', a.canceled_ip)
- canceled.add('date', a.canceled_at)
+ canceled.add('date', make_date(a.canceled_at))
if not anon_data:
reputes = el.add('reputes')