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
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)
|
|
|