From ed1283e67a6af4a98eaaed0a81088c55fa7ca583 Mon Sep 17 00:00:00 2001 From: Johannes Englisch Date: Fri, 27 Jun 2025 08:47:25 +0200 Subject: [PATCH 1/4] Dataset.add_sources only allowed pybtex objects --- src/pycldf/sources.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pycldf/sources.py b/src/pycldf/sources.py index c35f546..040f611 100644 --- a/src/pycldf/sources.py +++ b/src/pycldf/sources.py @@ -220,7 +220,7 @@ 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) From 5b3b857d369260e2703e703d4127b2d73e45e544 Mon Sep 17 00:00:00 2001 From: Johannes Englisch Date: Fri, 27 Jun 2025 08:49:37 +0200 Subject: [PATCH 2/4] more useful error message from Database.add_sources --- src/pycldf/sources.py | 7 ++++++- tests/test_sources.py | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/pycldf/sources.py b/src/pycldf/sources.py index 040f611..af29b08 100644 --- a/src/pycldf/sources.py +++ b/src/pycldf/sources.py @@ -223,7 +223,12 @@ def _add_entries(self, data, **kw): 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..d75ecd3 100644 --- a/tests/test_sources.py +++ b/tests/test_sources.py @@ -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): From 02642a16abe180979a12fce77a387a3cc9668001 Mon Sep 17 00:00:00 2001 From: Johannes Englisch Date: Fri, 27 Jun 2025 08:53:58 +0200 Subject: [PATCH 3/4] s/pybtex/simplepybtex/ --- setup.cfg | 4 +--- src/pycldf/sources.py | 10 +++++----- tests/test_sources.py | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) 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 af29b08..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 """ @@ -227,7 +227,7 @@ def _add_entries(self, data, **kw): 'expected `clldutils.source.Source`,' ' `pybtex.database.BibliographyData`,' ' or `simplepybtex.database.BibliographyData`;' - f' got {type(data)}' + f' got {type(data)}') raise TypeError(data) for key, entry in entries: diff --git a/tests/test_sources.py b/tests/test_sources.py index d75ecd3..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 From 3bf6d1cf0da44e590337c213ebdab6fcf0ab9db6 Mon Sep 17 00:00:00 2001 From: Johannes Englisch Date: Fri, 27 Jun 2025 08:57:10 +0200 Subject: [PATCH 4/4] updated changelog --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) 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