[Fix] `platyvenv` should also execute the `before` and `after` blocks.

Before this fix, `platyvenv`, unlike `platydock`, didn't take into
account any extra before/after installation commands that individual
integrations may instruct to run in their manifest files.
This commit is contained in:
Fabio Manganiello 2023-10-22 01:41:19 +02:00
parent ea88ab7f6c
commit 8b5871af0e
Signed by: blacklight
GPG Key ID: D90FBA7F76362774
1 changed files with 20 additions and 2 deletions

View File

@ -6,7 +6,6 @@ virtual environment for Platypush starting from a configuration file.
from contextlib import contextmanager from contextlib import contextmanager
import logging import logging
import os import os
import re
import shutil import shutil
import subprocess import subprocess
import sys import sys
@ -63,7 +62,23 @@ class VenvBuilder(BaseBuilder):
""" """
for cmd in deps.to_pkg_install_commands(): for cmd in deps.to_pkg_install_commands():
logger.info('Installing system packages: %s', cmd) logger.info('Installing system packages: %s', cmd)
subprocess.call(re.split(r'\s+', cmd.strip())) subprocess.run(cmd, shell=True, check=True)
def _run_before_commands(self, deps: Dependencies):
"""
Runs any commands that should be executed before the installation.
"""
for cmd in deps.before:
logger.info('Running: %s', cmd)
subprocess.run(cmd, shell=True, check=True)
def _run_after_commands(self, deps: Dependencies):
"""
Runs any commands that should be executed after the installation.
"""
for cmd in deps.after:
logger.info('Running: %s', cmd)
subprocess.run(cmd, shell=True, check=True)
@contextmanager @contextmanager
def _prepare_src_dir(self) -> Generator[str, None, None]: def _prepare_src_dir(self) -> Generator[str, None, None]:
@ -146,12 +161,15 @@ class VenvBuilder(BaseBuilder):
install_context=InstallContext.VENV, install_context=InstallContext.VENV,
) )
self._run_before_commands(deps)
self._install_system_packages(deps) self._install_system_packages(deps)
with self._prepare_src_dir(): with self._prepare_src_dir():
self._prepare_venv() self._prepare_venv()
self._install_extra_pip_packages(deps) self._install_extra_pip_packages(deps)
self._run_after_commands(deps)
self._print_instructions( self._print_instructions(
textwrap.dedent( textwrap.dedent(
f""" f"""