예제 #1
0
def test_db_multiple_datasets(tmpdir, dataset, dataset_cldf, capsys):
    db = Database(str(tmpdir.join('lexibank.sqlite')))
    db.load(dataset)
    db.load(dataset_cldf, verbose=True)
    with db.connection() as conn:
        res = db.fetchall('select `id`, `name` from LanguageTable', conn=conn)
        assert len(res) == 3
        assert ('1', 'Lang CLDF') in [(r[0], r[1]) for r in res]
        res = db.fetchall('select `id`, `value` from FormTable', conn=conn)
        assert ('1', 'abc') in [(r[0], r[1]) for r in res]
예제 #2
0
def test_db_multiple_datasets_error(tmpdir, dataset, dataset_factory):
    import shutil
    from clldutils.jsonlib import load, dump

    db = Database(str(tmpdir.join('lexibank.sqlite')))
    assert not db.fname.exists()
    db.load(dataset)

    ds_dir = dataset.dir.parent / 'dbtest'
    shutil.copytree(str(dataset.dir), str(ds_dir))
    # Now modify the CLDF data:
    md = load(ds_dir / 'cldf' / 'cldf-metadata.json')
    for t in md['tables']:
        if t['url'] == 'parameters.csv':
            for col in t['tableSchema']['columns']:
                if col['name'] == 'Chinese':
                    col['name'] = 'chinese'
                    col['datatype'] = 'integer'
    dump(md, ds_dir / 'cldf' / 'cldf-metadata.json')

    ds2 = dataset_factory('dbtest.td')
    with pytest.raises(ValueError) as e:
        db.load(ds2)
        assert 'redefined' in str(e)
예제 #3
0
def _load(ds, **kw):
    db = Database(kw['db'])
    db.create(exists_ok=True)
    db.load(ds)
    db.load_concepticon_data(ds.concepticon)
    db.load_glottolog_data(ds.glottolog)
예제 #4
0
def test_db(tmpdir, dataset, mocker, capsys):
    db = Database(str(tmpdir.join('lexibank.sqlite')))
    db.load(dataset)
    db.create(exists_ok=True)
    with pytest.raises(ValueError):
        db.create()
    db.create(force=True)
    db.load(dataset)
    db.load_glottolog_data(dataset.glottolog)
    db.load_concepticon_data(mocker.Mock(conceptsets={}))
    for sql in db.sql:
        db.fetchall(sql)
    with db.connection() as conn:
        db.fetchall('select * from dataset', conn=conn, verbose=True)
    out, _ = capsys.readouterr()
    assert 'select' in out

    db.create(force=True)
    db.load(dataset)
    cldf_ds = dataset.cldf_reader()
    cols = cldf_ds['FormTable'].tableSchema.columns
    cols.append(Column(name='custom'))
    cldf_ds.write_metadata()
    db.load(dataset)
    cols.pop()
    cols.append(Column(name='custom', datatype='integer'))
    cldf_ds.write_metadata()
    with pytest.raises(ValueError):
        db.load(dataset)
    cols.pop()
    cldf_ds.write_metadata()
    db.load(dataset)