Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
 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)