From: Tony Mack Date: Wed, 18 May 2011 00:04:31 +0000 (-0400) Subject: add support for merging PG rspecs X-Git-Tag: sfa-1.0-22~47 X-Git-Url: http://git.onelab.eu/?p=sfa.git;a=commitdiff_plain;h=4a015ca27e221e7d68378d8337c9e7b0a75f119d add support for merging PG rspecs --- diff --git a/sfa/managers/slice_manager_pl.py b/sfa/managers/slice_manager_pl.py index 17651795..065687d8 100644 --- a/sfa/managers/slice_manager_pl.py +++ b/sfa/managers/slice_manager_pl.py @@ -360,7 +360,6 @@ def ListResources(api, creds, options, call_id): # get the rspec's return format from options rspec_version = RSpecVersion(options.get('rspec_version')) - print dict(rspec_version) version_string = "rspec_%s" % (rspec_version.get_version_name()) # look in cache first @@ -391,17 +390,18 @@ def ListResources(api, creds, options, call_id): results = threads.get_results() #results.append(open('/root/protogeni.rspec', 'r').read()) - rspec = SfaRSpec() + rspec_version = RSpecVersion(my_opts.get('rspec_version')) + if rspec_version['type'].lower() == 'protogeni': + rspec = PGRSpec() + else: + rspec = SfaRSpec() + for result in results: + print "RESULT" try: - tmp_rspec = parse_rspec(result) - if isinstance(tmp_rspec, SfaRSpec): - rspec.merge(result) - elif isinstance(tmp_rspec, PGRSpec): - rspec.merge(RSpecConverter.to_sfa_rspec(result)) - else: - api.logger.info("SM.ListResources: invalid aggregate rspec") + rspec.merge(result) except: + raise api.logger.info("SM.ListResources: Failed to merge aggregate rspec") # cache the result diff --git a/sfa/rspecs/pg_rspec.py b/sfa/rspecs/pg_rspec.py index a998f86c..84181204 100755 --- a/sfa/rspecs/pg_rspec.py +++ b/sfa/rspecs/pg_rspec.py @@ -103,6 +103,19 @@ class PGRSpec(RSpec): pass + def merge(self, in_rspec): + """ + Merge contents for specified rspec with current rspec + """ + + # just copy over all the child elements under the root element + tree = etree.parse(StringIO(in_rspec)) + root = tree.getroot() + for child in root.getchildren(): + self.xml.append(child) + + + if __name__ == '__main__': rspec = PGRSpec() rspec.add_nodes([1]) diff --git a/sfa/rspecs/rspec.py b/sfa/rspecs/rspec.py index fe80006b..de7e250e 100755 --- a/sfa/rspecs/rspec.py +++ b/sfa/rspecs/rspec.py @@ -10,11 +10,11 @@ from sfa.util.faults import SfaNotImplemented, InvalidRSpec class RSpec: header = '\n' template = """""" - namespaces = {} config = Config() xml = None type = None - version = None + version = None + namespaces = None def __init__(self, rspec="", namespaces={}): if rspec: @@ -87,6 +87,8 @@ class RSpec: if opt.text == value: elem.remove(opt) + def merge(self, in_rspec): + pass def validate(self, schema): """