"""
Author: Leonardo de Sousa Marques
Affiliation: Embedded Computing Lab (ECL), Federal University of Santa Catarina (UFSC)
Description:
This module creates a ZIP file containing all execution logs for the codecs listed in “codecs-to-run”.
This simplifies sharing the results of experiments.
"""
# Add parent directory to Python path for module imports
import sys
import zipfile
from pathlib import Path
from lfc_toolkit.src.configuration.configuration_reader import ConfigurationReader
[docs]
def main() -> None:
"""Create a ZIP file containing all execution logs for configured codecs.
Collects execution log files from the results directories of all codecs
specified in the configuration and packages them into a single ZIP file
in the common parent directory for easy distribution and archival.
Usage: python zip_log_files.py <configuration.json>
:return: None
:rtype: None
"""
if len(sys.argv) < 2:
print("Usage: rd_curve_from_encoded.py <configuration.json>")
sys.exit(1)
configuration = ConfigurationReader(user_configuration_filename=sys.argv[1])
codecs_to_run = configuration["codecs-to-run"]
codecs_config = configuration["codecs"]["configuration"]
results_dirs = []
for codec in codecs_to_run:
results_path = codecs_config[codec]["results"]
results_dirs.append(Path(results_path).resolve())
# Find common parent directory
common_parent = Path(results_dirs[0])
for p in results_dirs[1:]:
while not str(p).startswith(str(common_parent)):
common_parent = common_parent.parent
if not common_parent.exists():
print("[ERROR] Could not determine common results directory.")
sys.exit(1)
zip_path = common_parent / "execution_logs.zip"
print(f"Creating ZIP: {zip_path}")
with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zipf:
for codec, results_dir in zip(codecs_to_run, results_dirs):
if not results_dir.exists():
print(f"[WARNING] Results directory not found for codec '{codec}'")
continue
log_files = list(results_dir.glob("execution_log*.json"))
if not log_files:
print(f"[WARNING] No execution_log found for codec '{codec}'")
continue
for log_file in log_files:
arcname = Path(codec) / log_file.name
zipf.write(log_file, arcname)
print(f" Added: {arcname}")
print("Done.")
if __name__ == "__main__":
main()