initial checkin
[sfa.git] / sfa / rspecs / elements / versions / pgv2Services.py
diff --git a/sfa/rspecs/elements/versions/pgv2Services.py b/sfa/rspecs/elements/versions/pgv2Services.py
new file mode 100644 (file)
index 0000000..741fbac
--- /dev/null
@@ -0,0 +1,65 @@
+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
+