added BaseVersion class
[sfa.git] / sfa / rspecs / rspec_version.py
1 #!/usr/bin/python
2 from sfa.util.sfalogging import logger
3
4 class BaseVersion:
5     type = None
6     content_type = None
7     version = None
8     schema = None
9     naemspace = None
10     extensions = {}
11     elements = []
12
13     def to_dict(self):
14         return {
15             'type': self.type,
16             'version': self.version,
17             'schema': self.schema,
18             'namespace': self.namespace,
19             'extensions': self.extensions
20         }
21
22     def to_string(self):
23         return "%s %s" % (self.type, self.version)
24     
25
26 class RSpecVersion(dict):
27
28     fields = {'type': None,
29               'version': None,
30               'schema': None,
31               'namespace': None,
32               'extensions': []
33         }
34     def __init__(self, version={}):
35         
36         dict.__init__(self, self.fields)
37
38         if not version:
39             from sfa.rspecs.sfa_rspec import sfa_rspec_version
40             self.update(sfa_rspec_version)          
41         elif isinstance(version, dict):
42             self.update(version)
43         elif isinstance(version, basestring):
44             version_parts = version.split(' ')
45             num_parts = len(version_parts)
46             self['type'] = version_parts[0]
47             if num_parts > 1:
48                 self['version'] = version_parts[1]
49         else:
50             logger.info("Unable to parse rspec version, using default")
51
52     def get_version_name(self):
53         return "%s %s" % (str(self['type']), str(self['version']))
54
55 if __name__ == '__main__':
56
57     from sfa.rspecs.pl_rspec_version import ad_rspec_versions
58     for version in [RSpecVersion(), 
59                     RSpecVersion("SFA"), 
60                     RSpecVersion("SFA 1"),
61                     RSpecVersion(ad_rspec_versions[0])]: 
62         print version.get_version_name() + ": " + str(version)
63