mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-07 01:14:15 +02:00
[wgem] really working without node and npm installed
This commit is contained in:
@@ -4,7 +4,7 @@ import sys
|
||||
import time
|
||||
from io import StringIO
|
||||
from subprocess import PIPE
|
||||
from typing import List, Tuple
|
||||
from typing import List, Tuple, Set
|
||||
|
||||
# default environment variables for subprocesses.
|
||||
from bauh.api.abstract.handler import ProcessWatcher
|
||||
@@ -25,7 +25,7 @@ USE_GLOBAL_INTERPRETER = bool(os.getenv('VIRTUAL_ENV'))
|
||||
SIZE_MULTIPLIERS = ((0.001, 'Kb'), (0.000001, 'Mb'), (0.000000001, 'Gb'), (0.000000000001, 'Tb'))
|
||||
|
||||
|
||||
def gen_env(global_interpreter: bool, lang: str = DEFAULT_LANG) -> dict:
|
||||
def gen_env(global_interpreter: bool, lang: str = DEFAULT_LANG, extra_paths: Set[str] = None) -> dict:
|
||||
res = {}
|
||||
|
||||
if lang:
|
||||
@@ -36,6 +36,9 @@ def gen_env(global_interpreter: bool, lang: str = DEFAULT_LANG) -> dict:
|
||||
else:
|
||||
res['PATH'] = PATH
|
||||
|
||||
if extra_paths:
|
||||
res['PATH'] += ':' + ':'.join(extra_paths)
|
||||
|
||||
return res
|
||||
|
||||
|
||||
@@ -60,8 +63,9 @@ class SystemProcess:
|
||||
|
||||
class SimpleProcess:
|
||||
|
||||
def __init__(self, cmd: List[str], cwd: str = '.', expected_code: int = None, global_interpreter: bool = USE_GLOBAL_INTERPRETER,
|
||||
lang: str = DEFAULT_LANG, root_password: str = None):
|
||||
def __init__(self, cmd: List[str], cwd: str = '.', expected_code: int = None,
|
||||
global_interpreter: bool = USE_GLOBAL_INTERPRETER, lang: str = DEFAULT_LANG, root_password: str = None,
|
||||
extra_paths: Set[str] = None):
|
||||
pwdin, final_cmd = None, []
|
||||
|
||||
if root_password is not None:
|
||||
@@ -70,17 +74,17 @@ class SimpleProcess:
|
||||
|
||||
final_cmd.extend(cmd)
|
||||
|
||||
self.instance = self._new(final_cmd, cwd, global_interpreter, lang, stdin=pwdin)
|
||||
self.instance = self._new(final_cmd, cwd, global_interpreter, lang, stdin=pwdin, extra_paths=extra_paths)
|
||||
self.expected_code = expected_code
|
||||
|
||||
def _new(self, cmd: List[str], cwd: str, global_interpreter: bool, lang: str, stdin = None) -> subprocess.Popen:
|
||||
def _new(self, cmd: List[str], cwd: str, global_interpreter: bool, lang: str, stdin = None, extra_paths: Set[str] = None) -> subprocess.Popen:
|
||||
|
||||
args = {
|
||||
"stdout": subprocess.PIPE,
|
||||
"stderr": subprocess.STDOUT,
|
||||
"bufsize": -1,
|
||||
"cwd": cwd,
|
||||
"env": gen_env(global_interpreter, lang)
|
||||
"env": gen_env(global_interpreter, lang, extra_paths=extra_paths)
|
||||
}
|
||||
|
||||
if stdin:
|
||||
@@ -166,7 +170,7 @@ class ProcessHandler:
|
||||
|
||||
|
||||
def run_cmd(cmd: str, expected_code: int = 0, ignore_return_code: bool = False, print_error: bool = True,
|
||||
cwd: str = '.', global_interpreter: bool = USE_GLOBAL_INTERPRETER) -> str:
|
||||
cwd: str = '.', global_interpreter: bool = USE_GLOBAL_INTERPRETER, extra_paths: Set[str] = None) -> str:
|
||||
"""
|
||||
runs a given command and returns its default output
|
||||
:param cmd:
|
||||
@@ -179,7 +183,7 @@ def run_cmd(cmd: str, expected_code: int = 0, ignore_return_code: bool = False,
|
||||
args = {
|
||||
"shell": True,
|
||||
"stdout": PIPE,
|
||||
"env": gen_env(global_interpreter),
|
||||
"env": gen_env(global_interpreter, extra_paths=extra_paths),
|
||||
'cwd': cwd
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
BIN_PATH = '{}/.local/share/bauh/web'.format(HOME_PATH)
|
||||
INSTALLED_PATH = '{}/installed'.format(BIN_PATH)
|
||||
NODE_DIR_PATH = '{}/node'.format(BIN_PATH)
|
||||
NODE_PATHS = {NODE_DIR_PATH + '/bin'}
|
||||
NODE_BIN_PATH = '{}/bin/node'.format(NODE_DIR_PATH)
|
||||
NPM_BIN_PATH = '{}/bin/npm'.format(NODE_DIR_PATH)
|
||||
NODE_MODULES_PATH = '{}/node_modules'.format(BIN_PATH)
|
||||
|
||||
@@ -13,8 +13,8 @@ from bauh.api.http import HttpClient
|
||||
from bauh.commons import system
|
||||
from bauh.commons.html import bold
|
||||
from bauh.commons.system import SimpleProcess, ProcessHandler, run_cmd
|
||||
from bauh.gems.web import BIN_PATH, NODE_DIR_PATH, NODE_BIN_PATH, NPM_BIN_PATH, NODE_MODULES_PATH, NATIVEFIER_BIN_PATH, \
|
||||
ELECTRON_PATH, ELECTRON_DOWNLOAD_URL, ELECTRON_SHA256_URL, URL_ENVIRONMENT_SETTINGS
|
||||
from bauh.gems.web import BIN_PATH, NODE_DIR_PATH, NODE_BIN_PATH, NODE_MODULES_PATH, NATIVEFIER_BIN_PATH, \
|
||||
ELECTRON_PATH, ELECTRON_DOWNLOAD_URL, ELECTRON_SHA256_URL, URL_ENVIRONMENT_SETTINGS, NPM_BIN_PATH, NODE_PATHS
|
||||
from bauh.view.util.translation import I18n
|
||||
|
||||
|
||||
@@ -92,10 +92,15 @@ class EnvironmentUpdater:
|
||||
if handler and handler.watcher:
|
||||
handler.watcher.change_substatus(self.i18n['web.environment.install'].format(bold('nativefier')))
|
||||
|
||||
proc = SimpleProcess([NPM_BIN_PATH, 'install', 'nativefier@{}'.format(version)], cwd=BIN_PATH)
|
||||
proc = SimpleProcess([NPM_BIN_PATH, 'install', 'nativefier@{}'.format(version)], cwd=BIN_PATH, extra_paths=NODE_PATHS)
|
||||
|
||||
if handler:
|
||||
return handler.handle_simple(proc)[0]
|
||||
installed = handler.handle_simple(proc)[0]
|
||||
|
||||
if installed:
|
||||
self.logger.info("nativifier {} successfully installed".format(version))
|
||||
|
||||
return installed
|
||||
else:
|
||||
proc.instance.wait()
|
||||
|
||||
@@ -104,6 +109,10 @@ class EnvironmentUpdater:
|
||||
return True
|
||||
else:
|
||||
self.logger.error("Could not install nativefier {}".format(version))
|
||||
for err in proc.instance.stdout:
|
||||
if err:
|
||||
print(err.decode())
|
||||
|
||||
return False
|
||||
|
||||
def _is_nativefier_installed(self) -> bool:
|
||||
@@ -125,7 +134,7 @@ class EnvironmentUpdater:
|
||||
if not self._is_nativefier_installed():
|
||||
return self._install_nativefier(version=version, handler=handler)
|
||||
|
||||
installed_version = run_cmd('{} --version'.format(NATIVEFIER_BIN_PATH), print_error=False)
|
||||
installed_version = run_cmd('{} --version'.format(NATIVEFIER_BIN_PATH), print_error=False, extra_paths=NODE_PATHS)
|
||||
|
||||
if installed_version:
|
||||
installed_version = installed_version.strip()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from typing import List
|
||||
|
||||
from bauh.commons.system import SimpleProcess
|
||||
from bauh.gems.web import NATIVEFIER_BIN_PATH
|
||||
from bauh.gems.web import NATIVEFIER_BIN_PATH, NODE_PATHS
|
||||
|
||||
|
||||
def install(url: str, name: str, output_dir: str, electron_version: str, cwd: str, extra_options: List[str] = None) -> SimpleProcess:
|
||||
@@ -10,4 +10,4 @@ def install(url: str, name: str, output_dir: str, electron_version: str, cwd: st
|
||||
if extra_options:
|
||||
cmd.extend(extra_options)
|
||||
|
||||
return SimpleProcess(cmd, cwd=cwd)
|
||||
return SimpleProcess(cmd, cwd=cwd, extra_paths=NODE_PATHS)
|
||||
|
||||
Reference in New Issue
Block a user