Source code for punchbowl.auto.flows.util
import os
from datetime import datetime
from punchbowl.auto.control.db import File
[docs]
def file_name_to_full_path(file_name: str | None | list[str | None], root_dir: str) -> str | None | list[str | None]:
if isinstance(file_name, list):
return [file_name_to_full_path(f, root_dir) for f in file_name]
if file_name is None:
return None
level = file_name.split("_")[1][1]
code = file_name.split("_")[2][:2]
obs = file_name.split("_")[2][-1]
version = file_name.split("_")[-1].split(".")[0][1:]
date = datetime.strptime(file_name.split("_")[3], "%Y%m%d%H%M%S")
file = File(level=level, file_type=code, observatory=obs, file_version=version, software_version="", date_obs=date,
state="")
return os.path.join(file.directory(root_dir), file_name)
[docs]
def summarize_files_missing_cal_files(files: list[File]):
if len(files) < 1000:
summary = ", ".join([f.filename() for f in files])
else:
dates = [f.date_obs for f in files]
types = {f.file_type + f.observatory for f in files}
summary = (f"{len(files)} files, of types {sorted(types)}, with date-obs ranging from "
f"{min(dates).isoformat()} to {max(dates).isoformat()}")
return summary