Beispiel #1
0
def test_integration():
    tg = TableGroup.from_file(FIXTURES / 'csv.txt-metadata.json')
    orig = tg.read()
    db = Database(tg)
    db.write_from_tg()
    for table, items in db.read().items():
        assert items == orig[table]
Beispiel #2
0
def test_foreign_keys(tg, translate):
    tg.tables[0].tableSchema.columns.append(Column.fromvalue({'name': 'v'}))
    tg.tables[0].tableSchema.primaryKey = ['v']
    tg.tables.append(
        Table.fromvalue({
            'url': 'ref',
            'tableSchema': {
                'columns': [{
                    'name': 'ref'
                }],
                'foreignKeys': [{
                    'columnReference': 'ref',
                    'reference': {
                        'resource': 'data',
                        'columnReference': 'v',
                    }
                }]
            }
        }))
    db = Database(tg, translate=translate)
    with pytest.raises(sqlite3.IntegrityError):
        db.write(ref=[{'ref': 'y'}], data=[{'v': 'x'}])
    db.write(ref=[{'ref': 'x'}], data=[{'v': 'x'}])
    # 'vv' is used as column name as specified by the translate fixture:
    assert 'vv' in db.read()['data'][0]
Beispiel #3
0
def test_list_valued(tg):
    tg.tables[0].tableSchema.columns.append(
        Column.fromvalue({
            'separator': '#',
            'name': 'v'
        }))
    db = Database(tg)
    with pytest.raises(TypeError):
        db.write(data=[{'v': [1, 2, 3]}])
    db.write(data=[{'v': ['a', 'b', ' c']}, {'v': []}])
    data = db.read()['data']
    assert data[0]['v'] == ['a', 'b', ' c']
    assert data[1]['v'] == []
Beispiel #4
0
def test_datatypes(tg, datatype):
    tg.tables[0].tableSchema.columns.extend([
        Column.fromvalue({
            'datatype': datatype.name,
            'name': 'v1'
        }),
        Column.fromvalue({
            'datatype': datatype.name,
            'name': 'v2'
        }),
    ])
    db = Database(tg)
    v = datatype.to_python(datatype.example)
    db.write(data=[{'v1': v, 'v2': None}])
    data = db.read()['data']
    assert data[0]['v1'] == v
    assert data[0]['v2'] is None
Beispiel #5
0
def test_many_to_many(tg_with_foreign_keys):
    db = Database(tg_with_foreign_keys)
    with pytest.raises(sqlite3.IntegrityError):
        # Foreign key violates referential integrity:
        db.write(ref=[{'pk': '1', 'ref1': ['y']}], data=[{'v': 'x'}])

    db.write(ref=[{
        'pk': '1',
        'ref1': ['y', 'x']
    }],
             data=[{
                 'v': 'x'
             }, {
                 'v': 'y'
             }])
    res = db.read()['ref'][0]
    # Associations between the same pair of tables are grouped by foreign key column:
    assert res['ref1'] == ['y', 'x']
    assert res['ref2'] == []
Beispiel #6
0
def test_many_to_many_self_referential(tg):
    tg.tables[0].tableSchema.columns.append(Column.fromvalue({'name': 'v'}))
    tg.tables[0].tableSchema.columns.append(
        Column.fromvalue({
            'name': 'ref',
            'separator': ';'
        }))
    tg.tables[0].tableSchema.primaryKey = ['v']
    tg.tables[0].tableSchema.foreignKeys.append(
        ForeignKey.fromdict({
            'columnReference': 'ref',
            'reference': {
                'resource': 'data',
                'columnReference': 'v',
            }
        }))
    db = Database(tg)
    with pytest.raises(sqlite3.IntegrityError):
        db.write(data=[{'v': 'x', 'ref': ['y']}])
    db.write(data=[{'v': 'x', 'ref': []}, {'v': 'y', 'ref': ['x', 'y']}])
    assert db.read()['data'][1]['ref'] == ['x', 'y']