[Pkg-privacy-maintainers] Bug#997499: onionshare: FTBFS: dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.9 returned exit code 13
Lucas Nussbaum
lucas at debian.org
Sat Oct 23 21:40:02 BST 2021
Source: onionshare
Version: 2.2-3
Severity: serious
Justification: FTBFS
Tags: bookworm sid ftbfs
User: lucas at debian.org
Usertags: ftbfs-20211023 ftbfs-bookworm
Hi,
During a rebuild of all packages in sid, your package failed to build
on amd64.
Relevant part (hopefully):
> make[1]: Entering directory '/<<PKGBUILDDIR>>'
> dh_auto_clean
> I: pybuild base:232: python3.9 setup.py clean
> /usr/lib/python3.9/distutils/dist.py:274: UserWarning: Unknown distribution option: 'include_package_data'
> warnings.warn(msg)
> running clean
> removing '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build' (and everything under it)
> 'build/bdist.linux-x86_64' does not exist -- can't clean it
> 'build/scripts-3.9' does not exist -- can't clean it
> rm -rf *.egg-info
> make[1]: Leaving directory '/<<PKGBUILDDIR>>'
> dh_autoreconf_clean -O--buildsystem=pybuild
> dh_clean -O--buildsystem=pybuild
> dpkg-source -b .
> dpkg-source: info: using source format '3.0 (quilt)'
> dpkg-source: info: building onionshare using existing ./onionshare_2.2.orig.tar.gz
> dpkg-source: info: using patch list from debian/patches/series
> dpkg-source: info: building onionshare in onionshare_2.2-3.debian.tar.xz
> dpkg-source: info: building onionshare in onionshare_2.2-3.dsc
> 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
> /usr/lib/python3.9/distutils/dist.py:274: UserWarning: Unknown distribution option: 'include_package_data'
> warnings.warn(msg)
> running config
> dh_auto_build -O--buildsystem=pybuild
> I: pybuild base:232: /usr/bin/python3 setup.py build
> /usr/lib/python3.9/distutils/dist.py:274: UserWarning: Unknown distribution option: 'include_package_data'
> warnings.warn(msg)
> running build
> running build_py
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare
> copying onionshare/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare
> copying onionshare/strings.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare
> copying onionshare/common.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare
> copying onionshare/onion.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare
> copying onionshare/settings.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare
> copying onionshare/onionshare.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare/web
> copying onionshare/web/receive_mode.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare/web
> copying onionshare/web/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare/web
> copying onionshare/web/send_base_mode.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare/web
> copying onionshare/web/website_mode.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare/web
> copying onionshare/web/share_mode.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare/web
> copying onionshare/web/web.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare/web
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui
> copying onionshare_gui/threads.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui
> copying onionshare_gui/widgets.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui
> copying onionshare_gui/update_checker.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui
> copying onionshare_gui/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui
> copying onionshare_gui/onionshare_gui.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui
> copying onionshare_gui/server_status.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui
> copying onionshare_gui/settings_dialog.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui
> copying onionshare_gui/tor_connection_dialog.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui/mode
> copying onionshare_gui/mode/file_selection.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui/mode
> copying onionshare_gui/mode/history.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui/mode
> copying onionshare_gui/mode/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui/mode
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui/mode/share_mode
> copying onionshare_gui/mode/share_mode/threads.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui/mode/share_mode
> copying onionshare_gui/mode/share_mode/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui/mode/share_mode
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui/mode/receive_mode
> copying onionshare_gui/mode/receive_mode/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui/mode/receive_mode
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui/mode/website_mode
> copying onionshare_gui/mode/website_mode/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui/mode/website_mode
> running build_scripts
> creating build
> creating build/scripts-3.9
> copying and adjusting install/scripts/onionshare -> build/scripts-3.9
> copying and adjusting install/scripts/onionshare-gui -> build/scripts-3.9
> changing mode of build/scripts-3.9/onionshare from 644 to 755
> changing mode of build/scripts-3.9/onionshare-gui from 644 to 755
> dh_auto_test -O--buildsystem=pybuild
> I: pybuild base:232: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build; python3.9 -m pytest 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 290 items
>
> tests/local_onionshare_401_public_mode_skips_ratelimit_test.py s [ 0%]
> tests/local_onionshare_401_triggers_ratelimit_test.py s [ 0%]
> tests/local_onionshare_quitting_during_share_prompts_warning_test.py s [ 1%]
> tests/local_onionshare_receive_mode_clear_all_button_test.py s [ 1%]
> tests/local_onionshare_receive_mode_timer_test.py s [ 1%]
> tests/local_onionshare_receive_mode_upload_non_writable_dir_test.py s [ 2%]
> tests/local_onionshare_receive_mode_upload_public_mode_non_writable_dir_test.py s [ 2%]
> [ 2%]
> tests/local_onionshare_receive_mode_upload_public_mode_test.py s [ 2%]
> tests/local_onionshare_receive_mode_upload_test.py s [ 3%]
> tests/local_onionshare_settings_dialog_legacy_tor_test.py s [ 3%]
> tests/local_onionshare_settings_dialog_no_tor_test.py s [ 3%]
> tests/local_onionshare_settings_dialog_v3_tor_test.py s [ 4%]
> tests/local_onionshare_share_mode_autostart_and_autostop_timer_mismatch_test.py s [ 4%]
> [ 4%]
> tests/local_onionshare_share_mode_autostart_timer_test.py s [ 4%]
> tests/local_onionshare_share_mode_autostart_timer_too_short_test.py s [ 5%]
> tests/local_onionshare_share_mode_cancel_share_test.py s [ 5%]
> tests/local_onionshare_share_mode_clear_all_button_test.py s [ 5%]
> tests/local_onionshare_share_mode_download_public_mode_test.py s [ 6%]
> tests/local_onionshare_share_mode_download_stay_open_test.py s [ 6%]
> tests/local_onionshare_share_mode_download_test.py s [ 6%]
> tests/local_onionshare_share_mode_individual_file_view_stay_open_test.py s [ 7%]
> [ 7%]
> tests/local_onionshare_share_mode_individual_file_view_test.py s [ 7%]
> tests/local_onionshare_share_mode_large_download_test.py s [ 7%]
> tests/local_onionshare_share_mode_password_persistent_test.py s [ 8%]
> tests/local_onionshare_share_mode_timer_test.py s [ 8%]
> tests/local_onionshare_share_mode_timer_too_short_test.py s [ 8%]
> tests/local_onionshare_share_mode_unreadable_file_test.py s [ 9%]
> tests/local_onionshare_website_mode_csp_enabled_test.py s [ 9%]
> tests/local_onionshare_website_mode_test.py s [ 10%]
> tests/onionshare_790_cancel_on_second_share_test.py s [ 10%]
> tests/onionshare_receive_mode_upload_public_mode_test.py s [ 10%]
> tests/onionshare_receive_mode_upload_test.py s [ 11%]
> tests/onionshare_share_mode_cancel_share_test.py s [ 11%]
> tests/onionshare_share_mode_download_public_mode_test.py s [ 11%]
> tests/onionshare_share_mode_download_stay_open_test.py s [ 12%]
> tests/onionshare_share_mode_download_test.py s [ 12%]
> tests/onionshare_share_mode_persistent_test.py s [ 12%]
> tests/onionshare_share_mode_stealth_test.py s [ 13%]
> tests/onionshare_share_mode_timer_test.py s [ 13%]
> tests/onionshare_share_mode_tor_connection_killed_test.py s [ 13%]
> tests/onionshare_share_mode_v2_onion_test.py s [ 14%]
> tests/test_onionshare.py ....... [ 16%]
> tests/test_onionshare_common.py ........................................ [ 30%]
> ....................................................................... [ 54%]
> tests/test_onionshare_settings.py ............ [ 58%]
> tests/test_onionshare_strings.py .... [ 60%]
> tests/test_onionshare_web.py FFFFFF..................................... [ 75%]
> ........................................................................ [100%]
>
> =================================== FAILURES ===================================
> ___________________________ TestWeb.test_share_mode ____________________________
>
> self = <tests.test_onionshare_web.TestWeb object at 0x7f8bb5108910>
> common_obj = <onionshare.common.Common object at 0x7f8bb5108c70>
>
> def test_share_mode(self, common_obj):
> > web = web_obj(common_obj, "share", 3)
>
> tests/test_onionshare_web.py:73:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> tests/test_onionshare_web.py:48: in web_obj
> web = Web(common_obj, False, mode)
> onionshare/web/web.py:77: in __init__
> self.generate_static_url_path()
> onionshare/web/web.py:166: in generate_static_url_path
> self.app.add_url_rule(
> /usr/lib/python3/dist-packages/flask/scaffold.py:56: in wrapper_func
> return f(self, *args, **kwargs)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
> self = <Flask 'onionshare.web.web'>
> rule = <Rule '/static_5pxhxfxveqsc6jbqkaeguaoi6q/<filename>' (GET, OPTIONS, HEAD) -> static>
> endpoint = 'static'
> view_func = <bound method Scaffold.send_static_file of <Flask 'onionshare.web.web'>>
> provide_automatic_options = True, options = {'endpoint': 'static'}
> methods = {'GET', 'OPTIONS'}, required_methods = {'OPTIONS'}
> old_func = <function Flask.__init__.<locals>.<lambda> at 0x7f8bb4fdb430>
>
> @setupmethod
> def add_url_rule(
> self,
> rule: str,
> endpoint: t.Optional[str] = None,
> view_func: t.Optional[t.Callable] = None,
> provide_automatic_options: t.Optional[bool] = None,
> **options: t.Any,
> ) -> None:
> if endpoint is None:
> endpoint = _endpoint_from_view_func(view_func) # type: ignore
> options["endpoint"] = endpoint
> methods = options.pop("methods", None)
>
> # if the methods are not given and the view_func object knows its
> # methods we can use that instead. If neither exists, we go with
> # a tuple of only ``GET`` as default.
> if methods is None:
> methods = getattr(view_func, "methods", None) or ("GET",)
> if isinstance(methods, str):
> raise TypeError(
> "Allowed methods must be a list of strings, for"
> ' example: @app.route(..., methods=["POST"])'
> )
> methods = {item.upper() for item in methods}
>
> # Methods that should always be added
> required_methods = set(getattr(view_func, "required_methods", ()))
>
> # starting with Flask 0.8 the view_func object can disable and
> # force-enable the automatic options handling.
> if provide_automatic_options is None:
> provide_automatic_options = getattr(
> view_func, "provide_automatic_options", None
> )
>
> if provide_automatic_options is None:
> if "OPTIONS" not in methods:
> provide_automatic_options = True
> required_methods.add("OPTIONS")
> else:
> provide_automatic_options = False
>
> # Add the required methods now.
> methods |= required_methods
>
> rule = self.url_rule_class(rule, methods=methods, **options)
> rule.provide_automatic_options = provide_automatic_options # type: ignore
>
> self.url_map.add(rule)
> if view_func is not None:
> old_func = self.view_functions.get(endpoint)
> if old_func is not None and old_func != view_func:
> > raise AssertionError(
> "View function mapping is overwriting an existing"
> f" endpoint function: {endpoint}"
> )
> E AssertionError: View function mapping is overwriting an existing endpoint function: static
>
> /usr/lib/python3/dist-packages/flask/app.py:1092: AssertionError
> ____________ TestWeb.test_share_mode_close_after_first_download_on _____________
>
> self = <tests.test_onionshare_web.TestWeb object at 0x7f8bb4f13d00>
> common_obj = <onionshare.common.Common object at 0x7f8bb4f13f10>
> temp_file_1024 = '/tmp/tmpqtr3117l'
>
> def test_share_mode_close_after_first_download_on(self, common_obj, temp_file_1024):
> > web = web_obj(common_obj, "share", 3)
>
> tests/test_onionshare_web.py:98:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> tests/test_onionshare_web.py:48: in web_obj
> web = Web(common_obj, False, mode)
> onionshare/web/web.py:77: in __init__
> self.generate_static_url_path()
> onionshare/web/web.py:166: in generate_static_url_path
> self.app.add_url_rule(
> /usr/lib/python3/dist-packages/flask/scaffold.py:56: in wrapper_func
> return f(self, *args, **kwargs)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
> self = <Flask 'onionshare.web.web'>
> rule = <Rule '/static_azcqtqve565h7cv7rwm5smid6q/<filename>' (GET, OPTIONS, HEAD) -> static>
> endpoint = 'static'
> view_func = <bound method Scaffold.send_static_file of <Flask 'onionshare.web.web'>>
> provide_automatic_options = True, options = {'endpoint': 'static'}
> methods = {'GET', 'OPTIONS'}, required_methods = {'OPTIONS'}
> old_func = <function Flask.__init__.<locals>.<lambda> at 0x7f8bb4f9df70>
>
> @setupmethod
> def add_url_rule(
> self,
> rule: str,
> endpoint: t.Optional[str] = None,
> view_func: t.Optional[t.Callable] = None,
> provide_automatic_options: t.Optional[bool] = None,
> **options: t.Any,
> ) -> None:
> if endpoint is None:
> endpoint = _endpoint_from_view_func(view_func) # type: ignore
> options["endpoint"] = endpoint
> methods = options.pop("methods", None)
>
> # if the methods are not given and the view_func object knows its
> # methods we can use that instead. If neither exists, we go with
> # a tuple of only ``GET`` as default.
> if methods is None:
> methods = getattr(view_func, "methods", None) or ("GET",)
> if isinstance(methods, str):
> raise TypeError(
> "Allowed methods must be a list of strings, for"
> ' example: @app.route(..., methods=["POST"])'
> )
> methods = {item.upper() for item in methods}
>
> # Methods that should always be added
> required_methods = set(getattr(view_func, "required_methods", ()))
>
> # starting with Flask 0.8 the view_func object can disable and
> # force-enable the automatic options handling.
> if provide_automatic_options is None:
> provide_automatic_options = getattr(
> view_func, "provide_automatic_options", None
> )
>
> if provide_automatic_options is None:
> if "OPTIONS" not in methods:
> provide_automatic_options = True
> required_methods.add("OPTIONS")
> else:
> provide_automatic_options = False
>
> # Add the required methods now.
> methods |= required_methods
>
> rule = self.url_rule_class(rule, methods=methods, **options)
> rule.provide_automatic_options = provide_automatic_options # type: ignore
>
> self.url_map.add(rule)
> if view_func is not None:
> old_func = self.view_functions.get(endpoint)
> if old_func is not None and old_func != view_func:
> > raise AssertionError(
> "View function mapping is overwriting an existing"
> f" endpoint function: {endpoint}"
> )
> E AssertionError: View function mapping is overwriting an existing endpoint function: static
>
> /usr/lib/python3/dist-packages/flask/app.py:1092: AssertionError
> ____________ TestWeb.test_share_mode_close_after_first_download_off ____________
>
> self = <tests.test_onionshare_web.TestWeb object at 0x7f8bb4f7a550>
> common_obj = <onionshare.common.Common object at 0x7f8bb4f7a6d0>
> temp_file_1024 = '/tmp/tmpmcvgg74y'
>
> def test_share_mode_close_after_first_download_off(
> self, common_obj, temp_file_1024
> ):
> > web = web_obj(common_obj, "share", 3)
>
> tests/test_onionshare_web.py:115:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> tests/test_onionshare_web.py:48: in web_obj
> web = Web(common_obj, False, mode)
> onionshare/web/web.py:77: in __init__
> self.generate_static_url_path()
> onionshare/web/web.py:166: in generate_static_url_path
> self.app.add_url_rule(
> /usr/lib/python3/dist-packages/flask/scaffold.py:56: in wrapper_func
> return f(self, *args, **kwargs)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
> self = <Flask 'onionshare.web.web'>
> rule = <Rule '/static_4st7qaktxwgsvmuc5i5hqzxkbi/<filename>' (GET, OPTIONS, HEAD) -> static>
> endpoint = 'static'
> view_func = <bound method Scaffold.send_static_file of <Flask 'onionshare.web.web'>>
> provide_automatic_options = True, options = {'endpoint': 'static'}
> methods = {'GET', 'OPTIONS'}, required_methods = {'OPTIONS'}
> old_func = <function Flask.__init__.<locals>.<lambda> at 0x7f8bb50a8790>
>
> @setupmethod
> def add_url_rule(
> self,
> rule: str,
> endpoint: t.Optional[str] = None,
> view_func: t.Optional[t.Callable] = None,
> provide_automatic_options: t.Optional[bool] = None,
> **options: t.Any,
> ) -> None:
> if endpoint is None:
> endpoint = _endpoint_from_view_func(view_func) # type: ignore
> options["endpoint"] = endpoint
> methods = options.pop("methods", None)
>
> # if the methods are not given and the view_func object knows its
> # methods we can use that instead. If neither exists, we go with
> # a tuple of only ``GET`` as default.
> if methods is None:
> methods = getattr(view_func, "methods", None) or ("GET",)
> if isinstance(methods, str):
> raise TypeError(
> "Allowed methods must be a list of strings, for"
> ' example: @app.route(..., methods=["POST"])'
> )
> methods = {item.upper() for item in methods}
>
> # Methods that should always be added
> required_methods = set(getattr(view_func, "required_methods", ()))
>
> # starting with Flask 0.8 the view_func object can disable and
> # force-enable the automatic options handling.
> if provide_automatic_options is None:
> provide_automatic_options = getattr(
> view_func, "provide_automatic_options", None
> )
>
> if provide_automatic_options is None:
> if "OPTIONS" not in methods:
> provide_automatic_options = True
> required_methods.add("OPTIONS")
> else:
> provide_automatic_options = False
>
> # Add the required methods now.
> methods |= required_methods
>
> rule = self.url_rule_class(rule, methods=methods, **options)
> rule.provide_automatic_options = provide_automatic_options # type: ignore
>
> self.url_map.add(rule)
> if view_func is not None:
> old_func = self.view_functions.get(endpoint)
> if old_func is not None and old_func != view_func:
> > raise AssertionError(
> "View function mapping is overwriting an existing"
> f" endpoint function: {endpoint}"
> )
> E AssertionError: View function mapping is overwriting an existing endpoint function: static
>
> /usr/lib/python3/dist-packages/flask/app.py:1092: AssertionError
> __________________________ TestWeb.test_receive_mode ___________________________
>
> self = <tests.test_onionshare_web.TestWeb object at 0x7f8bb4f76580>
> common_obj = <onionshare.common.Common object at 0x7f8bb4f76460>
>
> def test_receive_mode(self, common_obj):
> > web = web_obj(common_obj, "receive")
>
> tests/test_onionshare_web.py:129:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> tests/test_onionshare_web.py:48: in web_obj
> web = Web(common_obj, False, mode)
> onionshare/web/web.py:77: in __init__
> self.generate_static_url_path()
> onionshare/web/web.py:166: in generate_static_url_path
> self.app.add_url_rule(
> /usr/lib/python3/dist-packages/flask/scaffold.py:56: in wrapper_func
> return f(self, *args, **kwargs)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
> self = <Flask 'onionshare.web.web'>
> rule = <Rule '/static_7fxs6sxieg44my6jogsjngzjoi/<filename>' (GET, OPTIONS, HEAD) -> static>
> endpoint = 'static'
> view_func = <bound method Scaffold.send_static_file of <Flask 'onionshare.web.web'>>
> provide_automatic_options = True, options = {'endpoint': 'static'}
> methods = {'GET', 'OPTIONS'}, required_methods = {'OPTIONS'}
> old_func = <function Flask.__init__.<locals>.<lambda> at 0x7f8bb4fdb790>
>
> @setupmethod
> def add_url_rule(
> self,
> rule: str,
> endpoint: t.Optional[str] = None,
> view_func: t.Optional[t.Callable] = None,
> provide_automatic_options: t.Optional[bool] = None,
> **options: t.Any,
> ) -> None:
> if endpoint is None:
> endpoint = _endpoint_from_view_func(view_func) # type: ignore
> options["endpoint"] = endpoint
> methods = options.pop("methods", None)
>
> # if the methods are not given and the view_func object knows its
> # methods we can use that instead. If neither exists, we go with
> # a tuple of only ``GET`` as default.
> if methods is None:
> methods = getattr(view_func, "methods", None) or ("GET",)
> if isinstance(methods, str):
> raise TypeError(
> "Allowed methods must be a list of strings, for"
> ' example: @app.route(..., methods=["POST"])'
> )
> methods = {item.upper() for item in methods}
>
> # Methods that should always be added
> required_methods = set(getattr(view_func, "required_methods", ()))
>
> # starting with Flask 0.8 the view_func object can disable and
> # force-enable the automatic options handling.
> if provide_automatic_options is None:
> provide_automatic_options = getattr(
> view_func, "provide_automatic_options", None
> )
>
> if provide_automatic_options is None:
> if "OPTIONS" not in methods:
> provide_automatic_options = True
> required_methods.add("OPTIONS")
> else:
> provide_automatic_options = False
>
> # Add the required methods now.
> methods |= required_methods
>
> rule = self.url_rule_class(rule, methods=methods, **options)
> rule.provide_automatic_options = provide_automatic_options # type: ignore
>
> self.url_map.add(rule)
> if view_func is not None:
> old_func = self.view_functions.get(endpoint)
> if old_func is not None and old_func != view_func:
> > raise AssertionError(
> "View function mapping is overwriting an existing"
> f" endpoint function: {endpoint}"
> )
> E AssertionError: View function mapping is overwriting an existing endpoint function: static
>
> /usr/lib/python3/dist-packages/flask/app.py:1092: AssertionError
> _________________________ TestWeb.test_public_mode_on __________________________
>
> self = <tests.test_onionshare_web.TestWeb object at 0x7f8bb4d9c5e0>
> common_obj = <onionshare.common.Common object at 0x7f8bb4d9cf10>
>
> def test_public_mode_on(self, common_obj):
> > web = web_obj(common_obj, "receive")
>
> tests/test_onionshare_web.py:149:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> tests/test_onionshare_web.py:48: in web_obj
> web = Web(common_obj, False, mode)
> onionshare/web/web.py:77: in __init__
> self.generate_static_url_path()
> onionshare/web/web.py:166: in generate_static_url_path
> self.app.add_url_rule(
> /usr/lib/python3/dist-packages/flask/scaffold.py:56: in wrapper_func
> return f(self, *args, **kwargs)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
> self = <Flask 'onionshare.web.web'>
> rule = <Rule '/static_esozljwz3ijwsxm2kdprh5ty7q/<filename>' (GET, OPTIONS, HEAD) -> static>
> endpoint = 'static'
> view_func = <bound method Scaffold.send_static_file of <Flask 'onionshare.web.web'>>
> provide_automatic_options = True, options = {'endpoint': 'static'}
> methods = {'GET', 'OPTIONS'}, required_methods = {'OPTIONS'}
> old_func = <function Flask.__init__.<locals>.<lambda> at 0x7f8bb4fdba60>
>
> @setupmethod
> def add_url_rule(
> self,
> rule: str,
> endpoint: t.Optional[str] = None,
> view_func: t.Optional[t.Callable] = None,
> provide_automatic_options: t.Optional[bool] = None,
> **options: t.Any,
> ) -> None:
> if endpoint is None:
> endpoint = _endpoint_from_view_func(view_func) # type: ignore
> options["endpoint"] = endpoint
> methods = options.pop("methods", None)
>
> # if the methods are not given and the view_func object knows its
> # methods we can use that instead. If neither exists, we go with
> # a tuple of only ``GET`` as default.
> if methods is None:
> methods = getattr(view_func, "methods", None) or ("GET",)
> if isinstance(methods, str):
> raise TypeError(
> "Allowed methods must be a list of strings, for"
> ' example: @app.route(..., methods=["POST"])'
> )
> methods = {item.upper() for item in methods}
>
> # Methods that should always be added
> required_methods = set(getattr(view_func, "required_methods", ()))
>
> # starting with Flask 0.8 the view_func object can disable and
> # force-enable the automatic options handling.
> if provide_automatic_options is None:
> provide_automatic_options = getattr(
> view_func, "provide_automatic_options", None
> )
>
> if provide_automatic_options is None:
> if "OPTIONS" not in methods:
> provide_automatic_options = True
> required_methods.add("OPTIONS")
> else:
> provide_automatic_options = False
>
> # Add the required methods now.
> methods |= required_methods
>
> rule = self.url_rule_class(rule, methods=methods, **options)
> rule.provide_automatic_options = provide_automatic_options # type: ignore
>
> self.url_map.add(rule)
> if view_func is not None:
> old_func = self.view_functions.get(endpoint)
> if old_func is not None and old_func != view_func:
> > raise AssertionError(
> "View function mapping is overwriting an existing"
> f" endpoint function: {endpoint}"
> )
> E AssertionError: View function mapping is overwriting an existing endpoint function: static
>
> /usr/lib/python3/dist-packages/flask/app.py:1092: AssertionError
> _________________________ TestWeb.test_public_mode_off _________________________
>
> self = <tests.test_onionshare_web.TestWeb object at 0x7f8bb4f7a070>
> common_obj = <onionshare.common.Common object at 0x7f8bb4f76700>
>
> def test_public_mode_off(self, common_obj):
> > web = web_obj(common_obj, "receive")
>
> tests/test_onionshare_web.py:159:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> tests/test_onionshare_web.py:48: in web_obj
> web = Web(common_obj, False, mode)
> onionshare/web/web.py:77: in __init__
> self.generate_static_url_path()
> onionshare/web/web.py:166: in generate_static_url_path
> self.app.add_url_rule(
> /usr/lib/python3/dist-packages/flask/scaffold.py:56: in wrapper_func
> return f(self, *args, **kwargs)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
> self = <Flask 'onionshare.web.web'>
> rule = <Rule '/static_xw6au6nmq6k5du364thvcy66tu/<filename>' (GET, OPTIONS, HEAD) -> static>
> endpoint = 'static'
> view_func = <bound method Scaffold.send_static_file of <Flask 'onionshare.web.web'>>
> provide_automatic_options = True, options = {'endpoint': 'static'}
> methods = {'GET', 'OPTIONS'}, required_methods = {'OPTIONS'}
> old_func = <function Flask.__init__.<locals>.<lambda> at 0x7f8bb50945e0>
>
> @setupmethod
> def add_url_rule(
> self,
> rule: str,
> endpoint: t.Optional[str] = None,
> view_func: t.Optional[t.Callable] = None,
> provide_automatic_options: t.Optional[bool] = None,
> **options: t.Any,
> ) -> None:
> if endpoint is None:
> endpoint = _endpoint_from_view_func(view_func) # type: ignore
> options["endpoint"] = endpoint
> methods = options.pop("methods", None)
>
> # if the methods are not given and the view_func object knows its
> # methods we can use that instead. If neither exists, we go with
> # a tuple of only ``GET`` as default.
> if methods is None:
> methods = getattr(view_func, "methods", None) or ("GET",)
> if isinstance(methods, str):
> raise TypeError(
> "Allowed methods must be a list of strings, for"
> ' example: @app.route(..., methods=["POST"])'
> )
> methods = {item.upper() for item in methods}
>
> # Methods that should always be added
> required_methods = set(getattr(view_func, "required_methods", ()))
>
> # starting with Flask 0.8 the view_func object can disable and
> # force-enable the automatic options handling.
> if provide_automatic_options is None:
> provide_automatic_options = getattr(
> view_func, "provide_automatic_options", None
> )
>
> if provide_automatic_options is None:
> if "OPTIONS" not in methods:
> provide_automatic_options = True
> required_methods.add("OPTIONS")
> else:
> provide_automatic_options = False
>
> # Add the required methods now.
> methods |= required_methods
>
> rule = self.url_rule_class(rule, methods=methods, **options)
> rule.provide_automatic_options = provide_automatic_options # type: ignore
>
> self.url_map.add(rule)
> if view_func is not None:
> old_func = self.view_functions.get(endpoint)
> if old_func is not None and old_func != view_func:
> > raise AssertionError(
> "View function mapping is overwriting an existing"
> f" endpoint function: {endpoint}"
> )
> E AssertionError: View function mapping is overwriting an existing endpoint function: static
>
> /usr/lib/python3/dist-packages/flask/app.py:1092: AssertionError
> =============================== warnings summary ===============================
> onionshare/settings.py:179
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare/settings.py:179: DeprecationWarning: invalid escape sequence \O
> return os.path.expanduser("~\OnionShare")
>
> tests/conftest.py:55
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/conftest.py:55: PytestDeprecationWarning: @pytest.yield_fixture is deprecated.
> Use @pytest.fixture instead; they are the same.
> def temp_dir_1024_delete():
>
> tests/conftest.py:79
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/conftest.py:79: PytestDeprecationWarning: @pytest.yield_fixture is deprecated.
> Use @pytest.fixture instead; they are the same.
> def temp_file_1024_delete():
>
> tests/conftest.py:92
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/conftest.py:92: PytestDeprecationWarning: @pytest.yield_fixture is deprecated.
> Use @pytest.fixture instead; they are the same.
> @pytest.yield_fixture(scope="session")
>
> tests/conftest.py:105
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/conftest.py:105: PytestDeprecationWarning: @pytest.yield_fixture is deprecated.
> Use @pytest.fixture instead; they are the same.
> @pytest.yield_fixture(scope="session")
>
> onionshare_gui/settings_dialog.py:1423
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui/settings_dialog.py:1423: DeprecationWarning: invalid escape sequence \s
> "(obfs4\s+)?(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]):([0-9]+)(\s+)([A-Z0-9]+)(.+)$"
>
> onionshare_gui/settings_dialog.py:1426
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui/settings_dialog.py:1426: DeprecationWarning: invalid escape sequence \s
> "(obfs4\s+)?\[(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\]:[0-9]+\s+[A-Z0-9]+(.+)$"
>
> onionshare_gui/settings_dialog.py:1429
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/onionshare_gui/settings_dialog.py:1429: DeprecationWarning: invalid escape sequence \s
> "(meek_lite)(\s)+([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+)(\s)+([0-9A-Z]+)(\s)+url=(.+)(\s)+front=(.+)"
>
> tests/local_onionshare_401_public_mode_skips_ratelimit_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_401_public_mode_skips_ratelimit_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_401_triggers_ratelimit_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_401_triggers_ratelimit_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_quitting_during_share_prompts_warning_test.py:19
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_quitting_during_share_prompts_warning_test.py:19: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_receive_mode_clear_all_button_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_receive_mode_clear_all_button_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_receive_mode_timer_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_receive_mode_timer_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_receive_mode_upload_non_writable_dir_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_receive_mode_upload_non_writable_dir_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_receive_mode_upload_public_mode_non_writable_dir_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_receive_mode_upload_public_mode_non_writable_dir_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_receive_mode_upload_public_mode_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_receive_mode_upload_public_mode_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_receive_mode_upload_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_receive_mode_upload_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_settings_dialog_legacy_tor_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_settings_dialog_legacy_tor_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_settings_dialog_no_tor_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_settings_dialog_no_tor_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_settings_dialog_v3_tor_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_settings_dialog_v3_tor_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_share_mode_autostart_and_autostop_timer_mismatch_test.py:22
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_share_mode_autostart_and_autostop_timer_mismatch_test.py:22: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_share_mode_autostart_timer_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_share_mode_autostart_timer_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_share_mode_autostart_timer_too_short_test.py:19
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_share_mode_autostart_timer_too_short_test.py:19: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_share_mode_cancel_share_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_share_mode_cancel_share_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_share_mode_clear_all_button_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_share_mode_clear_all_button_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_share_mode_download_public_mode_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_share_mode_download_public_mode_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_share_mode_download_stay_open_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_share_mode_download_stay_open_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_share_mode_download_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_share_mode_download_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_share_mode_individual_file_view_stay_open_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_share_mode_individual_file_view_stay_open_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_share_mode_individual_file_view_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_share_mode_individual_file_view_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_share_mode_large_download_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_share_mode_large_download_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_share_mode_password_persistent_test.py:23
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_share_mode_password_persistent_test.py:23: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_share_mode_timer_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_share_mode_timer_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_share_mode_timer_too_short_test.py:19
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_share_mode_timer_too_short_test.py:19: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_share_mode_unreadable_file_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_share_mode_unreadable_file_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_website_mode_csp_enabled_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_website_mode_csp_enabled_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/local_onionshare_website_mode_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/local_onionshare_website_mode_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/onionshare_790_cancel_on_second_share_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_790_cancel_on_second_share_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/onionshare_790_cancel_on_second_share_test.py:19
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_790_cancel_on_second_share_test.py:19: PytestUnknownMarkWarning: Unknown pytest.mark.tor - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.tor
>
> tests/onionshare_receive_mode_upload_public_mode_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_receive_mode_upload_public_mode_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/onionshare_receive_mode_upload_public_mode_test.py:19
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_receive_mode_upload_public_mode_test.py:19: PytestUnknownMarkWarning: Unknown pytest.mark.tor - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.tor
>
> tests/onionshare_receive_mode_upload_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_receive_mode_upload_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/onionshare_receive_mode_upload_test.py:19
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_receive_mode_upload_test.py:19: PytestUnknownMarkWarning: Unknown pytest.mark.tor - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.tor
>
> tests/onionshare_share_mode_cancel_share_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_share_mode_cancel_share_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/onionshare_share_mode_cancel_share_test.py:19
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_share_mode_cancel_share_test.py:19: PytestUnknownMarkWarning: Unknown pytest.mark.tor - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.tor
>
> tests/onionshare_share_mode_download_public_mode_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_share_mode_download_public_mode_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/onionshare_share_mode_download_public_mode_test.py:19
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_share_mode_download_public_mode_test.py:19: PytestUnknownMarkWarning: Unknown pytest.mark.tor - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.tor
>
> tests/onionshare_share_mode_download_stay_open_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_share_mode_download_stay_open_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/onionshare_share_mode_download_stay_open_test.py:19
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_share_mode_download_stay_open_test.py:19: PytestUnknownMarkWarning: Unknown pytest.mark.tor - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.tor
>
> tests/onionshare_share_mode_download_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_share_mode_download_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/onionshare_share_mode_download_test.py:19
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_share_mode_download_test.py:19: PytestUnknownMarkWarning: Unknown pytest.mark.tor - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.tor
>
> tests/onionshare_share_mode_persistent_test.py:24
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_share_mode_persistent_test.py:24: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/onionshare_share_mode_persistent_test.py:25
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_share_mode_persistent_test.py:25: PytestUnknownMarkWarning: Unknown pytest.mark.tor - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.tor
>
> tests/onionshare_share_mode_stealth_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_share_mode_stealth_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/onionshare_share_mode_stealth_test.py:19
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_share_mode_stealth_test.py:19: PytestUnknownMarkWarning: Unknown pytest.mark.tor - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.tor
>
> tests/onionshare_share_mode_timer_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_share_mode_timer_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/onionshare_share_mode_timer_test.py:19
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_share_mode_timer_test.py:19: PytestUnknownMarkWarning: Unknown pytest.mark.tor - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.tor
>
> tests/onionshare_share_mode_tor_connection_killed_test.py:14
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_share_mode_tor_connection_killed_test.py:14: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/onionshare_share_mode_tor_connection_killed_test.py:15
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_share_mode_tor_connection_killed_test.py:15: PytestUnknownMarkWarning: Unknown pytest.mark.tor - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.tor
>
> tests/onionshare_share_mode_v2_onion_test.py:18
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_share_mode_v2_onion_test.py:18: PytestUnknownMarkWarning: Unknown pytest.mark.gui - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.gui
>
> tests/onionshare_share_mode_v2_onion_test.py:19
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/tests/onionshare_share_mode_v2_onion_test.py:19: PytestUnknownMarkWarning: Unknown pytest.mark.tor - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
> @pytest.mark.tor
>
> -- Docs: https://docs.pytest.org/en/stable/warnings.html
> =========================== short test summary info ============================
> FAILED tests/test_onionshare_web.py::TestWeb::test_share_mode - AssertionErro...
> FAILED tests/test_onionshare_web.py::TestWeb::test_share_mode_close_after_first_download_on
> FAILED tests/test_onionshare_web.py::TestWeb::test_share_mode_close_after_first_download_off
> FAILED tests/test_onionshare_web.py::TestWeb::test_receive_mode - AssertionEr...
> FAILED tests/test_onionshare_web.py::TestWeb::test_public_mode_on - Assertion...
> FAILED tests/test_onionshare_web.py::TestWeb::test_public_mode_off - Assertio...
> ============ 6 failed, 243 passed, 41 skipped, 61 warnings in 0.85s ============
> E: pybuild pybuild:354: test: plugin distutils failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build; python3.9 -m pytest tests
> dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.9 returned exit code 13
The full build log is available from:
http://qa-logs.debian.net/2021/10/23/onionshare_2.2-3_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.
More information about the Pkg-privacy-maintainers
mailing list