t.me/atinfo_chat Telegram группа по автоматизации тестирования

Проблема с преобразованием dict в JSON в запросе через Python

postman
python
json
Теги: #<Tag:0x00007fb2f5833d08> #<Tag:0x00007fb2f5833bc8> #<Tag:0x00007fb2f58339e8>

(Артём Кузьменко) #1

Здравствуйте. Столкнулся с проблемой. Пытаюсь преобразовать словарь в JSON. Преобразовываю, но сервер возвращает ошибку. Хотя такой же JSON отправленный через Postman работает удачно.
Вот функция:

    def test_fdg(self):
        resp = func.add_team_with_contact(self.api, 'my1',self.phone2 )
        group_name = tools.generate_random_string(30)
        data = {'display_name': group_name,
                'members': [
                    {
                        'jid': resp['member']['jid'],
                        'status': resp['member']['status']
                    }
                ]
                }
        d = json.dumps(data)
        print(d)
        resp = self.api.add_group(self.team_uid, d)
        resp = resp.json()

Вот как выглядит результат d = json.dumps(data):

{"display_name": "YCuHuDuDgwzUYcJFUXgEOzGVWLDvs", "members": [{"jid": "11dc5d5f-56ab-4fae-b5f9-eb4945fac8e3@xmpp", "status": "member"}]}

Вот такую ошибку возвращает сервер:

{
  "details": {
    "members": [
      {
        "jid": "Выберите корректный вариант. 11dc5d5f-56ab-4fae-b5f9-eb4945fac8e3@xmpp нет среди допустимых значений."
      }
    ]
  },
  "error": "INVALID_DATA",
}

Такое ощущение, что как-то некорректно я преобразовываю словарь в json. Есть какие-то идеи?

Вот так выглядит код функций:

    def add_group(self, team_uid, data):
        """
        endpoint /teams/{team_uid}/groups методом POST
        Создание группы
        В data передаем json
        """
        endpoint = '/teams/{team_uid}/groups'.format(
            team_uid=team_uid
        )
        url = self.url + endpoint
        return self.call_post_api(url, data)
    def call_post_api(self, url, data={}, params={}):
        """ Обертка над requests.post """
        headers = {}
        jar={}
        if self.is_token_auth:
            headers = {'Token': self.token}
        else:
            jar = req.cookies.RequestsCookieJar()
            jar.set('otvauth', self.token)
        resp = req.post(
            url,
            data=data,
            params=params,
            headers=headers,
            cookies=jar,
        )
        return resp

(Артём Кузьменко) #2

В общем все валидно с преобразованием. Просто передавал не тот ID, поэтому сервер выдавал ошибку. Просто был замылен глаз.