Merge branch 'master' into senslab2
[sfa.git] / sfa / rspecs / elements / versions / pgv2Services.py
1 from sfa.rspecs.elements.element import Element  
2 from sfa.rspecs.elements.execute import Execute  
3 from sfa.rspecs.elements.install import Install  
4 from sfa.rspecs.elements.login import Login
5
6 class PGv2Services:
7     @staticmethod
8     def add_services(xml, services):
9         if not services:
10             return 
11         for service in services:
12             service_elem = xml.add_element('services')
13             child_elements = {'install': Install.fields,
14                               'execute': Execute.fields,
15                               'login': Login.fields}
16             for (name, fields) in child_elements.items():
17                 child = service.get(name)
18                 if not child: 
19                     continue
20                 if isinstance(child, dict):
21                     service_elem.add_instance(name, child, fields)
22                 elif isinstance(child, list):
23                     for obj in child:
24                         service_elem.add_instance(name, obj, fields)
25               
26     @staticmethod
27     def get_services(xml):
28         services = []
29         for services_elem in xml.xpath('./default:services | ./services'):
30             service = Services(services_elem.attrib, services_elem)
31             # get install 
32             install_elems = xml.xpath('./default:install | ./install')
33             service['install'] = [install_elem.get_instance(Install) for install_elem in install_elems]
34             # get execute
35             execute_elems = xml.xpath('./default:execute | ./execute')
36             service['execute'] = [execute_elem.get_instance(Execute) for execute_elem in execute_elems]
37             # get login
38             login_elems = xml.xpath('./default:login | ./login')
39             service['login'] = [login_elem.get_instance(Login) for login_elem in login_elems]
40             services.append(service)  
41         return services
42