5 default_version_num = '1'
11 def load_versions(self):
12 path = os.path.dirname(os.path.abspath( __file__ ))
13 versions_path = path + os.sep + 'versions'
14 versions_module_path = 'sfa.rspecs.versions'
15 valid_module = lambda x: os.path.isfile(os.sep.join([versions_path, x])) \
16 and not x.endswith('.pyc') and x not in ['__init__.py']
17 files = [f for f in os.listdir(versions_path) if valid_module(f)]
18 for filename in files:
19 basename = filename.split('.')[0]
20 module_path = versions_module_path +'.'+basename
21 module = __import__(module_path, fromlist=module_path)
22 for attr_name in dir(module):
23 attr = getattr(module, attr_name)
24 if hasattr(attr, 'version'):
25 self.versions.append(attr)
27 def _get_version(self, type, version_num=None, content_type=None):
29 for version in self.versions:
30 if type is None or type.lower() == version.type.lower():
31 if version_num is None or version_num == version.version:
32 if content_type is None or content_type.lower() == version.content_type.lower():
35 raise Exception, "No such version format: %s version: %s type:%s "% (type, version_num, content_type)
38 def get_version(self, version):
40 if isinstance(version, dict):
41 retval = self._get_version(version.get('type'), version.get('version_num'), version.get('content_type'))
42 elif isinstance(version, basestring):
43 version_parts = version.split(' ')
44 num_parts = len(version_parts)
45 type = version_parts[0]
49 version_num = version_parts[1]
51 content_type = version_parts[2]
52 retval = self._get_version(type, version_num, content_type)
54 logger.info("Unable to parse rspec version, using default")
55 retval = self._get_version(self.default_type, self.default_version_num)
59 if __name__ == '__main__':
62 print v.get_version('sfa 1')
63 print v.get_version('protogeni 2')
64 print v.get_version('protogeni 2 advertisement')