Jelajahi Sumber

allow decorator routes to be async, always running on main thread

Falko Schindler 3 tahun lalu
induk
melakukan
af1939df8f
1 mengubah file dengan 2 tambahan dan 2 penghapusan
  1. 2 2
      nicegui/routes.py

+ 2 - 2
nicegui/routes.py

@@ -24,7 +24,7 @@ def get(self, path: str):
 
 
     def decorator(func):
     def decorator(func):
         @wraps(func)
         @wraps(func)
-        def decorated(request: requests.Request):
+        async def decorated(request: requests.Request):
             args = {name: converter.convert(request.path_params.get(name)) for name, converter in converters.items()}
             args = {name: converter.convert(request.path_params.get(name)) for name, converter in converters.items()}
             parameters = inspect.signature(func).parameters
             parameters = inspect.signature(func).parameters
             for key in parameters:
             for key in parameters:
@@ -38,7 +38,7 @@ def get(self, path: str):
                     args[key] = complex(args[key])
                     args[key] = complex(args[key])
             if 'request' in parameters and 'request' not in args:
             if 'request' in parameters and 'request' not in args:
                 args['request'] = request
                 args['request'] = request
-            return func(**args)
+            return await func(**args) if inspect.iscoroutinefunction(func) else func(**args)
         self.add_route(routing.Route(path, decorated))
         self.add_route(routing.Route(path, decorated))
         return decorated
         return decorated
     return decorator
     return decorator