Your message dated Thu, 27 Nov 2025 01:34:00 +0000
with message-id <[email protected]>
and subject line Bug#1120223: fixed in python-proton-core 0.7.0-1
has caused the Debian Bug report #1120223,
regarding python-proton-core: FTBFS: dh_auto_test: error: pybuild --test
--test-pytest -i python{version} -p 3.13 returned exit code 13
to be marked as done.
This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.
(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)
--
1120223: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1120223
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: src:python-proton-core
Version: 0.4.0-3
Severity: serious
Tags: ftbfs forky sid
Dear maintainer:
During a rebuild of all packages in unstable, this package failed to build.
Below you will find the last part of the build log (probably the most
relevant part, but not necessarily). If required, the full build log
is available here:
https://people.debian.org/~sanvila/build-logs/202511/
About the archive rebuild: The build was made on virtual machines from AWS,
using sbuild and a reduced chroot with only build-essential packages.
If you cannot 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 add an affects on src:python-proton-core, so that this is still
visible in the BTS web page for this package.
Thanks.
--------------------------------------------------------------------------------
[...]
debian/rules clean
dh clean --with sphinxdoc --buildsystem=pybuild
dh_auto_clean -O--buildsystem=pybuild
I: pybuild base:311: python3.13 setup.py clean
/usr/lib/python3/dist-packages/setuptools/dist.py:759:
SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!
********************************************************************************
Please consider removing the following classifiers in favor of a SPDX
license expression:
License :: OSI Approved :: GNU General Public License v3 (GPLv3)
See
https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license
for details.
********************************************************************************
!!
self._finalize_license_expression()
running clean
removing '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build' (and
everything under it)
'build/bdist.linux-x86_64' does not exist -- can't clean it
'build/scripts-3.13' does not exist -- can't clean it
dh_autoreconf_clean -O--buildsystem=pybuild
dh_clean -O--buildsystem=pybuild
debian/rules binary
dh binary --with sphinxdoc --buildsystem=pybuild
dh_update_autotools_config -O--buildsystem=pybuild
dh_autoreconf -O--buildsystem=pybuild
dh_auto_configure -O--buildsystem=pybuild
I: pybuild base:311: python3.13 setup.py config
/usr/lib/python3/dist-packages/setuptools/dist.py:759:
SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!
********************************************************************************
Please consider removing the following classifiers in favor of a SPDX
license expression:
License :: OSI Approved :: GNU General Public License v3 (GPLv3)
See
https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license
for details.
********************************************************************************
!!
self._finalize_license_expression()
running config
dh_auto_build -O--buildsystem=pybuild
I: pybuild base:311: /usr/bin/python3 setup.py build
/usr/lib/python3/dist-packages/setuptools/dist.py:759:
SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!
********************************************************************************
Please consider removing the following classifiers in favor of a SPDX
license expression:
License :: OSI Approved :: GNU General Public License v3 (GPLv3)
See
https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license
for details.
********************************************************************************
!!
self._finalize_license_expression()
running build
running build_py
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/views
copying proton/views/__init__.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/views
copying proton/views/_base.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/views
copying proton/views/basiccli.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/views
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/utils
copying proton/utils/__init__.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/utils
copying proton/utils/metaclasses.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/utils
copying proton/utils/environment.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/utils
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/sso
copying proton/sso/__init__.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/sso
copying proton/sso/sso.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/sso
copying proton/sso/__main__.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/sso
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/loader
copying proton/loader/__init__.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/loader
copying proton/loader/__main__.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/loader
copying proton/loader/loader.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/loader
creating
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session
copying proton/session/__init__.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session
copying proton/session/api.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session
copying proton/session/formdata.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session
copying proton/session/exceptions.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session
copying proton/session/environments.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session
creating
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/keyring
copying proton/keyring/__init__.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/keyring
copying proton/keyring/textfile.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/keyring
copying proton/keyring/_base.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/keyring
copying proton/keyring/exceptions.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/keyring
creating
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/transports
copying proton/session/transports/__init__.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/transports
copying proton/session/transports/base.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/transports
copying proton/session/transports/auto.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/transports
copying proton/session/transports/alternativerouting.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/transports
copying proton/session/transports/aiohttp.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/transports
copying proton/session/transports/requests.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/transports
creating
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/srp
copying proton/session/srp/__init__.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/srp
copying proton/session/srp/_ctsrp.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/srp
copying proton/session/srp/util.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/srp
copying proton/session/srp/pmhash.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/srp
copying proton/session/srp/_pysrp.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/srp
creating
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/transports/utils
copying proton/session/transports/utils/dns.py ->
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/transports/utils
running egg_info
creating proton_core.egg-info
writing proton_core.egg-info/PKG-INFO
writing dependency_links to proton_core.egg-info/dependency_links.txt
writing entry points to proton_core.egg-info/entry_points.txt
writing requirements to proton_core.egg-info/requires.txt
writing top-level names to proton_core.egg-info/top_level.txt
writing manifest file 'proton_core.egg-info/SOURCES.txt'
reading manifest file 'proton_core.egg-info/SOURCES.txt'
adding license file 'LICENSE'
writing manifest file 'proton_core.egg-info/SOURCES.txt'
dh_auto_test -O--buildsystem=pybuild
I: pybuild base:311: cd
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build; python3.13 -m pytest
-v -k 'not test_bad_pinning_fingerprint_changed and not
test_alternative_routing_works_on_prod and not test_bad_pinning_url_changed and
not test_without_pinning and not test_auto_works_on_prod and not test_ping and
not test_successful'
============================= test session starts ==============================
platform linux -- Python 3.13.9, pytest-8.4.2, pluggy-1.6.0 --
/usr/bin/python3.13
cachedir: .pytest_cache
rootdir: /<<PKGBUILDDIR>>
configfile: setup.cfg
plugins: typeguard-4.4.4, cov-5.0.0
collecting ... collected 125 items / 8 deselected / 117 selected
tests/test_aiohttp_transport.py::TestAiohttpTransport::test_async_api_request_posts_form_data_with_data_param
PASSED [ 0%]
tests/test_aiohttp_transport.py::TestFormDataTransformer::test_to_aiohttp_form_data
PASSED [ 1%]
tests/test_aiohttp_transport.py::TestAiohttpTransportRawResult::test_async_api_request_get_raw
PASSED [ 2%]
tests/test_aiohttp_transport.py::TestAiohttpTransportRawResult::test_async_api_request_last_modified
PASSED [ 3%]
tests/test_api.py::TestCTSRPClass::test_compute_v SKIPPED (Couldn't ...) [ 4%]
tests/test_api.py::TestCTSRPClass::test_generate_v SKIPPED (Couldn't...) [ 5%]
tests/test_api.py::TestCTSRPClass::test_invalid_version SKIPPED (Cou...) [ 5%]
tests/test_api.py::TestCTSRPClass::test_srp SKIPPED (Couldn't load C...) [ 6%]
tests/test_api.py::TestPYSRPClass::test_compute_v FAILED [ 7%]
tests/test_api.py::TestPYSRPClass::test_generate_v FAILED [ 8%]
tests/test_api.py::TestPYSRPClass::test_invalid_version PASSED [ 9%]
tests/test_api.py::TestPYSRPClass::test_srp FAILED [ 10%]
tests/test_api.py::TestModulus::test_modulus_verification PASSED [ 11%]
tests/test_autotransport.py::TestAuto::test_auto_transport_is_not_available_when_all_transport_choices_receive_an_unexpected_ping_response
PASSED [ 11%]
tests/test_autotransport.py::TestAuto::test_auto_transport_is_not_available_when_all_transports_choices_time_out_pinging_rest_api
PASSED [ 12%]
tests/test_basekeyring.py::test_get_item_from_keyring PASSED [ 13%]
tests/test_basekeyring.py::test_set_item PASSED [ 14%]
tests/test_basekeyring.py::test_del_item PASSED [ 15%]
tests/test_basekeyring.py::test_raise_exception_not_implemented_methods PASSED
[ 16%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_type[1]
PASSED [ 17%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_type[key1]
PASSED [ 17%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_type[key2]
PASSED [ 18%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_type[None]
PASSED [ 19%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_type[key4]
PASSED [ 20%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_value[!]
PASSED [ 21%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_value[A]
PASSED [ 22%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_value[\xe7]
PASSED [ 23%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_value[+]
PASSED [ 23%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_value[*]
PASSED [ 24%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_value[\xe3]
PASSED [ 25%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_value[\\]
PASSED [ 26%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_value[?]
PASSED [ 27%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_value[=]
PASSED [ 28%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_type[1]
PASSED [ 29%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_type[key1]
PASSED [ 29%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_type[key2]
PASSED [ 30%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_type[None]
PASSED [ 31%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_type[key4]
PASSED [ 32%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_value[!]
PASSED [ 33%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_value[A]
PASSED [ 34%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_value[\xe7]
PASSED [ 35%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_value[+]
PASSED [ 35%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_value[*]
PASSED [ 36%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_value[\xe3]
PASSED [ 37%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_value[\\]
PASSED [ 38%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_value[?]
PASSED [ 39%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_value[=]
PASSED [ 40%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_type[1]
PASSED [ 41%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_type[key1]
PASSED [ 41%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_type[key2]
PASSED [ 42%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_type[None]
PASSED [ 43%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_type[key4]
PASSED [ 44%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_value[!]
PASSED [ 45%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_value[A]
PASSED [ 46%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_value[\xe7]
PASSED [ 47%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_value[+]
PASSED [ 47%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_value[*]
PASSED [ 48%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_value[\xe3]
PASSED [ 49%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_value[\\]
PASSED [ 50%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_value[?]
PASSED [ 51%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_value[=]
PASSED [ 52%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_value_type[1]
PASSED [ 52%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_value_type[test]
PASSED [ 53%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_value_type[None]
PASSED [ 54%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_value_type[value3]
PASSED [ 55%]
tests/test_basekeyring.py::test_get_from_factory_raises_exception_due_to_non_existent_backend
PASSED [ 56%]
tests/test_dns_requests.py::TestDNSParser::test_ar_legacy_domain PASSED [ 57%]
tests/test_dns_requests.py::TestDNSParser::test_ar_current_domain1 PASSED [ 58%]
tests/test_dns_requests.py::TestDNSParser::test_ar_current_domain2 PASSED [ 58%]
tests/test_dns_requests.py::TestDNSParser::test_normal_query_legacy_domain
PASSED [ 59%]
tests/test_dns_requests.py::TestDNSParser::test_normal_query_current_domain
PASSED [ 60%]
tests/test_dns_requests.py::TestDNSParser::test_generic_parsing PASSED [ 61%]
tests/test_dns_requests.py::TestDNSParser::test_incorrect_records[Empty reply-]
PASSED [ 62%]
tests/test_dns_requests.py::TestDNSParser::test_incorrect_records[Super small
reply (1)-x] PASSED [ 63%]
tests/test_dns_requests.py::TestDNSParser::test_incorrect_records[Super small
reply (7)-\xfa\x83\x81\x80\x00\x01\x00] PASSED [ 64%]
tests/test_dns_requests.py::TestDNSParser::test_incorrect_records[Unicode
Decode
error-\xfa\x83\x81\x80\x00\x01\x00\x02\x00\x00\x00\x00\x1bdMFYGSLTQOJXXI33OOZYG4LTDNA\tprotonpro\x03xyz\x00\x00\x10\x00\x01\xc0\x0c\x00\x10\x00\x01\x00\x00\x00x\x0032ec2\xcc3-127-37-78.eu-central-1.compute.amazonaws.com\xc0\x0c\x00\x10\x00\x01\x00\x00\x00x\x0054ec2-54-93-234-150.eu-central-1.compute.amazonaws.com]
PASSED [ 64%]
tests/test_dns_requests.py::TestDNSParser::test_incorrect_records[Wrong query
reply-\xfa\x83\x81\x80\x00\x01\x00\x02\x00\x00\x00\x00\x1bdMFYGSLTQOJXXI33OOZYG4LTDNA\nprotonpro\x03xyz]
PASSED [ 65%]
tests/test_dns_requests.py::TestDNSParser::test_incorrect_records[Truncated
query
reply-\xfa\x83\x81\x80\x00\x01\x00\x02\x00\x00\x00\x00\x1bdMFYGSLTQOJXXI33OOZYG4LTDNA\tproto]
PASSED [ 66%]
tests/test_dns_requests.py::TestDNSParser::test_incorrect_records[Truncated TXT
record
value-\x00\x00\x81\x80\x00\x01\x00\x03\x00\x00\x00\x00\x1ddOZYG4LLBOBUS44DSN52G63RONVSQ\tprotonpro\x03xyz\x00\x00\x10\x00\x01\xc0\x0c\x00\x05\x00\x01\x00\x00\x00x\x00\x06\x03vpn\xc0*\xc0I\x00\x10\x00\x01\x00\x00\x00x\x00\x0e\r35.15]
PASSED [ 67%]
tests/test_dns_requests.py::TestDNSParser::test_incorrect_records[Truncated A
record
value-jW\x81\x80\x00\x01\x00\x01\x00\x03\x00\x03\x07vpn-api\x06proton\x02me\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00\x01\x00\x00\x04\xb0\x00\x04\xb9\x9f\x9f]
PASSED [ 68%]
tests/test_dns_requests.py::TestDNSParser::test_incorrect_records[Truncated A
record
headers-jW\x81\x80\x00\x01\x00\x01\x00\x03\x00\x03\x07vpn-api\x06proton\x02me\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00]
PASSED [ 69%]
tests/test_dns_requests.py::TestDNSParser::test_valid_hostname_in_A_record[ec2-3-127-37-78.eu-central-1.compute.amazonaws.com-True]
PASSED [ 70%]
tests/test_dns_requests.py::TestDNSParser::test_valid_hostname_in_A_record[hostnames.can.end.with.one.period.-True]
PASSED [ 70%]
tests/test_dns_requests.py::TestDNSParser::test_valid_hostname_in_A_record[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-False]
PASSED [ 71%]
tests/test_dns_requests.py::TestDNSParser::test_valid_hostname_in_A_record[-hostname-False]
PASSED [ 72%]
tests/test_dns_requests.py::TestDNSParser::test_valid_hostname_in_A_record[hostname--False]
PASSED [ 73%]
tests/test_dns_requests.py::TestDNSParser::test_valid_hostname_in_A_record[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.blah.com-False]
PASSED [ 74%]
tests/test_dns_requests.py::TestDNSParser::test_valid_hostname_in_A_record[blah..com-False]
PASSED [ 75%]
tests/test_dns_requests.py::TestDNSParser::test_valid_hostname_in_A_record[special-chars!.com-False]
PASSED [ 76%]
tests/test_dns_requests.py::TestDNSParser::test_valid_hostname_in_A_record[vpn-api.proton.me/malicious/-False]
PASSED [ 76%]
tests/test_environment.py::test_raises_exception_when_creating_new_product_class_and_not_setting_product_class_property
PASSED [ 77%]
tests/test_loader.py::LoaderTest::test_default PASSED [ 78%]
tests/test_loader.py::LoaderTest::test_environments PASSED [ 79%]
tests/test_loader.py::LoaderTest::test_environments_explicit PASSED [ 80%]
tests/test_protonsso.py::TestProtonSSO::test_additional_data SKIPPED [ 81%]
tests/test_protonsso.py::TestProtonSSO::test_broken_data PASSED [ 82%]
tests/test_protonsso.py::TestProtonSSO::test_broken_index PASSED [ 82%]
tests/test_protonsso.py::TestProtonSSO::test_default_session SKIPPED [ 83%]
tests/test_protonsso.py::TestProtonSSO::test_sessions PASSED [ 84%]
tests/test_protonsso.py::TestProtonSSO::test_with_real_session SKIPPED [ 85%]
tests/test_requests_transport.py::TestRequestsTransport::test_async_api_request_posts_form_data_with_data_param
PASSED [ 86%]
tests/test_requests_transport.py::TestRequestsTransportRawResult::test_async_api_request_get_raw
PASSED [ 87%]
tests/test_requests_transport.py::TestRequestsTransportRawResult::test_async_api_request_last_modified
PASSED [ 88%]
tests/test_session.py::TestSession::test_session_refresh PASSED [ 88%]
tests/test_session.py::TestSessionUsingApi::test_session_fork_not_ok SKIPPED [
89%]
tests/test_session.py::TestSessionUsingApi::test_session_fork_ok SKIPPED [ 90%]
tests/test_session_pickle.py::TestSessionPickle::test_pickle PASSED [ 91%]
tests/test_textfilekeyring.py::test_get_item PASSED [ 92%]
tests/test_textfilekeyring.py::test_del_item PASSED [ 93%]
tests/test_textfilekeyring.py::test_set_item PASSED [ 94%]
tests/test_textfilekeyring.py::test_get_item_raises_exception_filepath_does_not_exist
PASSED [ 94%]
tests/test_textfilekeyring.py::test_get_item_raises_exception_corrupted_json_data
PASSED [ 95%]
tests/test_textfilekeyring.py::test_del_item_raises_exception_filepath_does_not_exist
PASSED [ 96%]
tests/test_textfilekeyring.py::test_set_item_raises_exception_unable_to_write_in_path
PASSED [ 97%]
tests/test_textfilekeyring.py::test_set_item_serialize_invalid_json_object_raises_exception
PASSED [ 98%]
tests/test_tlsverification.py::TestTLSValidation::test_bad_ssl PASSED [ 99%]
tests/test_tlsverification.py::TestTLSValidation::test_pinning_disabled PASSED
[100%]
=================================== FAILURES ===================================
________________________ TestPYSRPClass.test_compute_v _________________________
self = <test_api.TestPYSRPClass testMethod=test_compute_v>
def test_compute_v(self):
for instance in srp_instances:
if instance["Exception"] is not None:
with self.assertRaises(instance['Exception']):
usr = self.user(
instance["Password"],
bytes.fromhex(instance["Modulus"])
)
usr.compute_v(
base64.b64decode(instance["Salt"]), PM_VERSION
)
else:
usr = self.user(
instance["Password"],
bytes.fromhex(instance["Modulus"])
)
> salt, v = usr.compute_v(
base64.b64decode(instance["Salt"]), PM_VERSION
)
tests/test_api.py:59:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
proton/session/srp/_pysrp.py:158: in compute_v
self.x = calculate_x(self.hash_class, self.bytes_s, self.p, self.N, version)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
proton/session/srp/_pysrp.py:50: in calculate_x
exp = hash_password(
proton/session/srp/util.py:48: in hash_password
return hash_password_3(hash_class, password, salt, modulus)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
hash_class = <function pmhash at 0x7fd8f491c360>
password =
b'PasswordThatIsLongerThan72CharsAndContainsSomeRandomStuffThatNoOneCaresAbout'
salt = b'jQGE9ZrERiIQ2V/wZ1PtZe'
modulus =
b'\xc3v7z\xc6\xc6&\x97\xe2\x11\xc0\xbe\x80\xda<_{s\x81\xab\x92\xd9E6\xb4\x06YJ\xd0\xc1\xbf\xe9\nBN6\x08\\\xd2\xf5S\xf3...xf7!\xeb\xf1\xd9\x10[\xe3<\xdc\x19\xa0\x10\x80\xa9B\x7fOv\xb2}?\xcf\x89&\xa5\xc4\x88LB\xd1\xb6\xd0R\xc2\xf7DE"\x83\xdb'
def hash_password_3(hash_class, password, salt, modulus):
salt = (salt + b"proton")[:16]
salt = bcrypt_b64_encode(salt)[:22]
> hashed = bcrypt.hashpw(password, b"$2y$10$" + salt)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E ValueError: password cannot be longer than 72 bytes, truncate manually
if necessary (e.g. my_password[:72])
proton/session/srp/util.py:42: ValueError
________________________ TestPYSRPClass.test_generate_v ________________________
self = <test_api.TestPYSRPClass testMethod=test_generate_v>
def test_generate_v(self):
for instance in srp_instances:
if instance["Exception"] is not None:
continue
usr = self.user(
instance["Password"],
bytes.fromhex(instance["Modulus"])
)
> generated_salt, generated_v = usr.compute_v()
^^^^^^^^^^^^^^^
tests/test_api.py:86:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
proton/session/srp/_pysrp.py:158: in compute_v
self.x = calculate_x(self.hash_class, self.bytes_s, self.p, self.N, version)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
proton/session/srp/_pysrp.py:50: in calculate_x
exp = hash_password(
proton/session/srp/util.py:48: in hash_password
return hash_password_3(hash_class, password, salt, modulus)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
hash_class = <function pmhash at 0x7fd8f491c360>
password =
b'PasswordThatIsLongerThan72CharsAndContainsSomeRandomStuffThatNoOneCaresAbout'
salt = b'FkiTC7Rj00ma61/wZ1PtZe'
modulus =
b'\xc3v7z\xc6\xc6&\x97\xe2\x11\xc0\xbe\x80\xda<_{s\x81\xab\x92\xd9E6\xb4\x06YJ\xd0\xc1\xbf\xe9\nBN6\x08\\\xd2\xf5S\xf3...xf7!\xeb\xf1\xd9\x10[\xe3<\xdc\x19\xa0\x10\x80\xa9B\x7fOv\xb2}?\xcf\x89&\xa5\xc4\x88LB\xd1\xb6\xd0R\xc2\xf7DE"\x83\xdb'
def hash_password_3(hash_class, password, salt, modulus):
salt = (salt + b"proton")[:16]
salt = bcrypt_b64_encode(salt)[:22]
> hashed = bcrypt.hashpw(password, b"$2y$10$" + salt)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E ValueError: password cannot be longer than 72 bytes, truncate manually
if necessary (e.g. my_password[:72])
proton/session/srp/util.py:42: ValueError
___________________________ TestPYSRPClass.test_srp ____________________________
self = <test_api.TestPYSRPClass testMethod=test_srp>
def test_srp(self):
for instance in srp_instances:
if instance["Exception"]:
continue
server = TestServer()
server.setup(
instance["Username"],
bytes.fromhex(instance["Modulus"]),
base64.b64decode(instance["Verifier"])
)
server_challenge = server.get_challenge()
usr = self.user(
instance["Password"], bytes.fromhex(instance["Modulus"])
)
client_challenge = usr.get_challenge()
> client_proof = usr.process_challenge(
base64.b64decode(instance["Salt"]),
server_challenge,
PM_VERSION
)
tests/test_api.py:123:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
proton/session/srp/_pysrp.py:136: in process_challenge
self.x = calculate_x(self.hash_class, self.bytes_s, self.p, self.N, version)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
proton/session/srp/_pysrp.py:50: in calculate_x
exp = hash_password(
proton/session/srp/util.py:48: in hash_password
return hash_password_3(hash_class, password, salt, modulus)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
hash_class = <function pmhash at 0x7fd8f491c360>
password =
b'PasswordThatIsLongerThan72CharsAndContainsSomeRandomStuffThatNoOneCaresAbout'
salt = b'jQGE9ZrERiIQ2V/wZ1PtZe'
modulus =
b'\xc3v7z\xc6\xc6&\x97\xe2\x11\xc0\xbe\x80\xda<_{s\x81\xab\x92\xd9E6\xb4\x06YJ\xd0\xc1\xbf\xe9\nBN6\x08\\\xd2\xf5S\xf3...xf7!\xeb\xf1\xd9\x10[\xe3<\xdc\x19\xa0\x10\x80\xa9B\x7fOv\xb2}?\xcf\x89&\xa5\xc4\x88LB\xd1\xb6\xd0R\xc2\xf7DE"\x83\xdb'
def hash_password_3(hash_class, password, salt, modulus):
salt = (salt + b"proton")[:16]
salt = bcrypt_b64_encode(salt)[:22]
> hashed = bcrypt.hashpw(password, b"$2y$10$" + salt)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E ValueError: password cannot be longer than 72 bytes, truncate manually
if necessary (e.g. my_password[:72])
proton/session/srp/util.py:42: ValueError
---------- coverage: platform linux, python 3.13.9-final-0 -----------
Name Stmts Miss Cover
---------------------------------------------------------------------
proton/keyring/__init__.py 2 0 100%
proton/keyring/_base.py 40 2 95%
proton/keyring/exceptions.py 6 0 100%
proton/keyring/textfile.py 45 2 96%
proton/loader/__init__.py 3 0 100%
proton/loader/__main__.py 7 7 0%
proton/loader/loader.py 92 14 85%
proton/session/__init__.py 3 0 100%
proton/session/api.py 363 165 55%
proton/session/environments.py 40 5 88%
proton/session/exceptions.py 46 5 89%
proton/session/formdata.py 12 0 100%
proton/session/srp/__init__.py 10 1 90%
proton/session/srp/_ctsrp.py 206 190 8%
proton/session/srp/_pysrp.py 80 6 92%
proton/session/srp/pmhash.py 16 2 88%
proton/session/srp/util.py 37 0 100%
proton/session/transports/__init__.py 4 0 100%
proton/session/transports/aiohttp.py 99 31 69%
proton/session/transports/alternativerouting.py 108 25 77%
proton/session/transports/auto.py 79 19 76%
proton/session/transports/base.py 40 6 85%
proton/session/transports/requests.py 58 14 76%
proton/session/transports/utils/dns.py 110 9 92%
proton/sso/__init__.py 2 0 100%
proton/sso/__main__.py 137 137 0%
proton/sso/sso.py 134 29 78%
proton/utils/__init__.py 3 0 100%
proton/utils/environment.py 89 29 67%
proton/utils/metaclasses.py 6 0 100%
proton/views/__init__.py 2 2 0%
proton/views/_base.py 18 18 0%
proton/views/basiccli.py 66 66 0%
---------------------------------------------------------------------
TOTAL 1963 784 60%
Coverage HTML written to dir htmlcov
=========================== short test summary info ============================
FAILED tests/test_api.py::TestPYSRPClass::test_compute_v - ValueError: passwo...
FAILED tests/test_api.py::TestPYSRPClass::test_generate_v - ValueError: passw...
FAILED tests/test_api.py::TestPYSRPClass::test_srp - ValueError: password can...
=========== 3 failed, 105 passed, 9 skipped, 8 deselected in 14.29s ============
E: pybuild pybuild:389: test: plugin distutils failed with: exit code=1: cd
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build; python3.13 -m pytest
-v -k 'not test_bad_pinning_fingerprint_changed and not
test_alternative_routing_works_on_prod and not test_bad_pinning_url_changed and
not test_without_pinning and not test_auto_works_on_prod and not test_ping and
not test_successful'
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.13
returned exit code 13
make: *** [debian/rules:18: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------
--- End Message ---
--- Begin Message ---
Source: python-proton-core
Source-Version: 0.7.0-1
Done: Josenilson Ferreira da Silva <[email protected]>
We believe that the bug you reported is fixed in the latest version of
python-proton-core, which is due to be installed in the Debian FTP archive.
A summary of the changes between this version and the previous one is
attached.
Thank you for reporting the bug, which will now be closed. If you
have further comments please address them to [email protected],
and the maintainer will reopen the bug report if appropriate.
Debian distribution maintenance software
pp.
Josenilson Ferreira da Silva <[email protected]> (supplier of updated
python-proton-core package)
(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing [email protected])
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
Format: 1.8
Date: Mon, 24 Nov 2025 22:29:04 -0300
Source: python-proton-core
Architecture: source
Version: 0.7.0-1
Distribution: unstable
Urgency: medium
Maintainer: Debian Python Team <[email protected]>
Changed-By: Josenilson Ferreira da Silva <[email protected]>
Closes: 1120223
Changes:
python-proton-core (0.7.0-1) unstable; urgency=medium
.
* New upstream version 0.7.0
* debian/control: Remove redundant "Rules-Requires-Root"
* debian/patches: Truncate password to bcrypt's 72-byte limit
* debian/rules: Skip D-Bus dependent tests (Closes: #1120223)
Checksums-Sha1:
73e01c56c9a1ec4f174ddcabb06ed91983df2fd5 2472 python-proton-core_0.7.0-1.dsc
dd2f382ffae3b6b8f8651ef90efcc8812cb2ba43 78329
python-proton-core_0.7.0.orig.tar.gz
d113ad0f46a3e3d15f1304d616ce7a14c1e960bc 4316
python-proton-core_0.7.0-1.debian.tar.xz
b0b79e2ff17e544a12caf2f0fc77669b83c3871a 14643
python-proton-core_0.7.0-1_source.buildinfo
Checksums-Sha256:
d4128cb2467d091461853faffe1791ac816a304c2855fd73383525bfc4f29948 2472
python-proton-core_0.7.0-1.dsc
7b917102785e85ed3960afc1813fb7e87de6742db3eb77153cc6b3dafa68cca7 78329
python-proton-core_0.7.0.orig.tar.gz
30892616297a75046263ec0a16ae0cd1f43cfa50ba168d76ed8343be77132638 4316
python-proton-core_0.7.0-1.debian.tar.xz
6e82ed1035be30d8535b8a10f3bdc05cd599dd98cedc539cd9834268a2701f3b 14643
python-proton-core_0.7.0-1_source.buildinfo
Files:
6daafbcc91f66f3e87d0e0968e43f8dc 2472 python optional
python-proton-core_0.7.0-1.dsc
f41a284b9652e3bfcbe82c82698478da 78329 python optional
python-proton-core_0.7.0.orig.tar.gz
51d61d3f5ad52a7cce0f7dafbd61e195 4316 python optional
python-proton-core_0.7.0-1.debian.tar.xz
238efe8b8f3b3226e4c521f9de00ac27 14643 python optional
python-proton-core_0.7.0-1_source.buildinfo
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCgAdFiEEqBlNXRF+LQLfMNMNB6n1YjE0Rs0FAmknob0ACgkQB6n1YjE0
Rs3Qgw//UuIOosf+3ZBz9JsGCacSJfYzgINhyqrzJm3uCSwF0aU5uBoqkGoLUbHv
B7DjNwPMjnVOg1o2dHcKXYF+efY3Ql1VcwKP9/uiVh71iqTv9z4aNxyfg9hYurAu
n1Xf1ijnuv4pp0Z6P+ttqXWtqwwPVwv/DbibkAzfqTJ2XKrOCekbySSBTwWlIf8u
P60PtU/Cm6oSeeyEH0/hRdXV+slw0fl6bxIKikC3WCW49Di4JINCi/yV1Z7PPvN+
YU6PGkDmt2HpybdzSf55moH4m8R8uS+XMcjvWR5V2JSW/YtHh9jTpuV6Dj8glas4
JmdCS7k9MugBxVHRI5d/qLgs8nJGIgZA4k7aIMyI6QqSXpH2Ln4eNE2PFnhSuG7s
R4yUByJi3JWEE2i8Q+dBEickKm/M1rb6vYrTw0qLzI+2zeEky1727fllNE8Z47Lo
zZZjOpBWe+Y1RSMHea6/gZjG4jwzZxGFmaDbprVrKfvtUk9NMBKZbUTsne3XR/rp
zFiBw+lwZ16gdw/GhXYQpuMW3SbXtzuTh82DQFfw5cux/oKNEUBMrFNj2CtG2Eor
DDBOeTBgE8GlM7xyrYee3kqTBrSQw/U5v2JJTlJtiTgFarB0fFYHtPCwqsrEZJV4
BLCKuYqzDNOTYIEUKaA3/wV876Ly5hDhYjR8IISsv1dXi9c0ZQg=
=u0Nf
-----END PGP SIGNATURE-----
pgpA0O3r3ozKH.pgp
Description: PGP signature
--- End Message ---