def websocket(route, authenticate=False):
""" a wrapper method for transforming a coroutine into a websocket handler.
"""
def inner(func):
func = asyncio.coroutine(func)
@ft.wraps(func)
@asyncio.coroutine
def wrapper(request):
params = request.GET
kwargs = {}
if authenticate:
kwargs["user"] = handle_auth(params.get("token", None))
ws = WebSocketResponse()
try:
yield from ws.prepare(request)
yield from func(ws, params, **kwargs)
except Exception as err: # pragma: no cover
logger.error(str(err))
return ws
# cleanup the route
route_ = _clean_route(route)
wrapper.route = ("GET", route_, wrapper)
return wrapper
return inner
评论列表
文章目录