flask_restx: How to check parameters for a post request

90 views Asked by At
create_aggregator_reqparser = RequestParser(bundle_errors=True)
create_aggregator_reqparser.add_argument("id",
                                         type=str,
                                         location="form",
                                         required=True,
                                         nullable=False,)

aggregators_model = Model('Aggregators', {'id': String(required=True)})


aggregators_ns = Namespace(name="aggregators", validate=True)

aggregators_ns.model(aggregators_model.name, aggregators_model)



def _create_successful_response(status_code, message):
    response = jsonify(
        status="success",
        message=message,
    )
    response.status_code = status_code
    response.headers['Cache-Control'] = 'no-store'
    response.headers['Pragma'] = 'no-cache'
    return response


def create_aggregator(parameters:dict):
    parameters['id'] = parameters['id'].upper()

    if Aggregators.query.get(parameters['id']):
        abort(HTTPStatus.CONFLICT, f"{parameters['id']} is already entered", status="fail")
    new_aggregator = Aggregators(**parameters)
    db.session.add(new_aggregator)
    db.session.commit()
    return _create_successful_response(
        status_code=HTTPStatus.CREATED,
        message='successfully created',
    )


def retrieve_aggregators_list():
    data = Aggregators.query.all()
    response_data = marshal(data, aggregators_model)
    response = jsonify(response_data)
    return response

@aggregators_ns.route("")
@aggregators_ns.response(int(HTTPStatus.BAD_REQUEST), 'Validation error.')
@aggregators_ns.response(int(HTTPStatus.INTERNAL_SERVER_ERROR), 'Internal server error.')
class Aggregators(Resource):
    @aggregators_ns.response(int(HTTPStatus.BAD_REQUEST), 'Validation error.' )
    @aggregators_ns.response(int(HTTPStatus.CREATED), 'Added new aggregator.')
    @aggregators_ns.response(int(HTTPStatus.CONFLICT), 'aggregator id already exists.')
    @aggregators_ns.expect(create_aggregator_reqparser, validate=True)
    def post(self):
        return create_aggregator(aggregators_ns.payload)

How do I check in a post request that all parameters from create_aggregator_reqparser are sent and they are filled with valid values

I thought @aggregators_ns.expect(create_aggregator_ru parser, validate=True) would do this job

But when I send

curl --location 'http://127.0.0.1:5000/aggregators' \ --header 'accept: application/json' \ --header 'Content-Type: application/json' \ --data '{ "idy" : "HH" }'

error occurs: KeyError: 'id'

0

There are 0 answers