X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Frspecs%2Fversion_manager.py;h=cedd54f1b918bad1441e26820c07e7fee368c70d;hb=fad16c7d54b658b37a9b42fbee47b0d4f51cb8ec;hp=f53ec6f95d3accd810b85209b8263aa1fc973927;hpb=8dc98c98958a22d06fd6b01d4eaa7f8db19fb845;p=sfa.git diff --git a/sfa/rspecs/version_manager.py b/sfa/rspecs/version_manager.py index f53ec6f9..cedd54f1 100644 --- a/sfa/rspecs/version_manager.py +++ b/sfa/rspecs/version_manager.py @@ -1,22 +1,26 @@ +from __future__ import print_function + import os -from sfa.util.faults import InvalidRSpec -from sfa.rspecs.rspec_version import BaseVersion +from sfa.util.faults import InvalidRSpec, UnsupportedRSpecVersion +from sfa.rspecs.version import RSpecVersion from sfa.util.sfalogging import logger class VersionManager: - default_type = 'SFA' - default_version_num = '1' - def __init__(self): self.versions = [] self.load_versions() + def __repr__(self): + return ""\ + .format(len(self.versions), + ", ".join( [ str(x) for x in self.versions ])) + def load_versions(self): path = os.path.dirname(os.path.abspath( __file__ )) versions_path = path + os.sep + 'versions' versions_module_path = 'sfa.rspecs.versions' valid_module = lambda x: os.path.isfile(os.sep.join([versions_path, x])) \ - and not x.endswith('.pyc') and x not in ['__init__.py'] + and x.endswith('.py') and x != '__init__.py' files = [f for f in os.listdir(versions_path) if valid_module(f)] for filename in files: basename = filename.split('.')[0] @@ -31,12 +35,14 @@ class VersionManager: 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 version_num is None or str(float(version_num)) == str(float(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): @@ -54,10 +60,12 @@ class VersionManager: if num_parts > 2: content_type = version_parts[2] retval = self._get_version(type, version_num, content_type) - elif isinstance(version, BaseVersion): + elif isinstance(version, RSpecVersion): retval = version + elif not version: + retval = self.versions[0] else: - retval = self._get_version(self.default_type, self.default_version_num) + raise UnsupportedRSpecVersion("No such version: %s "% str(version)) return retval @@ -70,11 +78,24 @@ class VersionManager: raise InvalidRSpec("Unkwnown RSpec schema: %s" % schema) return retval + def show_by_string(self, string): + try: + print(self.get_version(string)) + except Exception as e: + print(e) + + def show_by_schema(self, string): + try: + print(self.get_version_by_schema(string)) + except Exception as e: + print(e) + if __name__ == '__main__': - v = VersionManager() - print v.versions - print v.get_version('sfa 1') - print v.get_version('protogeni 2') - print v.get_version('protogeni 2 advertisement') - print v.get_version_by_schema('http://www.protogeni.net/resources/rspec/2/ad.xsd') + manager = VersionManager() + print(manager) + manager.show_by_string('sfa 1') + manager.show_by_string('protogeni 2') + manager.show_by_string('protogeni 2 advertisement') + manager.show_by_schema('http://www.protogeni.net/resources/rspec/2/ad.xsd') + manager.show_by_schema('http://sorch.netmode.ntua.gr/ws/RSpec/ad.xsd')