Open
Description
I'm writing a website that listens to a pgn feed and runs an analysis of the current position in an asyncio task. When a new position comes, the analysis task is cancelled, and new task started.
If analysis is cancelled too soon (two updates come one after another), python-chess throws an AssertionError
exception.
Traceback (most recent call last):
File "/home/crem/dev/lczero-live/backend/analyzer.py", line 157, in _uci_worker_think
with await self._engine.analysis(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/crem/dev/lczero-live/.venv/lib/python3.12/site-packages/chess/engine.py", line 1774, in analysis
return await self.communicate(UciAnalysisCommand)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/crem/dev/lczero-live/.venv/lib/python3.12/site-packages/chess/engine.py", line 997, in communicate
self.next_command.set_finished()
File "/home/crem/dev/lczero-live/.venv/lib/python3.12/site-packages/chess/engine.py", line 1269, in set_finished
assert self.state in [CommandState.ACTIVE, CommandState.CANCELLING], self.state
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: CommandState.NEW