[Debichem-devel] Bug#1057547: cclib-data: FTBFS: failing tests
Santiago Vila
sanvila at debian.org
Tue Dec 5 22:04:07 GMT 2023
Package: src:cclib-data
Version: 1.6.2-2
Severity: serious
Tags: ftbfs
Dear maintainer:
During a rebuild of all packages in unstable, your package failed to build:
--------------------------------------------------------------------------------
[...]
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:310: python3.11 setup.py config
Warning: 'classifiers' should be a list, got type 'filter'
dh_auto_build -O--buildsystem=pybuild
I: pybuild base:310: /usr/bin/python3 setup.py build
Warning: 'classifiers' should be a list, got type 'filter'
dh_auto_test -O--buildsystem=pybuild
I: pybuild base:310: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build; python3.11 -m pytest test
============================= test session starts ==============================
platform linux -- Python 3.11.7, pytest-7.4.3, pluggy-1.3.0
[... snipped ...]
)
elif extension in ['.bz', '.bz2']:
# Module 'bz2' is not always importable.
assert bz2 is not None, "ERROR: module bz2 cannot be imported"
fileobject = io.TextIOWrapper(bz2.BZ2File(fileobject if fileobject else filename, mode), encoding = encoding, errors = errors)
elif fileobject is not None:
# Assuming that object is text file encoded in utf-8
# If the file/stream has already been opened, we have no ability to handle decoding errors.
pass
else:
# Normal text file.
> fileobject = open(filename, mode, encoding = encoding, errors = errors)
E FileNotFoundError: [Errno 2] No such file or directory: 'dummyfile'
/usr/lib/python3/dist-packages/cclib/parser/logfilewrapper.py:210: FileNotFoundError
_________________ NormalisesymTest.test_normalisesym_gamessuk __________________
self = <test.parser.testspecificparsers.NormalisesymTest testMethod=test_normalisesym_gamessuk>
def test_normalisesym_gamessuk(self):
from cclib.parser.gamessukparser import GAMESSUK
> sym = GAMESSUK("dummyfile.txt").normalisesym
test/parser/testspecificparsers.py:33:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3/dist-packages/cclib/parser/gamessukparser.py:24: in __init__
super().__init__(logname="GAMESSUK", *args, **kwargs)
/usr/lib/python3/dist-packages/cclib/parser/logfileparser.py:56: in __init__
source = FileWrapper(source)
/usr/lib/python3/dist-packages/cclib/parser/logfilewrapper.py:81: in __init__
filename, fileobject = self.open_log_file(source)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <class 'cclib.parser.logfilewrapper.FileWrapper'>
source = 'dummyfile.txt', mode = 'r', encoding = 'utf-8', errors = 'logerror'
@classmethod
def open_log_file(
self,
source,
mode: str = "r",
encoding: str = "utf-8",
errors: str = "logerror",
) -> typing.Tuple[str, typing.IO]:
"""
Open a possibly compressed file, returning both the filename of the file and an open file object.
"""
# First, work out what source is (could be a filename, a URL, an open file etc).
if isinstance(source, str) and URL_PATTERN.match(source):
# This file is a URL.
try:
# Cache the file to a temp location.
response = urlopen(source)
fileobject = NamedTemporaryFile(delete = True)
fileobject.write(response.read())
fileobject.seek(0,0)
fileobject = io.TextIOWrapper(fileobject, encoding = encoding, errors = errors)
filename = source
except (ValueError, URLError) as error:
# Maybe no need to raise a different exception?
raise ValueError(
"Encountered an error processing the URL '{}'".format(source)
) from error
elif hasattr(source, "read") or hasattr(source, "readline"):
# This file is a file.
# If this file supports seek, we don't need to do anything.
# If not, we'll cache it to file.
if not hasattr(source, "seek") or \
(hasattr(source, "seekable") and not source.seekable()):
fileobject = NamedTemporaryFile(delete = True)
fileobject.write(source.read())
fileobject.seek(0,0)
fileobject = io.TextIOWrapper(fileobject, encoding = encoding, errors = errors)
else:
fileobject = source
filename = getattr(source, "name", f"stream {str(type(source))}")
else:
# This file is something else, assume we can open() it.
filename = source
fileobject = None
filename = pathlib.Path(filename)
extension = filename.suffix
if extension == ".gz":
fileobject = io.TextIOWrapper(gzip.GzipFile(filename, mode, fileobj = fileobject), encoding = encoding, errors = errors)
elif extension == ".zip":
fileobject = zipfile.ZipFile(fileobject if fileobject else filename, mode)
# TODO: Need to check that we're not leaving any open file objects here...
# TODO: We should be able to handle multiple files...
assert len(fileobject.namelist()) == 1, "ERROR: Zip file contains more than 1 file"
fileobject = io.TextIOWrapper(
fileobject.open(fileobject.namelist()[0]),
encoding = encoding, errors = errors
)
elif extension in ['.bz', '.bz2']:
# Module 'bz2' is not always importable.
assert bz2 is not None, "ERROR: module bz2 cannot be imported"
fileobject = io.TextIOWrapper(bz2.BZ2File(fileobject if fileobject else filename, mode), encoding = encoding, errors = errors)
elif fileobject is not None:
# Assuming that object is text file encoded in utf-8
# If the file/stream has already been opened, we have no ability to handle decoding errors.
pass
else:
# Normal text file.
> fileobject = open(filename, mode, encoding = encoding, errors = errors)
E FileNotFoundError: [Errno 2] No such file or directory: 'dummyfile.txt'
/usr/lib/python3/dist-packages/cclib/parser/logfilewrapper.py:210: FileNotFoundError
_________________ NormalisesymTest.test_normalisesym_gaussian __________________
self = <test.parser.testspecificparsers.NormalisesymTest testMethod=test_normalisesym_gaussian>
def test_normalisesym_gaussian(self):
from cclib.parser.gaussianparser import Gaussian
> sym = Gaussian("dummyfile").normalisesym
test/parser/testspecificparsers.py:40:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3/dist-packages/cclib/parser/gaussianparser.py:25: in __init__
super().__init__(logname="Gaussian", *args, **kwargs)
/usr/lib/python3/dist-packages/cclib/parser/logfileparser.py:56: in __init__
source = FileWrapper(source)
/usr/lib/python3/dist-packages/cclib/parser/logfilewrapper.py:81: in __init__
filename, fileobject = self.open_log_file(source)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <class 'cclib.parser.logfilewrapper.FileWrapper'>, source = 'dummyfile'
mode = 'r', encoding = 'utf-8', errors = 'logerror'
@classmethod
def open_log_file(
self,
source,
mode: str = "r",
encoding: str = "utf-8",
errors: str = "logerror",
) -> typing.Tuple[str, typing.IO]:
"""
Open a possibly compressed file, returning both the filename of the file and an open file object.
"""
# First, work out what source is (could be a filename, a URL, an open file etc).
if isinstance(source, str) and URL_PATTERN.match(source):
# This file is a URL.
try:
# Cache the file to a temp location.
response = urlopen(source)
fileobject = NamedTemporaryFile(delete = True)
fileobject.write(response.read())
fileobject.seek(0,0)
fileobject = io.TextIOWrapper(fileobject, encoding = encoding, errors = errors)
filename = source
except (ValueError, URLError) as error:
# Maybe no need to raise a different exception?
raise ValueError(
"Encountered an error processing the URL '{}'".format(source)
) from error
elif hasattr(source, "read") or hasattr(source, "readline"):
# This file is a file.
# If this file supports seek, we don't need to do anything.
# If not, we'll cache it to file.
if not hasattr(source, "seek") or \
(hasattr(source, "seekable") and not source.seekable()):
fileobject = NamedTemporaryFile(delete = True)
fileobject.write(source.read())
fileobject.seek(0,0)
fileobject = io.TextIOWrapper(fileobject, encoding = encoding, errors = errors)
else:
fileobject = source
filename = getattr(source, "name", f"stream {str(type(source))}")
else:
# This file is something else, assume we can open() it.
filename = source
fileobject = None
filename = pathlib.Path(filename)
extension = filename.suffix
if extension == ".gz":
fileobject = io.TextIOWrapper(gzip.GzipFile(filename, mode, fileobj = fileobject), encoding = encoding, errors = errors)
elif extension == ".zip":
fileobject = zipfile.ZipFile(fileobject if fileobject else filename, mode)
# TODO: Need to check that we're not leaving any open file objects here...
# TODO: We should be able to handle multiple files...
assert len(fileobject.namelist()) == 1, "ERROR: Zip file contains more than 1 file"
fileobject = io.TextIOWrapper(
fileobject.open(fileobject.namelist()[0]),
encoding = encoding, errors = errors
)
elif extension in ['.bz', '.bz2']:
# Module 'bz2' is not always importable.
assert bz2 is not None, "ERROR: module bz2 cannot be imported"
fileobject = io.TextIOWrapper(bz2.BZ2File(fileobject if fileobject else filename, mode), encoding = encoding, errors = errors)
elif fileobject is not None:
# Assuming that object is text file encoded in utf-8
# If the file/stream has already been opened, we have no ability to handle decoding errors.
pass
else:
# Normal text file.
> fileobject = open(filename, mode, encoding = encoding, errors = errors)
E FileNotFoundError: [Errno 2] No such file or directory: 'dummyfile'
/usr/lib/python3/dist-packages/cclib/parser/logfilewrapper.py:210: FileNotFoundError
__________________ NormalisesymTest.test_normalisesym_jaguar ___________________
self = <test.parser.testspecificparsers.NormalisesymTest testMethod=test_normalisesym_jaguar>
def test_normalisesym_jaguar(self):
from cclib.parser.jaguarparser import Jaguar
> sym = Jaguar("dummyfile").normalisesym
test/parser/testspecificparsers.py:47:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3/dist-packages/cclib/parser/jaguarparser.py:23: in __init__
super().__init__(logname="Jaguar", *args, **kwargs)
/usr/lib/python3/dist-packages/cclib/parser/logfileparser.py:56: in __init__
source = FileWrapper(source)
/usr/lib/python3/dist-packages/cclib/parser/logfilewrapper.py:81: in __init__
filename, fileobject = self.open_log_file(source)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <class 'cclib.parser.logfilewrapper.FileWrapper'>, source = 'dummyfile'
mode = 'r', encoding = 'utf-8', errors = 'logerror'
@classmethod
def open_log_file(
self,
source,
mode: str = "r",
encoding: str = "utf-8",
errors: str = "logerror",
) -> typing.Tuple[str, typing.IO]:
"""
Open a possibly compressed file, returning both the filename of the file and an open file object.
"""
# First, work out what source is (could be a filename, a URL, an open file etc).
if isinstance(source, str) and URL_PATTERN.match(source):
# This file is a URL.
try:
# Cache the file to a temp location.
response = urlopen(source)
fileobject = NamedTemporaryFile(delete = True)
fileobject.write(response.read())
fileobject.seek(0,0)
fileobject = io.TextIOWrapper(fileobject, encoding = encoding, errors = errors)
filename = source
except (ValueError, URLError) as error:
# Maybe no need to raise a different exception?
raise ValueError(
"Encountered an error processing the URL '{}'".format(source)
) from error
elif hasattr(source, "read") or hasattr(source, "readline"):
# This file is a file.
# If this file supports seek, we don't need to do anything.
# If not, we'll cache it to file.
if not hasattr(source, "seek") or \
(hasattr(source, "seekable") and not source.seekable()):
fileobject = NamedTemporaryFile(delete = True)
fileobject.write(source.read())
fileobject.seek(0,0)
fileobject = io.TextIOWrapper(fileobject, encoding = encoding, errors = errors)
else:
fileobject = source
filename = getattr(source, "name", f"stream {str(type(source))}")
else:
# This file is something else, assume we can open() it.
filename = source
fileobject = None
filename = pathlib.Path(filename)
extension = filename.suffix
if extension == ".gz":
fileobject = io.TextIOWrapper(gzip.GzipFile(filename, mode, fileobj = fileobject), encoding = encoding, errors = errors)
elif extension == ".zip":
fileobject = zipfile.ZipFile(fileobject if fileobject else filename, mode)
# TODO: Need to check that we're not leaving any open file objects here...
# TODO: We should be able to handle multiple files...
assert len(fileobject.namelist()) == 1, "ERROR: Zip file contains more than 1 file"
fileobject = io.TextIOWrapper(
fileobject.open(fileobject.namelist()[0]),
encoding = encoding, errors = errors
)
elif extension in ['.bz', '.bz2']:
# Module 'bz2' is not always importable.
assert bz2 is not None, "ERROR: module bz2 cannot be imported"
fileobject = io.TextIOWrapper(bz2.BZ2File(fileobject if fileobject else filename, mode), encoding = encoding, errors = errors)
elif fileobject is not None:
# Assuming that object is text file encoded in utf-8
# If the file/stream has already been opened, we have no ability to handle decoding errors.
pass
else:
# Normal text file.
> fileobject = open(filename, mode, encoding = encoding, errors = errors)
E FileNotFoundError: [Errno 2] No such file or directory: 'dummyfile'
/usr/lib/python3/dist-packages/cclib/parser/logfilewrapper.py:210: FileNotFoundError
__________________ NormalisesymTest.test_normalisesym_molpro ___________________
self = <test.parser.testspecificparsers.NormalisesymTest testMethod=test_normalisesym_molpro>
def test_normalisesym_molpro(self):
from cclib.parser.molproparser import Molpro
> sym = Molpro("dummyfile").normalisesym
test/parser/testspecificparsers.py:54:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3/dist-packages/cclib/parser/molproparser.py:56: in __init__
super().__init__(logname="Molpro", *args, **kwargs)
/usr/lib/python3/dist-packages/cclib/parser/logfileparser.py:56: in __init__
source = FileWrapper(source)
/usr/lib/python3/dist-packages/cclib/parser/logfilewrapper.py:81: in __init__
filename, fileobject = self.open_log_file(source)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <class 'cclib.parser.logfilewrapper.FileWrapper'>, source = 'dummyfile'
mode = 'r', encoding = 'utf-8', errors = 'logerror'
@classmethod
def open_log_file(
self,
source,
mode: str = "r",
encoding: str = "utf-8",
errors: str = "logerror",
) -> typing.Tuple[str, typing.IO]:
"""
Open a possibly compressed file, returning both the filename of the file and an open file object.
"""
# First, work out what source is (could be a filename, a URL, an open file etc).
if isinstance(source, str) and URL_PATTERN.match(source):
# This file is a URL.
try:
# Cache the file to a temp location.
response = urlopen(source)
fileobject = NamedTemporaryFile(delete = True)
fileobject.write(response.read())
fileobject.seek(0,0)
fileobject = io.TextIOWrapper(fileobject, encoding = encoding, errors = errors)
filename = source
except (ValueError, URLError) as error:
# Maybe no need to raise a different exception?
raise ValueError(
"Encountered an error processing the URL '{}'".format(source)
) from error
elif hasattr(source, "read") or hasattr(source, "readline"):
# This file is a file.
# If this file supports seek, we don't need to do anything.
# If not, we'll cache it to file.
if not hasattr(source, "seek") or \
(hasattr(source, "seekable") and not source.seekable()):
fileobject = NamedTemporaryFile(delete = True)
fileobject.write(source.read())
fileobject.seek(0,0)
fileobject = io.TextIOWrapper(fileobject, encoding = encoding, errors = errors)
else:
fileobject = source
filename = getattr(source, "name", f"stream {str(type(source))}")
else:
# This file is something else, assume we can open() it.
filename = source
fileobject = None
filename = pathlib.Path(filename)
extension = filename.suffix
if extension == ".gz":
fileobject = io.TextIOWrapper(gzip.GzipFile(filename, mode, fileobj = fileobject), encoding = encoding, errors = errors)
elif extension == ".zip":
fileobject = zipfile.ZipFile(fileobject if fileobject else filename, mode)
# TODO: Need to check that we're not leaving any open file objects here...
# TODO: We should be able to handle multiple files...
assert len(fileobject.namelist()) == 1, "ERROR: Zip file contains more than 1 file"
fileobject = io.TextIOWrapper(
fileobject.open(fileobject.namelist()[0]),
encoding = encoding, errors = errors
)
elif extension in ['.bz', '.bz2']:
# Module 'bz2' is not always importable.
assert bz2 is not None, "ERROR: module bz2 cannot be imported"
fileobject = io.TextIOWrapper(bz2.BZ2File(fileobject if fileobject else filename, mode), encoding = encoding, errors = errors)
elif fileobject is not None:
# Assuming that object is text file encoded in utf-8
# If the file/stream has already been opened, we have no ability to handle decoding errors.
pass
else:
# Normal text file.
> fileobject = open(filename, mode, encoding = encoding, errors = errors)
E FileNotFoundError: [Errno 2] No such file or directory: 'dummyfile'
/usr/lib/python3/dist-packages/cclib/parser/logfilewrapper.py:210: FileNotFoundError
=============================== warnings summary ===============================
test_data.py: 305 warnings
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/test/test_data.py:192: DeprecationWarning: unittest.makeSuite() is deprecated and will be removed in Python 3.13. Please use unittest.TestLoader.loadTestsFromTestCase() instead.
myunittest = unittest.makeSuite(test)
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
SKIPPED [1] test/io/testccio.py:120: This should also work if cjsonreader supported streams.
SKIPPED [1] test/io/testccio.py:107: Skipping network tests
SKIPPED [1] test/io/testccio.py:96: Skipping network tests
SKIPPED [1] test/io/testscripts.py:101: Broken test
SKIPPED [1] test/method/testmoments.py:36: This does not pass for some reason.
SKIPPED [1] test/parser/testlogfileparser.py:72: Broken test
SKIPPED [1] test/parser/testlogfileparser.py:65: Broken test
SKIPPED [1] test/parser/testlogfileparser.py:44: Skipping network tests
FAILED test/test_bridge.py::OpenbabelTest::test_makeopenbabel - TypeError: ma...
FAILED test/test_data.py::test_all[parsers0-modules0-False-False-40-True-True]
FAILED test/test_io.py::MOLDENTest::test_mo_section_size - TypeError: MOLDEN....
FAILED test/test_method.py::NuclearTest::test_principal_moments_of_inertia - ...
FAILED test/test_method.py::NuclearTest::test_repulsion_energy - AssertionErr...
FAILED test/test_parser.py::FileWrapperTest::test_file_seek - NotImplementedE...
FAILED test/test_parser.py::LogfileTest::test_float_basic - TypeError: Can't ...
FAILED test/test_parser.py::LogfileTest::test_float_numeric_format - TypeErro...
FAILED test/test_parser.py::LogfileTest::test_float_stars - TypeError: Can't ...
FAILED test/test_parser.py::LogfileTest::test_normalisesym_base_class_error
FAILED test/test_parser.py::LogfileTest::test_parse_check_values - TypeError:...
FAILED test/test_parser.py::NormalisesymTest::test_normalisesym_adf - FileNot...
FAILED test/test_parser.py::NormalisesymTest::test_normalisesym_gamess - File...
FAILED test/test_parser.py::NormalisesymTest::test_normalisesym_gamessuk - Fi...
FAILED test/test_parser.py::NormalisesymTest::test_normalisesym_gaussian - Fi...
FAILED test/test_parser.py::NormalisesymTest::test_normalisesym_jaguar - File...
FAILED test/test_parser.py::NormalisesymTest::test_normalisesym_molpro - File...
============ 17 failed, 82 passed, 8 skipped, 305 warnings in 9.08s ============
E: pybuild pybuild:395: test: plugin distutils failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build; python3.11 -m pytest test
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.11 returned exit code 13
make: *** [debian/rules:8: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------
The above is just how the build ends and not necessarily the most relevant part.
If required, the full build log is available here:
https://people.debian.org/~sanvila/build-logs/202312/
About the archive rebuild: The build was made using virtual machines
from AWS, with enough memory, enough disk, and either one or two
CPUs, using a reduced chroot with only build-essential packages.
If you could not reproduce the bug please contact me privately, as I
am willing to provide ssh access to a virtual machine where the bug is
fully reproducible.
If this is really a bug in one of the build-depends, please use
reassign and affects, so that this is still visible in the BTS web
page for this package.
Thanks.
More information about the Debichem-devel
mailing list