diff -u b/src/python/journalling.py b/src/python/journalling.py --- b/src/python/journalling.py +++ b/src/python/journalling.py @@ -27,7 +27,6 @@ import re from optparse import OptionParser from lxml import etree -import shlex import base64 # TODO fix xml pretty print @@ -100,8 +99,8 @@ # Count number of leading spaces indent = len(line) - len(line.lstrip()) - # using shlex to get rid of the quotes - splitted = shlex.split(line) + # splitting the line into list + splitted = line.split() # if the line is not empty if splitted: @@ -118,7 +117,9 @@ for part in splitted: # if flag is set, string is an elements content if CONTENT_FLAG == 1: - content = base64.b64decode(part) + # First and last characters(quotes) stripped and + # string is decoded from base64 + content = base64.b64decode(part[1:-1]) # end parsing after content is stored break # test if string is an elements content indicator @@ -128,13 +129,15 @@ # test if string is an elements time attribute if re.match(r'^--timestamp=', part): attribute_name = "timestamp" - attribute_value = part.split('=', 1)[1] + # Value is string after '=' sign and without first abd last char(quotes) + attribute_value = part.split('=', 1)[1][1:-1] attributes[attribute_name] = time.strftime(TIME_FORMAT, time.localtime(int(attribute_value))) continue # test if string is an elements regular attribute if re.match(r'^--[a-zA-Z0-9]+=', part): attribute_name = part.split('=', 1)[0][2:] - attribute_value = part.split('=', 1)[1] + # Value is string after '=' sign and without first abd last char(quotes) + attribute_value = part.split('=', 1)[1][1:-1] attributes[attribute_name] = base64.b64decode(attribute_value) continue @@ -145,7 +148,11 @@ # information given as parameters def createElement(element, attributes, content): element = unicode(element, 'utf-8', errors='replace').translate(xmlTrans) - new_el = etree.Element(element) + try: + new_el = etree.Element(element) + except ValueError, e: + sys.stderr.write('Failed to create element with name %s\nError: %s\nExiting unsuccessfully.\n' % (element, e)) + exit(1) content = unicode(content, 'utf-8', errors='replace').translate(xmlTrans) new_el.text = content