initial checkin of VersionManager
[sfa.git] / sfa / rspecs / version_manager.py
1 import os
2
3 class VersionManager:
4     
5     def __init__(self):
6         self.versions = []
7         self.load_versions()
8
9     def load_versions(self):
10         path = os.path.dirname(os.path.abspath( __file__ ))
11         versions_path = path + os.sep + 'versions'
12         versions_module_path = 'sfa.rspecs.versions'
13         valid_module = lambda x: os.path.isfile(os.sep.join([versions_path, x])) \
14                         and not x.endswith('.pyc') and x not in ['__init__.py']
15         files = [f for f in os.listdir(versions_path) if valid_module(f)]
16         for filename in files:
17             basename = filename.split('.')[0]
18             module_path = versions_module_path +'.'+basename
19             module = __import__(module_path, fromlist=module_path)
20             for attr_name in dir(module):
21                 attr = getattr(module, attr_name)
22                 if hasattr(attr, 'version'):
23                     self.versions.append(attr)
24
25     def get_version(self, format, version_num=None, type=None):
26         retval = None
27         for version in self.versions:
28             if format is None or format.lower() == version.format.lower():
29                 if version_num is None or version_num == version.version:
30                     if type is None or type.lower() == version.type.lower():
31                         retval = version
32         if not retval:
33             raise Exception, "No such version format: %s version: %s type:%s "% (format, version_num, type)
34         return retval    
35         
36
37 if __name__ == '__main__':
38     v = VersionManager()
39     print v.versions
40     print v.get_version('sfa') 
41     
42