From f302d960011f161a6e6f0e6778fbfe1a1550214f Mon Sep 17 00:00:00 2001 From: Blallo Date: Tue, 30 Jul 2019 22:51:47 +0200 Subject: [PATCH] Added async entrypoints in the api module. --- api/async_bot.py | 65 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 api/async_bot.py diff --git a/api/async_bot.py b/api/async_bot.py new file mode 100644 index 0000000..38c2926 --- /dev/null +++ b/api/async_bot.py @@ -0,0 +1,65 @@ +# -*- encoding: utf-8 -*- + +""" +Asyncio wrapper for AsyncOperator methods. +""" + +import asyncio +from contextlib import contextmanager + +from bot_z.async_operator import AsyncOperator + + +@contextmanager +def this_loop(loop): + _loop = asyncio.get_event_loop() + asyncio.set_event_loop(loop) + yield + asyncio.set_event_loop(_loop) + + +def init(base_url: str, name: str) -> AsyncOperator: + """ + Initialize the stateful object. + """ + return AsyncOperator(base_url, name) + + +async def login(op: AsyncOperator, username: str, password: str) -> bool: + """ + Executes the login asynchronously and returns + the AsyncOperator object. + """ + if not op.logged_in: + await op.login(username, password) + return op.logged_in + + +async def logout(op: AsyncOperator) -> bool: + """ + Executes the logout asynchronously and returns + a bool showing the success or failure of the operation. + """ + if op.logged_in: + await op.logout() + return op.logged_in + + +async def checkin(op: AsyncOperator) -> bool: + """ + Executes the check in asynchronously and returns + a bool showing the success or failure of the operation. + """ + if op.logged_in and not op.checked_in: + await op.checkin() + return op.checked_in + + +async def checkout(op: AsyncOperator) -> bool: + """ + Executes the checkout asynchronously and returns + a bool showing the success or failure of the operation. + """ + if op.logged_in and op.checked_in: + await op.checkout() + return not op.checked_in