def __init__( self, filepath, override_vars=None, restart_dir=None, samples_file=None, dry_run=False, no_errors=False, pgen_file=None, pargs=None, ): self.original_spec = MerlinSpec.load_specification(filepath) self.override_vars = override_vars error_override_vars(self.override_vars, self.original_spec.path) self.samples_file = samples_file self.label_clash_error() self.dry_run = dry_run self.no_errors = no_errors # If we load from a file, record that in the object for provenance # downstream if self.samples_file is not None: self.original_spec.merlin["samples"]["file"] = self.samples_file self.original_spec.merlin["samples"]["generate"]["cmd"] = "" self.restart_dir = restart_dir self.special_vars = { "SPECROOT": self.original_spec.specroot, "MERLIN_TIMESTAMP": self.timestamp, "MERLIN_INFO": self.info, "MERLIN_WORKSPACE": self.workspace, "OUTPUT_PATH": self.output_path, "MERLIN_SUCCESS": str(int(ReturnCode.OK)), "MERLIN_RESTART": str(int(ReturnCode.RESTART)), "MERLIN_SOFT_FAIL": str(int(ReturnCode.SOFT_FAIL)), "MERLIN_HARD_FAIL": str(int(ReturnCode.HARD_FAIL)), "MERLIN_RETRY": str(int(ReturnCode.RETRY)), } self.pgen_file = pgen_file self.pargs = pargs self.dag = None self.load_dag()
def expand_spec_no_study(filepath, override_vars=None): """ Get the expanded text of a spec without creating a MerlinStudy. Expansion is limited to user variables (the ones defined inside the yaml spec or at the command line). """ error_override_vars(override_vars, filepath) spec = MerlinSpec.load_specification(filepath) full_spec = dump_with_overrides(spec, override_vars) spec = MerlinSpec.load_spec_from_string(full_spec) uvars = [] if "variables" in spec.environment: uvars.append(spec.environment["variables"]) if "labels" in spec.environment: uvars.append(spec.environment["labels"]) evaluated_uvars = determine_user_variables(*uvars) return expand_by_line(full_spec.split("\n"), evaluated_uvars)