40 Constructor initializes the default values |
42 Constructor initializes the default values |
41 """ |
43 """ |
42 self.data = {} |
44 self.data = {} |
43 if copyobj != None: |
45 if copyobj != None: |
44 self.data = copyobj.data.copy() |
46 self.data = copyobj.data.copy() |
45 pass |
|
46 |
47 |
47 def get_root_file(self): |
48 def get_root_file(self): |
48 return self.data.get(self.META_ROOT_FILE,"") |
49 return self.data.get(self.META_ROOT_FILE, None) |
49 |
50 |
50 def set_root_file(self,filename): |
51 def set_root_file(self,filename): |
51 self.data[self.META_ROOT_FILE] = filename |
52 if filename: |
|
53 self.data[self.META_ROOT_FILE] = filename |
52 |
54 |
53 class MetadataReader(persistence.ConeReader): |
55 class MetadataReader(persistence.ConeReader): |
54 """ |
56 """ |
55 Parses a single metadata file |
57 Parses a single metadata file |
56 """ |
58 """ |
57 class_type = "Metadata" |
59 class_type = "Metadata" |
58 NAMESPACES = ['http://www.nokia.com/xml/ns/confml-core/metadata-2.0'] |
60 NAMESPACES = ['http://www.nokia.com/xml/ns/confml-core/metadata-2.0'] |
59 def __init__(self): |
|
60 return |
|
61 |
61 |
62 def fromstring(self, xml_as_string): |
62 def fromstring(self, xml_as_string): |
63 meta = Metadata() |
63 meta = Metadata() |
64 etree = ElementTree.fromstring(xml_as_string) |
64 try: |
65 iter = etree.getiterator("{%s}property" % self.NAMESPACES[0]) |
65 etree = ElementTree.fromstring(xml_as_string) |
66 for elem in iter: |
66 for elem in etree.getiterator("{%s}property" % self.NAMESPACES[0]): |
67 (key,value) = self.get_property(elem) |
67 (key,value) = self.get_property(elem) |
68 meta.data[key] = value |
68 meta.data[key] = value |
|
69 except Exception,e: |
|
70 logging.getLogger('cone').warning("Could not read metadata! Exception %s" % (e)) |
69 return meta |
71 return meta |
70 |
72 |
71 def get_property(self, elem): |
73 def get_property(self, elem): |
72 key = elem.get('name') |
74 key = elem.get('name') |
73 value = '' |
75 value = '' |
80 """ |
82 """ |
81 class_type = "Metadata" |
83 class_type = "Metadata" |
82 NAMESPACES = ['http://www.nokia.com/xml/ns/confml-core/metadata-2.0'] |
84 NAMESPACES = ['http://www.nokia.com/xml/ns/confml-core/metadata-2.0'] |
83 DEFAULT_ENCODING = "ASCII" |
85 DEFAULT_ENCODING = "ASCII" |
84 def __init__(self): |
86 def __init__(self): |
|
87 super(MetadataWriter, self).__init__() |
85 self.encoding = self.DEFAULT_ENCODING |
88 self.encoding = self.DEFAULT_ENCODING |
86 return |
89 return |
87 |
90 |
88 def tostring(self,obj,indent=True): |
91 def tostring(self,obj,indent=True): |
89 stringdata = StringIO.StringIO() |
92 stringdata = StringIO.StringIO() |
98 for key in obj.data.keys(): |
101 for key in obj.data.keys(): |
99 prop = ElementTree.SubElement(root,'property') |
102 prop = ElementTree.SubElement(root,'property') |
100 self.set_property(prop, key, obj.data[key]) |
103 self.set_property(prop, key, obj.data[key]) |
101 if indent: |
104 if indent: |
102 persistence.indent(root) |
105 persistence.indent(root) |
|
106 |
|
107 # To make the output the same in linux and windows |
|
108 # (needed to make testing easier) |
|
109 class LinesepNormalizerResource(object): |
|
110 def __init__(self, resource): |
|
111 self.resource = resource |
|
112 def write(self, data): |
|
113 if os.linesep != '\r\n': |
|
114 data = data.replace(os.linesep, '\r\n') |
|
115 self.resource.write(data) |
|
116 res = LinesepNormalizerResource(res) |
|
117 |
103 # some smarter way to implement adding of the encoding to the beginning of file |
118 # some smarter way to implement adding of the encoding to the beginning of file |
104 res.write('<?xml version="1.0" encoding="%s"?>%s' % (self.encoding,os.linesep)) |
119 res.write('<?xml version="1.0" encoding="%s"?>%s' % (self.encoding,os.linesep)) |
105 ElementTree.ElementTree(root).write(res) |
120 ElementTree.ElementTree(root).write(res) |
106 |
121 |
107 def set_property(self, elem, key, value): |
122 def set_property(self, elem, key, value): |