Erro ao tentar atualizar a lista de observação para um grupo via API (PUT groups/{id}.json)

Prioridade/Severidade:

média a alta

Plataforma:

Script Python, bem como linha de comando cURL

Versão do servidor Discourse:

3.6.0.beta3-latest (6adb4f8e84)

Descrição:

Ao tentar atualizar o watching_category_ids de um grupo existente, meu script Python (usando um simples “requests.put”) relata o seguinte erro:

_doPut> ERRO na requisição: 422 Unprocessable Entity {'user_count': 2, 'errors': ['Você forneceu parâmetros inválidos para a requisição: update_existing_users']}

mesmo que não haja nenhum parâmetro chamado update_existing_users nos meus dados JSON.

Usando cURL para verificar via:

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

Eu recebo o mesmo erro:

{“user_count”:2,“errors”:[“Você forneceu parâmetros inválidos para a requisição: update_existing_users”]}%

Passos para reproduzir:

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

edição: adicionei a versão do servidor discourse

Sim, esse endpoint é um pouco estranho. Queríamos avisar os membros da equipe sobre o número de usuários potencialmente afetados e oferecer a eles a opção de escolher entre aplicar a alteração retroativamente ou não.

É por isso que você está vendo o “{ 'user_count': 2, ... }” na resposta do servidor.

Eu esclareci a mensagem de erro para que faça mais sentido e também melhorei o código do front-end para lidar melhor com este “caso de uso”, além de adicionar especificações (specs).

1 curtida

Olá - e obrigado pela ação rápida! :slight_smile:

Infelizmente, ainda estou confuso: preciso definir o valor para watching_category_ids para um determinado grupo, e mesmo que a mensagem de erro tenha mudado, ainda é um erro 422. Então, como posso atualizar o grupo com a nova lista de watching_category_ids via um script usando a API REST?

Eu já tentei adicionar "update_existing_users”=True nos dados JSON da chamada PUT, o erro foi o mesmo relatado. :frowning:

Obrigado novamente,

saudações, Andreas

Ele espera a string “true” - minúscula.

Muito obrigado, @zogstrip ! Funciona agora! :smiley:

(e só para referência, o \"update_existing_users”=True tem que estar fora/paralelo ao item “group” no json enviado (mostrado aqui em sintaxe Python, então True é traduzido para a string “true”):

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

Este tópico foi fechado automaticamente após 20 horas. Novas respostas não são mais permitidas.