X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Frspecs%2Felements%2Fversions%2Fpgv2Services.py;h=ff9e9d13235804d1089f6fb441a6381cc278348d;hb=1cc8e9613cab8b5b22478de369f259e591c54e6d;hp=470a2e65cba7ded942f7663e9747e93c3840330c;hpb=44dbc99733c218930dc61619c068f1038c4f33e4;p=sfa.git diff --git a/sfa/rspecs/elements/versions/pgv2Services.py b/sfa/rspecs/elements/versions/pgv2Services.py index 470a2e65..ff9e9d13 100644 --- a/sfa/rspecs/elements/versions/pgv2Services.py +++ b/sfa/rspecs/elements/versions/pgv2Services.py @@ -1,65 +1,43 @@ -from lxml import etree -from sfa.util.plxrn import PlXrn -from sfa.util.xrn import Xrn +from sfa.rspecs.elements.element import Element from sfa.rspecs.elements.execute import Execute from sfa.rspecs.elements.install import Install +from sfa.rspecs.elements.services import ServicesElement from sfa.rspecs.elements.login import Login -from sfa.rspecs.rspec_elements import RSpecElement, RSpecElements class PGv2Services: - elements = { - 'services': RSpecElement(RSpecElements.SERVICES, '//default:services | //services'), - 'install': RSpecElement(RspecElements.INSTALL, './default:install | ./install'), - 'execute': RSpecElement(RspecElements.EXECUTE, './default:execute | ./execute'), - 'login': RSpecElement(RspecElements.LOGIN, './default:login | ./login'), - } - @staticmethod def add_services(xml, services): + if not services: + return for service in services: - service_elem = etree.SubElement(xml, 'service') - for install in service.get('install', []): - install_elem = etree.SubElement(service_elem, 'install') - for field in Install.fields: - if field in install: - install_elem.set(field, install[field]) - for execute in service.get('execute', []): - execute_elem = etree.SubElement(service_elem, 'execute') - for field in Execute.fields: - if field in execute: - execute_elem.set(field, execute[field]) - for login in service.get('login', []): - login_elem = etree.SubElement(service_elem, 'login') - for field in Login.fields: - if field in login: - login_elem.set(field, login[field]) - + service_elem = xml.add_element('services') + child_elements = {'install': Install.fields, + 'execute': Execute.fields, + 'login': Login.fields} + for (name, fields) in child_elements.items(): + child = service.get(name) + if not child: + continue + if isinstance(child, dict): + service_elem.add_instance(name, child, fields) + elif isinstance(child, list): + for obj in child: + service_elem.add_instance(name, obj, fields) @staticmethod def get_services(xml): services = [] - for services_elem in xml.xpath(PGv2Services.elements['services'].path): - service = Services(services_elem.attrib, services_elem) - - # get install elements - service['install'] = [] - for install_elem in xml.xpath(PGv2Services.elements['install'].path): - install = Install(install_elem.attrib, install_elem) - service['install'].append(install) - - # get execute elements - service['execute'] = [] - for execute_elem in xml.xpath(PGv2Services.elements['execute'].path): - execute = Execute(execute_elem.attrib, execute_elem) - service['execute'].append(execute) - - # get login elements - service['login'] = [] - for login_elem in xml.xpath(PGv2Services.elements['login'].path): - login = Login(login_elem.attrib, login_elem) - service['login'].append(login) - + for services_elem in xml.xpath('./default:services | ./services'): + service = ServicesElement(services_elem.attrib, services_elem) + # get install + install_elems = xml.xpath('./default:install | ./install') + service['install'] = [install_elem.get_instance(Install) for install_elem in install_elems] + # get execute + execute_elems = xml.xpath('./default:execute | ./execute') + service['execute'] = [execute_elem.get_instance(Execute) for execute_elem in execute_elems] + # get login + login_elems = xml.xpath('./default:login | ./login') + service['login'] = [login_elem.get_instance(Login) for login_elem in login_elems] services.append(service) - return services