-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
86 lines (73 loc) · 3 KB
/
Copy pathmain.py
File metadata and controls
86 lines (73 loc) · 3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
from __future__ import annotations
import argparse
import sys
from pathlib import Path
ROOT_DIR = Path(__file__).resolve().parent
SRC_DIR = ROOT_DIR / "src"
if str(SRC_DIR) not in sys.path:
sys.path.insert(0, str(SRC_DIR))
from sismo_report.config import load_runtime_config, resolve_input_directory
from sismo_report import generate_outputs, watch_inputs
def build_parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(
description="Gera relatório sismográfico em PDF e nota rápida a partir dos PDFs da pasta configurada.",
)
parser.add_argument(
"command",
nargs="?",
default="generate",
choices=("generate", "watch"),
help="generate: executa uma vez | watch: monitora a pasta e regenera automaticamente",
)
parser.add_argument("--inputs", default=None, help="Pasta com os PDFs de entrada")
parser.add_argument("--outputs", default=None, help="Pasta para os arquivos gerados")
parser.add_argument(
"--logo",
default=None,
help="Caminho para a logo da Enaex",
)
parser.add_argument("--interval", type=int, default=None, help="Intervalo em segundos para o modo watch")
parser.add_argument("--config", default=str(ROOT_DIR / "config.json"), help="Arquivo de configuração externo")
return parser
def main() -> int:
parser = build_parser()
args = parser.parse_args()
runtime = load_runtime_config(ROOT_DIR, args.config)
inputs_path = resolve_input_directory(runtime, args.inputs)
outputs_path = Path(args.outputs) if args.outputs else runtime.output_dir
logo_path = Path(args.logo) if args.logo else runtime.logo_path
interval_seconds = args.interval if args.interval is not None else runtime.watch_interval_seconds
if args.command == "watch":
try:
watch_inputs(
inputs_path,
outputs_path,
logo_path,
interval_seconds=interval_seconds,
png_scale=runtime.report_png_scale,
report_max_records=runtime.report_summary_record_limit,
png_page_number=runtime.report_png_page_number,
vibration_alert_threshold_mm_s=runtime.report_vibration_alert_threshold_mm_s,
)
except KeyboardInterrupt:
print("\nMonitoramento encerrado.")
return 0
try:
outputs = generate_outputs(
inputs_path,
outputs_path,
logo_path,
png_scale=runtime.report_png_scale,
report_max_records=runtime.report_summary_record_limit,
png_page_number=runtime.report_png_page_number,
vibration_alert_threshold_mm_s=runtime.report_vibration_alert_threshold_mm_s,
)
except Exception as exc:
print(f"Falha ao gerar relatório: {exc}")
return 1
print("Arquivos gerados:")
for label, value in outputs.items():
print(f"- {label}: {value}")
return 0
if __name__ == "__main__":
raise SystemExit(main())