start to deal with xmlrpclib errors
[myslice.git] / manifold / metadata.py
1 import json 
2
3 from manifold.manifoldapi import ManifoldAPI
4
5 # turn this on if you want to work offline
6 work_offline=False
7 #work_offline=True
8
9 class MetaData:
10
11     def __init__ (self, auth):
12         self.auth=auth
13         self.hash_by_subject={}
14
15     def fetch (self):
16         offline_filename="offline_metadata.json"
17         if work_offline:
18             try:
19                 with file(offline_metadata) as f:
20                     self.hash_by_subject=json.loads(f.read())
21                 return
22             except:
23                 print "metadata.work_offline: failed to decode %s"%offline_filename
24         manifold_api = ManifoldAPI(self.auth)
25         fields = ['table', 'column.column',
26                   'column.description','column.header', 'column.title',
27                   'column.unit', 'column.info_type',
28                   'column.resource_type', 'column.value_type',
29                   'column.allowed_values', 'column.platforms.platform',
30                   'column.platforms.platform_url']
31         results = manifold_api.Get('metadata:table', [], [], fields)
32         self.hash_by_subject = dict ( [ (result['table'], result) for result in results ] )
33         # save for next time we use offline mode
34         with file(offline_filename,'w') as f:
35             f.write(json.dumps(self.hash_by_subject))
36
37     def to_json(self):
38         return json.dumps(self.hash_by_subject)
39
40     def details_by_subject (self, subject):
41         return self.hash_by_subject[subject]
42
43     def sorted_fields_by_subject (self, subject):
44         return self.hash_by_subject[subject]['columns'].sort()
45