refactored
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Thu, 10 Nov 2011 19:05:40 +0000 (14:05 -0500)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Thu, 10 Nov 2011 19:05:40 +0000 (14:05 -0500)
sfa/rspecs/elements/versions/pgv2Services.py

index fe946b3..6cb7ec9 100644 (file)
@@ -1,65 +1,25 @@
-from lxml import etree
-from sfa.util.plxrn import PlXrn
-from sfa.util.xrn import Xrn
+from sfa.rspecs.elements.element import Element  
 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.EXECUTE, './default:execute | ./execute'),
-        'login': RSpecElement(RSpecElements.LOGIN, './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]) 
-
+            Element.add(service_elem, 'install', service.get('install', []), Install.fields) 
+            Element.add(service_elem, 'execute', service.get('execute', []), Execute.fields) 
+            Element.add(service_elem, 'login', service.get('login', []), Login.fields) 
               
     @staticmethod
     def get_services(xml):
         services = []
-        for services_elem in xml.xpath(PGv2Services.elements['services'].path):
+        for services_elem in xml.xpath('./default:services | ./services'):
             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)             
-
+            service['install'] = Element.get(service_elem, './default:install | ./install', Install)
+            service['execute'] = Element.get(service_elem, './default:execute | ./execute', Execute)
+            service['login'] = Element.get(service_elem, './default:login | ./login', Login)
             services.append(service)  
         return services