Ошибка при попытке обновить список наблюдения для группы через API (PUT groups/{id}.json)

Приоритет/Серьезность:

от среднего до высокого

Платформа:

Скрипт на Python, а также команда cURL

Версия сервера Discourse:

3.6.0.beta3-latest (6adb4f8e84)

Описание:

при попытке обновить параметр watching_category_ids существующей группы мой скрипт на Python (использующий простой requests.put) выдает следующую ошибку:

_doPut> ОШИБКА от запроса: 422 Unprocessable Entity {'user_count': 2, 'errors': ['You supplied invalid parameters to the request: update_existing_users']}

даже если в моих JSON-данных нет параметра с именем update_existing_users.

При проверке через cURL:

curl -k -L -X PUT -H 'api-key:xyz' \
   -H 'api-username:system'  \
   -H 'Accept:application/json;charset=utf-8'  \
   -H 'Content-Type:application/json'   \
   --data '{"group":{"name":"eb-chair-exo","watching_category_ids":[336,337]}}' \
   https://cms-phys-talk.web.cern.ch/groups/46.json

я получаю ту же ошибку:

{"user_count":2,"errors":["You supplied invalid parameters to the request: update_existing_users"]}%

Шаги для воспроизведения:

curl -k -L -X PUT -H 'api-key:xyz' \
   -H 'api-username:system'  \
   -H 'Accept:application/json;charset=utf-8'  \
   -H 'Content-Type:application/json'   \
   --data '{"group":{"name":"eb-chair-exo","watching_category_ids":[336,337]}}' \
   https://cms-phys-talk.web.cern.ch/groups/46.json

редактирование: добавлена версия сервера Discourse

Да, этот endpoint немного странный. Мы хотели предупредить сотрудников о количестве потенциально затронутых пользователей и предоставить им возможность выбрать, применять ли изменения ретроспективно.

Именно поэтому в ответе от сервера вы видите “{ ‘user_count’: 2, … }”.

Я уточнил сообщение об ошибке, чтобы оно стало понятнее, а также улучшил код фронтенда для лучшей обработки этого “сценария использования” и добавил тесты.

1 лайк

Привет и спасибо за быструю реакцию! :slight_smile:

К сожалению, я всё ещё в недоумении: мне нужно установить значение для watching_category_ids для определённой группы, и даже несмотря на то, что сообщение об ошибке теперь изменилось, всё равно возвращается ошибка 422. Так как же обновить группу с новым списком watching_category_ids через скрипт, используя REST-API?

Я уже пробовал добавить "update_existing_users"=True в JSON-данные при вызове PUT, но ошибка осталась такой же, как я сообщал ранее. :frowning:

Спасибо ещё раз,

с наилучшими пожеланиями, Андреас

Он ожидает строку “true” — с маленькой буквы.

Огромное спасибо, @zogstrip! Теперь всё работает! :smiley:

(и просто для справки, "update_existing_users"=True должно находиться снаружи/параллельно элементу “group” в отправляемом JSON (здесь показано в синтаксисе Python, поэтому True преобразуется в строку "true"):

            jsonData={
                "group": {
                    "name": f"{groupName}",
                    "watching_category_ids": newWatchList,
                },
                "update_existing_users": True,
            },

Эта тема была автоматически закрыта через 20 часов. Новые ответы больше не принимаются.