Source code for dachs.main
#!/usr/bin/env python
# coding: utf-8
import argparse
import logging
from os import environ
from pathlib import Path
from typing import List
from mcsas3.mc_hdf import storeKVPairs
import dachs.serialization
import dachs.structure
[docs]
def outfileFromInput(infn, suffix="h5"):
return Path(infn).resolve().with_suffix(f".{suffix}")
# perhaps, use environment vars for defaults later:
# https://stackoverflow.com/a/63828227
[docs]
def configureParser() -> argparse.ArgumentParser:
def validate_file(arg):
if arg == '':
return None # nothing specified.
filepath = Path(arg).absolute()
if not filepath.is_file():
raise ValueError
return filepath
# process input arguments
parser = argparse.ArgumentParser(
prog=__package__,
description="""
Creates an archival HDF5 structure containing synthesis details from a RoWaN AutoMOF synthesis.
Released under a GPLv3+ license.
""",
)
# TODO: add info about output files to be created ...
parser.add_argument(
"-l",
"--logbook",
type=validate_file,
default=environ.get("DACHS_LOGBOOK", ""),
help=(
"Path to the filename containing the main AutoMOF logbook, "
"read from environment variable DACHS_LOGBOOK if not specified on command line."
),
)
parser.add_argument( # could perhaps be done with a multi-file input for multiple solutions...
"-s0",
"--s0file",
type=validate_file,
default=environ.get("DACHS_SOL0", ""),
help=(
"File containing the synthesis log of Solution 0, "
"read from environment variable DACHS_SOL0 if not specified on command line."
),
)
parser.add_argument(
"-s1",
"--s1file",
type=validate_file,
default=environ.get("DACHS_SOL1", ""),
help=(
"File containing the synthesis log of Solution 1, "
"read from environment variable DACHS_SOL1 if not specified on command line."
),
)
parser.add_argument(
"-s2",
"--s2file",
type=validate_file,
default=environ.get("DACHS_SOL2", ""),
help=(
"File containing the synthesis log of Solution 2, "
"read from environment variable DACHS_SOL2 if not specified on command line."
),
)
parser.add_argument(
"-s",
"--synlog",
type=validate_file,
default=environ.get("DACHS_SYNLOG", ""),
help=(
"File containing the synthesis log of the MOF itself, "
"read from environment variable DACHS_SYNLOG if not specified on command line."
),
)
parser.add_argument(
"-o",
"--outfile",
help=(
"Output file containing structured HDF5 data. "
"If omitted, it is written to the same directory "
"and with the same basename as *synlog* above, but with .h5 suffix."
),
)
parser.add_argument(
"-a",
"--amset",
type=str,
default=environ.get("DACHS_AMSET", ""),
help=(
"Equipment set AMSET identifier, "
"read from environment variable DACHS_AMSET if not specified on command line."
),
)
return parser
[docs]
def main(args: List[str] = None):
""":param args: replaces sys.argv with a custom argument list."""
args = configureParser().parse_args(args)
if not args.outfile:
args.outfile = outfileFromInput(args.synlog)
solFiles = [args.s0file, args.s1file]
if args.s2file is not None:
solFiles += [args.s2file]
exp = dachs.structure.create(args.logbook, solFiles, args.synlog, args.amset)
paths = dachs.serialization.dumpKV(exp, dbg=False)
logging.info(f"Writing structure to '{args.outfile}'.")
# from pprint import pprint
# pprint(paths)
storeKVPairs(args.outfile, "", paths.items())
dachs.serialization.graphKV(paths)