Danisz commited on
Commit
150f7ac
·
1 Parent(s): 20d9067

Clean up dynamic routes

Browse files
Files changed (2) hide show
  1. flet_extensions.py +5 -2
  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
- self.launch_url(endpoint, web_window_name="hidden-iframe")
8
- return await result_future
 
 
 
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');