fix syntax error
[sfa.git] / sfa / rspecs / elements / element.py
1 class Element(dict):
2
3     fields = {}
4
5     def __init__(self, fields={}, element=None, keys=None):
6         self.element = element
7         dict.__init__(self, self.fields)
8         if not keys:
9             keys = fields.keys()
10         for key in keys:
11             if key in fields:
12                 self[key] = fields[keys] 
13
14     @staticmethod
15     def get(xml, xpath, element_class=Element, fields=None):
16         """
17         Search the specifed xml node for elements that match the 
18         specified xpath query. 
19         Returns a list of objectes instanced by the specfied element_class.
20         """
21         if not fields:
22            fields = element_class.fields.keys()
23         elems = xml.xpath(xpath, namespaces)
24         objs = []
25         for elem in elems:
26             if not fields:
27                 obj = element_class(elem.attrib, elem)
28             else:
29                 obj = element_class({}, elem)
30                 for field in fields:
31                     if field in elem.attrib:
32                         obj[field] = elem.attrib[field]    
33             objs.append(obj)
34         generic_elems = [element_class(elem.attrib, elem) for elem in elems]
35         return objs
36
37
38     @staticmethod
39     def add(xml, name, objs, fields=None):
40         """
41         Adds a child node to the specified xml node based on
42         the specified name , element class and object.    
43         """
44         if not isinstance(objs, list):
45             objs = [objs]
46         if not fields:
47             fields = obj.keys()
48         elems = []
49         for obj in objs:
50             elem = xml.add_element(name)
51             for field in fields:
52                 if field in obj and obj[field]:
53                     elem.set(field, obj[field])
54             elems.append(elem)
55         return elems