Source: pycountry Version: 20.7.3+ds1-1 Severity: serious Justification: FTBFS Tags: bookworm sid ftbfs User: lu...@debian.org Usertags: ftbfs-20211104 ftbfs-bookworm
Hi, During a rebuild of all packages in sid, your package failed to build on amd64. Relevant part (hopefully): > debian/rules binary > dh binary --with python3 --buildsystem=pybuild > dh_update_autotools_config -O--buildsystem=pybuild > dh_autoreconf -O--buildsystem=pybuild > dh_auto_configure -O--buildsystem=pybuild > I: pybuild base:232: python3.9 setup.py config > running config > dh_auto_build -O--buildsystem=pybuild > I: pybuild base:232: /usr/bin/python3 setup.py build > running build > running build_py > creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pycountry/build/pycountry > copying src/pycountry/__init__.py -> > /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pycountry/build/pycountry > copying src/pycountry/db.py -> > /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pycountry/build/pycountry > running egg_info > creating src/pycountry.egg-info > writing src/pycountry.egg-info/PKG-INFO > writing dependency_links to src/pycountry.egg-info/dependency_links.txt > writing top-level names to src/pycountry.egg-info/top_level.txt > writing manifest file 'src/pycountry.egg-info/SOURCES.txt' > reading manifest file 'src/pycountry.egg-info/SOURCES.txt' > reading manifest template 'MANIFEST.in' > warning: no previously-included files matching '*.py[co]' found anywhere in > distribution > adding license file 'LICENSE.txt' > writing manifest file 'src/pycountry.egg-info/SOURCES.txt' > creating > /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pycountry/build/pycountry/tests > copying src/pycountry/tests/test_general.py -> > /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pycountry/build/pycountry/tests > dh_auto_test -O--buildsystem=pybuild > I: pybuild base:232: cd > /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pycountry/build; python3.9 -m pytest > /<<PKGBUILDDIR>>/src/pycountry/tests > ============================= test session starts > ============================== > platform linux -- Python 3.9.7, pytest-6.2.5, py-1.10.0, pluggy-0.13.0 > rootdir: /<<PKGBUILDDIR>> > collected 20 items > > ../../../src/pycountry/tests/test_general.py .F..FF.......F..F... > [100%] > > =================================== FAILURES > =================================== > __________________________ test_country_fuzzy_search > ___________________________ > > def test_country_fuzzy_search(): > > results = pycountry.countries.search_fuzzy(u'England') > > ../../../src/pycountry/tests/test_general.py:20: > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > > self = <pycountry.ExistingCountries object at 0x7f56b0ddaa30>, query = > 'england' > > def search_fuzzy(self, query): > query = remove_accents(query.strip().lower()) > > # A country-code to points mapping for later sorting countries > # based on the query's matching incidence. > results = {} > > def add_result(country, points): > results.setdefault(country.alpha_2, 0) > results[country.alpha_2] += points > > # Prio 1: exact matches on country names > try: > add_result(self.lookup(query), 50) > except LookupError: > pass > > # Prio 2: exact matches on subdivision names > for candidate in subdivisions: > for v in candidate._fields.values(): > if v is None: > continue > v = remove_accents(v.lower()) > # Some names include alternative versions which we want to > # match exactly. > for v in v.split(';'): > if v == query: > add_result(candidate.country, 49) > break > > # Prio 3: partial matches on country names > for candidate in self: > # Higher priority for a match on the common name > for v in [candidate._fields.get('name'), > candidate._fields.get('official_name'), > candidate._fields.get('comment')]: > if v is None: > continue > v = remove_accents(v.lower()) > if query in v: > # This prefers countries with a match early in their name > # and also balances against countries with a number of > # partial matches and their name containing 'new' in the > # middle > add_result(candidate, max([5, 30-(2*v.find(query))])) > break > > # Prio 4: partial matches on subdivision names > for candidate in subdivisions: > v = candidate._fields.get('name') > if v is None: > continue > v = remove_accents(v.lower()) > if query in v: > add_result(candidate.country, max([1, 5-v.find(query)])) > > if not results: > > raise LookupError(query) > E LookupError: england > > pycountry/__init__.py:93: LookupError > ____________________ test_subdivisions_directly_accessible > _____________________ > > def test_subdivisions_directly_accessible(): > #assert len(pycountry.subdivisions) == 4883 > assert isinstance(list(pycountry.subdivisions)[0], pycountry.db.Data) > > de_st = pycountry.subdivisions.get(code='DE-ST') > assert de_st.code == u'DE-ST' > assert de_st.name == u'Sachsen-Anhalt' > > assert de_st.type == u'State' > E AssertionError: assert 'Land' == 'State' > E - State > E + Land > > ../../../src/pycountry/tests/test_general.py:80: AssertionError > _________________ test_subdivisions_have_subdivision_as_parent > _________________ > > def test_subdivisions_have_subdivision_as_parent(): > al_bu = pycountry.subdivisions.get(code='AL-BU') > > assert al_bu.code == u'AL-BU' > E AttributeError: 'NoneType' object has no attribute 'code' > > ../../../src/pycountry/tests/test_general.py:88: AttributeError > __________________________________ test_repr > ___________________________________ > > def test_repr(): > > assert re.match("Country\\(alpha_2=u?'DE', " > "alpha_3=u?'DEU', " > "name=u?'Germany', " > "numeric=u?'276', " > "official_name=u?'Federal Republic of Germany'\\)", > repr(pycountry.countries.get(alpha_2='DE'))) > E assert None > E + where None = <function match at > 0x7f56b1a19ee0>("Country\\(alpha_2=u?'DE', alpha_3=u?'DEU', name=u?'Germany', > numeric=u?'276', official_name=u?'Federal Republic of Germany'\\)", > "Country(alpha_2='DE', alpha_3='DEU', flag='🇩🇪', name='Germany', > numeric='276', official_name='Federal Republic of Germany')") > E + where <function match at 0x7f56b1a19ee0> = re.match > E + and "Country(alpha_2='DE', alpha_3='DEU', flag='🇩🇪', > name='Germany', numeric='276', official_name='Federal Republic of Germany')" > = repr(Country(alpha_2='DE', alpha_3='DEU', flag='🇩🇪', name='Germany', > numeric='276', official_name='Federal Republic of Germany')) > E + where Country(alpha_2='DE', alpha_3='DEU', flag='🇩🇪', > name='Germany', numeric='276', official_name='Federal Republic of Germany') = > <bound method lazy_load.<locals>.load_if_needed of > <pycountry.ExistingCountries object at 0x7f56b0ddaa30>>(alpha_2='DE') > E + where <bound method lazy_load.<locals>.load_if_needed of > <pycountry.ExistingCountries object at 0x7f56b0ddaa30>> = > <pycountry.ExistingCountries object at 0x7f56b0ddaa30>.get > E + where <pycountry.ExistingCountries object at > 0x7f56b0ddaa30> = pycountry.countries > > ../../../src/pycountry/tests/test_general.py:165: AssertionError > _________________________________ test_lookup > __________________________________ > > def test_lookup(): > c = pycountry.countries > g = c.get(alpha_2='DE') > assert g == c.get(alpha_2='de') > assert g == c.lookup('de') > assert g == c.lookup('DEU') > assert g == c.lookup('276') > assert g == c.lookup('germany') > assert g == c.lookup('Federal Republic of Germany') > # try a generated field > bqaq = pycountry.historic_countries.get(alpha_4='BQAQ') > assert bqaq == pycountry.historic_countries.lookup('atb') > german = pycountry.languages.get(alpha_2='de') > assert german == pycountry.languages.lookup('De') > euro = pycountry.currencies.get(alpha_3='EUR') > assert euro == pycountry.currencies.lookup('euro') > latin = pycountry.scripts.get(name='Latin') > assert latin == pycountry.scripts.lookup('latn') > al_bu = pycountry.subdivisions.get(code='AL-BU') > > assert al_bu == pycountry.subdivisions.lookup('al-bu') > > ../../../src/pycountry/tests/test_general.py:208: > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > pycountry/db.py:51: in load_if_needed > return f(self, *args, **kw) > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > > self = <pycountry.Subdivisions object at 0x7f56b0dda910>, value = 'al-bu' > > @lazy_load > def lookup(self, value): > if not isinstance(value, str): > raise LookupError() > > # Normalize for case-insensitivity > value = value.lower() > > # Use indexes first > for key in self.indices: > try: > return self.indices[key][value] > except LookupError: > pass > > # Use non-indexed values now. Avoid going through indexed values. > for candidate in self: > for k in self.no_index: > v = candidate._fields.get(k) > if v is None: > continue > if v.lower() == value: > return candidate > > > raise LookupError('Could not find a record for %r' % value) > E LookupError: Could not find a record for 'al-bu' > > pycountry/db.py:156: LookupError > =========================== short test summary info > ============================ > FAILED ../../../src/pycountry/tests/test_general.py::test_country_fuzzy_search > FAILED > ../../../src/pycountry/tests/test_general.py::test_subdivisions_directly_accessible > FAILED > ../../../src/pycountry/tests/test_general.py::test_subdivisions_have_subdivision_as_parent > FAILED ../../../src/pycountry/tests/test_general.py::test_repr - assert None > FAILED ../../../src/pycountry/tests/test_general.py::test_lookup - > LookupErro... > ========================= 5 failed, 15 passed in 0.30s > ========================= > E: pybuild pybuild:354: test: plugin distutils failed with: exit code=1: cd > /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pycountry/build; python3.9 -m pytest > /<<PKGBUILDDIR>>/src/pycountry/tests > dh_auto_test: error: pybuild --test -i python{version} -p 3.9 returned exit > code 13 The full build log is available from: http://qa-logs.debian.net/2021/11/04/pycountry_20.7.3+ds1-1_unstable.log A list of current common problems and possible solutions is available at http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute! If you reassign this bug to another package, please marking it as 'affects'-ing this package. See https://www.debian.org/Bugs/server-control#affects If you fail to reproduce this, please provide a build log and diff it with mine so that we can identify if something relevant changed in the meantime.