From: Alina Quereilhac Date: Sun, 1 May 2011 17:24:02 +0000 (+0200) Subject: box_get removed and replaced for get in testbed_impl X-Git-Tag: nepi_v2~99 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=61cfb0ec0d5a38ff5e08763d12d36bda17c4183f;p=nepi.git box_get removed and replaced for get in testbed_impl --- diff --git a/src/nepi/core/testbed_impl.py b/src/nepi/core/testbed_impl.py index 05c7c96a..25982db8 100644 --- a/src/nepi/core/testbed_impl.py +++ b/src/nepi/core/testbed_impl.py @@ -323,7 +323,7 @@ class TestbedController(execute.TestbedController): self._set[guid][time] = dict() self._set[guid][time][name] = value - def box_get(self, time, guid, name): + def get(self, time, guid, name): """ Helper for subclasses, gets an attribute from box definitions if available. Throws KeyError if the GUID wasn't created @@ -341,8 +341,6 @@ class TestbedController(execute.TestbedController): raise AttributeError, "Attribute %s can only be queried during experiment design" % name return factory.box_attributes.get_attribute_value(name) - #get: NotImplementedError - def box_get_route(self, guid, index, attribute): """ Helper implementation for get_route, returns information diff --git a/src/nepi/testbeds/netns/execute.py b/src/nepi/testbeds/netns/execute.py index 935add11..605d410f 100644 --- a/src/nepi/testbeds/netns/execute.py +++ b/src/nepi/testbeds/netns/execute.py @@ -3,6 +3,7 @@ from constants import TESTBED_ID from nepi.core import testbed_impl +from nepi.util.constants import TESTBED_STATUS_CREATED import os class TestbedController(testbed_impl.TestbedController): @@ -24,28 +25,27 @@ class TestbedController(testbed_impl.TestbedController): self._home_directory = self._attributes.\ get_attribute_value("homeDirectory") self._netns = self._load_netns_module() + super(TestbedController, self).do_setup() def set(self, time, guid, name, value): super(TestbedController, self).set(time, guid, name, value) - # TODO: take on account schedule time for the task element = self._elements.get(guid) if element: setattr(element, name, value) def get(self, time, guid, name): + value = super(TestbedController, self).get(time, guid, name) # TODO: take on account schedule time for the task + factory_id = self._create[guid] + factory = self._factories[factory_id] + if factory.box_attributes.is_attribute_design_only(name): + return value element = self._elements.get(guid) - if element: - try: - if hasattr(element, name): - # Runtime attribute - return getattr(element, name) - else: - # Try design-time attributes - return self.box_get(time, guid, name) - except KeyError, AttributeError: - return None + try: + return getattr(element, name) + except KeyError, AttributeError: + return value def get_route(self, guid, index, attribute): # TODO: fetch real data from netns diff --git a/src/nepi/testbeds/ns3/execute.py b/src/nepi/testbeds/ns3/execute.py index a89a6b70..936d3ba2 100644 --- a/src/nepi/testbeds/ns3/execute.py +++ b/src/nepi/testbeds/ns3/execute.py @@ -42,31 +42,32 @@ class TestbedController(testbed_impl.TestbedController): def set(self, time, guid, name, value): super(TestbedController, self).set(time, guid, name, value) # TODO: take on account schedule time for the task - if self._status < TESTBED_STATUS_CREATED or \ - factory.box_attributes.is_attribute_design_only(name): + factory_id = self._create[guid] + factory = self._factories[factory_id] + if factory.box_attributes.is_attribute_design_only(name): return element = self._elements[guid] ns3_value = self._to_ns3_value(guid, name, value) element.SetAttribute(name, ns3_value) def get(self, time, guid, name): + value = super(TestbedController, self).get(time, guid, name) # TODO: take on account schedule time for the task + factory_id = self._create[guid] + factory = self._factories[factory_id] + if factory.box_attributes.is_attribute_design_only(name): + return value TypeId = self.ns3.TypeId() typeid = TypeId.LookupByName(factory_id) info = TypeId.AttributeInfo() if not typeid or not typeid.LookupAttributeByName(name, info): - try: - # Try design-time attributes - return self.box_get(time, guid, name) - except KeyError, AttributeError: - return None + raise AttributeError("Invalid attribute %s for element type %d" % \ + (name, guid)) checker = info.checker ns3_value = checker.Create() element = self._elements[guid] element.GetAttribute(name, ns3_value) value = ns3_value.SerializeToString(checker) - factory_id = self._create[guid] - factory = self._factories[factory_id] attr_type = factory.box_attributes.get_attribute_type(name) if attr_type == Attribute.INTEGER: return int(value) diff --git a/src/nepi/testbeds/planetlab/execute.py b/src/nepi/testbeds/planetlab/execute.py index edbaa9ae..0f76fbfa 100644 --- a/src/nepi/testbeds/planetlab/execute.py +++ b/src/nepi/testbeds/planetlab/execute.py @@ -58,6 +58,7 @@ class TestbedController(testbed_impl.TestbedController): get_attribute_value("authPass") self.sliceSSHKey = self._attributes.\ get_attribute_value("sliceSSHKey") + super(TestbedController, self).do_setup() def do_preconfigure(self): # Perform resource discovery if we don't have @@ -107,7 +108,6 @@ class TestbedController(testbed_impl.TestbedController): # cleanup del self._to_provision - def set(self, time, guid, name, value): super(TestbedController, self).set(time, guid, name, value) # TODO: take on account schedule time for the task @@ -120,18 +120,17 @@ class TestbedController(testbed_impl.TestbedController): element.refresh() def get(self, time, guid, name): + value = super(TestbedController, self).get(time, guid, name) # TODO: take on account schedule time for the task + factory_id = self._create[guid] + factory = self._factories[factory_id] + if factory.box_attributes.is_attribute_design_only(name): + return value element = self._elements.get(guid) - if element: - try: - if hasattr(element, name): - # Runtime attribute - return getattr(element, name) - else: - # Try design-time attributes - return self.box_get(time, guid, name) - except KeyError, AttributeError: - return None + try: + return getattr(element, name) + except KeyError, AttributeError: + return value def get_route(self, guid, index, attribute): # TODO: fetch real data from planetlab diff --git a/test/lib/mock/execute.py b/test/lib/mock/execute.py index c714cf2d..f2b1278a 100644 --- a/test/lib/mock/execute.py +++ b/test/lib/mock/execute.py @@ -8,21 +8,9 @@ class TestbedController(testbed_impl.TestbedController): def __init__(self, testbed_version): super(TestbedController, self).__init__(TESTBED_ID, testbed_version) - def do_setup(self): - pass - def do_configure(self): pass - def set(self, time, guid, name, value): - super(TestbedController, self).set(time, guid, name, value) - - def get(self, time, guid, name): - try: - return self.box_get(time, guid, name) - except KeyError, AttributeError: - return None - def get_route(self, guid, index, attribute): try: return self.box_get_route(guid, int(index), attribute)