def result_file_validate(experiment, result_file): desc = "experiment.result_files" check_from_defs(desc, result_file_fields, result_file) if result_file.ftype is ResultFileType.expression_matrix: result_file_expression_validate(desc, experiment, result_file) else: result_file_model_validate(desc, experiment, result_file)
def experiment_validate(experiment): desc = "experiment" check_from_defs(desc, experiment_fields, experiment) libraries_validate(experiment) if len(get_extra_libraries(experiment)) > 0: extra_libraries_validate(experiment) experssion_units_validate(experiment)
def entry_validate(entry): desc = "entry" check_from_defs(desc, entry_fields, entry) try: validate_symbolic_ident(entry.entry_id) except LrgaspException as ex: raise LrgaspException(f"invalid {desc}.{fld_entry_id.name}") from ex for contact in entry.contacts: entry_contact_validate(contact)
def _validate_extra_libraries(experiment_md): if experiment_md.data_category not in (DataCategory.long_short, DataCategory.freestyle): raise LrgaspException( "experiment extra_libraries may only be specified for 'long_short' or 'freestyle' experiments" ) dups = find_dups([el.acc for el in experiment_md.extra_libraries]) if len(dups) > 0: raise LrgaspException( f"duplicate accession in extra libraries: {dups}") for ilib in range(len(experiment_md.extra_libraries)): check_from_defs(f"experiment_md.extra_libraries[{ilib}]", extra_libraries_fields, experiment_md.extra_libraries[ilib])
def experiment_validate(experiment): desc = "experiment" check_from_defs(desc, experiment_fields, experiment) if experiment.experiment_type is ExperimentType.expression: if fld_model_experiment_id.name not in experiment: raise LrgaspException(f"{desc} must specify experiment.{fld_model_experiment_id.name} for {experiment.experiment_type} experiments") else: if fld_model_experiment_id.name in experiment: raise LrgaspException(f"{desc} must not specify experiment.{fld_model_experiment_id.name} for {experiment.experiment_type} experiments") for data_file in experiment.data_files: data_file_validate(data_file) for result_file in experiment.result_files: result_file_validate(experiment, result_file)
def entry_validate(entry): desc = "entry" check_from_defs(desc, entry_fields, entry) try: validate_symbolic_ident(entry.entry_id) except LrgaspException as ex: raise LrgaspException(f"invalid {desc} {fld_entry_id.name}") from ex challenge_id = validate_entry_ident(entry.entry_id) if entry.challenge_id != challenge_id: raise LrgaspException( f"invalid {desc} {fld_entry_id.name} entry_id {entry.entry-id} prefix does not match challenge_id {entry.challenge_id}" ) for contact in entry.contacts: entry_contact_validate(contact)
def load(entry_json): """load and validate entry metadata""" try: with gopen(entry_json) as fh: entry_md = json.load(fh, object_pairs_hook=ObjDict) except (json.decoder.JSONDecodeError, UnicodeDecodeError) as ex: raise LrgaspException( f"parse of entry metadata (JSON) failed: {entry_json}") from ex try: check_from_defs("entry", entry_fields, entry_md) # add non-serialized fields after field check entry_md.experiments = None entry_md.entry_dir = None entry_md.entry_json = entry_json entry_validate(entry_md) except LrgaspException as ex: raise LrgaspException( f"validation of entry metadata failed: {entry_json}") from ex return entry_md
def _validate_software(experiment_md): for isoft in range(len(experiment_md.software)): check_from_defs(f"experiment_md.software[{isoft}]", experiment_software_fields, experiment_md.software[isoft])
def entry_contact_validate(contact): desc = "entry.contacts" check_from_defs(desc, entry_contact_fields, contact)
def data_file_validate(data_file): desc = "experiment.data_files" check_from_defs(desc, data_file_fields, data_file) if (fld_acc.name not in data_file) and (fld_url not in data_file): raise LrgaspException(f"{desc} must specify at least one of {fld_acc.name} or {fld_url.name}")
def extra_library_validate(extra_library): desc = "experiment.extra_libraries" check_from_defs(desc, extra_library_fields, extra_library)
def extra_library_validate(extra_libraries, ilib): desc = f"experiment_md.extra_libraries[{ilib}]" check_from_defs(desc, extra_libraries_fields, extra_libraries[ilib])
def entry_contact_validate(contact): check_from_defs("entry.contacts", entry_contact_fields, contact)