Пример #1
0
def validate_experiment(
        experiment_name,
        experiment_path=f'{DEFAULT_EXPERIMENT_PATH}{EXPERIMENT_FILENAME}',
        field_path=f'{DEFAULT_FIELD_PATH}{FIELD_FILENAME}',
        fail_silent=False) -> bool:
    """Validate Experiment.

    Validate the experiment is in the correct format and the fields are properly registered.
    """
    experiments = load_experiments(experiment_path)
    fields = load_fields(field_path)

    # attempt to load the experiment by name
    try:
        experiment = experiments[experiment_name]
    except KeyError:
        raise UnregisteredExperimentException(
            f'Experiment [{experiment_name}] is not registered at path [{experiment_path}]'
        )

    # grab all field names as a list of strings. This call will raise exceptions if formatted incorrectly.
    experiment_fields = load_experiment_fields(experiment)

    # loop over the experiment fields and attempt to load them by name
    for field in experiment_fields:
        try:
            fields[field]
        except KeyError:
            raise UnregisteredFieldException(
                f'Field [{field}] is not registered at path [{field_path}]')

    return True
Пример #2
0
def collect_experiment_field_data(experiment_name,
                                  save_path,
                                  file_name='experiment_data.json') -> None:
    experiment = load_experiments()[experiment_name]
    experiment_fields = load_experiment_fields(experiment)

    if experiment_fields:
        cmd = ('python bcipy/gui/experiments/ExperimentField.py -e'
               f' "{experiment_name}" -p "{save_path}" -f "{file_name}"')
        subprocess.check_call(cmd, shell=True)
        # verify data was written before moving on
        if not validate_field_data_written(save_path, file_name):
            raise Exception('Field data not collected!')
Пример #3
0
 def test_load_experiment_fields_raises_type_error_on_non_dict_experiment(
         self):
     invalid_experiment_type = ''
     with self.assertRaises(TypeError):
         load_experiment_fields(invalid_experiment_type)
Пример #4
0
 def test_load_experiment_fields_raises_invalid_experiment_on_incorrectly_formatted_experiment(
         self):
     # create an experiment with the wrong field key
     invalid_experiment_field_name = {'summary': 'blah', 'field': []}
     with self.assertRaises(InvalidExperimentException):
         load_experiment_fields(invalid_experiment_field_name)
Пример #5
0
 def test_load_experiment_fields_returns_a_list(self):
     fields = load_experiment_fields(self.experiment)
     self.assertIsInstance(fields, list)