строка в списке: неверно возвращает false (request.args)

#python #spotify

#python #spotify

Вопрос:

Я в тупике из-за этого:

 @bp.route('/api/spotify_auth')
def api_spotify_auth():
    code = request.args.get("code", None)
    error = request.args.get("error", None)
    state = request.args.get("state").strip(""'")

    if state not in Spotify.valid_states:
        return jsonify({
            "error": "State returned was not valid",
            "states": Spotify.valid_states,
            "state": state,
            "check": state in Spotify.valid_states
        }), 500
  

Я ожидаю, что вызов будет включать state параметр, который ранее был добавлен в список, Spotify.valid_states . Однако при запросе маршрута я получаю:

 {
  "check": false, 
  "error": "State returned was not valid", 
  "state": "07fec2ea-123f-42e8-9e64-07026ca87ae5", 
  "states": [
    "07fec2ea-123f-42e8-9e64-07026ca87ae5"
  ]
}
  

Очевидно, python возвращается false к state in states … но мне кажется, что это должно вернуться true .

Кто-то упомянул кавычки, вызывающие проблемы, отсюда .strip(""'") , однако проблема сохраняется.

Приветствуются любые предложения 🙂

Комментарии:

1. Spotify.valid_states похоже, содержит uuid, вы уверены, что это список строк, а не uuid?

2. Spotify.valid_states может быть список объектов, repr который просто выглядит как «обычная» строка Python, но поскольку in используется равенство, он завершится ошибкой при использовании против str объекта. Вы должны убедиться, что Spotify.valid_states действительно содержит (попробуйте print(type(Spotify.valid_states[0])) )

3. Вау, вы оба попали в точку — я подумал о чем-то забавном с uuid, но в моем тестировании он действовал точно так же, как строка, поэтому я не понял, что это что-то иное. Преобразование в строку сразу при создании uuid исправило это. Очень признателен 🙂