def handle_resource(dbname, resource_name, primary_key): resp = Response("Internal server error", status=500, mimetype="text/plain") try: # The design pattern is that the primary key comes in in the form value1_value2_value3 key_columns = primary_key.split(key_delimiter) # Merge dbname and resource names to form the dbschema.tablename element for the resource. # This should probably occur in the data service and not here. resource = dbname + "." + resource_name if request.method == 'GET': # Look for the fields=f1,f2, ... argument in the query parameters. field_list = request.args.get('fields', None) if field_list is not None: field_list = field_list.split(",") # Call the data service layer. result = ds.get_by_primary_key(resource, key_columns, field_list=field_list) if result: result = process_result(result, dbname, resource_name, primary_key) result = {'data': result} result = compute_links(result) result_data = json.dumps(result, default=str) resp = Response(result_data, status=200, mimetype='application/json') else: resp = Response("Not found", status=404, mimetype="text/plain") if result: # We managed to find a row. Return JSON data and 200 result_data = json.dumps(result, default=str) resp = Response(result_data, status=200, mimetype='application/json') else: resp = Response("NOT FOUND", status=404, mimetype='text/plain') elif request.method == 'DELETE': result = ds.delete(resource, key_columns) if result and result > 0: resp = Response("OK", status=200, mimetype='text/plain') else: resp = Response("NOT FOUND", status=404, mimetype='text/plain') elif request.method == 'PUT': new_r = request.get_json() result = ds.update(resource, key_columns, new_r) if result and result == 1: resp = Response("OK UPDATED", status=200, mimetype="text/plain") else: resp = Response("I don't recognize this method", status = 422, mimetype="text/plain") except Exception as e: # We need a better overall approach to generating correct errors. utils.debug_message("Something awful happened, e = ", e) return resp
def delete_people(): result = ds.delete('lahman2017.people', ['yz3400']) print('delete_people returned: ', result) #create_people() #test_create() #delete_people()
def handle_resource(dbname, resource_name, primary_key): resp = Response("Internal server error", status=500, mimetype="text/plain") try: # The design pattern is that the primary key comes in in the form value1_value2_value3 key_columns = primary_key.split(key_delimiter) # Merge dbname and resource names to form the dbschema.tablename element for the resource. # This should probably occur in the data service and not here. resource = dbname + "." + resource_name if request.method == "GET": # Look for the fields=f1,f2, ... argument in the query parameters. field_list = request.args.get('fields', None) if field_list is not None: field_list = field_list.split(",") # Call the data service layer. result = ds.get_by_primary_key(resource, key_columns, field_list=field_list) if result: # We managed to find a row. Return JSON data and 200 result_data = json.dumps(result, default=str) resp = Response(result_data, status=200, mimetype='application/json') else: resp = Response("NOT FOUND", status=404, mimetype='text/plain') elif request.method == "DELETE": result = ds.delete(resource, key_columns) if result and result >= 1: resp = Response("OK", status=200, mimetype='text/plain') else: resp = Response("NOT FOUND", status=404, mimetype='text/plain') else: resp = Response("I am a teapot thath will not PUT", status=422, mimetype='text/plain') # if result: # # We managed to find a row. Return JSON data and 200 # result_data = json.dumps(result, default=str) # resp = Response(result_data, status=200, mimetype='application/json') # else: # # We did not get an exception and we did not get data, therefore this is 404 not found. # resp = Response("Not found", status=404, mimetype="text/plain") except Exception as e: # We need a better overall approach to generating correct errors. utils.debug_message("Something awlful happened, e = ", e) return resp