Source code for qibocal.cli.utils
"""Helper functions for the cli module"""
import datetime
import getpass
import json
import os
import shutil
from pathlib import Path
from qibocal.config import log, raise_error
RUNCARD = "runcard.yml"
UPDATED_PLATFORM = "new_platform"
PLATFORM = "platform"
META = "meta.json"
[docs]def dump_report(meta, path):
e = datetime.datetime.now(datetime.timezone.utc)
meta["end-time"] = e.strftime("%H:%M:%S")
(path / META).write_text(json.dumps(meta, indent=4))
[docs]def generate_meta(backend, platform, path):
"""Methods that takes care of:
- dumping original platform
- storing qq runcard
- generating meta.yml
"""
import qibocal
e = datetime.datetime.now(datetime.timezone.utc)
meta = {}
meta["title"] = path.name
meta["backend"] = backend.name
meta["platform"] = str(platform)
meta["date"] = e.strftime("%Y-%m-%d")
meta["start-time"] = e.strftime("%H:%M:%S")
meta["end-time"] = e.strftime("%H:%M:%S")
meta["versions"] = backend.versions # pylint: disable=E1101
meta["versions"]["qibocal"] = qibocal.__version__
return meta
[docs]def generate_output_folder(folder, force):
"""Generation of qq output folder
Args:
folder (path): path for the output folder. If None it will be created a folder automatically
force (bool): option to overwrite the output folder if it exists already.
Returns:
Output path.
"""
if folder is None:
e = datetime.datetime.now()
user = getpass.getuser().replace(".", "-")
date = e.strftime("%Y-%m-%d")
folder = f"{date}-{'000'}-{user}"
num = 0
while os.path.exists(folder):
log.info(f"Directory {folder} already exists.")
num += 1
folder = f"{date}-{str(num).rjust(3, '0')}-{user}"
log.info(f"Trying to create directory {folder}")
elif os.path.exists(folder) and not force:
raise_error(RuntimeError, f"Directory {folder} already exists.")
elif os.path.exists(folder) and force:
log.warning(f"Deleting previous directory {folder}.")
shutil.rmtree(os.path.join(os.getcwd(), folder))
path = os.path.join(os.getcwd(), folder)
log.info(f"Creating directory {folder}.")
os.makedirs(path)
return Path(folder)