def put(self, request, schema, table, row_id=None): schema, table = actions.get_table_name(schema, table) if not row_id: return JsonResponse(actions._response_error('This methods requires an id'), status=status.HTTP_400_BAD_REQUEST) column_data = request.data['query'] if row_id and column_data.get('id', int(row_id)) != int(row_id): raise actions.APIError( 'Id in URL and query do not match. Ids may not change.', status=status.HTTP_409_CONFLICT) engine = actions._get_engine() conn = engine.connect() # check whether id is already in use exists = conn.execute('select count(*) ' 'from {schema}.{table} ' 'where id = {id};'.format(schema=schema, table=table, id=row_id)).first()[0] > 0 if row_id else False conn.close() if exists: response = self.__update_rows(request, schema, table, column_data, row_id) actions.apply_changes(schema, table) return JsonResponse(response) else: result = self.__insert_row(request, schema, table, column_data, row_id) actions.apply_changes(schema, table) return JsonResponse(result, status=status.HTTP_201_CREATED)
def post(self, request, schema, table, row_id=None, action=None): schema, table = actions.get_table_name(schema, table) column_data = request.data['query'] status_code = status.HTTP_200_OK if row_id: response = self.__update_rows(request, schema, table, column_data, row_id) else: if action=='new': response = self.__insert_row(request, schema, table, column_data, row_id) status_code=status.HTTP_201_CREATED else: response = self.__update_rows(request, schema, table, column_data, None) actions.apply_changes(schema, table) return JsonResponse(response, status=status_code)
def put(self, request, schema, table, row_id=None, action=None): if action: raise APIError( "This request type (PUT) is not supported. The " "'new' statement is only possible in POST requests." ) schema, table = actions.get_table_name(schema, table) if not row_id: return JsonResponse( actions._response_error("This methods requires an id"), status=status.HTTP_400_BAD_REQUEST, ) column_data = request.data["query"] if row_id and column_data.get("id", int(row_id)) != int(row_id): raise actions.APIError( "Id in URL and query do not match. Ids may not change.", status=status.HTTP_409_CONFLICT, ) engine = actions._get_engine() # check whether id is already in use exists = ( engine.execute( "select count(*) " "from {schema}.{table} " "where id = {id};".format(schema=schema, table=table, id=row_id) ).first()[0] > 0 if row_id else False ) if exists: response = self.__update_rows(request, schema, table, column_data, row_id) actions.apply_changes(schema, table) return JsonResponse(response) else: result = self.__insert_row(request, schema, table, column_data, row_id) actions.apply_changes(schema, table) return JsonResponse(result, status=status.HTTP_201_CREATED)
def delete(self, request, table, schema, row_id=None): schema, table = actions.get_table_name(schema, table) result = self.__delete_rows(request, schema, table, row_id) actions.apply_changes(schema, table) return JsonResponse(result)