diff --git a/src/microdot/helpers.py b/src/microdot/helpers.py new file mode 100644 index 0000000..664e58c --- /dev/null +++ b/src/microdot/helpers.py @@ -0,0 +1,8 @@ +try: + from functools import wraps +except ImportError: # pragma: no cover + # MicroPython does not currently implement functools.wraps + def wraps(wrapped): + def _(wrapper): + return wrapper + return _ diff --git a/src/microdot/session.py b/src/microdot/session.py index 663d2a2..b3ebaa2 100644 --- a/src/microdot/session.py +++ b/src/microdot/session.py @@ -1,7 +1,6 @@ import jwt from microdot.microdot import invoke_handler - -secret_key = None +from microdot.helpers import wraps class SessionDict(dict): @@ -136,13 +135,9 @@ def with_session(f): Note that the decorator does not save the session. To update the session, call the :func:`session.save() ` method. """ + @wraps(f) async def wrapper(request, *args, **kwargs): return await invoke_handler( f, request, request.app._session.get(request), *args, **kwargs) - for attr in ['__name__', '__doc__', '__module__', '__qualname__']: - try: - setattr(wrapper, attr, getattr(f, attr)) - except AttributeError: # pragma: no cover - pass return wrapper diff --git a/src/microdot/sse.py b/src/microdot/sse.py index 8dfe18b..01143c8 100644 --- a/src/microdot/sse.py +++ b/src/microdot/sse.py @@ -1,5 +1,6 @@ import asyncio import json +from microdot.helpers import wraps class SSE: @@ -103,6 +104,7 @@ def with_sse(f): # send a named event await sse.send('hello', event='greeting') """ + @wraps(f) async def sse_handler(request, *args, **kwargs): return sse_response(request, f, *args, **kwargs) diff --git a/src/microdot/websocket.py b/src/microdot/websocket.py index 925f7dc..0fb6f7c 100644 --- a/src/microdot/websocket.py +++ b/src/microdot/websocket.py @@ -2,6 +2,7 @@ import binascii import hashlib from microdot import Request, Response from microdot.microdot import MUTED_SOCKET_ERRORS, print_exception +from microdot.helpers import wraps class WebSocketError(Exception): @@ -192,6 +193,7 @@ async def websocket_upgrade(request): def websocket_wrapper(f, upgrade_function): + @wraps(f) async def wrapper(request, *args, **kwargs): ws = await upgrade_function(request) try: