def test_validate(self): from pycldf.dataset import Dataset, REQUIRED_FIELDS ds = Dataset('name') with self.assertRaises(AssertionError): # missing required fields! ds.fields = ('a',) with self.assertRaises(AssertionError): # fields must be tuple ds.fields = [variants[-1] for variants in REQUIRED_FIELDS] ds.fields = tuple(variants[-1] for variants in REQUIRED_FIELDS) with self.assertRaises(ValueError): # fields cannot be reassigned! ds.fields = tuple(variants[0] for variants in REQUIRED_FIELDS)
def make_dataset(name='test', fields=None, rows=None): ds = Dataset(name) ds.fields = fields or tuple(f[0] for f in REQUIRED_FIELDS) if rows: for row in rows: ds.add_row(row) return ds
def dataset(self, req): ds = Dataset('%s-%s-%s' % ( req.dataset.id, self.obj.__class__.__name__.lower(), self.obj.id)) cols = self.columns(req) ds.fields = tuple(col['name'] if isinstance(col, dict) else col for col in cols) ds.table.schema.aboutUrl = url_template(req, 'value', 'ID') for col in cols: if isinstance(col, dict): name = col.pop('name') for attr, value in col.items(): setattr(ds.table.schema.columns[name], attr, value) ds.metadata['dc:bibliographicCitation '] = text_citation(req, self.obj) ds.metadata['dc:publisher'] = '%s, %s' % ( req.dataset.publisher_name, req.dataset.publisher_place) ds.metadata['dc:license'] = req.dataset.license ds.metadata['dc:issued'] = req.dataset.published.isoformat() ds.metadata['dc:title'] = self.obj.name ds.metadata['dc:creator'] = self.obj.formatted_contributors() ds.metadata['dc:identifier'] = req.resource_url(self.obj) ds.metadata['dc:isPartOf'] = req.resource_url(req.dataset) ds.metadata['dcat:accessURL'] = req.route_url('download') for value in self.value_query(): refs, sources = self.refs_and_sources(req, value) row = self.row(req, value, refs) if row: ds.sources.add(*sources) ds.add_row(row) return ds
def test_write_read(self): from pycldf.dataset import Dataset, REQUIRED_FIELDS row = ['1', 'abcd1234', 'fid', 'yes'] ds = Dataset('name') ds.fields = tuple(v[0] for v in REQUIRED_FIELDS) ds.add_row(row) ds.write(self.tmp_path()) self.assertTrue(self.tmp_path('name.csv').exists()) ds2 = Dataset.from_file(self.tmp_path('name.csv')) self.assertEqual(list(ds2[0].values()), row) self.assertEqual(list(ds2['1'].values()), row)