python3 - 2to3 + miscell obvious tweaks
[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.services import ServicesElement
5 from sfa.rspecs.elements.login import Login
6
7
8 class PGv2Services:
9
10     @staticmethod
11     def add_services(xml, services):
12         if not services:
13             return
14         for service in services:
15             service_elem = xml.add_element('services')
16             child_elements = {'install': Install.fields,
17                               'execute': Execute.fields,
18                               'login': Login.fields}
19             for (name, fields) in list(child_elements.items()):
20                 child = service.get(name)
21                 if not child:
22                     continue
23                 if isinstance(child, dict):
24                     service_elem.add_instance(name, child, fields)
25                 elif isinstance(child, list):
26                     for obj in child:
27                         service_elem.add_instance(name, obj, fields)
28
29 #            # add ssh_users
30 #            if service['services_user']:
31 #                for ssh_user in service['services_user']:
32 #                    ssh_user_elem = service_elem.add_element('{%s}services_user' % xml.namespaces['ssh-user'],
33 #                                                             login=ssh_user['login'],
34 #                                                             user_urn=ssh_user['user_urn'])
35 #                    for key in ssh_user['keys']:
36 #                        pkey_elem = ssh_user_elem.add_element('{%s}public_key' % xml.namespaces['ssh-user'])
37 #                        pkey_elem.element.text=key
38
39     @staticmethod
40     def get_services(xml):
41         services = []
42         for services_elem in xml.xpath('./default:services | ./services'):
43             service = ServicesElement(services_elem.attrib, services_elem)
44             # get install
45             install_elems = services_elem.xpath(
46                 './default:install | ./install')
47             service['install'] = [install_elem.get_instance(
48                 Install) for install_elem in install_elems]
49             # get execute
50             execute_elems = services_elem.xpath(
51                 './default:execute | ./execute')
52             service['execute'] = [execute_elem.get_instance(
53                 Execute) for execute_elem in execute_elems]
54             # get login
55             login_elems = services_elem.xpath('./default:login | ./login')
56             service['login'] = [login_elem.get_instance(
57                 Login) for login_elem in login_elems]
58
59 #            ssh_user_elems = services_elem.xpath('./ssh-user:service_user | ./service_user')
60 #            services_user = []
61 #            for ssh_user_elem in ssh_user_elems:
62 #                services_user = ssh_user_elem.get_instance(None, fields=['login', 'user_urn'])
63 #            service['services_user'] = services_user
64
65             services.append(service)
66         return services