コード例 #1
0
def get_input_from_form(request):
    """Gets the sidecar processing input arguments from a request object.

    Parameters
    ----------
    request: Request object
        A Request object containing user data from the sidecar processing form.

    Returns
    -------
    dict
        A dictionary containing input arguments for calling the underlying sidecar processing functions.
    """

    arguments = {
        base_constants.SCHEMA:
        get_hed_schema_from_pull_down(request),
        base_constants.JSON_SIDECAR:
        None,
        base_constants.COMMAND:
        request.form.get(base_constants.COMMAND_OPTION, None),
        base_constants.CHECK_FOR_WARNINGS:
        form_has_option(request, base_constants.CHECK_FOR_WARNINGS, 'on'),
        base_constants.EXPAND_DEFS:
        form_has_option(request, base_constants.EXPAND_DEFS, 'on')
    }
    if base_constants.JSON_FILE in request.files:
        f = request.files[base_constants.JSON_FILE]
        fb = io.StringIO(f.read(file_constants.BYTE_LIMIT).decode('ascii'))
        arguments[base_constants.JSON_SIDECAR] = models.Sidecar(
            file=fb, name=secure_filename(f.filename))
    return arguments
コード例 #2
0
    def test_process_services_sidecar(self):
        from hedweb.services import process
        json_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/bids_events.json')
        with open(json_path) as f:
            data = json.load(f)
        json_text = json.dumps(data)
        fb = io.StringIO(json_text)
        schema_url = 'https://raw.githubusercontent.com/hed-standard/hed-specification/master/' \
                     + 'hedxml/HED8.0.0.xml'
        hed_schema = hedschema.load_schema(schema_url)
        json_sidecar = models.Sidecar(file=fb, name='JSON_Sidecar')
        arguments = {base_constants.SERVICE: 'sidecar_validate', base_constants.SCHEMA: hed_schema,
                     base_constants.COMMAND: 'validate', base_constants.COMMAND_TARGET: 'sidecar',
                     base_constants.JSON_SIDECAR: json_sidecar}
        with self.app.app_context():
            response = process(arguments)
            self.assertFalse(response['error_type'],
                             'sidecar_validation services should not have a fatal error when file is invalid')
            results = response['results']
            self.assertEqual('success', results['msg_category'],
                             "sidecar_validation services has success on bids_events.json")
            self.assertEqual('8.0.0', results[base_constants.SCHEMA_VERSION], 'Version 8.0.0 was used')

        schema_url = 'https://raw.githubusercontent.com/hed-standard/hed-specification/master/' \
                     + 'hedxml/HED7.2.0.xml'
        arguments[base_constants.SCHEMA] = hedschema.load_schema(schema_url)
        with self.app.app_context():
            response = process(arguments)
            self.assertFalse(response['error_type'],
                             'sidecar_validation services should not have a error when file is valid')
            results = response['results']
            self.assertTrue(results['data'], 'sidecar_validation produces errors when file not valid')
            self.assertEqual('warning', results['msg_category'], "sidecar_validation did not valid with 7.2.0")
            self.assertEqual('7.2.0', results['schema_version'], 'Version 7.2.0 was used')
コード例 #3
0
 def test_sidecar_convert_to_short_invalid(self):
     from hed import models
     from hedweb.sidecar import sidecar_convert
     json_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/bids_events_bad.json')
     json_sidecar = models.Sidecar(file=json_path, name='bids_events_bad')
     schema_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/HED8.0.0.xml')
     hed_schema = hedschema.load_schema(schema_path)
     with self.app.app_context():
         results = sidecar_convert(hed_schema, json_sidecar)
         self.assertTrue(results['data'], 'sidecar_convert results should have data key')
         self.assertEqual('warning', results['msg_category'],
                          'sidecar_convert msg_category should be warning for errors')
コード例 #4
0
 def test_sidecar_validate_valid(self):
     from hed import models
     from hedweb.sidecar import sidecar_validate
     json_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/bids_events.json')
     json_sidecar = models.Sidecar(file=json_path, name='bids_events')
     schema_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/HED8.0.0.xml')
     hed_schema = hedschema.load_schema(schema_path)
     with self.app.app_context():
         results = sidecar_validate(hed_schema, json_sidecar)
         self.assertFalse(results['data'],
                          'sidecar_validate results should not have a data key when no validation errors')
         self.assertEqual('success', results["msg_category"],
                          'sidecar_validate msg_category should be success when no errors')
