Bug#955056: snakemake: FTBFS with Sphinx 2.4: AttributeError: 'member_descriptor' object has no attribute 'expandtabs'

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Bug#955056: snakemake: FTBFS with Sphinx 2.4: AttributeError: 'member_descriptor' object has no attribute 'expandtabs'

Lucas Nussbaum-4
Source: snakemake
Version: 5.10.0-2
Severity: important
Tags: ftbfs
User: [hidden email]
Usertags: sphinx2.4

Hi,

snakemake fails to build with Sphinx 2.4, currently available in
experimental.

Relevant part (hopefully):

> make[1]: Entering directory '/<<PKGBUILDDIR>>'
> dh_auto_build
> I: pybuild base:217: /usr/bin/python3 setup.py build
> running build
> running build_py
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/rules.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/executors.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/dag.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/persistence.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/checkpoints.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/parser.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/__main__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/decorators.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/benchmark.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/scheduler.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/logging.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/notebook.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/wrapper.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/workflow.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/script.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/jobs.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/_version.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/io.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/shell.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/gui.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/cwl.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/stats.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/exceptions.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/common.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/output_index.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/resources.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/utils.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/remote
> copying snakemake/remote/XRootD.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/remote
> copying snakemake/remote/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/remote
> copying snakemake/remote/dropbox.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/remote
> copying snakemake/remote/GS.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/remote
> copying snakemake/remote/NCBI.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/remote
> copying snakemake/remote/S3Mocked.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/remote
> copying snakemake/remote/webdav.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/remote
> copying snakemake/remote/SFTP.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/remote
> copying snakemake/remote/gridftp.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/remote
> copying snakemake/remote/gfal.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/remote
> copying snakemake/remote/AzureStorage.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/remote
> copying snakemake/remote/S3.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/remote
> copying snakemake/remote/EGA.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/remote
> copying snakemake/remote/FTP.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/remote
> copying snakemake/remote/iRODS.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/remote
> copying snakemake/remote/HTTP.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/remote
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/report
> copying snakemake/report/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/report
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/caching
> copying snakemake/caching/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/caching
> copying snakemake/caching/hash.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/caching
> copying snakemake/caching/local.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/caching
> copying snakemake/caching/remote.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/caching
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/deployment
> copying snakemake/deployment/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/deployment
> copying snakemake/deployment/conda.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/deployment
> copying snakemake/deployment/singularity.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/deployment
> copying snakemake/deployment/env_modules.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/deployment
> copying snakemake/report.css -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/jobscript.sh -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/gui.html -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake
> copying snakemake/report/table.html -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/report
> copying snakemake/report/report.html -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/report
> UPDATING /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/_version.py
> set /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/snakemake/_version.py to '5.10.0'
> PATH=/<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/bin:/<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/bin:/<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games \
> PYTHONPATH=/<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_snakemake/build \
> python3 setup.py build_sphinx
> running build_sphinx
> Running Sphinx v2.4.3
> making output directory... done
> building [mo]: targets for 0 po files that are out of date
> building [html]: targets for 33 source files that are out of date
> updating environment: [new config] 33 added, 0 changed, 0 removed
> reading sources... [  3%] api_reference/internal/modules
> reading sources... [  6%] api_reference/internal/snakemake
> /usr/lib/python3/dist-packages/sphinx/util/compat.py:30: RemovedInSphinx30Warning: The config variable "source_parsers" is deprecated. Please update your extension for the parser and remove the setting.
>   warnings.warn('The config variable "source_parsers" is deprecated. '
> /usr/lib/python3/dist-packages/sphinx/util/compat.py:36: RemovedInSphinx30Warning: app.add_source_parser() does not support suffix argument. Use app.add_source_suffix() instead.
>   app.add_source_parser(suffix, parser)
>
> Exception occurred:
>   File "/usr/lib/python3/dist-packages/sphinx/util/docstrings.py", line 24, in prepare_docstring
>     lines = s.expandtabs(tabsize).splitlines()
> AttributeError: 'member_descriptor' object has no attribute 'expandtabs'
> The full traceback has been saved in /tmp/sphinx-err-wxiq7_57.log, if you want to report the issue to the developers.
> Please also report this if it was a user error, so that a better error message can be provided next time.
> A bug report can be filed in the tracker at <https://github.com/sphinx-doc/sphinx/issues>. Thanks!
> make[1]: *** [debian/rules:35: override_dh_auto_build] Error 1

The full build log is available from:
   http://qa-logs.debian.net/2020/03/26/snakemake_5.10.0-2_unstable_sphinx243.log

Please see [1] for Sphinx changelog, which may give a hint of what changes in
Sphinx caused this error.

Also see [2] for the list of deprecated/removed APIs and possible alternatives
to them.

Sphinx 2.4 is going to be uploaded to unstable in a couple of weeks. When that
happens, the severity of this bug will be bumped to serious.

In case you have questions, please Cc [hidden email] on reply.

[1]: https://www.sphinx-doc.org/en/2.0/changes.html
[2]: https://www.sphinx-doc.org/en/2.0/extdev/deprecated.html#dev-deprecated-apis

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!

About the archive rebuild: The rebuild was done on EC2 VM instances from
Amazon Web Services, using a clean, minimal and up-to-date chroot. Every
failed build was retried once to eliminate random failures.

Reply | Threaded
Open this post in threaded view
|

Bug#955056:

Vladimir Jendrol
Reply | Threaded
Open this post in threaded view
|

Bug#955056:

Andreas Tille-5
Control: forwarded -1 https://github.com/snakemake/snakemake/issues/296
Control: tags -1 upstream

Reply | Threaded
Open this post in threaded view
|

Bug#955056: workaround Re: snakemake: FTBFS with Sphinx 2.4: AttributeError: 'member_descriptor' object has no attribute 'expandtabs'

Rebecca N. Palmer-2
In reply to this post by Lucas Nussbaum-4
An upstream comment says common.py:lazy_property is the problem item,
and excluding that from the documentation does make Sphinx succeed (I
haven't tested a whole build):

--- snakemake-5.10.0.orig/docs/conf.py
+++ snakemake-5.10.0/docs/conf.py
@@ -107,6 +107,8 @@ pygments_style = 'sphinx'
  # If true, keep warnings as "system message" paragraphs in the built
documents.
  #keep_warnings = False

+# skip internal class that Sphinx 2 can't process (#296)
+autodoc_default_options = {'exclude-members': 'lazy_property'}

  # -- Options for HTML output
----------------------------------------------


This is obviously not an ideal fix, but it's an internal class with
little documentation to begin with:
https://snakemake.readthedocs.io/en/stable/api_reference/internal/snakemake.html#snakemake.common.lazy_property