9138a7489b8db3a31aceb2bff5b9d127805d4996
[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()) and \
43                        item['version'] != '' and item['url'] != '':
44                         versions[str(item['version'])] = item['url']
45         return versions  
46                 
47