python-sphinxcontrib-websupport 1.1.0 fails the tests with import errors on sphinx.websupport. upstream master fixes the issue (changes sphinxcontrib.websupport), but the entire test suite fails. this is a problem for the 3.8 bootstrap. yet not a big one, as sphinx no onger requires sphinxcontrib-websupport. Here (before Sphinx 2.0.0, with 1:1.8.4-1.fc30): https://src.fedoraproject.org/rpms/python-sphinxcontrib-websupport/pull-request/3 the failure was: ============================= test session starts ============================== platform linux -- Python 3.7.2, pytest-3.9.3, py-1.7.0, pluggy-0.8.1 rootdir: /builddir/build/BUILD/sphinxcontrib-websupport-1.1.0, inifile: collected 13 items tests/test_searchadapters.py s. [ 15%] tests/test_websupport.py .F.FFFFFFF. [100%] =================================== FAILURES =================================== __________________________________ test_build __________________________________ self = <sqlalchemy.engine.base.Connection object at 0xf52cbd0c> dialect = <sqlalchemy.dialects.sqlite.pysqlite.SQLiteDialect_pysqlite object at 0xf52b20ac> constructor = <bound method DefaultExecutionContext._init_compiled of <class 'sqlalchemy.dialects.sqlite.base.SQLiteExecutionContext'>> statement = 'INSERT INTO sphinx_nodes (id, document, source) VALUES (?, ?, ?)' parameters = ('9a9b2d1f64be431aa6e9e898878c3954', 'lists', 'description') args = (<sqlalchemy.dialects.sqlite.base.SQLiteCompiler object at 0xf4d9b1ec>, [{'document': 'lists', 'id': '9a9b2d1f64be431aa6e9e898878c3954', 'source': 'description'}]) conn = <sqlalchemy.pool.base._ConnectionFairy object at 0xf4d9bc0c> context = <sqlalchemy.dialects.sqlite.base.SQLiteExecutionContext object at 0xf52cbe2c> def _execute_context( self, dialect, constructor, statement, parameters, *args ): """Create an :class:`.ExecutionContext` and execute, returning a :class:`.ResultProxy`.""" try: try: conn = self.__connection except AttributeError: # escape "except AttributeError" before revalidating # to prevent misleading stacktraces in Py3K conn = None if conn is None: conn = self._revalidate_connection() context = constructor(dialect, self, conn, *args) except BaseException as e: self._handle_dbapi_exception( e, util.text_type(statement), parameters, None, None ) if context.compiled: context.pre_exec() cursor, statement, parameters = ( context.cursor, context.statement, context.parameters, ) if not context.executemany: parameters = parameters[0] if self._has_events or self.engine._has_events: for fn in self.dispatch.before_cursor_execute: statement, parameters = fn( self, cursor, statement, parameters, context, context.executemany, ) if self._echo: self.engine.logger.info(statement) self.engine.logger.info( "%r", sql_util._repr_params(parameters, batches=10) ) evt_handled = False try: if context.executemany: if self.dialect._has_events: for fn in self.dialect.dispatch.do_executemany: if fn(cursor, statement, parameters, context): evt_handled = True break if not evt_handled: self.dialect.do_executemany( cursor, statement, parameters, context ) elif not parameters and context.no_parameters: if self.dialect._has_events: for fn in self.dialect.dispatch.do_execute_no_params: if fn(cursor, statement, context): evt_handled = True break if not evt_handled: self.dialect.do_execute_no_params( cursor, statement, context ) else: if self.dialect._has_events: for fn in self.dialect.dispatch.do_execute: if fn(cursor, statement, parameters, context): evt_handled = True break if not evt_handled: self.dialect.do_execute( > cursor, statement, parameters, context ) /usr/lib/python3.7/site-packages/sqlalchemy/engine/base.py:1244: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <sqlalchemy.dialects.sqlite.pysqlite.SQLiteDialect_pysqlite object at 0xf52b20ac> cursor = <sqlite3.Cursor object at 0xf51f1820> statement = 'INSERT INTO sphinx_nodes (id, document, source) VALUES (?, ?, ?)' parameters = ('9a9b2d1f64be431aa6e9e898878c3954', 'lists', 'description') context = <sqlalchemy.dialects.sqlite.base.SQLiteExecutionContext object at 0xf52cbe2c> def do_execute(self, cursor, statement, parameters, context=None): > cursor.execute(statement, parameters) E sqlite3.IntegrityError: UNIQUE constraint failed: sphinx_nodes.id /usr/lib/python3.7/site-packages/sqlalchemy/engine/default.py:552: IntegrityError The above exception was the direct cause of the following exception: support = <sphinxcontrib.websupport.core.WebSupport object at 0xf53e3d0c> @pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy') @with_support() def test_build(support): > support.build() tests/test_websupport.py:63: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.7/site-packages/sphinxcontrib/websupport/core.py:137: in build app.build() /usr/lib/python3.7/site-packages/sphinx/application.py:341: in build self.builder.build_update() /usr/lib/python3.7/site-packages/sphinx/builders/__init__.py:347: in build_update len(to_build)) /usr/lib/python3.7/site-packages/sphinx/builders/__init__.py:412: in build self.write(docnames, list(updated_docnames), method) /usr/lib/python3.7/site-packages/sphinx/builders/__init__.py:593: in write self._write_serial(sorted(docnames)) /usr/lib/python3.7/site-packages/sphinx/builders/__init__.py:604: in _write_serial self.write_doc(docname, doctree) sphinxcontrib/websupport/builder.py:75: in write_doc self.docwriter.write(doctree, destination) /usr/lib/python3.7/site-packages/docutils/writers/__init__.py:80: in write self.translate() /usr/lib/python3.7/site-packages/sphinx/writers/html.py:58: in translate self.document.walkabout(visitor) /usr/lib/python3.7/site-packages/docutils/nodes.py:174: in walkabout if child.walkabout(visitor): /usr/lib/python3.7/site-packages/docutils/nodes.py:174: in walkabout if child.walkabout(visitor): /usr/lib/python3.7/site-packages/docutils/nodes.py:174: in walkabout if child.walkabout(visitor): /usr/lib/python3.7/site-packages/docutils/nodes.py:174: in walkabout if child.walkabout(visitor): /usr/lib/python3.7/site-packages/docutils/nodes.py:174: in walkabout if child.walkabout(visitor): /usr/lib/python3.7/site-packages/docutils/nodes.py:174: in walkabout if child.walkabout(visitor): /usr/lib/python3.7/site-packages/docutils/nodes.py:166: in walkabout visitor.dispatch_visit(self) sphinxcontrib/websupport/writer.py:27: in dispatch_visit self.handle_visit_commentable(node) sphinxcontrib/websupport/writer.py:34: in handle_visit_commentable self.add_db_node(node) sphinxcontrib/websupport/writer.py:46: in add_db_node source=node.rawsource or node.astext()) /usr/lib/python3.7/site-packages/sphinxcontrib/websupport/storage/sqlalchemystorage.py:53: in add_node self.build_session.flush() /usr/lib/python3.7/site-packages/sqlalchemy/orm/session.py:2451: in flush self._flush(objects) /usr/lib/python3.7/site-packages/sqlalchemy/orm/session.py:2589: in _flush transaction.rollback(_capture_exception=True) /usr/lib/python3.7/site-packages/sqlalchemy/util/langhelpers.py:68: in __exit__ compat.reraise(exc_type, exc_value, exc_tb) /usr/lib/python3.7/site-packages/sqlalchemy/util/compat.py:129: in reraise raise value /usr/lib/python3.7/site-packages/sqlalchemy/orm/session.py:2549: in _flush flush_context.execute() /usr/lib/python3.7/site-packages/sqlalchemy/orm/unitofwork.py:422: in execute rec.execute(self) /usr/lib/python3.7/site-packages/sqlalchemy/orm/unitofwork.py:589: in execute uow, /usr/lib/python3.7/site-packages/sqlalchemy/orm/persistence.py:245: in save_obj insert, /usr/lib/python3.7/site-packages/sqlalchemy/orm/persistence.py:1066: in _emit_insert_statements c = cached_connections[connection].execute(statement, multiparams) /usr/lib/python3.7/site-packages/sqlalchemy/engine/base.py:988: in execute return meth(self, multiparams, params) /usr/lib/python3.7/site-packages/sqlalchemy/sql/elements.py:287: in _execute_on_connection return connection._execute_clauseelement(self, multiparams, params) /usr/lib/python3.7/site-packages/sqlalchemy/engine/base.py:1107: in _execute_clauseelement distilled_params, /usr/lib/python3.7/site-packages/sqlalchemy/engine/base.py:1248: in _execute_context e, statement, parameters, cursor, context /usr/lib/python3.7/site-packages/sqlalchemy/engine/base.py:1466: in _handle_dbapi_exception util.raise_from_cause(sqlalchemy_exception, exc_info) /usr/lib/python3.7/site-packages/sqlalchemy/util/compat.py:383: in raise_from_cause reraise(type(exception), exception, tb=exc_tb, cause=cause) /usr/lib/python3.7/site-packages/sqlalchemy/util/compat.py:128: in reraise raise value.with_traceback(tb) /usr/lib/python3.7/site-packages/sqlalchemy/engine/base.py:1244: in _execute_context cursor, statement, parameters, context _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <sqlalchemy.dialects.sqlite.pysqlite.SQLiteDialect_pysqlite object at 0xf52b20ac> cursor = <sqlite3.Cursor object at 0xf51f1820> statement = 'INSERT INTO sphinx_nodes (id, document, source) VALUES (?, ?, ?)' parameters = ('9a9b2d1f64be431aa6e9e898878c3954', 'lists', 'description') context = <sqlalchemy.dialects.sqlite.base.SQLiteExecutionContext object at 0xf52cbe2c> def do_execute(self, cursor, statement, parameters, context=None): > cursor.execute(statement, parameters) E sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: sphinx_nodes.id E [SQL: INSERT INTO sphinx_nodes (id, document, source) VALUES (?, ?, ?)] E [parameters: ('9a9b2d1f64be431aa6e9e898878c3954', 'lists', 'description')] E (Background on this error at: http://sqlalche.me/e/gkpj) /usr/lib/python3.7/site-packages/sqlalchemy/engine/default.py:552: IntegrityError ----------------------------- Captured stdout call ----------------------------- Running Sphinx v1.8.4[39;49;00m building [mo]: [39;49;00mtargets for 0 po files that are out of date building [websupport][39;49;00m: targets for 16 source files that are out of date updating environment: [39;49;00m16 added, 0 changed, 0 removed reading sources... [39;49;00m[ 6%] autodoc[39;49;00m reading sources... [39;49;00m[ 12%] bom[39;49;00m reading sources... [39;49;00m[ 18%] contents[39;49;00m reading sources... [39;49;00m[ 25%] extapi[39;49;00m reading sources... [39;49;00m[ 31%] extensions[39;49;00m reading sources... [39;49;00m[ 37%] footnote[39;49;00m reading sources... [39;49;00m[ 43%] images[39;49;00m reading sources... [39;49;00m[ 50%] includes[39;49;00m reading sources... [39;49;00m[ 56%] lists[39;49;00m reading sources... [39;49;00m[ 62%] markup[39;49;00m reading sources... [39;49;00m[ 68%] math[39;49;00m reading sources... [39;49;00m[ 75%] metadata[39;49;00m reading sources... [39;49;00m[ 81%] objects[39;49;00m reading sources... [39;49;00m[ 87%] otherext[39;49;00m reading sources... [39;49;00m[ 93%] subdir/images[39;49;00m reading sources... [39;49;00m[100%] subdir/includes[39;49;00m looking for now-outdated files... [39;49;00mnone found pickling environment... [39;49;00mdone checking consistency... [39;49;00mdone preparing documents... [39;49;00mdone writing output... [39;49;00m[ 6%] autodoc[39;49;00m writing output... [39;49;00m[ 12%] bom[39;49;00m writing output... [39;49;00m[ 18%] contents[39;49;00m writing output... [39;49;00m[ 25%] extapi[39;49;00m writing output... [39;49;00m[ 31%] extensions[39;49;00m writing output... [39;49;00m[ 37%] footnote[39;49;00m writing output... [39;49;00m[ 43%] images[39;49;00m writing output... [39;49;00m[ 50%] includes[39;49;00m writing output... [39;49;00m[ 56%] lists[39;49;00m ----------------------------- Captured stderr call ----------------------------- WARNING: while setting up extension sphinx.domains.changeset: directive 'deprecated' is already registered, it will be overridden[39;49;00m WARNING: while setting up extension sphinx.domains.changeset: directive 'versionadded' is already registered, it will be overridden[39;49;00m WARNING: while setting up extension sphinx.domains.changeset: directive 'versionchanged' is already registered, it will be overridden[39;49;00m WARNING: while setting up extension sphinx.domains.math: role 'eq' is already registered, it will be overridden[39;49;00m WARNING: while setting up extension sphinx.ext.autodoc: directive 'automodule' is already registered, it will be overridden[39;49;00m WARNING: while setting up extension sphinx.ext.autodoc: directive 'autoclass' is already registered, it will be overridden[39;49;00m WARNING: while setting up extension sphinx.ext.autodoc: directive 'autoexception' is already registered, it will be overridden[39;49;00m WARNING: while setting up extension sphinx.ext.autodoc: directive 'autodata' is already registered, it will be overridden[39;49;00m WARNING: while setting up extension sphinx.ext.autodoc: directive 'autofunction' is already registered, it will be overridden[39;49;00m WARNING: while setting up extension sphinx.ext.autodoc: directive 'automethod' is already registered, it will be overridden[39;49;00m WARNING: while setting up extension sphinx.ext.autodoc: directive 'autoattribute' is already registered, it will be overridden[39;49;00m WARNING: while setting up extension sphinx.ext.autodoc: directive 'autoinstanceattribute' is already registered, it will be overridden[39;49;00m WARNING: while setting up extension sphinx.ext.todo: node class 'todolist' is already registered, its visitors will be overridden[39;49;00m WARNING: while setting up extension sphinx.ext.todo: node class 'todo_node' is already registered, its visitors will be overridden[39;49;00m WARNING: while setting up extension sphinx.ext.todo: directive 'todo' is already registered, it will be overridden[39;49;00m WARNING: while setting up extension sphinx.ext.todo: directive 'todolist' is already registered, it will be overridden[39;49;00m WARNING: while setting up extension conf.py: directive 'funcdir' is already registered, it will be overridden[39;49;00m WARNING: while setting up extension conf.py: directive 'clsdir' is already registered, it will be overridden[39;49;00m WARNING: while setting up extension conf.py: role 'issue' is already registered, it will be overridden[39;49;00m WARNING: while setting up extension conf.py: role 'pyurl' is already registered, it will be overridden[39;49;00m WARNING: autodoc: failed to import module 'test_autodoc'; the following exception was raised: No module named 'test_autodoc'[39;49;00m WARNING: autodoc: failed to import function 'function' from module 'util'; the following exception was raised: Traceback (most recent call last): File "/usr/lib/python3.7/site-packages/sphinx/util/inspect.py", line 225, in safe_getattr return getattr(obj, name, *defargs) AttributeError: module 'util' has no attribute 'function' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3.7/site-packages/sphinx/ext/autodoc/importer.py", line 193, in import_object obj = attrgetter(obj, attrname) File "/usr/lib/python3.7/site-packages/sphinx/ext/autodoc/__init__.py", line 290, in get_attr return autodoc_attrgetter(self.env.app, obj, name, *defargs) File "/usr/lib/python3.7/site-packages/sphinx/ext/autodoc/__init__.py", line 1562, in autodoc_attrgetter return safe_getattr(obj, name, *defargs) File "/usr/lib/python3.7/site-packages/sphinx/util/inspect.py", line 241, in safe_getattr raise AttributeError(name) AttributeError: function [39;49;00m WARNING: autodoc: failed to import class 'Class' from module 'util'; the following exception was raised: Traceback (most recent call last): File "/usr/lib/python3.7/site-packages/sphinx/util/inspect.py", line 225, in safe_getattr return getattr(obj, name, *defargs) AttributeError: module 'util' has no attribute 'Class' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3.7/site-packages/sphinx/ext/autodoc/importer.py", line 193, in import_object obj = attrgetter(obj, attrname) File "/usr/lib/python3.7/site-packages/sphinx/ext/autodoc/__init__.py", line 290, in get_attr return autodoc_attrgetter(self.env.app, obj, name, *defargs) File "/usr/lib/python3.7/site-packages/sphinx/ext/autodoc/__init__.py", line 1562, in autodoc_attrgetter return safe_getattr(obj, name, *defargs) File "/usr/lib/python3.7/site-packages/sphinx/util/inspect.py", line 241, in safe_getattr raise AttributeError(name) AttributeError: Class [39;49;00m WARNING: autodoc: failed to import class 'Outer' from module 'util'; the following exception was raised: Traceback (most recent call last): File "/usr/lib/python3.7/site-packages/sphinx/util/inspect.py", line 225, in safe_getattr return getattr(obj, name, *defargs) AttributeError: module 'util' has no attribute 'Outer' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3.7/site-packages/sphinx/ext/autodoc/importer.py", line 193, in import_object obj = attrgetter(obj, attrname) File "/usr/lib/python3.7/site-packages/sphinx/ext/autodoc/__init__.py", line 290, in get_attr return autodoc_attrgetter(self.env.app, obj, name, *defargs) File "/usr/lib/python3.7/site-packages/sphinx/ext/autodoc/__init__.py", line 1562, in autodoc_attrgetter return safe_getattr(obj, name, *defargs) File "/usr/lib/python3.7/site-packages/sphinx/util/inspect.py", line 241, in safe_getattr raise AttributeError(name) AttributeError: Outer [39;49;00m WARNING: autodoc: failed to import attribute 'Class.docattr' from module 'util'; the following exception was raised: Traceback (most recent call last): File "/usr/lib/python3.7/site-packages/sphinx/util/inspect.py", line 225, in safe_getattr return getattr(obj, name, *defargs) AttributeError: module 'util' has no attribute 'Class' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3.7/site-packages/sphinx/ext/autodoc/importer.py", line 193, in import_object obj = attrgetter(obj, attrname) File "/usr/lib/python3.7/site-packages/sphinx/ext/autodoc/__init__.py", line 290, in get_attr return autodoc_attrgetter(self.env.app, obj, name, *defargs) File "/usr/lib/python3.7/site-packages/sphinx/ext/autodoc/__init__.py", line 1562, in autodoc_attrgetter return safe_getattr(obj, name, *defargs) File "/usr/lib/python3.7/site-packages/sphinx/util/inspect.py", line 241, in safe_getattr raise AttributeError(name) AttributeError: Class [39;49;00m WARNING: autodoc: failed to import exception 'CustomEx' from module 'util'; the following exception was raised: Traceback (most recent call last): File "/usr/lib/python3.7/site-packages/sphinx/util/inspect.py", line 225, in safe_getattr return getattr(obj, name, *defargs) AttributeError: module 'util' has no attribute 'CustomEx' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3.7/site-packages/sphinx/ext/autodoc/importer.py", line 193, in import_object obj = attrgetter(obj, attrname) File "/usr/lib/python3.7/site-packages/sphinx/ext/autodoc/__init__.py", line 290, in get_attr return autodoc_attrgetter(self.env.app, obj, name, *defargs) File "/usr/lib/python3.7/site-packages/sphinx/ext/autodoc/__init__.py", line 1562, in autodoc_attrgetter return safe_getattr(obj, name, *defargs) File "/usr/lib/python3.7/site-packages/sphinx/util/inspect.py", line 241, in safe_getattr raise AttributeError(name) AttributeError: CustomEx [39;49;00m WARNING: autodoc: failed to import class 'CustomDict' from module 'util'; the following exception was raised: Traceback (most recent call last): File "/usr/lib/python3.7/site-packages/sphinx/util/inspect.py", line 225, in safe_getattr return getattr(obj, name, *defargs) AttributeError: module 'util' has no attribute 'CustomDict' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3.7/site-packages/sphinx/ext/autodoc/importer.py", line 193, in import_object obj = attrgetter(obj, attrname) File "/usr/lib/python3.7/site-packages/sphinx/ext/autodoc/__init__.py", line 290, in get_attr return autodoc_attrgetter(self.env.app, obj, name, *defargs) File "/usr/lib/python3.7/site-packages/sphinx/ext/autodoc/__init__.py", line 1562, in autodoc_attrgetter return safe_getattr(obj, name, *defargs) File "/usr/lib/python3.7/site-packages/sphinx/util/inspect.py", line 241, in safe_getattr raise AttributeError(name) AttributeError: CustomDict [39;49;00m /builddir/build/BUILD/sphinxcontrib-websupport-1.1.0/tests/root/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup ends without a blank line; unexpected unindent.[39;49;00m WARNING: autodoc: failed to import class 'InstAttCls' from module 'test_autodoc'; the following exception was raised: No module named 'test_autodoc'[39;49;00m WARNING: autodoc: failed to import class 'InstAttCls' from module 'test_autodoc'; the following exception was raised: No module named 'test_autodoc'[39;49;00m WARNING: autodoc: failed to import module 'autodoc_missing_imports'; the following exception was raised: No module named 'missing_package1'[39;49;00m /builddir/build/BUILD/sphinxcontrib-websupport-1.1.0/tests/root/images.txt:9: WARNING: image file not readable: foo.png[39;49;00m /builddir/build/BUILD/sphinxcontrib-websupport-1.1.0/tests/root/includes.txt:4: WARNING: download file not readable: /builddir/build/BUILD/sphinxcontrib-websupport-1.1.0/tests/root/nonexisting.png[39;49;00m /builddir/build/BUILD/sphinxcontrib-websupport-1.1.0/tests/root/contents.txt:10: WARNING: extensions is already assigned section numbers (nested numbered toctree?)[39;49;00m ________________________________ test_comments _________________________________ support = <sphinxcontrib.websupport.core.WebSupport object at 0xf545bf4c> @pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy') @with_support() def test_comments(support): session = Session() nodes = session.query(Node).all() > first_node = nodes[0] E IndexError: list index out of range tests/test_websupport.py:82: IndexError __________________________ test_user_delete_comments ___________________________ support = <sphinxcontrib.websupport.core.WebSupport object at 0xf545b4ec> @pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy') @with_support() def test_user_delete_comments(support): def get_comment(): session = Session() node = session.query(Node).first() session.close() return support.get_data(node.id)['comments'][0] > comment = get_comment() tests/test_websupport.py:135: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def get_comment(): session = Session() node = session.query(Node).first() session.close() > return support.get_data(node.id)['comments'][0] E AttributeError: 'NoneType' object has no attribute 'id' tests/test_websupport.py:133: AttributeError _______________________________ test_moderation ________________________________ support = <sphinxcontrib.websupport.core.WebSupport object at 0xf4fb654c> @pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy') @with_support(moderation_callback=moderation_callback) def test_moderation(support): session = Session() nodes = session.query(Node).all() > node = nodes[7] E IndexError: list index out of range tests/test_websupport.py:160: IndexError ________________________ test_moderator_delete_comments ________________________ support = <sphinxcontrib.websupport.core.WebSupport object at 0xf783138c> @pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy') @with_support() def test_moderator_delete_comments(support): def get_comment(): session = Session() node = session.query(Node).first() session.close() return support.get_data(node.id, moderator=True)['comments'][1] > comment = get_comment() tests/test_websupport.py:190: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def get_comment(): session = Session() node = session.query(Node).first() session.close() > return support.get_data(node.id, moderator=True)['comments'][1] E AttributeError: 'NoneType' object has no attribute 'id' tests/test_websupport.py:188: AttributeError _____________________________ test_update_username _____________________________ support = <sphinxcontrib.websupport.core.WebSupport object at 0xf4fafbac> @pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy') @with_support() def test_update_username(support): support.update_username('user_two', 'new_user_two') session = Session() comments = session.query(Comment).\ filter(Comment.username == 'user_two').all() assert len(comments) == 0 votes = session.query(CommentVote).\ filter(CommentVote.username == 'user_two').all() assert len(votes) == 0 comments = session.query(Comment).\ filter(Comment.username == 'new_user_two').all() > assert len(comments) == 1 E assert 0 == 1 E + where 0 = len([]) tests/test_websupport.py:210: AssertionError ________________________________ test_proposals ________________________________ support = <sphinxcontrib.websupport.core.WebSupport object at 0xf514792c> @pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy') @with_support() def test_proposals(support): session = Session() node = session.query(Node).first() > data = support.get_data(node.id) E AttributeError: 'NoneType' object has no attribute 'id' tests/test_websupport.py:222: AttributeError _________________________________ test_voting __________________________________ support = <sphinxcontrib.websupport.core.WebSupport object at 0xf4e145cc> @pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy') @with_support() def test_voting(support): session = Session() nodes = session.query(Node).all() > node = nodes[0] E IndexError: list index out of range tests/test_websupport.py:237: IndexError ========== 8 failed, 4 passed, 1 skipped, 75 warnings in 6.24 seconds ========== Now, with Sphinx 2.0.0, the failure is different and reported to upstream: https://github.com/sphinx-doc/sphinx/issues/6190
Fixed upstream: https://github.com/sphinx-doc/sphinxcontrib-websupport/pull/28