diff --git a/CHANGELOG.md b/CHANGELOG.md index e4b43ee..2f12d5b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ The `pycldf` package adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## unreleased + +- Switch from `pybtex` to `simplepybtex`. +- Make `Dataset.add_sources` accept a `BibliographyData` object from either `pybtex` or `simplepybtex`. +- More informative error message when `Dataset.add_sources` gets the wrong type of object. ## [1.42.0] - 2025-04-07 diff --git a/setup.cfg b/setup.cfg index cf2e7fd..ecc44d3 100644 --- a/setup.cfg +++ b/setup.cfg @@ -41,9 +41,7 @@ install_requires = clldutils>=3.9 uritemplate>=3.0 python-dateutil - # pybtex requires setuptools, but doesn't seem to declare this. - setuptools - pybtex + simplepybtex newick commonnexus>=1.2.0 python-frontmatter diff --git a/src/pycldf/sources.py b/src/pycldf/sources.py index c35f546..1d999b2 100644 --- a/src/pycldf/sources.py +++ b/src/pycldf/sources.py @@ -9,8 +9,8 @@ from urllib.request import urlopen, urlretrieve from csvw.metadata import is_url -from pybtex import database -from pybtex.database.output.bibtex import Writer as BaseWriter +from simplepybtex import database +from simplepybtex.database.output.bibtex import Writer as BaseWriter from clldutils.source import Source as BaseSource from clldutils.source import ID_PATTERN @@ -58,10 +58,10 @@ def __repr__(self): @classmethod def from_entry(cls, key, entry, **_kw): """ - Create a `cls` instance from a `pybtex` entry object. + Create a `cls` instance from a `simplepybtex` entry object. :param key: BibTeX citation key of the entry - :param entry: `pybtex.database.Entry` instance + :param entry: `simplepybtex.database.Entry` instance :param _kw: Non-bib-metadata keywords to be passed for `cls` instantiation :return: `cls` instance """ @@ -220,10 +220,15 @@ def expand_refs(self, refs: typing.Iterable[str], **kw) -> typing.Iterable[Refer def _add_entries(self, data, **kw): if isinstance(data, Source): entries = [(data.id, data.entry)] - elif isinstance(data, database.BibliographyData): + elif hasattr(data, 'entries'): entries = data.entries.items() else: - raise ValueError(data) + msg = ( + 'expected `clldutils.source.Source`,' + ' `pybtex.database.BibliographyData`,' + ' or `simplepybtex.database.BibliographyData`;' + f' got {type(data)}') + raise TypeError(data) for key, entry in entries: if kw.get('_check_id', False) and not ID_PATTERN.match(key): diff --git a/tests/test_sources.py b/tests/test_sources.py index 4ac6db3..474a569 100644 --- a/tests/test_sources.py +++ b/tests/test_sources.py @@ -2,7 +2,7 @@ from urllib.error import HTTPError import pytest -from pybtex.database import Entry +from simplepybtex.database import Entry from pycldf.sources import Sources, Source, Reference @@ -74,7 +74,7 @@ def test_Sources(bib): refs = ['huber2005[1-6]', 'Obrazy', 'Elegie[34]'] assert src.format_refs(*list(src.expand_refs(refs))) == refs assert '%s' % src['huber2005'] == 'Huber, Herrmann. 2005. y.' - with pytest.raises(ValueError): + with pytest.raises(TypeError): src.add(5) with pytest.raises(ValueError):