canonical / canonical/python-libmaas
Bug on async Events methods
- Vorherrschende Sprache
- Python
- Sterne
- 65
- Forks
- 71
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
The `async def prev(self, count=None)` and `async def next(self, count=None)` methods on [client/viscera/events.py](https://github.com/canonical/python-libmaas/blob/0.6.8/maas/client/viscera/events.py) are not using `await` when calling `self._fetch`, which is causing errors when the async iterator tries to continue reading events of a previous/next page.
How to reproduce:
```python
events = await client.events.query()
async for e in events.forwards():
print(e.event_id, e.event_type)
```
The snippet above will fetch some events and then throw an error:
```
...
1902 Performing PXE boot
1906 Loading ephemeral
1907 Image Deployed
1909 Deployed
Traceback (most recent call last):
File "/maas_tests/env/lib/python3.13/site-packages/maas/client/viscera/events.py", line 259, in __anext__
return next(self._current_iter)
StopIteration
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/maas_tests/env/lib/python3.13/site-packages/marimo/_runtime/executor.py", line 115, in execute_cell_async
await eval(cell.body, glbls)
Cell marimo://test-python-libmaas.py#cell=cell-17, line 3, in
async for e in events.forwards():
print(e.event_id, e.event_type)
File "/maas_tests/env/lib/python3.13/site-packages/maas/client/viscera/events.py", line 262, in __anext__
self._current_iter = reversed(self._current)
~~~~~~~~^^^^^^^^^^^^^^^
TypeError: 'coroutine' object is not reversible
```
To fix, we just need to add `await` to the following lines:
- https://github.com/canonical/python-libmaas/blob/0.6.8/maas/client/viscera/events.py#L169
- https://github.com/canonical/python-libmaas/blob/0.6.8/maas/client/viscera/events.py#L180
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Rechercherichtung
Beginne in maas/client/viscera/events.py bei den asynchronen prev- und next-Methoden, auf die in den Zeilen 169 und 180 verwiesen wird, und reproduziere dann das Problem mit dem bereitgestellten Beispiel für die asynchrone Iteration events.forwards(). Als erledigt gilt die Aufgabe, wenn die Iteration über Ereignisseiten hinweg kein Coroutine-Objekt oder den gemeldeten TypeError mehr erzeugt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- api
- Issue-Typ
- Bug
- Schwierigkeit
- 1/5
- Geschätzter Aufwand
- 1-3 Stunden
- Aktivitätsstatus
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 50/100