You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

96 lines
2.9 KiB

import matplotlib.pyplot as plt
import os
import pathlib
import subprocess
import sys
import warnings
from collections import namedtuple
from .analysis import (
generate_drop_check_chart,
generate_environment_graph,
find_missing_drops,
)
from .logparser import parse_log_files, parse_print_log
from .report import generate_report
DROP_CHECK_SUFFIX = ".cor"
ENVIRONMENT_SUFFIX = "_Logfile.log"
DropProcessResult = namedtuple("DropProcessResult", ["drops", "missing"])
PrintLogResult = namedtuple("PrintLogResult", ["environment", "info"])
ProcessResult = namedtuple("ProcessResult", ["data_frame", "file_path"])
class LogFiles(namedtuple("LogFiles", ["folder", "drop_check", "environment"])):
__slots__ = ()
def __bool__(self):
return self.drop_check and self.environment
class NoLogFileError(IOError):
pass
def get_log_files(folder):
folder = pathlib.Path(folder)
visible = [p for p in folder.iterdir() if not p.name.startswith(".")]
drop_files = [p for p in visible if p.name.endswith(DROP_CHECK_SUFFIX)]
env_files = [p for p in visible if p.name.endswith(ENVIRONMENT_SUFFIX)]
if len(env_files) != 1:
env_files = [None]
return LogFiles(folder, drop_files, env_files[0])
def process_drop_checks(log_files):
drop_log_df = parse_log_files(log_files.drop_check)
generate_drop_check_chart(drop_log_df)
image_path = log_files.folder / f"{log_files.folder}_drop_check.png"
plt.savefig(image_path)
missing_drop_df = find_missing_drops(drop_log_df)
misssing_drop_list_path = log_files.folder / f"{log_files.folder}_missed_spots.xlsx"
missing_drop_df.to_excel(misssing_drop_list_path)
return DropProcessResult(
ProcessResult(drop_log_df, image_path),
ProcessResult(missing_drop_df, image_path),
)
def process_print_log(log_files):
print_log = parse_print_log(log_files.environment)
generate_environment_graph(print_log.environment)
image_path = log_files.folder / f"{log_files.folder}_environment.png"
plt.savefig(image_path)
return PrintLogResult(ProcessResult(print_log.environment, image_path), print_log.info)
def process_log_folder(folder):
with warnings.catch_warnings():
warnings.simplefilter("ignore")
log_files = get_log_files(folder)
drop_check_result = process_drop_checks(log_files)
print_log_result = process_print_log(log_files)
return generate_report(
log_files,
drop_check_result.drops,
drop_check_result.missing,
print_log_result.environment,
print_log_result.info,
)
def open_with_default_app(some_path):
if sys.platform.startswith("linux"):
subprocess.call(["xdg-open", some_path])
elif sys.platform.startswith("darwin"):
subprocess.call(["open", some_path])
elif sys.platform.startswith("win"):
os.startfile(some_path)