Oauthlib: populate_token_attributes() ValueError für float expires_at-Werte

Erstellt am 10. Dez. 2020  ·  7Kommentare  ·  Quelle: oauthlib/oauthlib

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

Einige Token haben einen expires_at Wert als Float (Beispiel: 1612807300.1613762 ), was dazu führt, dass diese Zeile ein ValueError: invalid literal for int() with base 10 wirft. Dies könnte mit int(float(response.get('expires_at'))) (oder Runden, um nicht abgeschnitten) gelöst werden.

Bug Contributor Friendly OAuth2-Client

Hilfreichster Kommentar

Die Verwendung von expires_at ist in RFC nicht definiert, daher scheint es auch im Code Verwirrung zu geben. Wir können davon ausgehen, dass es sich um einen int handelt, ähnlich wie bei expires_in .

Jeder PR, der seine Verwendung korrigiert und einen Unit-Test hinzufügt, um diesen Randfall abzudecken, ist willkommen.

Alle 7 Kommentare

Direkt darüber wird self._expires_at zu einem Float gemacht:

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

Die Verwendung von expires_at ist in RFC nicht definiert, daher scheint es auch im Code Verwirrung zu geben. Wir können davon ausgehen, dass es sich um einen int handelt, ähnlich wie bei expires_in .

Jeder PR, der seine Verwendung korrigiert und einen Unit-Test hinzufügt, um diesen Randfall abzudecken, ist willkommen.

Hey, kann ich dieses Problem haben? Ich fange gerade mit Open Source an, also wird dies ein guter Anfang sein.

Hey, kann ich dieses Problem haben? Ich fange gerade mit Open Source an, also wird dies ein guter Anfang sein.

@default-303 mach es!

@ggiill danke, ich habe folgende Änderungen vorgenommen

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

und alle Tests bestehen ist, wenn ich pytest ausführe

Aber was für Tests soll ich hinzufügen? wie ein einfacher typecheck Test so etwas -
```
Unittest importieren
import fix ## ein Beispielskript, das ich für diese Demo erstellt habe
Importzeit

Klasse 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)

```

oder ein volles mock test ?

@ggiill hey, kann ich eine Bewertung bekommen?
lmao ist ein Monat her, sogar ich habe es vergessen.

@ggiill hey, kann ich eine Bewertung bekommen?
lmao ist ein Monat her, sogar ich habe es vergessen.

@default-303 Ich bin kein Betreuer - pinge @JonathanHuot. Sie möchten wahrscheinlich auch eine PR zur Überprüfung einreichen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

JonathanHuot picture JonathanHuot  ·  33Kommentare

potiuk picture potiuk  ·  14Kommentare

JonathanHuot picture JonathanHuot  ·  15Kommentare

thedrow picture thedrow  ·  31Kommentare

ib-lundgren picture ib-lundgren  ·  21Kommentare