py.user.next
Выброси ещё все линтеры, они же тоже пишут, что у тебя всё неправильно. Но, я думаю, ты ими просто не пользуешься ещё.
Зачем сразу бросаться оскорблениями, товарищ? Я пользовался линтерами “ещё до того, как это стало мейнстримом”. Тут дело в другом, позвольте мне описать более подробно всю суть проблемы и крик души моей.
Есть некий сервис, назовём его GroupsAndUsers: он позволяет создавать группы пользователей, которые принадлежат той или иной группе, соответсвенно, могут залогиниться туда или туда, и имею права делать то, или другое. На UI этого сервиса админы групп могут изменять профили пользователей, а именно добавлять/удалять какие-то кастомные аттрибуты. Базовые аттрибуты типа firstName, lastName, email и т.д. - всегда остаются неизменными. Так вот, этот сервис позволяет назвать аттрибут как угодно, нет ограничений на snake_case, camelCase, UPPERCASE и т.д. API возвращает все как есть, не изменяя регистра. Через API можно получить юзера, можно и апдейтнуть, можно и удалить.
И есть вот python sdk, назовём его GroupsAndUsers SDK, наряду с другими sdk (Java, Go и т.д.), в которых никто регистры не меняет, и всё хорошо. Да и вообще, в теории все sdk для одного сервиса должны вести себя одинаково. Ну, допустим, как обычно обстоит дело в python sdk:
users = group_and_users_client.list_users()
# сырой ответ от API: [{"userId": "xxx", "firstName": "John", "lastName": "Connor"}]
# в переменной users будет список объектов типа User такого вида:
for user in users:
print(user.first_name)
print(user.last_name)
Если надо апдейтнуть юзера, всё просто:
user.first_name = "Sarah"
result = group_and_users_client.update_user(user_id=user.user_id, user)
Может быть просто маппинг базовых параметров, а можно и просто делать “case casting”, что в принципе и было реализовано: автоматически переводить в snake_case результат и обратно в lowerCamelCase перед отправкой запроса.
А что получается, если кто-то создал кастомный аттрибут такого вида: FloorNumber: в snake_case он переводится, как floor_number, но обратно уже как floorNumber, то есть отличается первая буква и все, юзера апдейтнуть не получится.
Решение? Не переводить регистр для кастомных аттрибутов - ну такое себе:
user.first_name = "Sarah"
user.FloorNumber = 5
result = group_and_users_client.update_user(user_id=user.user_id, user)
Да и дальше получаются костыли на костыле, это ведь не последняя проблема, никогда не бывает последней…