Handle operation failure in api.
This commit is contained in:
parent
5e906d53cf
commit
9abf1855d9
|
@ -8,6 +8,7 @@ import asyncio
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
|
|
||||||
from bot_z.async_operator import AsyncOperator
|
from bot_z.async_operator import AsyncOperator
|
||||||
|
from bot_z.exceptions import OperationFailed
|
||||||
|
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
|
@ -31,7 +32,10 @@ async def login(op: AsyncOperator, username: str, password: str) -> bool:
|
||||||
the AsyncOperator object.
|
the AsyncOperator object.
|
||||||
"""
|
"""
|
||||||
if not op.logged_in:
|
if not op.logged_in:
|
||||||
await op.login(username, password)
|
try:
|
||||||
|
await op.login(username, password)
|
||||||
|
except OperationFailed:
|
||||||
|
pass
|
||||||
return op.logged_in
|
return op.logged_in
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,7 +45,10 @@ async def logout(op: AsyncOperator) -> bool:
|
||||||
a bool showing the success or failure of the operation.
|
a bool showing the success or failure of the operation.
|
||||||
"""
|
"""
|
||||||
if op.logged_in:
|
if op.logged_in:
|
||||||
await op.logout()
|
try:
|
||||||
|
await op.logout()
|
||||||
|
except OperationFailed:
|
||||||
|
pass
|
||||||
return op.logged_in
|
return op.logged_in
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,7 +58,10 @@ async def checkin(op: AsyncOperator) -> bool:
|
||||||
a bool showing the success or failure of the operation.
|
a bool showing the success or failure of the operation.
|
||||||
"""
|
"""
|
||||||
if op.logged_in and not op.checked_in:
|
if op.logged_in and not op.checked_in:
|
||||||
await op.checkin()
|
try:
|
||||||
|
await op.checkin()
|
||||||
|
except OperationFailed:
|
||||||
|
pass
|
||||||
return op.checked_in
|
return op.checked_in
|
||||||
|
|
||||||
|
|
||||||
|
@ -61,5 +71,8 @@ async def checkout(op: AsyncOperator) -> bool:
|
||||||
a bool showing the success or failure of the operation.
|
a bool showing the success or failure of the operation.
|
||||||
"""
|
"""
|
||||||
if op.logged_in and op.checked_in:
|
if op.logged_in and op.checked_in:
|
||||||
await op.checkout()
|
try:
|
||||||
|
await op.checkout()
|
||||||
|
except OperationFailed:
|
||||||
|
pass
|
||||||
return not op.checked_in
|
return not op.checked_in
|
||||||
|
|
|
@ -12,6 +12,7 @@ import functools
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from bot_z.operator import Operator
|
from bot_z.operator import Operator
|
||||||
|
from bot_z.exceptions import OperationFailed
|
||||||
|
|
||||||
|
|
||||||
alog = logging.getLogger("asyncio")
|
alog = logging.getLogger("asyncio")
|
||||||
|
@ -26,6 +27,7 @@ async def _push_to_loop(loop, executor, func, *args, **kwargs):
|
||||||
return res.result()
|
return res.result()
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: make it JSON-serializable
|
||||||
class AsyncOperator(object):
|
class AsyncOperator(object):
|
||||||
"""
|
"""
|
||||||
This is the async version of the Operator.
|
This is the async version of the Operator.
|
||||||
|
@ -47,7 +49,7 @@ class AsyncOperator(object):
|
||||||
self.loop, self.executor, self.op.login, username, password
|
self.loop, self.executor, self.op.login, username, password
|
||||||
)
|
)
|
||||||
if not self.op.logged_in:
|
if not self.op.logged_in:
|
||||||
raise RuntimeError("Failed to login.")
|
raise OperationFailed("Failed to login.")
|
||||||
alog.info("Logged in [%s]", self.name)
|
alog.info("Logged in [%s]", self.name)
|
||||||
|
|
||||||
async def logout(self) -> None:
|
async def logout(self) -> None:
|
||||||
|
@ -55,7 +57,7 @@ class AsyncOperator(object):
|
||||||
alog.debug("Logging out [%s]", self.name)
|
alog.debug("Logging out [%s]", self.name)
|
||||||
_ = await _push_to_loop(self.loop, self.executor, self.op.logout)
|
_ = await _push_to_loop(self.loop, self.executor, self.op.logout)
|
||||||
if self.op.logged_in:
|
if self.op.logged_in:
|
||||||
raise RuntimeError("Failed to logout.")
|
raise OperationFailed("Failed to logout.")
|
||||||
alog.info("Logged out [%s]", self.name)
|
alog.info("Logged out [%s]", self.name)
|
||||||
|
|
||||||
async def checkin(self) -> None:
|
async def checkin(self) -> None:
|
||||||
|
@ -63,7 +65,7 @@ class AsyncOperator(object):
|
||||||
alog.debug("Checking in [%s]", self.name)
|
alog.debug("Checking in [%s]", self.name)
|
||||||
_ = await _push_to_loop(self.loop, self.executor, self.op.check_in)
|
_ = await _push_to_loop(self.loop, self.executor, self.op.check_in)
|
||||||
if not self.op.checked_in:
|
if not self.op.checked_in:
|
||||||
raise RuntimeError("Failed to checkin.")
|
raise OperationFailed("Failed to checkin.")
|
||||||
alog.info("Checked in [%s]", self.name)
|
alog.info("Checked in [%s]", self.name)
|
||||||
|
|
||||||
async def checkout(self) -> None:
|
async def checkout(self) -> None:
|
||||||
|
@ -71,7 +73,7 @@ class AsyncOperator(object):
|
||||||
alog.debug("Checking out [%s]", self.name)
|
alog.debug("Checking out [%s]", self.name)
|
||||||
_ = await _push_to_loop(self.loop, self.executor, self.op.check_out)
|
_ = await _push_to_loop(self.loop, self.executor, self.op.check_out)
|
||||||
if self.op.checked_in:
|
if self.op.checked_in:
|
||||||
raise RuntimeError("Failed to checkout.")
|
raise OperationFailed("Failed to checkout.")
|
||||||
alog.info("Checked out [%s]", self.name)
|
alog.info("Checked out [%s]", self.name)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
2
bot_z/exceptions.py
Normal file
2
bot_z/exceptions.py
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
class OperationFailed(RuntimeError):
|
||||||
|
pass
|
Loading…
Reference in New Issue
Block a user