X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Frspecs%2Felements%2Felement.py;h=21f0949c92881f3fdb1e7f68ed6aab44f7933456;hb=04a3f20dc71bf8b3f96b1e3172623aa346a638a7;hp=273303c58323ce712e125636965859435b7d8ec5;hpb=0526b7cdd21890e622cd7fc47994cb1da5347855;p=sfa.git diff --git a/sfa/rspecs/elements/element.py b/sfa/rspecs/elements/element.py index 273303c5..21f0949c 100644 --- a/sfa/rspecs/elements/element.py +++ b/sfa/rspecs/elements/element.py @@ -2,56 +2,22 @@ class Element(dict): fields = {} - def __init__(self, fields={}, element=None, keys=None): + def __init__(self, fields=None, element=None, keys=None): + if fields is None: + fields = {} self.element = element - dict.__init__(self, self.fields) + dict.__init__(self, dict.fromkeys(self.fields)) if not keys: keys = fields.keys() for key in keys: if key in fields: - self[key] = fields[keys] + self[key] = fields[key] - @staticmethod - def get(xml, xpath, element_class=None, fields=None): - """ - Search the specifed xml node for elements that match the - specified xpath query. - Returns a list of objectes instanced by the specfied element_class. - """ - if not element_class: - element_class = Element - if not fields: - fields = element_class.fields.keys() - elems = xml.xpath(xpath, namespaces) - objs = [] - for elem in elems: - if not fields: - obj = element_class(elem.attrib, elem) - else: - obj = element_class({}, elem) - for field in fields: - if field in elem.attrib: - obj[field] = elem.attrib[field] - objs.append(obj) - generic_elems = [element_class(elem.attrib, elem) for elem in elems] - return objs - - - @staticmethod - def add(xml, name, objs, fields=None): - """ - Adds a child node to the specified xml node based on - the specified name , element class and object. - """ - if not isinstance(objs, list): - objs = [objs] - if not fields: - fields = obj.keys() - elems = [] - for obj in objs: - elem = xml.add_element(name) - for field in fields: - if field in obj and obj[field]: - elem.set(field, obj[field]) - elems.append(elem) - return elems + def __getattr__(self, name): + if hasattr(self.__dict__, name): + return getattr(self.__dict__, name) + elif hasattr(self.element, name): + return getattr(self.element, name) + else: + raise AttributeError("class Element of type {} has no attribute {}" + .format(self.__class__.__name__, name))