From e7c5823e717497ec2be80c763f06eb77b27a9aea Mon Sep 17 00:00:00 2001 From: Alina Quereilhac Date: Wed, 6 Jul 2011 15:16:53 +0200 Subject: [PATCH] filter attributes by flag --- src/nepi/core/attributes.py | 15 ++++++++++----- src/nepi/core/connector.py | 4 ++++ src/nepi/core/execute.py | 11 ++++++----- src/nepi/core/testbed_impl.py | 4 ++-- src/nepi/testbeds/netns/execute.py | 6 ++++-- src/nepi/util/proxy.py | 6 +++--- 6 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/nepi/core/attributes.py b/src/nepi/core/attributes.py index 201ca048..272cbef2 100644 --- a/src/nepi/core/attributes.py +++ b/src/nepi/core/attributes.py @@ -39,7 +39,7 @@ class Attribute(object): HasNoDefaultValue = 0x08 def __init__(self, name, help, type, value = None, range = None, - allowed = None, flags = NoFlags, validation_function = None, + allowed = None, flags = None, validation_function = None, category = None): if not type in Attribute.types: raise AttributeError("invalid type %s " % type) @@ -47,7 +47,7 @@ class Attribute(object): self._type = type self._help = help self._value = value - self._flags = flags + self._flags = flags if flags != None else Attribute.NoFlags # range: max and min possible values self._range = range # list of possible values @@ -150,9 +150,14 @@ class AttributesMap(object): def attributes(self): return self._attributes.values() - @property - def attributes_list(self): - return self._attributes.keys() + def get_attribute_list(self, filter_flags = None): + attributes = self._attributes + if filter_flags != None: + def filter_attrs(attr): + (attr_id, attr_data) = attr + return not ((attr_data.flags & filter_flags) == filter_flags) + attributes = dict(filter(filter_attrs, attributes.iteritems())) + return attributes.keys() def set_attribute_value(self, name, value): self._attributes[name].value = value diff --git a/src/nepi/core/connector.py b/src/nepi/core/connector.py index e8ff719f..a62d3049 100644 --- a/src/nepi/core/connector.py +++ b/src/nepi/core/connector.py @@ -81,14 +81,18 @@ class ConnectorType(object): testbed_id, factory_id, name = connector_type_id # the key is always a candidate + #print " 1 - ", connector_type_id yield connector_type_id # Try wildcard combinations if (testbed_id, None, name) != connector_type_id: + #print " 2 - ", (testbed_id, None, name) yield (testbed_id, None, name) if (None, factory_id, name) != connector_type_id: + #print " 3 - ", (None, factory_id, name) yield (None, factory_id, name) if (None, None, name) != connector_type_id: + #print " 4 - ", (None, None, name) yield (None, None, name) def add_from_connection(self, testbed_id, factory_id, name, can_cross, diff --git a/src/nepi/core/execute.py b/src/nepi/core/execute.py index 55f4b1ae..9e7b8dcb 100644 --- a/src/nepi/core/execute.py +++ b/src/nepi/core/execute.py @@ -165,7 +165,7 @@ class TestbedController(object): """ raise NotImplementedError - def get_attribute_list(self, guid): + def get_attribute_list(self, guid, filter_flags = None): raise NotImplementedError def get_factory_id(self, guid): @@ -368,7 +368,7 @@ class ExperimentController(object): for testbed_guid, testbed_config in self._deployment_config.iteritems(): testbed_guid = str(testbed_guid) conf.add_section(testbed_guid) - for attr in testbed_config.attributes_list: + for attr in testbed_config.get_attribute_list(): if attr not in TRANSIENT: conf.set(testbed_guid, attr, testbed_config.get_attribute_value(attr)) @@ -399,7 +399,7 @@ class ExperimentController(object): testbed_guid = str(testbed_guid) conf.add_section(testbed_guid) - for attr in testbed_config.attributes_list: + for attr in testbed_config.get_attribute_list(): if attr not in TRANSIENT: getter = getattr(conf, TYPEMAP.get( testbed_config.get_attribute_type(attr), @@ -772,8 +772,9 @@ class ExperimentController(object): _testbed_id = cross_testbed.testbed_id, _testbed_version = cross_testbed.testbed_version) cross_data[cross_testbed_guid][cross_guid] = elem_cross_data - attributes_list = cross_testbed.get_attribute_list(cross_guid) - for attr_name in attributes_list: + attribute_list = cross_testbed.get_attribute_list(cross_guid, + filter_flags = Attribute.DesignOnly) + for attr_name in attribute_list: attr_value = cross_testbed.get(cross_guid, attr_name) elem_cross_data[attr_name] = attr_value return cross_data diff --git a/src/nepi/core/testbed_impl.py b/src/nepi/core/testbed_impl.py index fd76bf4d..0c19d627 100644 --- a/src/nepi/core/testbed_impl.py +++ b/src/nepi/core/testbed_impl.py @@ -430,10 +430,10 @@ class TestbedController(execute.TestbedController): return addresses[index][attribute_index] - def get_attribute_list(self, guid): + def get_attribute_list(self, guid, filter_flags = None): factory = self._get_factory(guid) attribute_list = list() - return factory.box_attributes.attributes_list + return factory.box_attributes.get_attribute_list(filter_flags) def get_factory_id(self, guid): factory = self._get_factory(guid) diff --git a/src/nepi/testbeds/netns/execute.py b/src/nepi/testbeds/netns/execute.py index 350c8f3e..4bfff535 100644 --- a/src/nepi/testbeds/netns/execute.py +++ b/src/nepi/testbeds/netns/execute.py @@ -86,7 +86,8 @@ class TestbedController(testbed_impl.TestbedController): # 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): + if factory.box_attributes.is_attribute_design_only(name) or \ + factory.box_attributes.is_attribute_invisible(name): return element = self._elements.get(guid) if element: @@ -97,7 +98,8 @@ class TestbedController(testbed_impl.TestbedController): # 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): + if factory.box_attributes.is_attribute_design_only(name) or \ + factory.box_attributes.is_attribute_invisible(name): return value element = self._elements.get(guid) try: diff --git a/src/nepi/util/proxy.py b/src/nepi/util/proxy.py index dd0f7332..9cb26f34 100644 --- a/src/nepi/util/proxy.py +++ b/src/nepi/util/proxy.py @@ -648,10 +648,10 @@ class TestbedControllerServer(BaseServer): return self._testbed.status(guid) @Marshalling.handles(GET_ATTRIBUTE_LIST) - @Marshalling.args(int) + @Marshalling.args(int, int) @Marshalling.retval( Marshalling.pickled_data ) - def get_attribute_list(self, guid): - return self._testbed.get_attribute_list(guid) + def get_attribute_list(self, guid, filter_flags = None): + return self._testbed.get_attribute_list(guid, filter_flags) @Marshalling.handles(GET_FACTORY_ID) @Marshalling.args(int) -- 2.47.0