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