TypeError: 'data' - недопустимый аргумент ключевого слова для этой функции - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь изменить функцию request, чтобы она принимала разные аргументы в зависимости от вызова API.Например: в post_categories мне нужно отправить третий параметр data, который включает тело, которое я хочу опубликовать, но функции get_categories не нужен третий параметр.Я добавил **kwargs в функцию запроса, но получаю ошибку: TypeError: 'data' is an invalid keyword argument for this function

class ApiGateway():
    base_url = 'https://api.com/v3/'

    def request(self, method, endpoint, **kwargs):
        url = f'{self.base_url}{endpoint}'
        kwargs.setdefault('headers', {})
        kwargs['headers'].update({
            'Authorization': f'Bearer ${self.token}',
            'Accept': 'application/json',
        })
        response = requests.request(method, url, **kwargs)
        return response.json()

    def get_categories(self, merchant_id):
        endpoint = f'merchants/{merchant_id}/categories'
        return self.request('GET', endpoint)

    def post_categories(self, merchant_id):
        update = {
            'payment_method': {
                'token': 1234,
                'data': '123556'
            }
        }    
        endpoint = f'merchants/{merchant_id}/categories'
        return self.request('POST', endpoint, data=json.dumps(update)) 

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

я нашел решение.Мне нужно было указать тип данных, которые я хотел передать в функцию request вместо передачи данных в качестве параметра kwargs.я только что обновил эту часть post_categories функции return self.request('POST', endpoint, data=json.dumps(update)), так что теперь функция выглядит так

   def post_categories(self, merchant_id):
        update = {
            'payment_method': {
                'token': 1234,
                'data': '123556'
            }
        }    
        endpoint = f'merchants/{merchant_id}/categories'
   
        return self.request('POST', endpoint, json=update) # <-- updated third parameter
0 голосов
/ 28 февраля 2019

Что вы могли бы сделать, это добавить дополнительный параметр data к функции request.Установив значение по умолчанию None, вам не нужно указывать его каждый раз, но вы все равно можете использовать его, когда это необходимо.

def request(self, method, endpoint, data=None, **kwargs):
    ...
    response = requests.request(method, url, data=data, **kwargs)
...