dls-controls / aioca

Asynchronous Channel Access client for asyncio and Python using libca via ctypes

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Subscriptions using aioca are failing since v1.5

rjwills28 opened this issue · comments

I was testing the Coniql application with the latest version of aioca (v1.5) and have found that the subscriptions using the aioca camonitor are now failing and giving the following error:

~/.local/share/virtualenvs/coniql-dqAdtlIg/lib/python3.8/site-packages/aioca/_catools.py:424: RuntimeWarning: coroutine 'Queue.put' was never awaited
  self.callback(value)

Previous versions of aioca was v1.4 and subscriptions were working there.

To reproduce, install and run the Coniql subscription test which you will now see never completes.
pytest -s tests/test_caplugin.py::test_subscribe_ticking

If you would like me to provide a small application demoing this then please just let me know.

Please can you test installing aioca from that branch and see if it fixes things? If so I will make a release

This does fix the subscription issue - thanks!

However I do now get an error when I try to put a list to a waveform PV. Here is the stack trace:

    return await throw_wrapper(*args, **kwargs)
  File "/home/cnuser/.local/share/virtualenvs/coniql-dqAdtlIg/lib/python3.8/site-packages/aioca/_catools.py", line 96, in throw_wrapper
    return await awaitable
  File "/home/cnuser/.local/share/virtualenvs/coniql-dqAdtlIg/lib/python3.8/site-packages/aioca/_catools.py", line 142, in ca_timeout
    result = await asyncio.wait_for(awaitable, timeout)
  File "/usr/local/lib/python3.8/asyncio/tasks.py", line 494, in wait_for
    return fut.result()
  File "/home/cnuser/.local/share/virtualenvs/coniql-dqAdtlIg/lib/python3.8/site-packages/aioca/_catools.py", line 715, in caget
    result = await done.wait()
  File "/home/cnuser/.local/share/virtualenvs/coniql-dqAdtlIg/lib/python3.8/site-packages/aioca/_catools.py", line 54, in wait
    assert self.value, "This should have been set in set()"
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Sorry, I broke it while trying to fix mypy. I'll fix it properly on monday...

Ok, it should be fixed now, let me know if this works for you

Yes I can confirm that the subscriptions and puts are now working as expected. Thanks for getting it fixed so quickly!