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 handle_collection(dbname, resource_name): resp = Response("Internal server error", status=500, mimetype="text/plain") try: # Form the compound resource names dbschema.table_name if request.args.get("children"): return handle_children(dbname, resource_name, request.args) resource = dbname + "." + resource_name if request.method == "GET": # Get the field list if it exists. field_list = request.args.get('fields', None) if field_list is not None: field_list = field_list.split(",") limit = request.args.get("limit", "10") offset = request.args.get("offset", "0") order_by = request.args.get("order_by", None) # The query string is of the form ?f1=v1&f2=v2& ... # This maps to a query template of the form { "f1" : "v1", ... } # We need to ignore the fields parameters. tmp = None for k, v in request.args.items(): if (not k == "fields") and (not k == "limit") and (not k == "offset") and \ (not k == "order_by"): if tmp is None: tmp = {} tmp[k] = v # Find by template. result = ds.get_by_template(resource, tmp, field_list=field_list, limit=limit, offset=offset, \ order_by=order_by) if result: result = {"data": result} result = compute_links(result, limit, offset) 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 == "POST": print(request) new_r = request.get_json() result = ds.create(resource, new_r) if result and result == 1: resp = Response("CREATED", status=201, mimetype="text/plain") except Exception as e: utils.debug_message("Something awlful happened, e = ", e) return resp
def handle_children(dbname, resource_name, params): resp = Response("Internal server error", status=500, mimetype="text/plain") try: # Form the compound resource names dbschema.table_name resource = dbname + "." + resource_name if request.method == "GET": # Get the field list if it exists. field_list = params.get('fields', None) if field_list is not None: field_list = field_list.split(",") limit = params.get("limit", "10") offset = params.get("offset", "0") order_by = params.get("order_by", None) conditions = params.get("children", None).split(",") tmp = {} children = [] for elem in conditions: if "=" not in elem: children.append(elem.lower()) else: elem = elem.split("=") tmp[elem[0]] = elem[1].lower() # The query string is of the form ?f1=v1&f2=v2& ... # This maps to a query template of the form { "f1" : "v1", ... } # We need to ignore the fields parameters. # tmp = None # for k,v in params.items(): # if (not k == "fields") and (not k == "limit") and (not k == "offset") and \ # (not k == "order_by"): # if tmp is None: # tmp = {} # tmp[k] = v # Find by template. result = ds.get_by_join(resource, children, tmp, field_list=field_list, limit=limit, offset=offset, \ order_by=order_by) if result: result = {"data":result} result = compute_links(result, limit, offset) 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") except Exception as e: utils.debug_message("Something awlful happened, e = ", e) return resp
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
def handle_children(dbname, resource_name, params): resp = Response("Internal server error", status=500, mimetype="text/plain") try: # Form the compound resource names dbschema.table_name resource = dbname + "." + resource_name if request.method == "GET": # Get the field list if it exists. field_list = params.get('fields', None) if field_list is not None: field_list = field_list.split(",") limit = params.get("limit", "10") offset = params.get("offset", "0") order_by = params.get("order_by", None) children = params.get("children", None).split(",") tmp = {} for k, v in params.items(): if (not k == "fields") and (not k == "limit") and (not k == "offset") and \ (not k == "order_by") and (not k == "children"): if tmp is None: tmp = {} tmp[k] = v result = ds.get_by_join(resource, children, tmp, field_list=field_list, limit=limit, offset=offset, \ order_by=order_by) if result: result = {"data": result} result = compute_links(result, limit, offset) 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") except Exception as e: utils.debug_message("Something awlful happened, e = ", e) return resp
def handle_collection(dbname, resource_name): resp = Response("Internal server error", status=500, mimetype="text/plain") try: # Form the compound resource names dbschema.table_name resource = dbname + "." + resource_name # Get the field list if it exists. field_list = request.args.get('fields', None) if field_list is not None: field_list = field_list.split(",") # The query string is of the form ?f1=v1&f2=v2& ... # This maps to a query template of the form { "f1" : "v1", ... } # We need to ignore the fields parameters. tmp = None for k, v in request.args.items(): if not k == 'fields': if tmp is None: tmp = {} tmp[k] = v # Find by template. result = ds.get_by_template(resource, tmp, field_list=field_list) if 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") except Exception as e: utils.debug_message("Something awlful happened, e = ", e) return resp
def handle_tables(dbname, resource_name, resource_name2, primary_key): resp = Response("Internal server error", status=500, mimetype="text/plain") try: key_columns = primary_key.split(key_delimiter) # Form the compound resource names dbschema.table_name # resource = dbname + "." + resource_name # resource2 = dbname + "." + resource_name2 if request.method == "GET": # Get the field list if it exists. field_list = request.args.get('fields', None) if field_list is not None: field_list = field_list.split(",") limit = request.args.get("limit", "10") offset = request.args.get("offset", "0") order_by = request.args.get("order_by", None) # The query string is of the form ?f1=v1&f2=v2& ... # This maps to a query template of the form { "f1" : "v1", ... } # We need to ignore the fields parameters. tmp = None for k, v in request.args.items(): if (not k == "fields") and (not k == "limit") and (not k == "offset") and \ (not k == "order_by"): if tmp is None: tmp = {} tmp[k] = v # Find by template. join_paths = ds.get_join_column_mapping(dbname, resource_name, dbname, resource_name2) if join_paths: columns = join_paths[list(join_paths.keys())[0]]["MAP"][0] referenced_table_name = columns["REFERENCED_TABLE_NAME"] referenced_column_name = columns["REFERENCED_COLUMN_NAME"] table_name = columns["TABLE_NAME"] column_name = columns["COLUMN_NAME"] referenced_row = ds.get_by_primary_key(dbname +"."+ referenced_table_name, key_columns, \ field_list=None, commit=True) tmp[column_name] = referenced_row[column_name] result = ds.get_by_template(dbname +"."+ table_name, tmp, \ field_list=field_list, limit=limit, offset=offset, order_by=order_by, commit=True) result = {"data": result} result = compute_links(result, limit, offset) 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 == "POST": join_paths = ds.get_join_column_mapping(dbname, resource_name, dbname, resource_name2) if join_paths: columns = join_paths[list(join_paths.keys())[0]]["MAP"][0] referenced_table_name = columns["REFERENCED_TABLE_NAME"] referenced_column_name = columns["REFERENCED_COLUMN_NAME"] table_name = columns["TABLE_NAME"] column_name = columns["COLUMN_NAME"] new_r = request.get_json() referenced_row = ds.get_by_primary_key(dbname + "." + referenced_table_name, key_columns, field_list=None, commit=True) new_r[column_name] = referenced_row[column_name] result = ds.create(dbname + "." + table_name, new_r) if result and result == 1: resp = Response("CREATED", status=201, mimetype="text/plain") else: resp = Response("Not found", status=404, mimetype="text/plain") except Exception as e: utils.debug_message("Something awlful happened, e = ", e) return resp
def handle_collection(dbname, resource_name): resp = Response("Internal server error", status=500, mimetype="text/plain") result = None e = None #context = get_context() try: # Form the compound resource names dbschema.table_name #children = context.get("children", None) #if children is not None: #resp = handle_path(dbname, resource_name, context) #else: resource = dbname + "." + resource_name #tmp = context.get("query_params", None) #field_list = context.get("field", None) if request.method == 'GET': children = request.args.get('children', None) if children is None: # Get the field list if it exists. field_list = request.args.get('fields', None) if field_list is not None: field_list = field_list.split(",") order_by = request.args.get('order_by', None) limit = request.args.get('limit', None) offset = request.args.get('offset', None) # The query string is of the form ?f1=v1&f2=v2& ... # This maps to a query template of the form { "f1" : "v1", ... } # We need to ignore the fields parameters. tmp = None for k,v in request.args.items(): if (not k == 'fields') and (not k == 'limit') and (not k == 'offset') and (not k == 'order_by'): if tmp is None: tmp = {} tmp[k] = v # Find by template result = ds.get_by_template(resource, tmp, field_list=field_list, limit = limit, offset = offset, order_by = order_by) if result: #result = process_result(result[0],dbname,resource_name) result = {'data': result} result = compute_links(result, limit, offset) 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") else: result = _get_with_join(dbname, resource_name) if 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") elif request.method == 'POST': new_r = request.get_json() result = ds.create(resource, new_r) if result and result == 1: resp = Response("CREATED", status=201, mimetype="text/plain") except Exception as e: utils.debug_message("Something awful happened, e = ", e) return resp
def handle_resource2(dbname, resource_name, primary_key, resource_name2): 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 resource2 = dbname + "." + resource_name2 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: f_list = field_list.split(",") tmp = None for k, v in request.args.items(): if (not k == 'fields') and (not k == 'limit') and (not k == 'offset') and (not k == 'order_by'): if tmp is None: tmp = {} tmp[k] = v # Call the data service layer. result = query_join(resource, resource2, field_list, tmp, key_columns, resource_name, resource_name2) 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") elif request.method == 'POST': new_r = request.get_json() p_tbl = ds.get_data_table(resource) p_key_columns = p_tbl._get_primary_key_columns() tbl2 = ds.get_data_table(resource2) #exist = p_tbl.find_by_primary_key(key_columns) #if exist >0: q = "INSERT INTO "+ resource_name2 + " ( " keys = [] values = [] for k,v in new_r.items(): keys.append(k) values.append(v) f_k = tbl2.get_refer_keys() f_k_self = tbl2._get_foreign_key_columns() clauses =[] for k,v in f_k.items(): if k == resource: keys = [f_k_self[resource]] + keys for i,va in enumerate(p_key_columns): if va == v: add_key = key_columns[i] clause = "(SELECT "+v +" FROM "+resource+" WHERE "+v + ' = "{0}" ) '.format(add_key) clauses.append(clause) key_clause = ",".join(keys) + " ) " clauses_ = ",".join(clauses) q += key_clause q += " VALUES (" q += clauses_ length = len(values) for i in range(length): q += ',"{0}"'.format(values[i]) q += ")" cursor = p_tbl._cnx.cursor() r = cursor.execute(q) if r > 0: resp = Response("CREATED", status=201, mimetype="text/plain") else: resp = Response("NOT FOUND IN PARENT TABLE", status=404, mimetype='text/plain') # new_r = request.get_json() # resource_list1 = {} # resource_list2 = {} # main_tbl = ds.get_data_table(resource) # key_cols = main_tbl._get_primary_key_columns() # for i in range(len(key_cols)): # resource_list1[key_cols[i]] = key_columns[i] # side_tbl = ds.get_data_table(resource2) # # side_key_cols = side_tbl._get_foreign_key_columns() # # for i in range(len(side_key_cols)): # # if side_key_cols[i] in set(key_cols): # # resource_list2[side_key_cols[i]] = resource_list1[side_key_cols[i]] # refer_keys = side_tbl.get_refer_keys() # f_keys = side_tbl._get_foreign_key_columns() # for i in range(len(key_cols)): # for k,v in refer_keys.items(): # if resource == k and v == key_cols[i]: # resource_list2[f_keys[k]] = key_columns[i] # # for k,v in new_r.items(): # kk = k.split(".") # if kk[0] == resource_name and kk[1] not in set(key_cols): # resource_list1[k]=v # elif kk[0] == resource_name2: # resource_list2[k]=v # result1 = ds.create(resource, resource_list1) # result2 = ds.create(resource2, resource_list2) # if (result1 + result2) > 1: # resp = Response("CREATED", status=201, mimetype="text/plain") # else: # resp = Response("NOT FOUND", status=404, mimetype='text/plain') else: resp = Response("CAN ONLY GET OR POST", 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) #resp['header']=get_context() #resp['header']['Location'] = get_location(dbname, resource_name, key_columns) return resp
def handle_path_resource(dbname, resource_name, primary_key, sub_resource_name): resp = Response("Internal server error", status=500, mimetype="text/plain") try: result = None _default_offset = 10 _default_limit = 10 key_columns = primary_key.split(key_delimiter) # Merge dbname and resource names to form the dbschema.tablename element for the resource. resource = dbname + "." + resource_name sub_resource = dbname + "." + sub_resource_name if request.method == 'GET': field_list = request.args.get('fields', None) children_list = request.args.get('children', None) if field_list is not None: field_list = field_list.split(",") limit = request.args.get('limit', _default_limit) offset = request.args.get('offset', _default_offset) order_by = request.args.get('order_by', None) # Call the data service layer. result = ds.get_by_path_key(resource, primary_key, sub_resource, field_list=field_list, limit=limit, offset=offset, order_by=order_by) if result: # We managed to find a row. Return JSON data and 200 result = {'data': result} result = compute_links(result, limit, offset) 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 == 'POST': new_r = request.json result = ds.insert_by_path(resource, key_columns, sub_resource, new_r) if result is not None: location = get_location(dbname, sub_resource, new_r) resp = Response('Created', status=200, mimetype='text/plain') resp.headers['Location'] = location else: resp = Response('NOT created', status=404, mimetype='text/plain') except Exception as e: utils.debug_message("Something awlful happened, e = ", e) return resp
def handle_collection(dbname, resource_name): resp = Response("Internal server error", status=500, mimetype="text/plain") try: # Form the compound resource names dbschema.table_name resource = dbname + "." + resource_name _default_offset = 10 _default_limit = 10 if request.method == 'GET': # Get the field list if it exists. field_list = request.args.get('fields', None) children_list = request.args.get('children', None) if field_list is not None: field_list = field_list.split(",") if children_list is not None: children_list = children_list.split(",") limit = request.args.get('limit', _default_limit) offset = request.args.get('offset', _default_offset) order_by = request.args.get('order_by', None) # The query string is of the form ?f1=v1&f2=v2& ... # This maps to a query template of the form { "f1" : "v1", ... } # We need to ignore the fields parameters. tmp = None for k, v in request.args.items(): if (not k == 'fields') and (not k == 'limit') and ( not k == 'offset') and (not k == 'order_by') and ( not k == 'children'): if tmp is None: tmp = {} tmp[k] = v # Find by template. if children_list is None: result = ds.get_by_template(resource, tmp, field_list=field_list) else: result = ds.get_by_q_from_h(resource, children_list, tmp, field_list) if result: result = {'data': result} result = compute_links(result, limit, offset) 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 == 'POST': new_r = request.get_json() result = ds.create(resource, new_r) if result and result == 1: resp = Response("created", status=201, mimetype="text/plain") except Exception as e: utils.debug_message("Something awlful happened, e = ", e) return resp
def handle_collection(dbname, resource_name): resp = Response("Internal server error", status=500, mimetype="text/plain") try: resource = dbname + "." + resource_name if request.method == 'GET': # Form the compound resource names dbschema.table_name # Get the field list if it exists. field_list = request.args.get('fields', None) if field_list is not None: field_list = field_list.split(",") # for queries of type 127.0.0.1:5000/api/lahman2017/batting?teamID=BOS&limit=10 limit = min(int(request.args.get('limit', 10)), 10) offset = request.args.get('offset', 0) order_by = request.args.get('order_by', None) children = request.args.get('children', None) # The query string is of the form ?f1=v1&f2=v2& ... # This maps to a query template of the form { "f1" : "v1", ... } # We need to ignore the fields parameters. tmp = None for k, v in request.args.items(): if (not k == 'fields') and (not k == 'limit') and (not k=='offset') and \ (not k == 'order_by') and (not k == 'children'): if tmp is None: tmp = {} tmp[k] = v # Find by template result = ds.get_by_template(resource, tmp, field_list=field_list, limit=limit, offset=offset, order_by=order_by, children=children) if result: result = {"data": result} result = compute_links(result, limit, offset) 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 == 'POST': new_r = request.get_json() k = result = ds.create(resource, new_r) if k: location = get_location(dbname, resource_name, k) resp = Response("CREATED", status=201, mimetype="text/plain") resp.headers['Location'] = location except Exception as e: resp = Response("STATUS 422 " + str(e), status=422, mimetype="text/plain") utils.debug_message("Something awlful happened, e = ", e) return resp
def handle_path_resource(dbname, resource_name, primary_key, subresource_name): resp = Response("Internal server error", status=500, mimetype="text/plain") try: resource = dbname + "." + resource_name subresource = dbname + "." + subresource_name ##make args mutable request.args = request.args.copy() actual_key = ds.get_key(resource) keys_input = primary_key.split('_') if len(keys_input) != len(actual_key): raise ValueError("Wrong key length please try " + actual_key) benchmark_row = ds.get_by_primary_key(resource, keys_input) if request.method == 'GET': # Form the compound resource names dbschema.table_name foreign_key = ds.get_foreign_key(resource, subresource) for k, v in foreign_key.items(): map = v['MAP'][0] request.args[map['REFERENCED_COLUMN_NAME']] = benchmark_row[0][ map['COLUMN_NAME']] # Get the field list if it exists. field_list = request.args.get('fields', None) if field_list is not None: field_list = field_list.split(",") # for queries of type 127.0.0.1:5000/api/lahman2017/batting?teamID=BOS&limit=10 limit = min(int(request.args.get('limit', 10)), 10) offset = request.args.get('offset', 0) order_by = request.args.get('order_by', None) children = request.args.get('children', None) # The query string is of the form ?f1=v1&f2=v2& ... # This maps to a query template of the form { "f1" : "v1", ... } # We need to ignore the fields parameters. tmp = None for k, v in request.args.items(): if (not k == 'fields') and (not k == 'limit') and (not k=='offset') and \ (not k == 'order_by') and (not k == 'children'): if tmp is None: tmp = {} tmp[k] = v # Find by template result = ds.get_by_template(subresource, tmp, field_list=field_list, limit=limit, offset=offset, order_by=order_by, children=children) if result: result = {"data": result} result = compute_links(result, limit, offset) 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 == 'POST': actual_key = ds.get_key(resource) keys_input = primary_key.split('_') if len(keys_input) != len(actual_key): raise ValueError("Wrong key length please try " + actual_key) new_r = request.get_json() foreign_key = ds.get_foreign_key(resource, subresource) for k, v in foreign_key.items(): map = v['MAP'][0] new_r[map['COLUMN_NAME']] = benchmark_row[0][ map['REFERENCED_COLUMN_NAME']] ####Might need to handle multiple keys here k = result = ds.create(subresource, new_r) if k: location = get_location(dbname, subresource_name, k) resp = Response("CREATED", status=201, mimetype="text/plain") resp.headers['Location'] = location except Exception as e: resp = Response("STATUS 422 " + str(e), status=422, mimetype="text/plain") utils.debug_message("Something awlful happened, e = ", e) return resp
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": 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') elif request.method == 'DELETE': result = ds.delete_by_key(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') #@TODO DO THIS UPDATE ROW BASED ON KEY elif request.method == 'PUT': check = ds.get_by_primary_key(resource, key_columns) ###Create if result is None if check is None: resp = Response("NOT FOUND", status=404, mimetype="text/plain") ###Update if result is not None else: new_r = request.get_json() result = ds.update_by_key(resource, key_columns, new_r) if (not result is None) and (result == 1): resp = Response("UPDATED", status=201, mimetype="text/plain") if (not result is None) and (result == 0): resp = Response( "UPDATED BUT YOU ENTERED THE SAME VALUES. NONE CHANGED ", status=201, mimetype="text/plain") else: result = Response( "Unimplmented method type please try GET, PUT, or DELETE", status=500, mimetype="text/plain") return result except Exception as e: resp = Response("STATUS 422 " + str(e), status=422, mimetype="text/plain") utils.debug_message("Something awlful happened, e = ", e) return resp