2 # -*- coding: utf-8 -*-
4 from nepi.core import description
9 def add_connector_types(factory, connector_types_metadata):
10 for (connector_type_id, help, name, max, min,
11 allowed_connector_type_ids) in connector_types_metadata:
12 factory.add_connector_type(connector_type_id, help, name, max,
13 min, allowed_connector_type_ids)
15 def add_traces(factory, traces_metadata):
16 for (name, help) in traces_metadata:
17 factory.add_trace(name, help)
19 def add_attributes(factory, attributes_metadata):
20 for (name, help, type, value, range, allowed, readonly,
21 validation_function) in attributes_metadata:
22 factory.add_attribute(name, help, type, value, range, allowed,
23 readonly, validation_function)
25 def add_box_attributes(factory, box_attributes_metadata):
26 for (name, help, type, value, range, allowed, readonly,
27 validation_function) in box_attributes_metadata:
28 factory.add_box_attribute(name, help, type, value, range,
29 allowed, readonly, validation_function)
31 def create_factory_from_metadata(factory_id, info):
33 category = info["category"]
34 display_name = info["display_name"]
35 factory_type = info["factory_type"] if "factory_type" in info else None
36 if factory_type == "addressable":
37 family = info["family"]
38 max_addresses = info["max_addresses"]
39 factory = description.AddressableBoxFactory(factory_id,
40 display_name, family, max_addresses, help, category)
41 elif factory_type == "routing":
42 factory = description.RoutingTableBoxFactory(factory_id,
43 display_name, help, category)
45 factory = description.BoxFactory(factory_id, display_name, help, category)
46 if "connector_types" in info:
47 add_connector_types(factory, info["connector_types"])
49 add_traces(factory, info["traces"])
50 if "attributes" in info:
51 add_attributes(factory, info["attributes"])
52 if "box_attributes" in info:
53 add_box_attributes(factory, info["box_attributes"])
56 def create_factories(version):
58 mod_name = "%s.metadata_v%s" % (__name__, version)
59 if not mod_name in sys.modules:
61 metadata = sys.modules[mod_name].get_metadata()
62 for factory_id, info in metadata.iteritems():
63 factory = create_factory_from_metadata(factory_id, info)
64 factories.append(factory)
67 class TestbedFactoriesProvider(description.TestbedFactoriesProvider):
68 def __init__(self, testbed_version):
69 super(TestbedFactoriesProvider, self).__init__(TESTBED_ID,
71 for factory in create_factories(testbed_version):
72 self.add_factory(factory)