2 # -*- coding: utf-8 -*-
4 from nepi.util.guid import GuidGenerator
5 from nepi.util.parser.xml import XmlParser
8 class ExperimentDescription(object):
9 def __init__(self, guid = 0):
10 self._guid_generator = GuidGenerator(guid)
11 # testbed design instances
12 self._testbed_descriptions = dict()
13 self._testbed_providers = dict()
16 def testbed_descriptions(self):
17 return self._testbed_descriptions.values()
20 def xml_description(self):
22 return parser.to_xml(self)
24 def testbed_description(self, guid):
25 return self._testbed_descriptions[guid] \
26 if guid in self._testbed_descriptions else None
29 for testbed_description in self._testbed_descriptions.values():
30 box = testbed_description.box(guid)
34 def add_testbed_description(self, testbed_id, testbed_version):
35 testbed_module = self._testbed_module(testbed_id)
36 testbed_provider = self._testbed_provider(testbed_id, testbed_version)
37 testbed_description = testbed_module.create_description_instance(
38 self._guid_generator, testbed_version, testbed_provider)
39 guid = testbed_description.guid
40 self._testbed_descriptions[guid] = testbed_description
41 return testbed_description
43 def remove_testbed_description(self, testbed_description):
44 guid = testbed_description.guid
45 del self._testbed_descriptions[guid]
47 def _testbed_module(self, testbed_id):
48 mod_name = 'nepi.testbeds.%s' % testbed_id
49 if not mod_name in sys.modules:
51 return sys.modules[mod_name]
53 def _testbed_provider(self, testbed_id, testbed_version):
54 key = "%s_%s" % (testbed_id, testbed_version)
55 if key not in self._testbed_providers:
56 testbed_module = self._testbed_module(testbed_id)
57 testbed_provider = testbed_module.create_provider(testbed_version)
58 self._testbed_providers[key] = testbed_provider
59 return self._testbed_providers[key]