Esempio n. 1
0
def test_parse_dispatch_tab_delimiter():
    import six
    from occams_imports.parsers import parse

    with mock.patch('occams_imports.parsers.parse.iform_json') as mock_convert:
        codebook_format = u'iform'
        delimiter = u'tab'

        codebook = six.StringIO()
        mock_convert.convert.return_value = six.StringIO()

        response = parse.parse_dispatch(codebook, codebook_format, delimiter)
        codebook.close()

        assert mock_convert.convert.called == True

    with mock.patch('occams_imports.parsers.parse.convert_qds_to_occams') \
        as mock_convert:

        codebook_format = u'qds'
        delimiter = u'comma'

        codebook = six.StringIO()
        mock_convert.convert.return_value = six.StringIO()

        response = parse.parse_dispatch(codebook, codebook_format, delimiter)
        codebook.close()

        assert mock_convert.convert.called == True
Esempio n. 2
0
def test_parse_dispatch_tab_delimiter():
    import six
    from occams_imports.parsers import parse

    with mock.patch('occams_imports.parsers.parse.iform_json') as mock_convert:
        codebook_format = u'iform'
        delimiter = u'tab'

        codebook = six.StringIO()
        mock_convert.convert.return_value = six.StringIO()

        response = parse.parse_dispatch(codebook, codebook_format, delimiter)
        codebook.close()

        assert mock_convert.convert.called == True

    with mock.patch('occams_imports.parsers.parse.convert_qds_to_occams') \
        as mock_convert:

        codebook_format = u'qds'
        delimiter = u'comma'

        codebook = six.StringIO()
        mock_convert.convert.return_value = six.StringIO()

        response = parse.parse_dispatch(codebook, codebook_format, delimiter)
        codebook.close()

        assert mock_convert.convert.called == True
Esempio n. 3
0
def insert_codebooks(context, request):
    """
    Insert appropriate records to the database
    """
    check_csrf_token(request)
    db_session = request.db_session

    study_name = request.POST['study']

    study = (
        db_session.query(studies.Study)
        .filter(studies.Study.title == study_name)
        .one())

    dry = request.POST['mode'] == u'dry'
    codebook = request.POST['codebook'].file
    codebook_format = request.matchdict['format']
    delimiter = request.POST.get('delimiter', ',')
    delimiter = convert_delimiter(delimiter)

    if codebook_format != u'iform':
        delimiter_mismatch, errors = validate_delimiter(delimiter, codebook)
    else:
        delimiter_mismatch = None
        errors = []

    # if delimiter isn't correct, don't process the file
    if delimiter_mismatch:
        records = []
        fields_inserted = 0
        forms = []

    else:
        records = parse.parse_dispatch(codebook, codebook_format, delimiter)
        records = parse.remove_system_entries(records)

        errors, imports, forms = validate_populate_imports(request, records)
        errors = is_duplicate_schema(forms, errors, db_session)

        fields_inserted = 0
        if not dry and not errors:
            fields_inserted = group_imports_by_schema(imports, study, db_session)

    return {
        'fields_evaluated': len(records),
        'errors': errors,
        'error_count': len(errors),
        'fields_inserted': fields_inserted,
        'forms_inserted': len(forms) if not dry and not errors else 0,
        'forms': forms
    }