Reduce __enter__/__exit__ boilerplate for sync ctx managers

This commit is contained in:
Lonami Exo
2019-04-13 10:53:33 +02:00
parent badefcec48
commit 9090ede5db
5 changed files with 33 additions and 51 deletions

View File

@@ -102,6 +102,25 @@ async def _cancel(log, **tasks):
except Exception:
log.exception('Unhandled exception from %s after cancel', name)
def _sync_enter(self):
"""
Helps to cut boilerplate on async context
managers that offer synchronous variants.
"""
if self._client.loop.is_running():
raise RuntimeError(
'You must use "async with" if the event loop '
'is running (i.e. you are inside an "async def")'
)
return self._client.loop.run_until_complete(self.__aenter__())
def _sync_exit(self, *args):
return self._client.loop.run_until_complete(self.__aexit__(*args))
# endregion
# region Cryptographic related utils