def fetch (self, request): manifold_api = ManifoldAPI(self.auth) fields = ['table', 'column.name', 'column.qualifier', 'column.type', 'column.is_array', 'column.description', 'column.default', 'key', 'capability'] #fields = ['table', 'column.column', # 'column.description','column.header', 'column.title', # 'column.unit', 'column.info_type', # 'column.resource_type', 'column.value_type', # 'column.allowed_values', 'column.platforms.platform', # 'column.platforms.platform_url'] request={ 'action': 'get', 'object': 'local:object', # proposed to replace metadata:table 'fields': fields , } result = manifold_api.forward(request) # xxx need a way to export error messages to the UI if result['code'] == 1: # warning # messages.warning(request, result['description']) print ("METADATA WARNING -",request,result['description']) elif result['code'] == 2: # messages.error(request, result['description']) print ("METADATA ERROR -",request,result['description']) # XXX FAIL HERE XXX return rows = result.ok_value() # API errors will be handled by the outer logic # if not rows: # print "Failed to retrieve metadata",rows_result.error() # rows=[] self.hash_by_object = dict ( [ (row['table'], row) for row in rows ] )
def proxy (request,format): """the view associated with /manifold/proxy/ with the query passed using POST""" # expecting a POST if request.method != 'POST': print "manifoldproxy.api: unexpected method %s -- exiting"%request.method return # we only support json for now # if needed in the future we should probably cater for # format_in : how is the query encoded in POST # format_out: how to serve the results if format != 'json': print "manifoldproxy.proxy: unexpected format %s -- exiting"%format return try: # translate incoming POST request into a query object if debug: print 'manifoldproxy.proxy: request.POST',request.POST manifold_query = Query() #manifold_query = ManifoldQuery() manifold_query.fill_from_POST(request.POST) # retrieve session for request # We allow some requests to use the ADMIN user account if (manifold_query.get_from() == 'local:user' and manifold_query.get_action() == 'create') \ or (manifold_query.get_from() == 'local:platform' and manifold_query.get_action() == 'get'): admin_user, admin_password = ConfigEngine().manifold_admin_user_password() manifold_api_session_auth = {'AuthMethod': 'password', 'Username': admin_user, 'AuthString': admin_password} else: print request.session['manifold'] manifold_api_session_auth = request.session['manifold']['auth'] if debug_empty and manifold_query.action.lower()=='get': json_answer=json.dumps({'code':0,'value':[]}) print "By-passing : debug_empty & 'get' request : returning a fake empty list" return HttpResponse (json_answer, mimetype="application/json") # actually forward manifold_api= ManifoldAPI(auth=manifold_api_session_auth) if debug: print '===> manifoldproxy.proxy: sending to backend', manifold_query # for the benefit of the python code, manifoldAPI raises an exception if something is wrong # however in this case we want to propagate the complete manifold result to the js world result = manifold_api.forward(manifold_query.to_dict()) # XXX TEMP HACK if 'description' in result and result['description'] \ and isinstance(result['description'], (tuple, list, set, frozenset)): result [ 'description' ] = [ ResultValue.to_html (x) for x in result['description'] ] json_answer=json.dumps(result) return HttpResponse (json_answer, mimetype="application/json") except Exception,e: print "** PROXY ERROR **",e import traceback traceback.print_exc()
def authenticate(self, token=None): if not token: return None try: username = token['username'] password = token['password'] request = token['request'] auth = {'AuthMethod': 'password', 'Username': username, 'AuthString': password} api = ManifoldAPI(auth) sessions_result = api.forward(Query.create('local:session').to_dict()) print "result" sessions = sessions_result.ok_value() print "ok" if not sessions: print "GetSession failed", sessions_result.error() return print "first", sessions session = sessions[0] # Change to session authentication api.auth = {'AuthMethod': 'session', 'session': session['session']} self.api = api # Get account details # the new API would expect Get('local:user') instead persons_result = api.forward(Query.get('local:user').to_dict()) persons = persons_result.ok_value() if not persons: print "GetPersons failed",persons_result.error() return person = persons[0] print "PERSON=", person request.session['manifold'] = {'auth': api.auth, 'person': person, 'expires': session['expires']} except ManifoldException, e: print "ManifoldBackend.authenticate caught ManifoldException, returning corresponding ManifoldResult" return e.manifold_result
def fetch(self, request): manifold_api = ManifoldAPI(self.auth) fields = [ 'table', 'column.name', 'column.qualifier', 'column.type', 'column.is_array', 'column.description', 'column.default', 'key', 'capability' ] #fields = ['table', 'column.column', # 'column.description','column.header', 'column.title', # 'column.unit', 'column.info_type', # 'column.resource_type', 'column.value_type', # 'column.allowed_values', 'column.platforms.platform', # 'column.platforms.platform_url'] request = { 'action': 'get', 'object': 'local:object', # proposed to replace metadata:table 'fields': fields, } result = manifold_api.forward(request) # xxx need a way to export error messages to the UI if result['code'] == 1: # warning # messages.warning(request, result['description']) print("METADATA WARNING -", request, result['description']) elif result['code'] == 2: # messages.error(request, result['description']) print("METADATA ERROR -", request, result['description']) # XXX FAIL HERE XXX return rows = result.ok_value() # API errors will be handled by the outer logic # if not rows: # print "Failed to retrieve metadata",rows_result.error() # rows=[] self.hash_by_object = dict([(row['table'], row) for row in rows])
def proxy(request, format): """the view associated with /manifold/proxy/ with the query passed using POST""" # expecting a POST if request.method != 'POST': print("manifoldproxy.api: unexpected method %s -- exiting" % request.method) return # we only support json for now # if needed in the future we should probably cater for # format_in : how is the query encoded in POST # format_out: how to serve the results if format != 'json': print("manifoldproxy.proxy: unexpected format %s -- exiting" % format) return try: # translate incoming POST request into a query object if debug: print('manifoldproxy.proxy: request.POST', request.POST) manifold_query = Query() #manifold_query = ManifoldQuery() manifold_query.fill_from_POST(request.POST) # retrieve session for request # We allow some requests to use the ADMIN user account if (manifold_query.get_from() == 'local:user' and manifold_query.get_action() == 'create') \ or (manifold_query.get_from() == 'local:platform' and manifold_query.get_action() == 'get'): admin_user, admin_password = ConfigEngine( ).manifold_admin_user_password() manifold_api_session_auth = { 'AuthMethod': 'password', 'Username': admin_user, 'AuthString': admin_password } else: print(request.session['manifold']) manifold_api_session_auth = request.session['manifold']['auth'] if debug_empty and manifold_query.action.lower() == 'get': json_answer = json.dumps({'code': 0, 'value': []}) print( "By-passing : debug_empty & 'get' request : returning a fake empty list" ) return HttpResponse(json_answer, mimetype="application/json") # actually forward manifold_api = ManifoldAPI(auth=manifold_api_session_auth) if debug: print('===> manifoldproxy.proxy: sending to backend', manifold_query) # for the benefit of the python code, manifoldAPI raises an exception if something is wrong # however in this case we want to propagate the complete manifold result to the js world result = manifold_api.forward(manifold_query.to_dict()) # XXX TEMP HACK if 'description' in result and result['description'] \ and isinstance(result['description'], (tuple, list, set, frozenset)): result['description'] = [ ResultValue.to_html(x) for x in result['description'] ] json_answer = json.dumps(result) return HttpResponse(json_answer, mimetype="application/json") except Exception as e: print("** PROXY ERROR **", e) import traceback traceback.print_exc()