improve updater so new python modules are auto installed (#167)

This commit is contained in:
Masoko
2024-12-04 19:46:15 +02:00
committed by GitHub
parent 187198dd71
commit b9cb6dbca6

View File

@@ -2,13 +2,16 @@ import ast
import os import os
import subprocess import subprocess
import config import config
import sys
def safe_literal_eval(node): def safe_literal_eval(node):
try: try:
return ast.literal_eval(node) return ast.literal_eval(node)
except ValueError: except ValueError:
return None return None
def get_assignments(filename): def get_assignments(filename):
with open(filename) as f: with open(filename) as f:
tree = ast.parse(f.read(), filename) tree = ast.parse(f.read(), filename)
@@ -54,6 +57,7 @@ def display_config_differences(current_config, example_config, display=True):
else: else:
return False return False
def check_git_version_remote(script_dir): def check_git_version_remote(script_dir):
full_cmd = "/usr/bin/git -C {} ls-remote --tags origin | awk -F'/' '{{print $3}}' | sort -V | tail -n 1".format(script_dir) full_cmd = "/usr/bin/git -C {} ls-remote --tags origin | awk -F'/' '{{print $3}}' | sort -V | tail -n 1".format(script_dir)
try: try:
@@ -79,13 +83,28 @@ def update_config_version(version, script_dir):
f.write(line) f.write(line)
def install_requirements(script_dir):
main_dir_path = os.path.dirname(script_dir)
requirements_path = os.path.join(main_dir_path, 'requirements.txt')
activate_script = os.path.join(main_dir_path, 'rpi_mon_env' ,'bin', 'activate')
command = f"source {activate_script} && pip install -q -r {requirements_path}"
try:
subprocess.run(command, shell=True, check=True, executable='/bin/bash')
print("Requirements installed successfully.")
except subprocess.CalledProcessError as e:
print(f"An error occurred while installing requirements: {e}")
sys.exit(1)
def do_update(script_dir, version=config.version, git_update=True, config_update=True): def do_update(script_dir, version=config.version, git_update=True, config_update=True):
print("Current version: {}".format(config.version)) print("Current version: {}".format(config.version))
if git_update: if git_update:
print(":: Updating git repository", script_dir) print(":: Updating git repository", script_dir)
result = subprocess.run(['/usr/bin/git', '-C', script_dir, 'pull'], check=True, universal_newlines=True, stdout=subprocess.PIPE) result = subprocess.run(['/usr/bin/git', '-C', script_dir, 'pull'], check=True, universal_newlines=True, stdout=subprocess.PIPE)
print(result.stdout) print(result.stdout)
install_requirements(script_dir)
if display_config_differences(script_dir + '/config.py', script_dir + '/config.py.example') and config_update: if display_config_differences(script_dir + '/config.py', script_dir + '/config.py.example') and config_update:
print(":: Updating config.py") print(":: Updating config.py")
update_config(script_dir + '/config.py',script_dir + '/config.py.example') update_config(script_dir + '/config.py',script_dir + '/config.py.example')
@@ -96,4 +115,5 @@ def do_update(script_dir, version=config.version, git_update=True, config_update
if __name__ == '__main__': if __name__ == '__main__':
script_dir = os.path.dirname(os.path.realpath(__file__)) script_dir = os.path.dirname(os.path.realpath(__file__))
do_update(script_dir,check_git_version_remote(script_dir)) do_update(script_dir,check_git_version_remote(script_dir))