from lxml import etree from sfa.util.plxrn import PlXrn from sfa.util.xrn import Xrn from sfa.rspecs.elements.execute import Execute from sfa.rspecs.elements.install import Install 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.INSTALL, './default:execute | ./execute'), 'login': RSpecElement(RspecElements.INSTALL, './default:login | ./login'), } @staticmethod def add_services(xml, services): 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]) @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) services.append(service) return services