better support for reporting available api versions
[sfa.git] / sfa / server / api_versions.py
1 import os
2 from sfa.util.xml import XML
3 from sfa.util.config import Config
4
5 class ApiVersions:
6
7     required_fields = ['version', 'url']
8     
9     template = """<api_versions>
10 <api_version name="" version="" url="" />
11 </api_versions>""" 
12
13     def __init__(self, string=None, filename=None, create=False):
14         self.xml = None
15
16         if create:
17             self.create()
18         elif string:
19             self.load(string)
20         elif filename:
21             self.load(filename)
22         else:
23             # load the default file
24             c = Config()
25             api_versions_file = os.path.sep.join([c.config_path, 'api_versions.xml'])
26             self.load(api_versions_file)
27         
28     def create(self):
29         self.xml = XML(string=ApiVersions.template)
30
31     def load(self, source):
32         self.xml = XML(source)
33
34     def get_versions(self):
35         versions = []
36         for value in self.xml.todict().values():
37             if not value:
38                 continue
39             if isinstance(value, list):
40                 for item in value:
41                     if isinstance(item, dict) and \
42                        set(ApiVersions.required_fields).issubset(item.keys()):
43                         api_version = {str(item['version']): item['url']}
44                         versions.append(api_version)
45         return versions  
46                 
47