added _get_version() method
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Fri, 2 Sep 2011 20:21:35 +0000 (16:21 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Fri, 2 Sep 2011 20:21:35 +0000 (16:21 -0400)
sfa/rspecs/version_manager.py

index 511ede0..534ec83 100644 (file)
@@ -1,7 +1,9 @@
 import os
 
 class VersionManager:
-    
+    default_type = 'SFA'
+    default_version_num = '1'     
+        
     def __init__(self):
         self.versions = []
         self.load_versions()
@@ -22,21 +24,43 @@ class VersionManager:
                 if hasattr(attr, 'version'):
                     self.versions.append(attr)
 
-    def get_version(self, format, version_num=None, type=None):
+    def _get_version(self, type, version_num=None, content_type=None):
         retval = None
         for version in self.versions:
-            if format is None or format.lower() == version.format.lower():
+            if type is None or type.lower() == version.type.lower():
                 if version_num is None or version_num == version.version:
-                    if type is None or type.lower() == version.type.lower():
+                    if content_type is None or content_type.lower() == version.content_type.lower():
                         retval = version
         if not retval:
-            raise Exception, "No such version format: %s version: %s type:%s "% (format, version_num, type)
-        return retval    
-        
+            raise Exception, "No such version format: %s version: %s type:%s "% (type, version_num, content_type)
+        return retval
+
+    def get_version(self, version):
+        retval = None
+        if isinstance(version, dict):
+            retval =  self._get_version(version.get('type'), version.get('version_num'), version.get('content_type'))
+        elif isinstance(version, basestring):
+            version_parts = version.split(' ')     
+            num_parts = len(version_parts)
+            type = version_parts[0]
+            version_num = None
+            content_type = None
+            if num_parts > 1:
+                version_num = version_parts[1]
+            if num_parts > 2:
+                content_type = version_parts[2]
+            retval = self._get_version(type, version_num, content_type) 
+        else:
+            logger.info("Unable to parse rspec version, using default")
+            retval = self._get_version(self.default_type, self.default_version_num)   
+        return retval
 
 if __name__ == '__main__':
     v = VersionManager()
     print v.versions
-    print v.get_version('sfa') 
+    print v.get_version('sfa 1') 
+    print v.get_version('protogeni 2') 
+    print v.get_version('protogeni 2 advertisement')