def test_write_read_archive(self): from pycldf.dataset import Dataset from pycldf.util import Archive ds = Dataset.from_file(FIXTURES.joinpath('ds1.csv')) out = self.tmp_path() with self.assertRaises(ValueError): ds.write(out.joinpath('non-existing'), '.tsv', archive=True) with Archive(self.tmp_path('archive.zip').as_posix(), 'w') as archive: ds.write('.', archive=archive) ds2 = Dataset.from_file(FIXTURES.joinpath('ds1.csv')) ds2.name = 'new_name' ds2.write('.', archive=archive) ds_out = Dataset.from_zip(self.tmp_path('archive.zip'), name='ds1') self.assertEqual(ds.rows, ds_out.rows) self.assertEqual(ds.metadata, ds_out.metadata) with Archive(self.tmp_path('archive.zip')) as archive: ds_out = Dataset.from_metadata('ds1.csv-metadata.json', container=archive) self.assertEqual(ds.rows, ds_out.rows) self.assertEqual(ds.metadata, ds_out.metadata) ds.write(out, '.tsv', archive=True) ds_out = Dataset.from_zip(out.joinpath('ds1.zip')) self.assertEqual(ds.rows, ds_out.rows) self.assertEqual(ds.metadata, ds_out.metadata)
def stats(args): """ cldf stats <DATASET> Print basic stats for CLDF dataset <DATASET>, where <DATASET> may be the path to - a CLDF metadata file - a CLDF core data file - a CLDF zip archive """ if len(args.args) < 1: raise ParserError('not enough arguments') fname = Path(args.args[0]) if not fname.exists() or not fname.is_file(): raise ParserError('%s is not an existing directory' % fname) if fname.suffix == '.zip': ds = Dataset.from_zip(fname) elif fname.name.endswith(MD_SUFFIX): ds = Dataset.from_metadata(fname) else: ds = Dataset.from_file(fname) print(fname) stats_ = ds.stats print(""" Name: %s Different languages: %s Different parameters: %s Rows: %s """ % ( ds.name, len(stats_['languages']), len(stats_['parameters']), stats_['rowcount'] ))
def test_CldfDownload(self): from clld.web.adapters.cldf import CldfDownload tmp = self.tmp_path('dl.zip') dl = CldfDownload(Dataset, 'clld') dl.create(self.env['request'], verbose=False, outfile=tmp) ds = CldfDataset.from_zip(tmp) self.assertEqual(ds.name, 'dataset-contribution-contribution') self.assertEqual( 'http://localhost/values/{ID}', ds.table.schema.aboutUrl) self.assertEqual( 'http://localhost/languages/{Language_ID}', ds.table.schema.columns['Language_ID'].valueUrl) self.assertEqual(len(ds.rows), 3) self.assertIn('Language_glottocode', ds[0]) self.assertIn('10-20', ds['value2']['Source'])