Files
Synthese-PSM_LARRA/Scripts/pyCreate_th2/helpers/therion.py
T
Alex38Lyon c2e1457cd5 Scripts
2025-01-31 14:15:58 +01:00

115 lines
4.4 KiB
Python

import tempfile
import shutil
import os
from os.path import join
import subprocess
import re
#################################################################################################
# Codes de couleur ANSI
class Colors:
BLACK = '\033[90m'
RED = '\033[91m'
GREEN = '\033[92m'
YELLOW = '\033[93m'
BLUE = '\033[94m'
MAGENTA = '\033[95m'
CYAN = '\033[96m'
WHITE = '\033[97m'
ERROR = '\033[91m'
WARNING = '\033[95m'
HEADER = '\033[96m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
#################################################################################################
def compile_template(template, template_args, **kwargs):
try:
log = ""
tmpdir = tempfile.mkdtemp()
config = template.format(**template_args, tmpdir=tmpdir.replace("\\", "/"))
print(f"{Colors.YELLOW}{config}{Colors.ENDC}\n")
config_file = join(tmpdir, "config.thconfig")
log_file = join(tmpdir, "log.log")
therion_path = kwargs["therion_path"] if "therion_path" in kwargs else "therion"
with open(config_file, mode="w+", encoding="utf-8") as tmp:
with open(log_file, mode="w+") as tmp2:
tmp.write(config)
tmp.flush()
subprocess.check_output('''"{}" "{}" -l "{}"'''.format(therion_path, config_file, log_file), shell=True, )
tmp2.flush()
log = tmp2.read()
if kwargs["cleanup"]:
shutil.rmtree(tmpdir)
print("\n" )
return log, tmpdir
except Exception as e:
print(f"{Colors.ERROR}Error: Therion template compilation error: {Colors.ENDC}{e}")
#################################################################################################
def compile_file(filename, **kwargs):
try:
tmpdir = os.path.dirname(filename)
log_file = join(tmpdir, "log.log").replace("\\", "/")
therion_path = kwargs["therion_path"] if "therion_path" in kwargs else "therion"
# print(f"{Colors.BLUE}therion_path: {Colors.ENDC}{therion_path}")
# print(f"{Colors.BLUE}filename: {Colors.ENDC}{filename}")
# print(f"{Colors.BLUE}log_file: {Colors.ENDC}{log_file}")
# subprocess.check_output('''"{}" "{}" -l "{}"'''.format(therion_path, filename, log_file), shell=True, )
result = subprocess.run(
[therion_path, filename, "-l", log_file],
stdout=subprocess.PIPE, # Capture de la sortie standard
stderr=subprocess.PIPE, # Capture des erreurs
shell=True
)
stdout_with_tabs = "\n".join("\t" + line for line in result.stdout.decode().splitlines())
# Si la commande échoue, result.returncode sera non nul
if result.returncode != 0:
# Affichage des erreurs et de la sortie standard
print(f"{Colors.ERROR}Error during Therion compilation:{Colors.ENDC}")
print(f"{Colors.WARNING}stdout: {Colors.YELLOW}{stdout_with_tabs}{Colors.ENDC}")
print(f"{Colors.ERROR}stderr: \n{result.stderr.decode()}{Colors.ENDC}")
else:
# Si la commande réussit, affichez la sortie standard
print(f"{Colors.GREEN}Therion compilation succeeded.\n{Colors.YELLOW}{stdout_with_tabs}{Colors.ENDC}")
except Exception as e:
print(f"{Colors.ERROR}Error: Therion file {Colors.ENDC}{filename}{Colors.ERROR} compilation error: {Colors.ENDC}{e}")
#################################################################################################
def compile_file_th(filepath, **kwargs):
template = """source {filepath}
layout test
scale 1 500
endlayout
"""
template_args = {"filepath": filepath}
logs, _ = compile_template(template, template_args, cleanup=True, **kwargs)
return logs
lengthre = re.compile(r".*Total length of survey legs =\s*(\S+)m")
depthre = re.compile(r".*Vertical range =\s*(\S+)m")
#################################################################################################
def get_stats_from_log(log):
lenmatch = lengthre.findall(log)
depmatch = depthre.findall(log)
if len(lenmatch) == 1 and len(depmatch) == 1:
return {"length": lenmatch[0], "depth": depmatch[0]}
return {"length": 0, "depth": 0}