コード例 #5
0
 def test_sidecar_convert_to_long_valid(self):
     from hed import models
     from hedweb.sidecar import sidecar_convert
     from hedweb.constants import base_constants
     json_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/bids_events.json')
     json_sidecar = models.Sidecar(file=json_path, name='bids_events')
     schema_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/HED8.0.0.xml')
     hed_schema = hedschema.load_schema(schema_path)
     with self.app.app_context():
         results = sidecar_convert(hed_schema, json_sidecar, command=base_constants.COMMAND_TO_LONG)
         self.assertTrue(results['data'],
                         'sidecar_convert to long results should have data key')
         self.assertEqual('success', results["msg_category"],
                          'sidecar_convert to long msg_category should be success when no errors')
コード例 #6
0
 def test_events_validate_invalid(self):
     from hedweb.events import validate
     events_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/bids_events.tsv')
     json_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/bids_events_bad.json')
     schema_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/HED8.0.0.xml')
     hed_schema = hedschema.load_schema(schema_path)
     json_sidecar = models.Sidecar(file=json_path, name='bids_events_bad')
     events = models.EventsInput(file=events_path, sidecars=json_sidecar, name='bids_events')
     with self.app.app_context():
         results = validate(hed_schema, events)
         self.assertTrue(results['data'],
                         'validate results should have a data key when validation errors')
         self.assertEqual('warning', results["msg_category"],
                          'validate msg_category should be warning when errors')
コード例 #7
0
 def test_events_assemble_valid(self):
     from hedweb.events import assemble
     events_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/bids_events.tsv')
     json_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/bids_events.json')
     schema_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/HED8.0.0.xml')
     hed_schema = hedschema.load_schema(schema_path)
     json_sidecar = models.Sidecar(file=json_path, name='bids_json')
     events = models.EventsInput(file=events_path, sidecars=json_sidecar, name='bids_events')
     with self.app.app_context():
         results = assemble(hed_schema, events, expand_defs=True)
         self.assertTrue(results['data'],
                         'assemble results should have a data key when no errors')
         self.assertEqual('success', results['msg_category'],
                          'assemble msg_category should be success when no errors')
コード例 #8
0
    def test_sidecar_process_valid_to_short_defs_expanded(self):
        from hedweb.sidecar import process
        json_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/bids_events.json')
        json_sidecar = models.Sidecar(file=json_path, name='bids_events')
        schema_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/HED8.0.0.xml')
        hed_schema = hedschema.load_schema(schema_path)
        arguments = {base_constants.SCHEMA: hed_schema, base_constants.JSON_SIDECAR: json_sidecar,
                     base_constants.JSON_DISPLAY_NAME: 'bids_events',
                     base_constants.EXPAND_DEFS: True,
                     base_constants.COMMAND: base_constants.COMMAND_TO_SHORT}

        with self.app.app_context():
            results = process(arguments)
            self.assertTrue(isinstance(results, dict),
                            'process to short should return a dict when no errors and defs expanded')
            self.assertEqual('success', results['msg_category'],
                             'process to short should return success if no errors and defs_expanded')
コード例 #9
0
 def test_events_process_invalid(self):
     from hedweb.events import process
     events_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/bids_events.tsv')
     json_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/bids_events_bad.json')
     schema_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/HED8.0.0.xml')
     hed_schema = hedschema.load_schema(schema_path)
     json_sidecar = models.Sidecar(file=json_path, name='bids_events_bad')
     events = models.EventsInput(file=events_path, sidecars=json_sidecar, name='bids_events')
     arguments = {base_constants.EVENTS: events, base_constants.COMMAND: base_constants.COMMAND_VALIDATE,
                  base_constants.EXPAND_DEFS: True,
                  base_constants.CHECK_FOR_WARNINGS: True, base_constants.SCHEMA: hed_schema}
     with self.app.app_context():
         results = process(arguments)
         self.assertTrue(isinstance(results, dict),
                         'process validation should return a result dictionary when validation errors')
         self.assertEqual('warning', results['msg_category'],
                          'process validate should return warning when errors')
