Source code for dazzler.electron._runner
import json
import shlex
import asyncio
import shutil
import sys
import os
import tempfile
from dazzler._assets import electron_path, electron_preload_path
from ._loading import get_loading_options, build_loading_html
from ._runtime import is_compiled
[docs]async def run_electron(app, app_path: str):
"""
:param app:
:type app: dazzler.Dazzler
:param app_path:
:return:
"""
cmd = shlex.split(
f'electron {electron_path}',
posix=sys.platform != 'win32'
)
env = os.environ.copy()
env['DAZZLER_PORT'] = str(app.config.port)
env['DAZZLER_APP'] = app_path
env['DAZZLER_COMPILED'] = str(is_compiled())
env['DAZZLER_PRELOAD'] = electron_preload_path
options_dir = tempfile.mkdtemp('dazzler')
if app.config.electron.loading_window.enabled:
options = get_loading_options(app.config)
options_file = 'loading-options.json'
app.logger.debug(
f'Create options for loading windows at {options_file}'
)
app.logger.debug(f'Loading window options: {options}')
os.makedirs(options_dir, exist_ok=True)
with open(options_file, 'w') as f:
json.dump(options, f)
html_target = os.path.join(options_dir, 'electron-loading.html')
html_content = build_loading_html(app.config)
with open(html_target, 'w') as f:
f.write(html_content)
env['DAZZLER_LOADING_WINDOW_OPTIONS'] = options_file
env['DAZZLER_LOADING_WINDOW_FILE'] = html_target
try:
proc = await asyncio.create_subprocess_shell(' '.join(cmd), env=env)
await proc.communicate()
finally:
shutil.rmtree(options_dir, ignore_errors=True)