Oauthlib: populate_token_attributes () ValueError для значений с плавающей запятой expires_at

Созданный на 10 дек. 2020  ·  7Комментарии  ·  Источник: oauthlib/oauthlib

https://github.com/oauthlib/oauthlib/blob/d54965b86ce4ede956db70baff0b3d5e9182a007/oauthlib/oauth2/rfc6749/clients/base.py#L516

Некоторые токены имеют значение expires_at в виде числа с плавающей запятой (пример: 1612807300.1613762 ), что заставляет эту строку генерировать ValueError: invalid literal for int() with base 10 . Это можно решить с помощью int(float(response.get('expires_at'))) (или округления, чтобы не усекать).

Bug Contributor Friendly OAuth2-Client

Самый полезный комментарий

Использование expires_at не определено в RFC, поэтому кажется, что в коде тоже есть путаница. Мы можем предположить, что это int, как и expires_in .

Любой PR для исправления его использования и добавления модульного теста для покрытия этого крайнего случая приветствуется.

Все 7 Комментарий

Чуть выше этого self._expires_at делается плавающим:

self._expires_at = time.time() + int(self.expires_in)

Использование expires_at не определено в RFC, поэтому кажется, что в коде тоже есть путаница. Мы можем предположить, что это int, как и expires_in .

Любой PR для исправления его использования и добавления модульного теста для покрытия этого крайнего случая приветствуется.

эй, может у меня эта проблема? Я только начинаю с открытого исходного кода, так что это будет хорошим началом.

эй, может у меня эта проблема? Я только начинаю с открытого исходного кода, так что это будет хорошим началом.

@ default-303 дерзай!

@ggiill спасибо, я сделал следующие изменения

- self._expires_at = int(response.get('expires_at')) 
+ self._expires_at = round(float(response.get('expires_at')))

и проходит все тесты, когда я запускаю pytest

Но какие тесты вы хотите, чтобы я добавил? как простой typecheck тест, что-то вроде этого -
`` ''
импорт unittest
import fix ## образец скрипта, который я написал для этой демонстрации
время импорта

класс TestFix (unittest.TestCase):

def test_float(self) : 
    string_time = str(time.time())
    self.assertIsInstance(fix.get_time("123345.1222"), int)

def test_int(self) : 
    string_time = str(round(time.time()))
    self.assertIsInstance(fix.get_time("12333"), int)

`` ''

или полный на mock test ?

@ggiill эй, могу я получить отзыв?
lmao это был месяц, даже я забыл об этом.

@ggiill эй, могу я получить отзыв?
lmao это был месяц, даже я забыл об этом.

@ default-303 Я не сопровождаю - пингую @JonathanHuot. Вы, вероятно, также захотите поставить PR для обзора.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

ib-lundgren picture ib-lundgren  ·  21Комментарии

potiuk picture potiuk  ·  14Комментарии

JonathanHuot picture JonathanHuot  ·  10Комментарии

JonathanHuot picture JonathanHuot  ·  33Комментарии

JonathanHuot picture JonathanHuot  ·  26Комментарии