Mercurial > libervia-web
annotate libervia/web/server/tasks/implicit/task_js_modules.py @ 1598:86c7a3a625d5
server: always start a new session on connection:
The session was kept when a user was connecting from service profile (but not from other
profiles), this was leading to session fixation vulnerability (an attacker on the same
machine could get service profile session cookie, and use it when a victim would log-in).
This patch fixes it by always starting a new session on connection.
fix 443
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 23 Feb 2024 13:35:24 +0100 |
parents | 038d4bfdd967 |
children | d07838fc9d99 |
rev | line source |
---|---|
1254
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1 #!/ur/bin/env python3 |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 import json |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
4 from pathlib import Path |
1518
eb00d593801d
refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
5 from libervia.backend.core.i18n import _ |
eb00d593801d
refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
6 from libervia.backend.core.log import getLogger |
eb00d593801d
refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
7 from libervia.backend.core import exceptions |
eb00d593801d
refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
8 from libervia.web.server.constants import Const as C |
eb00d593801d
refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
9 from libervia.web.server.tasks import task |
1254
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 log = getLogger(__name__) |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 class Task(task.Task): |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 async def prepare(self): |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 if "js" not in self.resource.browser_modules: |
1434
2f6dac783c8e
tasks(js_modules, sass): remove support for `npm`:
Goffi <goffi@goffi.org>
parents:
1273
diff
changeset
|
19 raise exceptions.CancelError("No JS module needed") |
1254
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
20 |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
21 async def start(self): |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
22 js_data = self.resource.browser_modules['js'] |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
23 package = js_data.get('package', {}) |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
24 package_path = self.build_path / 'package.json' |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
25 with package_path.open('w') as f: |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
26 json.dump(package, f) |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
27 |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1434
diff
changeset
|
28 cmd = self.find_command('yarnpkg', 'yarn') |
1254
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
29 await self.runCommand(cmd, 'install', path=str(self.build_path)) |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 try: |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 brython_map = js_data['brython_map'] |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
33 except KeyError: |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
34 pass |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
35 else: |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
36 log.info(_("creating JS modules mapping for Brython")) |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
37 js_modules_path = self.build_path / 'js_modules' |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
38 js_modules_path.mkdir(exist_ok=True) |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
39 init_path = js_modules_path / '__init__.py' |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 init_path.touch() |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
41 |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
42 for module_name, module_data in brython_map.items(): |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
43 log.debug(f"generating mapping for {module_name}") |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
44 if ' ' in module_name: |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
45 raise ValueError( |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
46 f"module {module_name!r} has space(s), it must not!") |
1570
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
47 module_python_name = module_name.replace(".", "_").replace("-", "_") |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
48 if module_python_name != module_name: |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
49 log.info("{module_python_name!r} will be used as python module name") |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
50 module_path = js_modules_path / f"{module_python_name}.py" |
1254
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
51 if isinstance(module_data, str): |
1570
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
52 module_data = {'path': [module_data]} |
1254
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
53 try: |
1570
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
54 js_paths = module_data.pop('path') |
1254
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 except KeyError: |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
56 raise ValueError( |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
57 f'module data for {module_name} must have a "path" key') |
1570
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
58 if isinstance(js_paths, str): |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
59 js_paths = [js_paths] |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
60 module_data['path'] = [ |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
61 Path('node_modules') / js_path.strip(' /') for js_path in js_paths |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
62 ] |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
63 to_export = module_data.get("export", [module_name]) |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
64 if isinstance(to_export, str): |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
65 to_export = to_export.split(",") |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
66 to_export = [e.strip() for e in to_export] |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
67 |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
68 init_code = [] |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
69 |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
70 # CSS if any |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
71 css_to_load = module_data.get("css") |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
72 if css_to_load: |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
73 if isinstance(css_to_load, str): |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
74 css_to_load = [css_to_load] |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
75 |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
76 add_styles_lines = [] |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
77 for css_path in css_to_load: |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
78 normalized_css_path = Path("node_modules") / css_path.strip(" /") |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
79 css_href = Path("/").joinpath(C.BUILD_DIR, normalized_css_path) |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
80 style_tag = ( |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
81 f'<link rel="stylesheet" type="text/css" href="{css_href}">' |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
82 ) |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
83 add_style_code = ( |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
84 'document.head.insertAdjacentHTML(' |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
85 '"beforeend", ' |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
86 f"'{style_tag}')" |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
87 ) |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
88 add_styles_lines.append(add_style_code) |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
89 |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
90 add_styles = "\n".join(add_styles_lines) |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
91 else: |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
92 add_styles = "" |
1254
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
93 |
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
94 with module_path.open('w') as f: |
1570
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
95 browser_imports = ["aio", "document"] |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
96 modules_import = [] |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
97 script_paths = [ |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
98 str(Path('/').joinpath(C.BUILD_DIR, path)) |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
99 for path in module_data["path"] |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
100 ] |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
101 import_type = module_data.get('import_type', "load") |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
102 if import_type == 'module': |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
103 modules_import.append('javascript') |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
104 modules_import.append('proxy') |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
105 callback_function_name = f"on_{module_python_name}_loaded" |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
106 declare_obj = "\n".join(f"{e} = proxy.JSProxy()" for e in to_export) |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
107 export_str = "\n ".join(f"{e}.js_module=module.{e}" for e in to_export) |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
108 load_js_libraries = ( |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
109 f"\n{declare_obj}\n\n" |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
110 f"def {callback_function_name}(module):\n" |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
111 f" {export_str}\n" |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
112 f" loaded.set_result(True)\n\n" |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
113 f"javascript.import_modules({script_paths}, {callback_function_name})\n" |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
114 ) |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
115 elif import_type == 'script': |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
116 browser_imports.append("window") |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
117 script_tags = [ |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
118 f"<script src='{src}'></script>" for src in script_paths |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
119 ] |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
120 load_js_libraries = "\n".join( |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
121 f'document.head.insertAdjacentHTML("beforeend", "{tag}")' |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
122 for tag in script_tags |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
123 ) |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
124 init_code.append('\n'.join(f'{e} = window.{e}' for e in to_export)) |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
125 init_code.append("loaded.set_result(True)") |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
126 elif import_type == "load": |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
127 browser_imports.append("load") |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
128 browser_imports.append("window") |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
129 load_calls = [f'load("{src}")' for src in script_paths] |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
130 load_js_libraries = "\n".join(load_calls) |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
131 init_code.append('\n'.join(f'{e} = window.{e}' for e in to_export)) |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
132 init_code.append("loaded.set_result(True)") |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
133 else: |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
134 raise ValueError("Invalid import type: {import_type!r}") |
1254
780dbc2f4853
server (tasks): new `js_modules` implicit task:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
135 |
1570
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
136 extra_init = module_data.get("extra_init") |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
137 if extra_init is not None: |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
138 if not isinstance(extra_init, str): |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
139 raise ValueError(f"Invalid extra_init: {extra_init!r}") |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
140 init_code.append( |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
141 extra_init.format( |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
142 build_dir = C.BUILD_DIR |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
143 ) |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
144 ) |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
145 |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
146 init_code_str = "\n".join(init_code) |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
147 imports = [f"from browser import {', '.join(browser_imports)}"] |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
148 for module in modules_import: |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
149 imports.append(f"import {module}") |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
150 imports_str = "\n".join(imports) |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
151 |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
152 f.write( |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
153 "#!/usr/bin/env python3\n" |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
154 f"{imports_str}\n\n" |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
155 f"loaded = aio.Future()\n" |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
156 f"{add_styles}\n" |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
157 f"{load_js_libraries}\n" |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
158 f"{init_code_str}" |
038d4bfdd967
server (tasks/JS modules): add new way to generate modules + support of CSS files
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
159 ) |