3 from manifold.manifoldresult import ManifoldResult
4 from manifold.manifoldapi import ManifoldAPI
9 # turn this on if you want to work offline
15 def __init__ (self, auth):
17 self.hash_by_object={}
19 # XXX Retrieve all metadata the first time we instanciate the class
23 offline_filename="offline-metadata.json"
26 with file(offline_metadata) as f:
27 self.hash_by_object=json.loads(f.read())
30 print "metadata.work_offline: failed to decode %s"%offline_filename
31 manifold_api = ManifoldAPI(self.auth)
32 fields = ['table', 'column.column',
33 'column.description','column.header', 'column.title',
34 'column.unit', 'column.info_type',
35 'column.resource_type', 'column.value_type',
36 'column.allowed_values', 'column.platforms.platform',
37 'column.platforms.platform_url']
38 rows_result = manifold_api.Get({
39 'object': 'local:object', # proposed to replace metadata:table
42 #old# rows_result = manifold_api.Get('metadata:table', [], [], fields)
43 rows = rows_result.ok_value()
45 print "Failed to retrieve metadata",rows_result.error()
47 self.hash_by_object = dict ( [ (row['table'], row) for row in rows ] )
48 # save for next time we use offline mode
50 with file(offline_filename,'w') as f:
51 f.write(json.dumps(self.hash_by_object))
54 return json.dumps(self.hash_by_object)
56 def details_by_object (self, object):
57 return self.hash_by_object[object]
59 def sorted_fields_by_object (self, object):
60 return self.hash_by_object[object]['columns'].sort()