with (yield from lock) is based on very non-obvious tricks:
a) lock.enter is forbidden and raises RuntimeError
b) actually lock.iter is called for lock acquiring before calling with
c) the object returned from iter is a context manager with enter/exit methods
This can make harder writing portable code that works in 2.7, 3.4 and 3.7.
asyncio for Python 3.4 is fairly outdated. Most of the async packages today require 3.5+, as they usually use async/await syntax. I say this sort of backwards compatibility (showing a warning) isn't really a big concern. A bigger concern for us is new code using 'with await lock' pattern, hence the warning.