def METHOD_NAME(handler):
    def _func(ds_id=None):
        try:
            params = body_to_json(bottle.request)
            logger.info(f'Received {request_name} request: {params}')
            ds_man = _create_dataset_manager(DB())
            res = handler(ds_man, ds_id, params)
            return {'status': OK['status'], 'ds_id': ds_id or res.get('ds_id', None)}
        except UnknownDSID as e:
            logger.warning(e)
            bottle.response.status = NOT_EXIST['status_code']
            return {'status': NOT_EXIST['status'], 'ds_id': ds_id}
        except DSIsBusy as e:
            logger.warning(e)
            bottle.response.status = BUSY['status_code']
            return {'status': BUSY['status'], 'ds_id': ds_id}
        except Exception as e:
            logger.exception(e)
            bottle.response.status = INTERNAL_ERROR['status_code']
            return {'status': INTERNAL_ERROR['status'], 'ds_id': ds_id}
    return _func