large refactor (break up ConfigManager), add more tests
This commit is contained in:
61
symconf/runner.py
Normal file
61
symconf/runner.py
Normal file
@@ -0,0 +1,61 @@
|
||||
import stat
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
|
||||
from colorama import Fore, Back, Style
|
||||
|
||||
from symconf.util import printc, color_text
|
||||
|
||||
|
||||
class Runner:
|
||||
def run_script(
|
||||
self,
|
||||
script: str | Path,
|
||||
):
|
||||
script_path = Path(script)
|
||||
|
||||
if script_path.stat().st_mode & stat.S_IXUSR == 0:
|
||||
print(
|
||||
color_text("│", Fore.BLUE),
|
||||
color_text(
|
||||
f' > script "{script_path.name}" missing execute permissions, skipping',
|
||||
Fore.RED + Style.DIM
|
||||
)
|
||||
)
|
||||
return
|
||||
|
||||
print(
|
||||
color_text("│", Fore.BLUE),
|
||||
color_text(
|
||||
f' > running script "{script_path.name}"',
|
||||
Fore.BLUE
|
||||
)
|
||||
)
|
||||
|
||||
output = subprocess.check_output(str(script_path), shell=True)
|
||||
|
||||
if output:
|
||||
fmt_output = output.decode().strip().replace(
|
||||
'\n',
|
||||
f'\n{Fore.BLUE}{Style.NORMAL}│{Style.DIM} '
|
||||
)
|
||||
print(
|
||||
color_text("│", Fore.BLUE),
|
||||
color_text(
|
||||
f' captured script output "{fmt_output}"',
|
||||
Fore.BLUE + Style.DIM
|
||||
)
|
||||
)
|
||||
|
||||
return output
|
||||
|
||||
def run_many(
|
||||
self,
|
||||
script_list: list[str | Path],
|
||||
):
|
||||
outputs = []
|
||||
for script in script_list:
|
||||
output = self.run_script(script)
|
||||
outputs.append(output)
|
||||
|
||||
return outputs
|
||||
Reference in New Issue
Block a user