--- a/configurationengine/source/cone/storage/metadata.py Fri Mar 12 08:30:17 2010 +0200
+++ b/configurationengine/source/cone/storage/metadata.py Tue Aug 10 14:29:28 2010 +0300
@@ -24,8 +24,10 @@
from xml.etree import cElementTree as ElementTree
except ImportError:
from xml.etree import ElementTree
+
import StringIO
import os
+import logging
from cone.public import exceptions, persistence
@@ -42,13 +44,13 @@
self.data = {}
if copyobj != None:
self.data = copyobj.data.copy()
- pass
def get_root_file(self):
- return self.data.get(self.META_ROOT_FILE,"")
+ return self.data.get(self.META_ROOT_FILE, None)
def set_root_file(self,filename):
- self.data[self.META_ROOT_FILE] = filename
+ if filename:
+ self.data[self.META_ROOT_FILE] = filename
class MetadataReader(persistence.ConeReader):
"""
@@ -56,16 +58,16 @@
"""
class_type = "Metadata"
NAMESPACES = ['http://www.nokia.com/xml/ns/confml-core/metadata-2.0']
- def __init__(self):
- return
def fromstring(self, xml_as_string):
meta = Metadata()
- etree = ElementTree.fromstring(xml_as_string)
- iter = etree.getiterator("{%s}property" % self.NAMESPACES[0])
- for elem in iter:
- (key,value) = self.get_property(elem)
- meta.data[key] = value
+ try:
+ etree = ElementTree.fromstring(xml_as_string)
+ for elem in etree.getiterator("{%s}property" % self.NAMESPACES[0]):
+ (key,value) = self.get_property(elem)
+ meta.data[key] = value
+ except Exception,e:
+ logging.getLogger('cone').warning("Could not read metadata! Exception %s" % (e))
return meta
def get_property(self, elem):
@@ -82,6 +84,7 @@
NAMESPACES = ['http://www.nokia.com/xml/ns/confml-core/metadata-2.0']
DEFAULT_ENCODING = "ASCII"
def __init__(self):
+ super(MetadataWriter, self).__init__()
self.encoding = self.DEFAULT_ENCODING
return
@@ -100,6 +103,18 @@
self.set_property(prop, key, obj.data[key])
if indent:
persistence.indent(root)
+
+ # To make the output the same in linux and windows
+ # (needed to make testing easier)
+ class LinesepNormalizerResource(object):
+ def __init__(self, resource):
+ self.resource = resource
+ def write(self, data):
+ if os.linesep != '\r\n':
+ data = data.replace(os.linesep, '\r\n')
+ self.resource.write(data)
+ res = LinesepNormalizerResource(res)
+
# some smarter way to implement adding of the encoding to the beginning of file
res.write('<?xml version="1.0" encoding="%s"?>%s' % (self.encoding,os.linesep))
ElementTree.ElementTree(root).write(res)
@@ -108,4 +123,4 @@
elem.attrib['name'] = key
if value != '':
elem.attrib['value'] = value
- return elem
\ No newline at end of file
+ return elem