X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Frspecs%2Fversion_manager.py;h=3e7500ce6a1002329a00080eddc225c7bbc75c06;hb=02a4a59a4a49183ec8c631cc03243b97f4602d50;hp=556e9bc229c8a46fde9a8f885f95ec813babdaab;hpb=4380998d70c20745b6c24c2b2a1fdffd26a3454f;p=sfa.git diff --git a/sfa/rspecs/version_manager.py b/sfa/rspecs/version_manager.py index 556e9bc2..3e7500ce 100644 --- a/sfa/rspecs/version_manager.py +++ b/sfa/rspecs/version_manager.py @@ -1,10 +1,9 @@ import os +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() @@ -22,24 +21,27 @@ class VersionManager: 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) @@ -51,9 +53,10 @@ class VersionManager: 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