box_get removed and replaced for get in testbed_impl
authorAlina Quereilhac <alina.quereilhac@inria.fr>
Sun, 1 May 2011 17:24:02 +0000 (19:24 +0200)
committerAlina Quereilhac <alina.quereilhac@inria.fr>
Sun, 1 May 2011 17:24:02 +0000 (19:24 +0200)
src/nepi/core/testbed_impl.py
src/nepi/testbeds/netns/execute.py
src/nepi/testbeds/ns3/execute.py
src/nepi/testbeds/planetlab/execute.py
test/lib/mock/execute.py

index 05c7c96..25982db 100644 (file)
@@ -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
index 935add1..605d410 100644 (file)
@@ -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
index a89a6b7..936d3ba 100644 (file)
@@ -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)
index edbaa9a..0f76fbf 100644 (file)
@@ -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
index c714cf2..f2b1278 100644 (file)
@@ -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)