NOT WORKING COMMIT! started adding netns testbed instance support
[nepi.git] / src / nepi / testbeds / netns / description.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 from nepi.core import description 
5 import sys
6
7 TESTBED_ID = "netns"
8
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)
14
15 def add_traces(factory, traces_metadata):
16     for (name, help) in traces_metadata: 
17             factory.add_trace(name, help)
18
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)
24
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)
30            
31 def create_factory_from_metadata(factory_id, info):
32         help = info["help"]
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)
44         else:
45             factory = description.BoxFactory(factory_id, display_name, help, category)
46         if "connector_types" in info:
47             add_connector_types(factory, info["connector_types"])
48         if "traces" in info:
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"])
54         return factory
55
56 def create_factories(version):
57     factories = list()
58     mod_name = "nepi.testbeds.netns.metadata_v%s" % (version)
59     if not mod_name in sys.modules:
60         __import__(mod_name)
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)
65     return factories
66
67 class TestbedFactoriesProvider(description.TestbedFactoriesProvider):
68     def __init__(self, testbed_version):
69         super(TestbedFactoriesProvider, self).__init__(TESTBED_ID, 
70                 testbed_version)
71         for factory in create_factories(testbed_version):
72             self.add_factory(factory)