コード例 #10
0
    def test_sidecar_process_invalid(self):
        from hedweb.sidecar import process
        json_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/bids_events_bad.json')
        json_sidecar = models.Sidecar(file=json_path, name='bids_events_bad')
        schema_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/HED8.0.0.xml')
        hed_schema = hedschema.load_schema(schema_path)

        arguments = {base_constants.SCHEMA: hed_schema, base_constants.JSON_SIDECAR: json_sidecar,
                     base_constants.JSON_DISPLAY_NAME: 'bids_events_bad',
                     base_constants.COMMAND: base_constants.COMMAND_TO_SHORT}
        with self.app.app_context():
            results = process(arguments)
            self.assertTrue(isinstance(results, dict),
                            'process to short should return a dictionary when errors')
            self.assertEqual('warning', results['msg_category'],
                             'process to short should give warning when JSON with errors')
            self.assertTrue(results['data'],
                            'process to short should not convert using HED 8.0.0.xml')
コード例 #11
0
def get_input_from_events_form(request):
    """Gets the validation function input arguments from a request object associated with the validation form.

    Parameters
    ----------
    request: Request object
        A Request object containing user data from the validation form.

    Returns
    -------
    dictionary
        A dictionary containing input arguments for calling the underlying validation function.
    """

    arguments = {
        base_constants.SCHEMA:
        get_hed_schema_from_pull_down(request),
        base_constants.EVENTS:
        None,
        base_constants.COMMAND:
        request.form.get(base_constants.COMMAND_OPTION, ''),
        base_constants.CHECK_FOR_WARNINGS:
        form_has_option(request, base_constants.CHECK_FOR_WARNINGS, 'on'),
        base_constants.EXPAND_DEFS:
        form_has_option(request, base_constants.EXPAND_DEFS, 'on'),
        base_constants.COLUMNS_SELECTED:
        create_column_selections(request.form)
    }

    json_sidecar = None
    if base_constants.JSON_FILE in request.files:
        f = request.files[base_constants.JSON_FILE]
        json_sidecar = models.Sidecar(file=f, name=secure_filename(f.filename))
    arguments[base_constants.JSON_SIDECAR] = json_sidecar
    if base_constants.EVENTS_FILE in request.files:
        f = request.files[base_constants.EVENTS_FILE]
        arguments[base_constants.EVENTS] = \
            models.EventsInput(file=f, sidecars=json_sidecar, name=secure_filename(f.filename))
    return arguments
コード例 #12
0
ファイル: services.py プロジェクト: hed-standard/hed-python
def get_input_objects(arguments, params):
    if base_constants.JSON_STRING in params and params[
            base_constants.JSON_STRING]:
        arguments[base_constants.JSON_SIDECAR] = \
            models.Sidecar(file=io.StringIO(params[base_constants.JSON_STRING]), name='JSON_Sidecar')
    if base_constants.EVENTS_STRING in params and params[
            base_constants.EVENTS_STRING]:
        arguments[base_constants.EVENTS] = \
            models.EventsInput(file=io.StringIO(params[base_constants.EVENTS_STRING]),
                               sidecars=arguments[base_constants.JSON_SIDECAR], name='Events')
    if base_constants.SPREADSHEET_STRING in params and params[
            base_constants.SPREADSHEET_STRING]:
        tag_columns, prefix_dict = spreadsheet.get_prefix_dict(params)
        arguments[base_constants.SPREADSHEET] = \
            models.HedInput(file=io.StringIO(params[base_constants.SPREADSHEET_STRING]), file_type=".tsv",
                            tag_columns=tag_columns,
                            has_column_names=arguments.get(base_constants.HAS_COLUMN_NAMES, None),
                            column_prefix_dictionary=prefix_dict, name='spreadsheet.tsv')
    if base_constants.STRING_LIST in params and params[
            base_constants.STRING_LIST]:
        s_list = []
        for s in params[base_constants.STRING_LIST]:
            s_list.append(models.HedString(s))
        arguments[base_constants.STRING_LIST] = s_list