[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