import os
-from sfa.util.faults import InvalidRSpec
+from sfa.util.faults import InvalidRSpec, UnsupportedRSpecVersion
+from sfa.rspecs.baseversion import BaseVersion
from sfa.util.sfalogging import logger
class VersionManager:
- default_type = 'SFA'
- default_version_num = '1'
-
def __init__(self):
self.versions = []
self.load_versions()
module = __import__(module_path, fromlist=module_path)
for attr_name in dir(module):
attr = getattr(module, attr_name)
- if hasattr(attr, 'version'):
- self.versions.append(attr)
+ if hasattr(attr, 'version') and hasattr(attr, 'enabled') and attr.enabled == True:
+ self.versions.append(attr())
def _get_version(self, type, version_num=None, content_type=None):
retval = None
for version in self.versions:
if type is None or type.lower() == version.type.lower():
- if version_num is None or version_num == version.version:
- if content_type is None or content_type.lower() == version.content_type.lower():
+ if version_num is None or str(version_num) == version.version:
+ if content_type is None or content_type.lower() == version.content_type.lower() \
+ or version.content_type == '*':
retval = version
+ ### sounds like we should be glad with the first match, not the last one
+ break
if not retval:
- raise InvalidRSpec("No such version format: %s version: %s type:%s "% (type, version_num, content_type))
+ raise UnsupportedRSpecVersion("[%s %s %s] is not suported here"% (type, version_num, content_type))
return retval
def get_version(self, version=None):
retval = None
if isinstance(version, dict):
- retval = self._get_version(version.get('type'), version.get('version_num'), version.get('content_type'))
+ retval = self._get_version(version.get('type'), version.get('version'), version.get('content_type'))
elif isinstance(version, basestring):
version_parts = version.split(' ')
num_parts = len(version_parts)
if num_parts > 2:
content_type = version_parts[2]
retval = self._get_version(type, version_num, content_type)
+ elif isinstance(version, BaseVersion):
+ retval = version
else:
- logger.info("Unable to parse rspec version, using default")
- retval = self._get_version(self.default_type, self.default_version_num)
+ raise UnsupportedRSpecVersion("No such version: %s "% str(version))
return retval