atlassian / atlassian/asap-authentication-python
HTTPSPublicKeyRetriever caches asyncio event loop - pytest-asyncio issues
- Vorherrschende Sprache
- Python
- Sterne
- 26
- Forks
- 19
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
Hey there. I'm using `atlassian_jwt_auth` in an ayncio context; specifically using [pytest-asyncio](https://pypi.org/project/pytest-asyncio/) for the event loop creation. By default this library creates a new event loop for each test. (This is my desired behavior.)
However when running two tests that both utilize the HTTPSPublicKeyRetriever, the second test fails because the cached `HTTPSPublicKeyRetriever._class_session` is used with a now-shutdown event loop.
I've gotten around this with a fixture like so:
```python
@pytest.fixture(autouse=True)
async def clean_https_session():
yield
await HTTPSPublicKeyRetriever._class_session.close()
HTTPSPublicKeyRetriever._class_session = None
```
However this feels sort of wacky. Ideally I'd like the library to detect this and invalidate the _class_session either when the loop is shut down or when the session is gotten.
Adding a conditional [here](https://github.com/atlassian/asap-authentication-python/blob/master/atlassian_jwt_auth/contrib/aiohttp/key.py#L23-L26) of `client.loop != self.loop` fixes the issue, but `client.loop` is [deprecated in aiohttp](https://github.com/aio-libs/aiohttp/blob/v3.7.4.post0/aiohttp/client.py#L995-L1001) and actually has been removed in the newest master branch.
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Rechercherichtung
Beginne in atlassian_jwt_auth/contrib/aiohttp/key.py bei der Sitzungsverwaltung von HTTPSPublicKeyRetriever und reproduziere anschließend den Fehler mit zwei pytest-asyncio-Tests, die separate Event-Loops verwenden. Ermittle, wie der zwischengespeicherte _class_session ungültig gemacht werden kann, ohne auf das veraltete client.loop-Attribut angewiesen zu sein; abgeschlossen ist die Aufgabe, wenn beide Tests beendet werden, ohne eine an eine geschlossene Schleife gebundene Session wiederzuverwenden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- authentication
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 55/100