Merge branch 'upstreammaster'
[sfa.git] / sfa / rspecs / elements / versions / pgv2Services.py
1 from lxml import etree
2 from sfa.util.plxrn import PlXrn
3 from sfa.util.xrn import Xrn
4 from sfa.rspecs.elements.execute import Execute  
5 from sfa.rspecs.elements.install import Install  
6 from sfa.rspecs.elements.login import Login
7 from sfa.rspecs.rspec_elements import RSpecElement, RSpecElements
8
9 class PGv2Services:
10     elements = {
11         'services': RSpecElement(RSpecElements.SERVICES, '//default:services | //services'),
12         'install': RSpecElement(RspecElements.INSTALL, './default:install | ./install'),
13         'execute': RSpecElement(RspecElements.EXECUTE, './default:execute | ./execute'),
14         'login': RSpecElement(RspecElements.LOGIN, './default:login | ./login'),
15     }  
16     
17     @staticmethod
18     def add_services(xml, services):
19         for service in services:
20             service_elem = etree.SubElement(xml, 'service')
21             for install in service.get('install', []):
22                 install_elem = etree.SubElement(service_elem, 'install')
23                 for field in Install.fields:
24                     if field in install:
25                         install_elem.set(field, install[field])
26             for execute in service.get('execute', []):
27                 execute_elem = etree.SubElement(service_elem, 'execute')
28                 for field in Execute.fields:
29                     if field in execute:
30                         execute_elem.set(field, execute[field])
31             for login in service.get('login', []):
32                 login_elem = etree.SubElement(service_elem, 'login')
33                 for field in Login.fields:
34                     if field in login:
35                         login_elem.set(field, login[field]) 
36
37               
38     @staticmethod
39     def get_services(xml):
40         services = []
41         for services_elem in xml.xpath(PGv2Services.elements['services'].path):
42             service = Services(services_elem.attrib, services_elem)
43             
44             # get install elements
45             service['install'] = []
46             for install_elem in xml.xpath(PGv2Services.elements['install'].path):
47                 install = Install(install_elem.attrib, install_elem)
48                 service['install'].append(install)
49             
50             # get execute elements
51             service['execute'] = []
52             for execute_elem in xml.xpath(PGv2Services.elements['execute'].path):
53                 execute = Execute(execute_elem.attrib, execute_elem)
54                 service['execute'].append(execute)
55
56             # get login elements
57             service['login'] = []
58             for login_elem in xml.xpath(PGv2Services.elements['login'].path):
59                 login = Login(login_elem.attrib, login_elem)
60                 service['login'].append(login)             
61
62             services.append(service)  
63  
64         return services
65