Spaces:
Build error
Build error
Clean up dynamic routes
Browse files- flet_extensions.py +5 -2
- js_execution.py +7 -1
flet_extensions.py
CHANGED
|
@@ -4,8 +4,11 @@ from js_execution import js_execution_router
|
|
| 4 |
def extend_flet_page():
|
| 5 |
async def eval_js(self: ft.Page, js_code: str) -> str:
|
| 6 |
endpoint, result_future = js_execution_router.create_dynamic_endpoint(js_code)
|
| 7 |
-
|
| 8 |
-
|
|
|
|
|
|
|
|
|
|
| 9 |
|
| 10 |
if not hasattr(ft.Page, 'eval_js'):
|
| 11 |
ft.Page.eval_js = eval_js
|
|
|
|
| 4 |
def extend_flet_page():
|
| 5 |
async def eval_js(self: ft.Page, js_code: str) -> str:
|
| 6 |
endpoint, result_future = js_execution_router.create_dynamic_endpoint(js_code)
|
| 7 |
+
try:
|
| 8 |
+
self.launch_url(endpoint, web_window_name="hidden-iframe")
|
| 9 |
+
return await result_future
|
| 10 |
+
finally:
|
| 11 |
+
js_execution_router.cleanup_route(endpoint.split('/')[-1])
|
| 12 |
|
| 13 |
if not hasattr(ft.Page, 'eval_js'):
|
| 14 |
ft.Page.eval_js = eval_js
|
js_execution.py
CHANGED
|
@@ -9,6 +9,7 @@ logger = logging.getLogger(__name__)
|
|
| 9 |
class JSExecutionRouter:
|
| 10 |
def __init__(self):
|
| 11 |
self.app = None
|
|
|
|
| 12 |
|
| 13 |
def init_app(self, app: FastAPI):
|
| 14 |
self.app = app
|
|
@@ -67,8 +68,14 @@ class JSExecutionRouter:
|
|
| 67 |
result_future.set_result(data['result'])
|
| 68 |
return {"status": "received"}
|
| 69 |
|
|
|
|
| 70 |
return f"/eval-js/{result_id}", result_future
|
| 71 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 72 |
js_execution_router = JSExecutionRouter()
|
| 73 |
|
| 74 |
def add_js_execution_routes(app: FastAPI):
|
|
@@ -115,7 +122,6 @@ def mount_flet_app(app: FastAPI, route: str, flet_app):
|
|
| 115 |
var src = currentProtocol + '//' + currentHost + '/flet-app-internal/';
|
| 116 |
|
| 117 |
iframe.src = src;
|
| 118 |
-
console.log('Iframe src set to:', src);
|
| 119 |
|
| 120 |
// Set Content-Security-Policy based on the current protocol
|
| 121 |
var meta = document.createElement('meta');
|
|
|
|
| 9 |
class JSExecutionRouter:
|
| 10 |
def __init__(self):
|
| 11 |
self.app = None
|
| 12 |
+
self.active_routes = set()
|
| 13 |
|
| 14 |
def init_app(self, app: FastAPI):
|
| 15 |
self.app = app
|
|
|
|
| 68 |
result_future.set_result(data['result'])
|
| 69 |
return {"status": "received"}
|
| 70 |
|
| 71 |
+
self.active_routes.add(result_id)
|
| 72 |
return f"/eval-js/{result_id}", result_future
|
| 73 |
|
| 74 |
+
def cleanup_route(self, result_id: str):
|
| 75 |
+
if result_id in self.active_routes:
|
| 76 |
+
self.app.router.routes = [route for route in self.app.router.routes if route.path not in [f"/eval-js/{result_id}", f"/js-result/{result_id}"]]
|
| 77 |
+
self.active_routes.remove(result_id)
|
| 78 |
+
|
| 79 |
js_execution_router = JSExecutionRouter()
|
| 80 |
|
| 81 |
def add_js_execution_routes(app: FastAPI):
|
|
|
|
| 122 |
var src = currentProtocol + '//' + currentHost + '/flet-app-internal/';
|
| 123 |
|
| 124 |
iframe.src = src;
|
|
|
|
| 125 |
|
| 126 |
// Set Content-Security-Policy based on the current protocol
|
| 127 |
var meta = document.createElement('meta');
|