Closed ren3104 closed 1 year ago
Интересное предложение. С 1 по 3 пункты согласен и это пойдет на пользу, а насчет 4 немного сомневаюсь. Целесообразно ли делать лишний запрос чтобы узнать, нужно ли обновлять токен или нет. Хотя если это не влияет на общую работу и скорость запросов, то тогда можно сделать и так, как ты предложил.
В целом, идея мне нравится, и если не сложно тебе это сделать, то я буду признателен за пулл реквест
Сейчас по умолчанию при инициализации token_expire
равен -1.
https://github.com/SecondThundeR/shikithon/blob/0219c63dd13e37c4e11dee5a1c856903773f7461/shikithon/base_client.py#L73
При проверке на истечение срока действия токена результат будет положительный.
https://github.com/SecondThundeR/shikithon/blob/0219c63dd13e37c4e11dee5a1c856903773f7461/shikithon/base_client.py#L419
Таким образом токен будет обновлен, даже если в этом не было необходимости.
Я предлагаю при выполнении запроса, например api.animes.get()
не обновлять токен, если token_expire
равен None
. Таким образом если access_token
действителен, то запрос будет выполнен успешно, иначе к нам придет ошибка 401, тогда мы обновим токен и повторим запрос.
Вообще, может есть смысл проверки и работу с токенами как-то завязать с декоратором protected_method()
? Потому что я пытался настроить работу API методов таким образом, что токен будет проверяться только для защищенных методов. В нем пока только базовые проверки на наличие ограниченного режима, правильных scopes и вот как раз таки, проверка на истечение токена
Сомневаюсь, есть же такие методы, например все тот же animes.get()
, который с авторизацией возвращает заполненное поле user_rate
. Еще есть методы users.get()
(поля in_friends
, is_ignored
), comments.get()
(can_be_edited
) и т.д.
И правда, забыл про разные ответы при авторизации. Возможно имеет смысл поменять логику и может получится выкинуть декоратор, если его функционал будет где-то в другом месте обрабатываться.
Попробуй тогда примерно набросать изменения и кинуть пулл реквест, а там уже посмотрим что можно будет еще доделать или поменять
Возможно завтра доделаю
В одном моем проекте
access tokens
иrefresh tokens
хранятся в базе данных и используются при инициализации клиентов. Примерно так:Моя проблема состоит в том, что мне не нужно сохранять конфиг в файле.
Предлагаю рефакторинг: 1) Убрать сохранение конфига в файл, либо сделать его кастомизированным, чтобы можно было выбрать не сохранять, либо сохранять в памяти (например dict переменная), файле и т.д. 2)
scopes
может быть пустой строкой и не пройдет эту проверку! https://github.com/SecondThundeR/shikithon/blob/0219c63dd13e37c4e11dee5a1c856903773f7461/shikithon/base_client.py#L327 3) Когда у меня уже естьaccess_tokens
иrefresh_token
мне не нуженauth_code
. https://github.com/SecondThundeR/shikithon/blob/0219c63dd13e37c4e11dee5a1c856903773f7461/shikithon/base_client.py#L330 4) В целях экономии я не хранюtoken_expire
, поэтому если нам неизвестно нужно ли обновить токен или нет, то можно ждать ошибку 401 и после нее обновить токен.Как это вижу я:
@SecondThundeR что думаешь об этом? Если все хорошо, то я могу сделать это и кинуть pr.