0s autopkgtest [05:16:42]: starting date and time: 2026-02-09 05:16:42+0000 0s autopkgtest [05:16:42]: git checkout: 4b346b80 nova: make wait_reboot return success even when a no-op 0s autopkgtest [05:16:42]: host juju-7f2275-prod-proposed-migration-environment-20; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.evsoxb7v/out --timeout-copy=6000 --needs-internet=try --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --apt-pocket=proposed=src:par2cmdline --apt-upgrade sabnzbdplus --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 --env=ADT_TEST_TRIGGERS=par2cmdline/1.1.1-1 -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest-cpu2-ram4-disk20-arm64 --security-groups autopkgtest-juju-7f2275-prod-proposed-migration-environment-20@sto01-arm64-23.secgroup --name adt-resolute-arm64-sabnzbdplus-20260209-051641-juju-7f2275-prod-proposed-migration-environment-20-e5d5e774-15a9-43ff-b70c-bc41db941388 --image adt/ubuntu-resolute-arm64-server --keyname testbed-juju-7f2275-prod-proposed-migration-environment-20 --net-id=net_prod-autopkgtest-workers-arm64 -e TERM=linux --mirror=http://ftpmaster.internal/ubuntu/ 3s Creating nova instance adt-resolute-arm64-sabnzbdplus-20260209-051641-juju-7f2275-prod-proposed-migration-environment-20-e5d5e774-15a9-43ff-b70c-bc41db941388 from image adt/ubuntu-resolute-arm64-server-20260208.img (UUID 6a90f08b-9ae6-4f9a-8b8c-98ef3fa8fe0b)... 55s autopkgtest [05:17:37]: testbed dpkg architecture: arm64 55s autopkgtest [05:17:37]: testbed apt version: 3.1.15 56s autopkgtest [05:17:38]: @@@@@@@@@@@@@@@@@@@@ test bed setup 56s autopkgtest [05:17:38]: testbed release detected to be: None 57s autopkgtest [05:17:39]: updating testbed package index (apt update) 57s Get:1 http://ftpmaster.internal/ubuntu resolute-proposed InRelease [124 kB] 57s Hit:2 http://ftpmaster.internal/ubuntu resolute InRelease 57s Hit:3 http://ftpmaster.internal/ubuntu resolute-updates InRelease 57s Hit:4 http://ftpmaster.internal/ubuntu resolute-security InRelease 57s Get:5 http://ftpmaster.internal/ubuntu resolute-proposed/universe Sources [1598 kB] 58s Get:6 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse Sources [29.4 kB] 58s Get:7 http://ftpmaster.internal/ubuntu resolute-proposed/main Sources [164 kB] 58s Get:8 http://ftpmaster.internal/ubuntu resolute-proposed/main arm64 Packages [236 kB] 58s Get:9 http://ftpmaster.internal/ubuntu resolute-proposed/main arm64 c-n-f Metadata [6216 B] 58s Get:10 http://ftpmaster.internal/ubuntu resolute-proposed/restricted arm64 c-n-f Metadata [120 B] 58s Get:11 http://ftpmaster.internal/ubuntu resolute-proposed/universe arm64 Packages [1552 kB] 58s Get:12 http://ftpmaster.internal/ubuntu resolute-proposed/universe arm64 c-n-f Metadata [31.7 kB] 58s Get:13 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse arm64 Packages [21.7 kB] 58s Get:14 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse arm64 c-n-f Metadata [688 B] 59s Fetched 3764 kB in 1s (2968 kB/s) 60s Reading package lists... 61s Hit:1 http://ftpmaster.internal/ubuntu resolute-proposed InRelease 61s Hit:2 http://ftpmaster.internal/ubuntu resolute InRelease 61s Hit:3 http://ftpmaster.internal/ubuntu resolute-updates InRelease 61s Hit:4 http://ftpmaster.internal/ubuntu resolute-security InRelease 62s Reading package lists... 62s Reading package lists... 62s Building dependency tree... 62s Reading state information... 62s Calculating upgrade... 63s The following packages will be upgraded: 63s dbus dbus-bin dbus-daemon dbus-session-bus-common dbus-system-bus-common 63s dbus-user-session ethtool libbsd0 libdbus-1-3 libgdbm-compat4t64 libgdbm6t64 63s libidn2-0 libjansson4 libnetfilter-conntrack3 libusb-1.0-0 libwrap0 63s shared-mime-info 63s 17 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 63s Need to get 1591 kB of archives. 63s After this operation, 2450 kB disk space will be freed. 63s Get:1 http://ftpmaster.internal/ubuntu resolute/main arm64 libbsd0 arm64 0.12.2-2build2 [41.9 kB] 63s Get:2 http://ftpmaster.internal/ubuntu resolute/main arm64 dbus-system-bus-common all 1.16.2-2ubuntu3 [55.8 kB] 63s Get:3 http://ftpmaster.internal/ubuntu resolute/main arm64 dbus-session-bus-common all 1.16.2-2ubuntu3 [54.4 kB] 63s Get:4 http://ftpmaster.internal/ubuntu resolute/main arm64 dbus-user-session arm64 1.16.2-2ubuntu3 [9696 B] 63s Get:5 http://ftpmaster.internal/ubuntu resolute/main arm64 dbus-daemon arm64 1.16.2-2ubuntu3 [114 kB] 63s Get:6 http://ftpmaster.internal/ubuntu resolute/main arm64 dbus-bin arm64 1.16.2-2ubuntu3 [39.0 kB] 63s Get:7 http://ftpmaster.internal/ubuntu resolute/main arm64 dbus arm64 1.16.2-2ubuntu3 [23.8 kB] 63s Get:8 http://ftpmaster.internal/ubuntu resolute/main arm64 libdbus-1-3 arm64 1.16.2-2ubuntu3 [184 kB] 63s Get:9 http://ftpmaster.internal/ubuntu resolute/main arm64 ethtool arm64 1:6.15-3build1 [300 kB] 63s Get:10 http://ftpmaster.internal/ubuntu resolute/main arm64 libidn2-0 arm64 2.3.8-4build1 [68.3 kB] 63s Get:11 http://ftpmaster.internal/ubuntu resolute/main arm64 shared-mime-info arm64 2.4-5build3 [471 kB] 63s Get:12 http://ftpmaster.internal/ubuntu resolute/main arm64 libgdbm6t64 arm64 1.26-1build1 [36.1 kB] 63s Get:13 http://ftpmaster.internal/ubuntu resolute/main arm64 libjansson4 arm64 2.14-2build4 [34.6 kB] 63s Get:14 http://ftpmaster.internal/ubuntu resolute/main arm64 libnetfilter-conntrack3 arm64 1.1.1-1 [47.3 kB] 63s Get:15 http://ftpmaster.internal/ubuntu resolute/main arm64 libusb-1.0-0 arm64 2:1.0.29-2build1 [55.2 kB] 63s Get:16 http://ftpmaster.internal/ubuntu resolute/main arm64 libgdbm-compat4t64 arm64 1.26-1build1 [6650 B] 63s Get:17 http://ftpmaster.internal/ubuntu resolute/main arm64 libwrap0 arm64 7.6.q-36build2 [49.1 kB] 63s dpkg-preconfigure: unable to re-open stdin: No such file or directory 63s Fetched 1591 kB in 0s (43.2 MB/s) 63s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 136667 files and directories currently installed.) 63s Preparing to unpack .../00-libbsd0_0.12.2-2build2_arm64.deb ... 63s Unpacking libbsd0:arm64 (0.12.2-2build2) over (0.12.2-2build1) ... 64s Preparing to unpack .../01-dbus-system-bus-common_1.16.2-2ubuntu3_all.deb ... 64s Unpacking dbus-system-bus-common (1.16.2-2ubuntu3) over (1.16.2-2ubuntu2) ... 64s Preparing to unpack .../02-dbus-session-bus-common_1.16.2-2ubuntu3_all.deb ... 64s Unpacking dbus-session-bus-common (1.16.2-2ubuntu3) over (1.16.2-2ubuntu2) ... 64s Preparing to unpack .../03-dbus-user-session_1.16.2-2ubuntu3_arm64.deb ... 64s Unpacking dbus-user-session (1.16.2-2ubuntu3) over (1.16.2-2ubuntu2) ... 64s Preparing to unpack .../04-dbus-daemon_1.16.2-2ubuntu3_arm64.deb ... 64s Unpacking dbus-daemon (1.16.2-2ubuntu3) over (1.16.2-2ubuntu2) ... 64s Preparing to unpack .../05-dbus-bin_1.16.2-2ubuntu3_arm64.deb ... 64s Unpacking dbus-bin (1.16.2-2ubuntu3) over (1.16.2-2ubuntu2) ... 64s Preparing to unpack .../06-dbus_1.16.2-2ubuntu3_arm64.deb ... 64s Unpacking dbus (1.16.2-2ubuntu3) over (1.16.2-2ubuntu2) ... 64s Preparing to unpack .../07-libdbus-1-3_1.16.2-2ubuntu3_arm64.deb ... 64s Unpacking libdbus-1-3:arm64 (1.16.2-2ubuntu3) over (1.16.2-2ubuntu2) ... 64s Preparing to unpack .../08-ethtool_1%3a6.15-3build1_arm64.deb ... 64s Unpacking ethtool (1:6.15-3build1) over (1:6.15-3) ... 64s Preparing to unpack .../09-libidn2-0_2.3.8-4build1_arm64.deb ... 64s Unpacking libidn2-0:arm64 (2.3.8-4build1) over (2.3.8-4) ... 64s Preparing to unpack .../10-shared-mime-info_2.4-5build3_arm64.deb ... 64s Unpacking shared-mime-info (2.4-5build3) over (2.4-5build2) ... 65s Preparing to unpack .../11-libgdbm6t64_1.26-1build1_arm64.deb ... 65s Unpacking libgdbm6t64:arm64 (1.26-1build1) over (1.26-1) ... 65s Preparing to unpack .../12-libjansson4_2.14-2build4_arm64.deb ... 65s Unpacking libjansson4:arm64 (2.14-2build4) over (2.14-2build3) ... 65s Preparing to unpack .../13-libnetfilter-conntrack3_1.1.1-1_arm64.deb ... 65s Unpacking libnetfilter-conntrack3:arm64 (1.1.1-1) over (1.1.0-1build1) ... 65s Preparing to unpack .../14-libusb-1.0-0_2%3a1.0.29-2build1_arm64.deb ... 65s Unpacking libusb-1.0-0:arm64 (2:1.0.29-2build1) over (2:1.0.29-2) ... 65s Preparing to unpack .../15-libgdbm-compat4t64_1.26-1build1_arm64.deb ... 65s Unpacking libgdbm-compat4t64:arm64 (1.26-1build1) over (1.26-1) ... 65s Preparing to unpack .../16-libwrap0_7.6.q-36build2_arm64.deb ... 65s Unpacking libwrap0:arm64 (7.6.q-36build2) over (7.6.q-36build1) ... 65s Setting up libgdbm6t64:arm64 (1.26-1build1) ... 65s Setting up libgdbm-compat4t64:arm64 (1.26-1build1) ... 65s Setting up libidn2-0:arm64 (2.3.8-4build1) ... 65s Setting up libjansson4:arm64 (2.14-2build4) ... 65s Setting up libwrap0:arm64 (7.6.q-36build2) ... 65s Setting up libdbus-1-3:arm64 (1.16.2-2ubuntu3) ... 65s Setting up shared-mime-info (2.4-5build3) ... 68s Setting up libnetfilter-conntrack3:arm64 (1.1.1-1) ... 68s Setting up dbus-session-bus-common (1.16.2-2ubuntu3) ... 68s Setting up libusb-1.0-0:arm64 (2:1.0.29-2build1) ... 68s Setting up dbus-system-bus-common (1.16.2-2ubuntu3) ... 68s Setting up libbsd0:arm64 (0.12.2-2build2) ... 68s Setting up dbus-bin (1.16.2-2ubuntu3) ... 68s Setting up ethtool (1:6.15-3build1) ... 68s Setting up dbus-daemon (1.16.2-2ubuntu3) ... 68s Setting up dbus-user-session (1.16.2-2ubuntu3) ... 68s Setting up dbus (1.16.2-2ubuntu3) ... 68s A reboot is required to replace the running dbus-daemon. 68s Please reboot the system when convenient. 68s Processing triggers for man-db (2.13.1-1build1) ... 69s Processing triggers for libc-bin (2.42-2ubuntu4) ... 69s autopkgtest [05:17:51]: upgrading testbed (apt dist-upgrade and autopurge) 70s Reading package lists... 70s Building dependency tree... 70s Reading state information... 70s Calculating upgrade... 70s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 71s Reading package lists... 71s Building dependency tree... 71s Reading state information... 71s Solving dependencies... 71s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 72s autopkgtest [05:17:54]: rebooting testbed after setup commands that affected boot 110s autopkgtest [05:18:32]: testbed running kernel: Linux 6.19.0-3-generic #3-Ubuntu SMP PREEMPT_DYNAMIC Fri Jan 23 19:46:27 UTC 2026 112s autopkgtest [05:18:34]: @@@@@@@@@@@@@@@@@@@@ apt-source sabnzbdplus 114s Get:1 http://ftpmaster.internal/ubuntu resolute/multiverse sabnzbdplus 4.5.4+dfsg-4 (dsc) [2219 B] 114s Get:2 http://ftpmaster.internal/ubuntu resolute/multiverse sabnzbdplus 4.5.4+dfsg-4 (tar) [5730 kB] 114s Get:3 http://ftpmaster.internal/ubuntu resolute/multiverse sabnzbdplus 4.5.4+dfsg-4 (diff) [30.5 kB] 114s gpgv: Signature made Tue Jan 27 08:38:44 2026 UTC 114s gpgv: using RSA key 77C9619C49D6A2CDCDF2FFAA428304A1748DCC7A 114s gpgv: Can't check signature: No public key 114s dpkg-source: warning: cannot verify inline signature for ./sabnzbdplus_4.5.4+dfsg-4.dsc: no acceptable signature found 114s autopkgtest [05:18:36]: testing package sabnzbdplus version 4.5.4+dfsg-4 114s autopkgtest [05:18:36]: build not needed 116s autopkgtest [05:18:38]: test basic-runs: preparing testbed 116s Reading package lists... 116s Building dependency tree... 116s Reading state information... 117s Solving dependencies... 117s The following NEW packages will be installed: 117s 7zip apprise fonts-glyphicons-halflings libgomp1 libjs-bootstrap 117s libjs-jquery libjs-jquery-ui libjs-moment par2 python3-babelfish 117s python3-cheetah python3-cheroot python3-cherrypy3 python3-click 117s python3-feedparser python3-guessit python3-jaraco.collections 117s python3-markdown python3-orjson python3-portend python3-puremagic 117s python3-rarfile python3-rebulk python3-requests-oauthlib python3-sabctools 117s python3-sgmllib3k python3-socks python3-tempora python3-toposort 117s python3-zc.lockfile sabnzbdplus unrar 117s 0 upgraded, 32 newly installed, 0 to remove and 0 not upgraded. 117s Need to get 6142 kB of archives. 117s After this operation, 27.9 MB of additional disk space will be used. 117s Get:1 http://ftpmaster.internal/ubuntu resolute/universe arm64 7zip arm64 25.01+dfsg-5 [1895 kB] 117s Get:2 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-click all 8.2.0+0.really.8.1.8-1build1 [80.2 kB] 117s Get:3 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-markdown all 3.10-2 [76.0 kB] 117s Get:4 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-requests-oauthlib all 1.3.1-2 [19.0 kB] 117s Get:5 http://ftpmaster.internal/ubuntu resolute/universe arm64 apprise all 1.9.3-1 [825 kB] 117s Get:6 http://ftpmaster.internal/ubuntu resolute/universe arm64 fonts-glyphicons-halflings all 1.009~3.4.1+dfsg-6 [119 kB] 117s Get:7 http://ftpmaster.internal/ubuntu resolute/universe arm64 libjs-bootstrap all 3.4.1+dfsg-6 [129 kB] 117s Get:8 http://ftpmaster.internal/ubuntu resolute/main arm64 libjs-jquery all 3.7.1+dfsg+~3.5.33-1build1 [321 kB] 117s Get:9 http://ftpmaster.internal/ubuntu resolute/universe arm64 libjs-jquery-ui all 1.13.2+dfsg-1build1 [251 kB] 117s Get:10 http://ftpmaster.internal/ubuntu resolute/universe arm64 libjs-moment all 2.29.4+ds-1 [147 kB] 117s Get:11 http://ftpmaster.internal/ubuntu resolute/main arm64 libgomp1 arm64 15.2.0-12ubuntu1 [147 kB] 117s Get:12 http://ftpmaster.internal/ubuntu resolute-proposed/universe arm64 par2 arm64 1.1.1-1 [98.6 kB] 117s Get:13 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-cheetah arm64 3.4.0-1build2 [140 kB] 117s Get:14 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-cheroot all 11.1.2+ds1-1 [81.5 kB] 117s Get:15 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-jaraco.collections all 5.1.0-1build1 [12.9 kB] 117s Get:16 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-tempora all 5.7.0-2build1 [14.9 kB] 117s Get:17 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-portend all 3.2.0-1build1 [7662 B] 117s Get:18 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-zc.lockfile all 4.0-2 [7884 B] 118s Get:19 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-cherrypy3 all 18.10.0-2 [211 kB] 118s Get:20 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-sgmllib3k all 1.0.0-5build1 [8888 B] 118s Get:21 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-feedparser all 6.0.12-1 [45.2 kB] 118s Get:22 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-babelfish all 0.6.1-1build1 [79.0 kB] 118s Get:23 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-toposort all 1.10-2build1 [6454 B] 118s Get:24 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-rebulk all 3.3.0-4 [50.4 kB] 118s Get:25 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-guessit all 3.8.0-4build1 [95.1 kB] 118s Get:26 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-puremagic all 1.30-1 [39.5 kB] 118s Get:27 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-rarfile all 4.2-3 [29.2 kB] 118s Get:28 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-sabctools arm64 8.2.6-2 [33.2 kB] 118s Get:29 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-socks all 1.7.1+dfsg-1build1 [21.9 kB] 118s Get:30 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-orjson arm64 3.11.5-1 [240 kB] 118s Get:31 http://ftpmaster.internal/ubuntu resolute/multiverse arm64 unrar arm64 1:7.2.4-1 [173 kB] 118s Get:32 http://ftpmaster.internal/ubuntu resolute/multiverse arm64 sabnzbdplus all 4.5.4+dfsg-4 [736 kB] 118s Fetched 6142 kB in 1s (5840 kB/s) 118s Selecting previously unselected package 7zip. 119s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 136584 files and directories currently installed.) 119s Preparing to unpack .../00-7zip_25.01+dfsg-5_arm64.deb ... 119s Unpacking 7zip (25.01+dfsg-5) ... 119s Selecting previously unselected package python3-click. 119s Preparing to unpack .../01-python3-click_8.2.0+0.really.8.1.8-1build1_all.deb ... 119s Unpacking python3-click (8.2.0+0.really.8.1.8-1build1) ... 119s Selecting previously unselected package python3-markdown. 119s Preparing to unpack .../02-python3-markdown_3.10-2_all.deb ... 119s Unpacking python3-markdown (3.10-2) ... 119s Selecting previously unselected package python3-requests-oauthlib. 119s Preparing to unpack .../03-python3-requests-oauthlib_1.3.1-2_all.deb ... 119s Unpacking python3-requests-oauthlib (1.3.1-2) ... 119s Selecting previously unselected package apprise. 119s Preparing to unpack .../04-apprise_1.9.3-1_all.deb ... 119s Unpacking apprise (1.9.3-1) ... 119s Selecting previously unselected package fonts-glyphicons-halflings. 119s Preparing to unpack .../05-fonts-glyphicons-halflings_1.009~3.4.1+dfsg-6_all.deb ... 119s Unpacking fonts-glyphicons-halflings (1.009~3.4.1+dfsg-6) ... 119s Selecting previously unselected package libjs-bootstrap. 119s Preparing to unpack .../06-libjs-bootstrap_3.4.1+dfsg-6_all.deb ... 119s Unpacking libjs-bootstrap (3.4.1+dfsg-6) ... 119s Selecting previously unselected package libjs-jquery. 119s Preparing to unpack .../07-libjs-jquery_3.7.1+dfsg+~3.5.33-1build1_all.deb ... 119s Unpacking libjs-jquery (3.7.1+dfsg+~3.5.33-1build1) ... 119s Selecting previously unselected package libjs-jquery-ui. 119s Preparing to unpack .../08-libjs-jquery-ui_1.13.2+dfsg-1build1_all.deb ... 119s Unpacking libjs-jquery-ui (1.13.2+dfsg-1build1) ... 119s Selecting previously unselected package libjs-moment. 119s Preparing to unpack .../09-libjs-moment_2.29.4+ds-1_all.deb ... 119s Unpacking libjs-moment (2.29.4+ds-1) ... 119s Selecting previously unselected package libgomp1:arm64. 119s Preparing to unpack .../10-libgomp1_15.2.0-12ubuntu1_arm64.deb ... 119s Unpacking libgomp1:arm64 (15.2.0-12ubuntu1) ... 119s Selecting previously unselected package par2. 119s Preparing to unpack .../11-par2_1.1.1-1_arm64.deb ... 119s Unpacking par2 (1.1.1-1) ... 119s Selecting previously unselected package python3-cheetah. 119s Preparing to unpack .../12-python3-cheetah_3.4.0-1build2_arm64.deb ... 119s Unpacking python3-cheetah (3.4.0-1build2) ... 119s Selecting previously unselected package python3-cheroot. 119s Preparing to unpack .../13-python3-cheroot_11.1.2+ds1-1_all.deb ... 119s Unpacking python3-cheroot (11.1.2+ds1-1) ... 119s Selecting previously unselected package python3-jaraco.collections. 119s Preparing to unpack .../14-python3-jaraco.collections_5.1.0-1build1_all.deb ... 119s Unpacking python3-jaraco.collections (5.1.0-1build1) ... 119s Selecting previously unselected package python3-tempora. 119s Preparing to unpack .../15-python3-tempora_5.7.0-2build1_all.deb ... 119s Unpacking python3-tempora (5.7.0-2build1) ... 119s Selecting previously unselected package python3-portend. 119s Preparing to unpack .../16-python3-portend_3.2.0-1build1_all.deb ... 119s Unpacking python3-portend (3.2.0-1build1) ... 119s Selecting previously unselected package python3-zc.lockfile. 119s Preparing to unpack .../17-python3-zc.lockfile_4.0-2_all.deb ... 119s Unpacking python3-zc.lockfile (4.0-2) ... 119s Selecting previously unselected package python3-cherrypy3. 119s Preparing to unpack .../18-python3-cherrypy3_18.10.0-2_all.deb ... 119s Unpacking python3-cherrypy3 (18.10.0-2) ... 119s Selecting previously unselected package python3-sgmllib3k. 119s Preparing to unpack .../19-python3-sgmllib3k_1.0.0-5build1_all.deb ... 119s Unpacking python3-sgmllib3k (1.0.0-5build1) ... 120s Selecting previously unselected package python3-feedparser. 120s Preparing to unpack .../20-python3-feedparser_6.0.12-1_all.deb ... 120s Unpacking python3-feedparser (6.0.12-1) ... 120s Selecting previously unselected package python3-babelfish. 120s Preparing to unpack .../21-python3-babelfish_0.6.1-1build1_all.deb ... 120s Unpacking python3-babelfish (0.6.1-1build1) ... 120s Selecting previously unselected package python3-toposort. 120s Preparing to unpack .../22-python3-toposort_1.10-2build1_all.deb ... 120s Unpacking python3-toposort (1.10-2build1) ... 120s Selecting previously unselected package python3-rebulk. 120s Preparing to unpack .../23-python3-rebulk_3.3.0-4_all.deb ... 120s Unpacking python3-rebulk (3.3.0-4) ... 120s Selecting previously unselected package python3-guessit. 120s Preparing to unpack .../24-python3-guessit_3.8.0-4build1_all.deb ... 120s Unpacking python3-guessit (3.8.0-4build1) ... 120s Selecting previously unselected package python3-puremagic. 120s Preparing to unpack .../25-python3-puremagic_1.30-1_all.deb ... 120s Unpacking python3-puremagic (1.30-1) ... 120s Selecting previously unselected package python3-rarfile. 120s Preparing to unpack .../26-python3-rarfile_4.2-3_all.deb ... 120s Unpacking python3-rarfile (4.2-3) ... 120s Selecting previously unselected package python3-sabctools. 120s Preparing to unpack .../27-python3-sabctools_8.2.6-2_arm64.deb ... 120s Unpacking python3-sabctools (8.2.6-2) ... 120s Selecting previously unselected package python3-socks. 120s Preparing to unpack .../28-python3-socks_1.7.1+dfsg-1build1_all.deb ... 120s Unpacking python3-socks (1.7.1+dfsg-1build1) ... 120s Selecting previously unselected package python3-orjson. 120s Preparing to unpack .../29-python3-orjson_3.11.5-1_arm64.deb ... 120s Unpacking python3-orjson (3.11.5-1) ... 120s Selecting previously unselected package unrar. 120s Preparing to unpack .../30-unrar_1%3a7.2.4-1_arm64.deb ... 120s Unpacking unrar (1:7.2.4-1) ... 120s Selecting previously unselected package sabnzbdplus. 120s Preparing to unpack .../31-sabnzbdplus_4.5.4+dfsg-4_all.deb ... 120s Unpacking sabnzbdplus (4.5.4+dfsg-4) ... 120s Setting up python3-jaraco.collections (5.1.0-1build1) ... 120s Setting up python3-toposort (1.10-2build1) ... 120s Setting up python3-sabctools (8.2.6-2) ... 120s Setting up python3-orjson (3.11.5-1) ... 120s Setting up python3-socks (1.7.1+dfsg-1build1) ... 121s Setting up fonts-glyphicons-halflings (1.009~3.4.1+dfsg-6) ... 121s Setting up python3-babelfish (0.6.1-1build1) ... 121s Setting up libjs-moment (2.29.4+ds-1) ... 121s Setting up 7zip (25.01+dfsg-5) ... 121s Setting up unrar (1:7.2.4-1) ... 121s update-alternatives: using /usr/bin/unrar-nonfree to provide /usr/bin/unrar (unrar) in auto mode 121s Setting up libgomp1:arm64 (15.2.0-12ubuntu1) ... 121s Setting up python3-click (8.2.0+0.really.8.1.8-1build1) ... 121s Setting up python3-rebulk (3.3.0-4) ... 121s Setting up python3-sgmllib3k (1.0.0-5build1) ... 121s Setting up python3-puremagic (1.30-1) ... 121s Setting up python3-cheetah (3.4.0-1build2) ... 121s Setting up par2 (1.1.1-1) ... 121s Setting up python3-cheroot (11.1.2+ds1-1) ... 122s Setting up python3-markdown (3.10-2) ... 122s Setting up python3-zc.lockfile (4.0-2) ... 122s Setting up python3-guessit (3.8.0-4build1) ... 122s Setting up python3-rarfile (4.2-3) ... 122s Setting up python3-tempora (5.7.0-2build1) ... 122s Setting up libjs-jquery (3.7.1+dfsg+~3.5.33-1build1) ... 122s Setting up libjs-bootstrap (3.4.1+dfsg-6) ... 122s Setting up python3-requests-oauthlib (1.3.1-2) ... 122s Setting up python3-feedparser (6.0.12-1) ... 123s Setting up python3-portend (3.2.0-1build1) ... 123s Setting up libjs-jquery-ui (1.13.2+dfsg-1build1) ... 123s Setting up apprise (1.9.3-1) ... 123s Setting up python3-cherrypy3 (18.10.0-2) ... 123s Setting up sabnzbdplus (4.5.4+dfsg-4) ... 124s Created symlink '/etc/systemd/system/multi-user.target.wants/sabnzbdplus.service' → '/usr/lib/systemd/system/sabnzbdplus.service'. 124s Processing triggers for man-db (2.13.1-1build1) ... 125s Processing triggers for shared-mime-info (2.4-5build3) ... 125s Processing triggers for libc-bin (2.42-2ubuntu4) ... 126s autopkgtest [05:18:48]: test basic-runs: [----------------------- 127s 127s Usage: sabnzbdplus [-f ] 127s 127s Options marked [*] are stored in the config file 127s 127s Options: 127s -f --config-file Location of config file 127s -s --server Listen on server:port [*] 127s -t --templates Template directory [*] 127s 127s -l --logging <-1..2> Set logging level (-1=off, 0=least,2= most) [*] 127s -w --weblogging Enable cherrypy access logging 127s 127s -b --browser <0..1> Auto browser launch (0= off, 1= on) [*] 127s -d --daemon Fork daemon process 127s --pid Create a PID file in the given folder (full path) 127s --pidfile Create a PID file with the given name (full path) 127s 127s -h --help Print this message 127s -v --version Print version information 127s -c --clean Remove queue, cache and logs 127s -p --pause Start in paused mode 127s --repair Add orphaned jobs from the incomplete folder to the queue 127s --repair-all Try to reconstruct the queue from the incomplete folder 127s with full data reconstruction 127s --https Port to use for HTTPS server 127s --ipv6_hosting <0|1> Listen on IPv6 address [::1] [*] 127s --inet_exposure <0..5> Set external internet access [*] 127s --no-login Start with username and password reset 127s --log-all Log all article handling (for developers) 127s --disable-file-log Logging is only written to console 127s --console Force logging to console 127s --new Run a new instance of SABnzbd 127s 127s NZB (or related) file: 127s NZB or compressed NZB file, with extension .nzb, .zip, .rar, .7z, .gz, or .bz2 127s 127s usage info finished, status = 0 127s removed directory 'settings' 127s 2026-02-09 05:18:50,102::INFO::[sabnzbdplus:1135] -------------------------------- 127s 2026-02-09 05:18:50,103::INFO::[sabnzbdplus:1136] sabnzbdplus-4.5.4 127s 2026-02-09 05:18:50,103::INFO::[sabnzbdplus:1137] Full executable path = /usr/bin/sabnzbdplus 127s 2026-02-09 05:18:50,103::INFO::[sabnzbdplus:1138] Arguments = "/usr/bin/sabnzbdplus" "--logging" "1" "--browser" "0" "--config-file" "/tmp/autopkgtest.tBCPoX/autopkgtest_tmp/settings/sEtthd91.ini" 127s 2026-02-09 05:18:50,104::INFO::[sabnzbdplus:1147] Certifi version = 2026.01.04 127s 2026-02-09 05:18:50,104::INFO::[sabnzbdplus:1148] Loaded additional certificates from /etc/ssl/certs/ca-certificates.crt 127s 2026-02-09 05:18:50,104::INFO::[sabnzbdplus:1154] Using INI file /tmp/autopkgtest.tBCPoX/autopkgtest_tmp/settings/sEtthd91.ini 127s 2026-02-09 05:18:50,104::INFO::[filesystem:725] Creating directories: /tmp/autopkgtest.tBCPoX/autopkgtest_tmp/settings/Downloads/incomplete 127s 2026-02-09 05:18:50,104::INFO::[filesystem:725] Creating directories: /tmp/autopkgtest.tBCPoX/autopkgtest_tmp/settings/Downloads/complete 127s 2026-02-09 05:18:50,105::INFO::[cfg:794] Config conversion set 1 127s 2026-02-09 05:18:50,105::INFO::[cfg:830] Config conversion set 2 127s 2026-02-09 05:18:50,105::INFO::[cfg:835] Config conversion set 3 127s 2026-02-09 05:18:50,105::INFO::[cfg:846] Config conversion set 4 127s 2026-02-09 05:18:50,106::INFO::[config:999] Writing settings to INI file /tmp/autopkgtest.tBCPoX/autopkgtest_tmp/settings/sEtthd91.ini 127s 2026-02-09 05:18:50,107::INFO::[filesystem:1089] [N/A] /tmp/autopkgtest.tBCPoX/autopkgtest_tmp/settings/admin/totals10.sab missing 127s 2026-02-09 05:18:50,121::INFO::[postproc:141] Loading postproc queue 127s 2026-02-09 05:18:50,121::INFO::[filesystem:1089] [N/A] /tmp/autopkgtest.tBCPoX/autopkgtest_tmp/settings/admin/postproc2.sab missing 127s 2026-02-09 05:18:50,121::INFO::[filesystem:1089] [N/A] /tmp/autopkgtest.tBCPoX/autopkgtest_tmp/settings/admin/watched_data2.sab missing 127s 2026-02-09 05:18:50,121::INFO::[filesystem:1089] [N/A] /tmp/autopkgtest.tBCPoX/autopkgtest_tmp/settings/admin/rss_data.sab missing 127s 2026-02-09 05:18:50,121::INFO::[scheduler:191] Scheduling RSS interval task every 60 min (delay=49) 127s 2026-02-09 05:18:50,122::INFO::[scheduler:200] Setting schedule for midnight auto history-purge 127s 2026-02-09 05:18:50,122::INFO::[scheduler:209] Setting schedule for midnight BPS reset 127s 2026-02-09 05:18:50,122::INFO::[scheduler:218] Setting schedule for midnight server expiration check 127s 2026-02-09 05:18:50,122::INFO::[scheduler:227] Setting schedule for server quota check 127s 2026-02-09 05:18:50,122::INFO::[filesystem:1089] [N/A] /tmp/autopkgtest.tBCPoX/autopkgtest_tmp/settings/admin/queue10.sab missing 127s 2026-02-09 05:18:50,122::INFO::[__init__:306] All processes started 127s 2026-02-09 05:18:50,122::INFO::[sabnzbdplus:338] Template location for Glitter is /usr/share/sabnzbdplus/interfaces/Glitter 127s 2026-02-09 05:18:50,122::INFO::[sabnzbdplus:338] Template location for Config is /usr/share/sabnzbdplus/interfaces/Config 127s 2026-02-09 05:18:50,123::INFO::[misc:1326] [N/A] Running external command: ['/usr/bin/unrar'] 127s 2026-02-09 05:18:50,127::INFO::[misc:1326] [N/A] Running external command: ['/usr/bin/7za'] 127s 2026-02-09 05:18:50,132::INFO::[misc:1326] [N/A] Running external command: ['/usr/bin/par2', '-V'] 127s 2026-02-09 05:18:50,135::INFO::[sabnzbdplus:423] SABCTools module (v8.2.6)... found! 127s 2026-02-09 05:18:50,135::INFO::[sabnzbdplus:424] SABCTools module is using SIMD set: NEON 127s 2026-02-09 05:18:50,135::INFO::[sabnzbdplus:425] SABCTools module is linked to OpenSSL: True 127s 2026-02-09 05:18:50,135::INFO::[sabnzbdplus:442] Cryptography module (v43.0.0)... found! 127s 2026-02-09 05:18:50,135::INFO::[sabnzbdplus:445] par2 binary... found (/usr/bin/par2) 127s 2026-02-09 05:18:50,135::INFO::[sabnzbdplus:452] UNRAR binary... found (/usr/bin/unrar) 127s 2026-02-09 05:18:50,136::INFO::[sabnzbdplus:460] UNRAR binary version 7.20 127s 2026-02-09 05:18:50,136::INFO::[sabnzbdplus:467] 7za binary... found (/usr/bin/7za) 127s 2026-02-09 05:18:50,136::INFO::[sabnzbdplus:469] 7za binary version 25.01 127s 2026-02-09 05:18:50,136::INFO::[sabnzbdplus:475] nice binary... found (/usr/bin/nice) 127s 2026-02-09 05:18:50,136::INFO::[sabnzbdplus:479] ionice binary... found (/usr/bin/ionice) 127s 2026-02-09 05:18:50,137::INFO::[sabnzbdplus:1351] Starting web-interface on 127.0.0.1:8080 127s 2026-02-09 05:18:50,137::INFO::[_cplogging:213] [09/Feb/2026:05:18:50] ENGINE Bus STARTING 127s 2026-02-09 05:18:50,239::INFO::[_cplogging:213] [09/Feb/2026:05:18:50] ENGINE Serving on http://127.0.0.1:8080 127s 2026-02-09 05:18:50,240::INFO::[_cplogging:213] [09/Feb/2026:05:18:50] ENGINE Bus STARTED 127s 2026-02-09 05:18:50,240::INFO::[sabnzbdplus:1390] Starting sabnzbdplus-4.5.4 127s 2026-02-09 05:18:50,241::INFO::[dirscanner:112] Dirscanner starting up 127s 2026-02-09 05:18:50,242::INFO::[notifier:166] Sending notification: SABnzbd - SABnzbd 4.5.4 started (type=startup, job_cat=None) 127s 2026-02-09 05:18:50,243::INFO::[__init__:460] Commit = 977dbc805f8c29fe097f2c646959471f06464b16 127s 2026-02-09 05:18:50,243::INFO::[__init__:461] Python-version = 3.13.11 (main, Dec 6 2025, 13:15:20) [GCC 15.2.0] 127s 2026-02-09 05:18:50,243::INFO::[__init__:462] CPU architecture = aarch64 127s 2026-02-09 05:18:50,243::INFO::[misc:1326] [N/A] Running external command: ['systemd-detect-virt'] 127s 2026-02-09 05:18:50,247::INFO::[__init__:463] Platform = kvm Ubuntu Resolute Raccoon (development branch) 127s 2026-02-09 05:18:50,247::INFO::[__init__:464] JSON-module = orjson 3.11.5 127s 2026-02-09 05:18:50,247::INFO::[__init__:465] Preferred encoding = UTF-8 127s 2026-02-09 05:18:50,247::INFO::[__init__:466] SSL version = OpenSSL 3.5.3 16 Sep 2025 157s 2026-02-09 05:19:19,756::INFO::[notifier:166] Sending notification: Warning - Signal 15 caught, saving and exiting... (type=warning, job_cat=None) 157s 2026-02-09 05:19:19,756::WARNING::[__init__:202] Signal 15 caught, saving and exiting... 157s 2026-02-09 05:19:19,757::INFO::[__init__:419] [N/A] Performing SABnzbd shutdown 157s 2026-02-09 05:19:19,757::INFO::[__init__:336] SABnzbd shutting down... 157s 2026-02-09 05:19:19,757::INFO::[directunpacker:551] Aborting all DirectUnpackers 157s 2026-02-09 05:19:19,758::INFO::[notifier:166] Sending notification: SABnzbd - Shutting down (type=startup, job_cat=None) 157s 2026-02-09 05:19:19,758::INFO::[downloader:643] Shutting down 157s 2026-02-09 05:19:19,759::INFO::[nzbqueue:230] Saving queue 157s 2026-02-09 05:19:19,759::INFO::[postproc:136] Saving postproc queue 157s 2026-02-09 05:19:19,759::INFO::[__init__:405] All processes stopped 157s 2026-02-09 05:19:19,759::INFO::[_cplogging:213] [09/Feb/2026:05:19:19] ENGINE Bus STOPPING 157s 2026-02-09 05:19:19,781::INFO::[_cplogging:213] [09/Feb/2026:05:19:19] ENGINE HTTP Server cherrypy._cpwsgi_server.CPWSGIServer(('127.0.0.1', 8080)) shut down 157s 2026-02-09 05:19:19,781::INFO::[_cplogging:213] [09/Feb/2026:05:19:19] ENGINE Bus STOPPED 157s 2026-02-09 05:19:19,781::INFO::[_cplogging:213] [09/Feb/2026:05:19:19] ENGINE Bus EXITING 157s 2026-02-09 05:19:19,781::INFO::[_cplogging:213] [09/Feb/2026:05:19:19] ENGINE Bus EXITED 157s 2026-02-09 05:19:19,782::INFO::[notifier:166] Sending notification: SABnzbd - SABnzbd shutdown finished (type=startup, job_cat=None) 157s 2026-02-09 05:19:19,782::INFO::[sabnzbdplus:1486] Leaving SABnzbd 157s console run finished, status = 0 172s mdk finished, status = 0 172s removed directory 'settings/Downloads/incomplete' 172s removed directory 'settings/Downloads/complete' 172s removed directory 'settings/Downloads' 172s removed 'settings/sEtthd91.ini' 172s removed 'settings/logs/sabnzbd.log' 172s removed directory 'settings/logs' 172s removed 'settings/admin/watched_data2.sab' 172s removed 'settings/admin/queue10.sab' 172s removed 'settings/admin/rss_data.sab' 172s removed 'settings/admin/postproc2.sab' 172s removed 'settings/admin/history1.db' 172s removed 'settings/admin/totals10.sab' 172s removed directory 'settings/admin' 172s removed 'settings/sEtthd91.ini.bak' 172s removed directory 'settings' 172s autopkgtest [05:19:34]: test basic-runs: -----------------------] 173s autopkgtest [05:19:35]: test basic-runs: - - - - - - - - - - results - - - - - - - - - - 173s basic-runs PASS (superficial) 173s autopkgtest [05:19:35]: test upstream-tests: preparing testbed 173s Reading package lists... 174s Building dependency tree... 174s Reading state information... 174s Solving dependencies... 174s The following NEW packages will be installed: 174s chromium-browser chromium-chromedriver libblas3 libgfortran5 liblapack3 174s python3-all python3-asgiref python3-brotli python3-brotlicffi 174s python3-decorator python3-django python3-flaky python3-flasgger 174s python3-flask python3-greenlet python3-h11 python3-httpbin python3-iniconfig 174s python3-itsdangerous python3-mistune python3-numpy python3-numpy-dev 174s python3-outcome python3-pandas python3-pandas-lib python3-pluggy python3-py 174s python3-pyfakefs python3-pytest python3-pytest-asyncio 174s python3-pytest-httpbin python3-pytest-httpserver python3-pytest-mock 174s python3-pytz python3-selenium python3-sniffio python3-sortedcontainers 174s python3-sqlparse python3-trio python3-trio-websocket python3-websocket 174s python3-werkzeug python3-wsproto python3-xlrd python3-xmltodict python3.14 174s python3.14-minimal snapd squashfs-tools 174s 0 upgraded, 49 newly installed, 0 to remove and 0 not upgraded. 174s Need to get 63.4 MB of archives. 174s After this operation, 292 MB of additional disk space will be used. 174s Get:1 http://ftpmaster.internal/ubuntu resolute/main arm64 squashfs-tools arm64 1:4.7.4-1 [222 kB] 174s Get:2 http://ftpmaster.internal/ubuntu resolute/main arm64 snapd arm64 2.74+ubuntu26.04 [35.6 MB] 175s Get:3 http://ftpmaster.internal/ubuntu resolute/universe arm64 chromium-browser arm64 2:1snap1-0ubuntu3 [50.2 kB] 175s Get:4 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-numpy-dev arm64 1:2.3.5+ds-3 [366 kB] 175s Get:5 http://ftpmaster.internal/ubuntu resolute/main arm64 libblas3 arm64 3.12.1-7ubuntu1 [181 kB] 175s Get:6 http://ftpmaster.internal/ubuntu resolute/main arm64 libgfortran5 arm64 15.2.0-12ubuntu1 [451 kB] 175s Get:7 http://ftpmaster.internal/ubuntu resolute/main arm64 liblapack3 arm64 3.12.1-7ubuntu1 [2299 kB] 175s Get:8 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-numpy arm64 1:2.3.5+ds-3 [4569 kB] 177s Get:9 http://ftpmaster.internal/ubuntu resolute/main arm64 python3.14-minimal arm64 3.14.2-1 [2548 kB] 177s Get:10 http://ftpmaster.internal/ubuntu resolute/universe arm64 chromium-chromedriver arm64 2:1snap1-0ubuntu3 [2312 B] 177s Get:11 http://ftpmaster.internal/ubuntu resolute/main arm64 python3.14 arm64 3.14.2-1 [816 kB] 178s Get:12 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-all arm64 3.13.9-3 [890 B] 178s Get:13 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-asgiref all 3.11.0-1 [25.2 kB] 178s Get:14 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-brotli arm64 1.1.0-2build6 [343 kB] 178s Get:15 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-brotlicffi arm64 1.2.0.0+ds-2 [21.2 kB] 178s Get:16 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-decorator all 5.2.1-2 [28.1 kB] 178s Get:17 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-sqlparse all 0.5.4-1 [34.3 kB] 178s Get:18 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-django all 3:5.2.9-0ubuntu2 [3038 kB] 178s Get:19 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-flaky all 3.8.1-4 [16.8 kB] 178s Get:20 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-itsdangerous all 2.2.0-2build1 [15.4 kB] 178s Get:21 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-werkzeug all 3.1.5-1 [170 kB] 178s Get:22 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-flask all 3.1.2-1ubuntu1 [84.7 kB] 178s Get:23 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-mistune all 3.1.4-1 [35.0 kB] 178s Get:24 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-flasgger all 0.9.7.2~dev2+dfsg-4 [1692 kB] 178s Get:25 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-h11 all 0.14.0-1.1 [51.6 kB] 178s Get:26 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-greenlet arm64 3.2.4-3 [178 kB] 179s Get:27 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-httpbin all 0.10.2+dfsg-2build1 [89.1 kB] 179s Get:28 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-iniconfig all 2.1.0-2 [6962 B] 179s Get:29 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-outcome all 1.2.0-2 [6208 B] 179s Get:30 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-pytz all 2025.2-5 [32.4 kB] 179s Get:31 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-pandas-lib arm64 2.3.3+dfsg-3 [6290 kB] 180s Get:32 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-pandas all 2.3.3+dfsg-3 [2948 kB] 180s Get:33 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-pluggy all 1.6.0-2 [21.1 kB] 180s Get:34 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-py all 1.11.0-6 [72.9 kB] 180s Get:35 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-xlrd all 2.0.2-2 [83.4 kB] 180s Get:36 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-pyfakefs all 5.10.2-1 [81.1 kB] 180s Get:37 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-pytest all 9.0.2-2 [277 kB] 180s Get:38 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-pytest-asyncio all 1.3.0-1 [13.8 kB] 180s Get:39 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-pytest-httpbin all 2.1.0-2 [13.1 kB] 180s Get:40 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-pytest-httpserver all 1.1.3-2 [19.2 kB] 180s Get:41 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-pytest-mock all 3.15.1-1 [11.9 kB] 180s Get:42 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-sniffio all 1.3.1-1 [7262 B] 180s Get:43 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-sortedcontainers all 2.4.0-2build1 [27.1 kB] 180s Get:44 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-trio all 0.32.0-1 [342 kB] 180s Get:45 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-wsproto all 1.3.2-1 [21.8 kB] 180s Get:46 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-trio-websocket all 0.12.2-1 [24.6 kB] 180s Get:47 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-websocket all 1.8.0-2build1 [38.8 kB] 180s Get:48 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-selenium all 4.24.4+dfsg-1 [104 kB] 180s Get:49 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-xmltodict all 0.13.0-1ubuntu1 [14.3 kB] 181s Preconfiguring packages ... 181s Fetched 63.4 MB in 6s (10.6 MB/s) 181s Selecting previously unselected package squashfs-tools. 181s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 138463 files and directories currently installed.) 181s Preparing to unpack .../squashfs-tools_1%3a4.7.4-1_arm64.deb ... 181s Unpacking squashfs-tools (1:4.7.4-1) ... 181s Selecting previously unselected package snapd. 181s Preparing to unpack .../snapd_2.74+ubuntu26.04_arm64.deb ... 181s Unpacking snapd (2.74+ubuntu26.04) ... 181s Setting up squashfs-tools (1:4.7.4-1) ... 181s Setting up snapd (2.74+ubuntu26.04) ... 182s Created symlink '/etc/systemd/system/multi-user.target.wants/snapd.apparmor.service' → '/usr/lib/systemd/system/snapd.apparmor.service'. 182s Created symlink '/etc/systemd/system/multi-user.target.wants/snapd.autoimport.service' → '/usr/lib/systemd/system/snapd.autoimport.service'. 182s Created symlink '/etc/systemd/system/multi-user.target.wants/snapd.core-fixup.service' → '/usr/lib/systemd/system/snapd.core-fixup.service'. 182s Created symlink '/etc/systemd/system/multi-user.target.wants/snapd.recovery-chooser-trigger.service' → '/usr/lib/systemd/system/snapd.recovery-chooser-trigger.service'. 182s Created symlink '/etc/systemd/system/multi-user.target.wants/snapd.seeded.service' → '/usr/lib/systemd/system/snapd.seeded.service'. 182s Created symlink '/etc/systemd/system/cloud-final.service.wants/snapd.seeded.service' → '/usr/lib/systemd/system/snapd.seeded.service'. 182s Created symlink '/etc/systemd/system/multi-user.target.wants/snapd.service' → '/usr/lib/systemd/system/snapd.service'. 182s Created symlink '/etc/systemd/system/timers.target.wants/snapd.snap-repair.timer' → '/usr/lib/systemd/system/snapd.snap-repair.timer'. 183s Created symlink '/etc/systemd/system/sockets.target.wants/snapd.socket' → '/usr/lib/systemd/system/snapd.socket'. 183s Created symlink '/etc/systemd/system/final.target.wants/snapd.system-shutdown.service' → '/usr/lib/systemd/system/snapd.system-shutdown.service'. 184s snapd.failure.service is a disabled or a static unit, not starting it. 184s snapd.gpio-chardev-setup.target is a disabled or a static unit, not starting it. 184s snapd.mounts.target is a disabled or a static unit, not starting it. 184s snapd.snap-repair.service is a disabled or a static unit, not starting it. 185s Selecting previously unselected package chromium-browser. 185s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 138582 files and directories currently installed.) 185s Preparing to unpack .../00-chromium-browser_2%3a1snap1-0ubuntu3_arm64.deb ... 185s => Installing the chromium snap 185s ==> Checking connectivity with the snap store 185s ==> Installing the chromium snap 190s Ensure prerequisites for "chromium" are available / Ensure prerequisites for "chromium" are available - Ensure prerequisites for "chromium" are available \ Ensure prerequisites for "chromium" are available | Ensure prerequisites for "chromium" are available / Ensure prerequisites for "chromium" are available - Ensure prerequisites for "chromium" are available \ Ensure prerequisites for "chromium" are available | Ensure prerequisites for "chromium" are available / Ensure prerequisites for "chromium" are available - Download snap "snapd" (25939) from channel "stable" \ Download snap "snapd" (25939) from channel "stable" | Download snap "snapd" (25939) from channel "stable" / Download snap "snapd" (25939) from channel "stable" - Download snap "snapd" (25939) from channel "stable" \[?25l Download snap "snapd" (25939) from channel "stable" 0% 1.81MB/s 24.0s Download snap "snapd" (25939) from channel "stable" 5% 9.6MB/s 4.34s Download snap "snapd" (25939) from channel "stable" 26% 34.5MB/s 942ms Download snap "snapd" (25939) from channel "stable" 50% 50.4MB/s 432ms Download snap "snapd" (25939) from channel "stable"  75% 59.5MB/s 187ms Download snap "snapd" (25939) from channel "stable" 100% 66.4MB/s 2.2ms Fetch and check assertions for snap "snapd" (25939) | Fetch and check assertions for snap "snapd" (25939) / Fetch and check assertions for snap "snapd" (25939) - Fetch and check assertions for snap "snapd" (25939) \ Mount snap "snapd" (25939) | Mount snap "snapd" (25939) / Mount snap "snapd" (25939) - Mount snap "snapd" (25939) \ Setup snap "snapd" (25939) security profiles | Setup snap "snapd" (25939) security profiles / Setup snap "snapd" (25939) security profiles - Setup snap "snapd" (25939) security profiles \ Setup snap "snapd" (25939) security profiles | Setup snap "snapd" (25939) security profiles / Setup snap "snapd" (25939) security profiles - Automatically connect eligible plugs and slots of snap "snapd" \ 2026-02-09T05:19:52Z INFO Waiting for automatic snapd restart... 261s Automatically connect eligible plugs and slots of snap "snapd" | Automatically connect eligible plugs and slots of snap "snapd" / Automatically connect eligible plugs and slots of snap "snapd" - Automatically connect eligible plugs and slots of snap "snapd" \ Automatically connect eligible plugs and slots of snap "snapd" | Automatically connect eligible plugs and slots of snap "snapd" / Automatically connect eligible plugs and slots of snap "snapd" - Automatically connect eligible plugs and slots of snap "snapd" \ Automatically connect eligible plugs and slots of snap "snapd" | Automatically connect eligible plugs and slots of snap "snapd" / Automatically connect eligible plugs and slots of snap "snapd" - Automatically connect eligible plugs and slots of snap "snapd" \ Automatically connect eligible plugs and slots of snap "snapd" | Automatically connect eligible plugs and slots of snap "snapd" / Automatically connect eligible plugs and slots of snap "snapd" - Automatically connect eligible plugs and slots of snap "snapd" \ Automatically connect eligible plugs and slots of snap "snapd" | Automatically connect eligible plugs and slots of snap "snapd" / Automatically connect eligible plugs and slots of snap "snapd" - Automatically connect eligible plugs and slots of snap "snapd" \ Automatically connect eligible plugs and slots of snap "snapd" | Automatically connect eligible plugs and slots of snap "snapd" / Automatically connect eligible plugs and slots of snap "snapd" - Automatically connect eligible plugs and slots of snap "snapd" \ Automatically connect eligible plugs and slots of snap "snapd" | Automatically connect eligible plugs and slots of snap "snapd" / Automatically connect eligible plugs and slots of snap "snapd" - Automatically connect eligible plugs and slots of snap "snapd" \ Automatically connect eligible plugs and slots of snap "snapd" | Automatically connect eligible plugs and slots of snap "snapd" / Automatically connect eligible plugs and slots of snap "snapd" - Automatically connect eligible plugs and slots of snap "snapd" \ Download snap "core24" (1350) from channel "stable" | Download snap "core24" (1350) from channel "stable" / Download snap "core24" (1350) from channel "stable" - Download snap "core24" (1350) from channel "stable" \ Download snap "core24" (1350) from channel "stable" | Download snap "core24" (1350) from channel "stable" / Download snap "core24" (1350) from channel "stable" - Download snap "core24" (1350) from channel "stable" \ Download snap "core24" (1350) from channel "stable" | Download snap "core24" (1350) from channel "stable" / Download snap "core24" (1350) from channel "stable" - Download snap "core24" (1350) from channel "stable" \ Download snap "core24" (1350) from channel "stable" | Download snap "core24" (1350) from channel "stable" / Download snap "core24" (1350) from channel "stable" - Download snap "core24" (1350) from channel "stable" \ Download snap "core24" (1350) from channel "stable" | Download snap "core24" (1350) from channel "stable" / Download snap "core24" (1350) from channel "stable" - Download snap "core24" (1350) from channel "stable" \ Download snap "core24" (1350) from channel "stable" | Download snap "core24" (1350) from channel "stable" / Download snap "core24" (1350) from channel "stable" - Download snap "core24" (1350) from channel "stable" \ Download snap "core24" (1350) from channel "stable" | Download snap "core24" (1350) from channel "stable" / Download snap "core24" (1350) from channel "stable" - Download snap "core24" (1350) from channel "stable" \ Download snap "core24" (1350) from channel "stable" | Download snap "core24" (1350) from channel "stable" / Download snap "core24" (1350) from channel "stable" - Download snap "core24" (1350) from channel "stable" \ Download snap "core24" (1350) from channel "stable" |[?25l Download snap "core24" (1350) from channel "stable" 0% 0B/s ages! Download snap "core24" (1350) from channel "stable" 0% 0B/s ages! Download snap "core24" (1350) from channel "stable" 0% 455kB/s 2m22s Download snap "core24" (1350) from channel "stable" 0% 341kB/s 3m10s Download snap "core24" (1350) from channel "stable" 0% 518kB/s 2m05s Download snap "core24" (1350) from channel "stable" 0% 432kB/s 2m29s Download snap "core24" (1350) from channel "stable" 0% 371kB/s 2m54s Download snap "core24" (1350) from channel "stable" 1% 478kB/s 2m15s Download snap "core24" (1350) from channel "stable" 1% 425kB/s 2m32s Download snap "core24" (1350) from channel "stable" 1% 506kB/s 2m07s Download snap "core24" (1350) from channel "stable" 1% 460kB/s 2m20s Download snap "core24" (1350) from channel "stable" 1% 524kB/s 2m03s Download snap "core24" (1350) from channel "stable" 1% 483kB/s 2m13s Download snap "core24" (1350) from channel "stable" 1% 537kB/s 1m59s Download snap "core24" (1350) from channel "stable" 1% 583kB/s 1m50s Download snap "core24" (1350) from channel "stable" 2% 623kB/s 1m42s Download snap "core24" (1350) from channel "stable" 2% 659kB/s 1m37s Download snap "core24" (1350) from channel "stable" 2% 759kB/s 1m24s Download snap "core24" (1350) from channel "stable" 2% 783kB/s 1m21s Download snap "core24" (1350) from channel "stable" 3% 867kB/s 1m13s Download snap "core24" (1350) from channel "stable" 3% 884kB/s 1m11s Download snap "core24" (1350) from channel "stable" 3% 844kB/s 1m15s Download snap "core24" (1350) from channel "stable" 3% 807kB/s 1m18s Download snap "core24" (1350) from channel "stable" 3% 774kB/s 1m21s Download snap "core24" (1350) from channel "stable" 3% 742kB/s 1m25s Download snap "core24" (1350) from channel "stable" 3% 714kB/s 1m28s Download snap "core24" (1350) from channel "stable" 3% 687kB/s 1m32s Download snap "core24" (1350) from channel "stable" 3% 663kB/s 1m35s Download snap "core24" (1350) from channel "stable" 3% 640kB/s 1m38s Download snap "core24" (1350) from channel "stable" 3% 618kB/s 1m42s Download snap "core24" (1350) from channel "stable" 3% 599kB/s 1m45s Download snap "core24" (1350) from channel "stable" 3% 580kB/s 1m49s Download snap "core24" (1350) from channel "stable" 3% 562kB/s 1m52s Download snap "core24" (1350) from channel "stable" 3% 546kB/s 1m55s Download snap "core24" (1350) from channel "stable" 3% 530kB/s 1m59s Download snap "core24" (1350) from channel "stable" 3% 516kB/s 2m02s Download snap "core24" (1350) from channel "stable" 3% 502kB/s 2m05s Download snap "core24" (1350) from channel "stable" 3% 489kB/s 2m09s Download snap "core24" (1350) from channel "stable" 3% 476kB/s 2m12s Download snap "core24" (1350) from channel "stable" 3% 464kB/s 2m16s Download snap "core24" (1350) from channel "stable" 3% 453kB/s 2m19s Download snap "core24" (1350) from channel "stable" 3% 442kB/s 2m22s Download snap "core24" (1350) from channel "stable" 3% 432kB/s 2m26s Download snap "core24" (1350) from channel "stable" 3% 422kB/s 2m29s Download snap "core24" (1350) from channel "stable" 3% 413kB/s 2m33s Download snap "core24" (1350) from channel "stable" 3% 404kB/s 2m36s Download snap "core24" (1350) from channel "stable" 3% 395kB/s 2m39s Download snap "core24" (1350) from channel "stable" 3% 387kB/s 2m43s Download snap "core24" (1350) from channel "stable" 3% 379kB/s 2m46s Download snap "core24" (1350) from channel "stable" 3% 371kB/s 2m50s Download snap "core24" (1350) from channel "stable" 3% 364kB/s 2m53s Download snap "core24" (1350) from channel "stable" 3% 357kB/s 2m56s Download snap "core24" (1350) from channel "stable" 3% 350kB/s 2m60s Download snap "core24" (1350) from channel "stable" 3% 344kB/s 3m03s Download snap "core24" (1350) from channel "stable" 3% 360kB/s 2m55s Download snap "core24" (1350) from channel "stable" 3% 353kB/s 2m58s Download snap "core24" (1350) from channel "stable" 3% 369kB/s 2m50s Download snap "core24" (1350) from channel "stable" 4% 384kB/s 2m43s Download snap "core24" (1350) from channel "stable" 4% 377kB/s 2m46s Download snap "core24" (1350) from channel "stable" 4% 391kB/s 2m40s Download snap "core24" (1350) from channel "stable" 4% 405kB/s 2m34s Download snap "core24" (1350) from channel "stable" 4% 418kB/s 2m29s Download snap "core24" (1350) from channel "stable" 4% 431kB/s 2m24s Download snap "core24" (1350) from channel "stable" 5% 444kB/s 2m19s Download snap "core24" (1350) from channel "stable" 5% 456kB/s 2m16s Download snap "core24" (1350) from channel "stable" 5% 467kB/s 2m12s Download snap "core24" (1350) from channel "stable" 5% 497kB/s 2m03s Download snap "core24" (1350) from channel "stable" 6% 508kB/s 2m01s Download snap "core24" (1350) from channel "stable" 6% 554kB/s 1m50s Download snap "core24" (1350) from channel "stable" 7% 581kB/s 1m44s Download snap "core24" (1350) from channel "stable" 7% 625kB/s 1m36s Download snap "core24" (1350) from channel "stable" 8% 667kB/s 1m30s Download snap "core24" (1350) from channel "stable" 9% 726kB/s 1m22s Download snap "core24" (1350) from channel "stable" 9% 782kB/s 1m15s Download snap "core24" (1350) from channel "stable" 10% 853kB/s 1m08s Download snap "core24" (1350) from channel "stable" 12% 939kB/s 1m01s Download snap "core24" (1350) from channel "stable" 13% 1.04MB/s 54.3s Download snap "core24" (1350) from channel "stable" 15% 1.15MB/s 48.1s Download snap "core24" (1350) from channel "stable" 17% 1.28MB/s 42.5s Download snap "core24" (1350) from channel "stable" 19% 1.41MB/s 37.4s Download snap "core24" (1350) from channel "stable" 21% 1.59MB/s 32.1s Download snap "core24" (1350) from channel "stable" 24% 1.78MB/s 27.7s Download snap "core24" (1350) from channel "stable" 27% 2.01MB/s 23.4s Download snap "core24" (1350) from channel "stable" 31% 2.27MB/s 19.7s Download snap "core24" (1350) from channel "stable" 36% 2.56MB/s 16.3s Download snap "core24" (1350) from channel "stable" 41% 2.90MB/s 13.2s Download snap "core24" (1350) from channel "stable" 46% 3.22MB/s 10.9s Download snap "core24" (1350) from channel "stable" 51% 3.53MB/s 9.03s Download snap "core24" (1350) from channel "stable" 56% 3.85MB/s 7.40s Download snap "core24" (1350) from channel "stable" 61% 4.15MB/s 6.08s Download snap "core24" (1350) from channel "stable"  66% 4.44MB/s 4.95s Download snap "core24" (1350) from channel "stable"  71% 4.72MB/s 3.96s Download snap "core24" (1350) from channel "stable"  76% 5.01MB/s 3.05s Download snap "core24" (1350) from channel "stable" 81% 5.29MB/s 2.27s Download snap "core24" (1350) from channel "stable" 87% 5.55MB/s 1.58s Download snap "core24" (1350) from channel "stable" 92% 5.84MB/s 896ms Download snap "core24" (1350) from channel "stable" 97% 6.09MB/s 323ms Download snap "core24" (1350) from channel "stable" 100% 6.22MB/s 0.0ns Fetch and check assertions for snap "core24" (1350) / Fetch and check assertions for snap "core24" (1350) - Fetch and check assertions for snap "core24" (1350) \ Fetch and check assertions for snap "core24" (1350) | Mount snap "core24" (1350) / Mount snap "core24" (1350) - Mount snap "core24" (1350) \ Mount snap "core24" (1350) | Mount snap "core24" (1350) / Make snap "core24" (1350) available to the system - Run install hook of "core24" snap if present \ Download snap "gnome-46-2404" (154) from channel "stable" | Download snap "gnome-46-2404" (154) from channel "stable" / Download snap "gnome-46-2404" (154) from channel "stable" - Download snap "core22" (2293) from channel "stable" \ Download snap "core22" (2293) from channel "stable" | Download snap "core22" (2293) from channel "stable" / Download snap "core22" (2293) from channel "stable" - Download snap "core22" (2293) from channel "stable" \ Download snap "core22" (2293) from channel "stable" |[?25l Download snap "core22" (2293) from channel "stable" 1% 7.56MB/s 9.45s Download snap "core22" (2293) from channel "stable" 11% 36.7MB/s 1.74s Download snap "core22" (2293) from channel "stable" 22% 48.2MB/s 1.17s Download snap "core22" (2293) from channel "stable" 37% 59.9MB/s 756ms Download snap "core22" (2293) from channel "stable" 52% 67.0MB/s 520ms Download snap "core22" (2293) from channel "stable"  66% 71.3MB/s 346ms Download snap "core22" (2293) from channel "stable" 81% 75.0MB/s 186ms Download snap "core22" (2293) from channel "stable" 95% 77.1MB/s  48ms Fetch and check assertions for snap "core22" (2293) / Fetch and check assertions for snap "core22" (2293) - Mount snap "core22" (2293) \ Mount snap "core22" (2293) | Mount snap "core22" (2293) / Mount snap "core22" (2293) - Mount snap "core22" (2293) \ Mount snap "core22" (2293) | Mount snap "core22" (2293) /[?25l Download snap "gnome-46-2404" (154) from channel "stable" 0% 9.9MB/s 58.7s Run install hook of "core22" snap if present - Ensure prerequisites for "gtk-common-themes" are available \ Ensure prerequisites for "gtk-common-themes" are available | Download snap "gnome-46-2404" (154) from channel "stable" 0% 2.08MB/s 4m39s Download snap "bare" (5) from channel "stable" / Download snap "bare" (5) from channel "stable" - Download snap "bare" (5) from channel "stable" \ Download snap "bare" (5) from channel "stable" | Download snap "bare" (5) from channel "stable" / Download snap "bare" (5) from channel "stable" - Download snap "bare" (5) from channel "stable" \ Fetch and check assertions for snap "bare" (5) | Download snap "gnome-46-2404" (154) from channel "stable" 0% 751kB/s 12.8m Mount snap "bare" (5) / Mount snap "bare" (5) - Mount snap "bare" (5) \ Mount snap "bare" (5) | Download snap "gnome-46-2404" (154) from channel "stable" 0% 1.09MB/s 8m49s Download snap "gnome-46-2404" (154) from channel "stable" 0% 1.03MB/s 9m18s Download snap "gtk-common-themes" (1535) from channel "stable" / Download snap "gtk-common-themes" (1535) from channel "stable" - Download snap "gtk-common-themes" (1535) from channel "stable" \[?25l Download snap "gtk-common-themes" (1535) from channel "stab… 0% 0B/s ages! Download snap "gtk-common-themes" (1535) from channel "stab… 0% 802kB/s 1m60s Download snap "gtk-common-themes" (1535) from channel "stab… 0% 552kB/s 2m54s Download snap "gtk-common-themes" (1535) from channel "stab… 0% 409kB/s 3m55s Download snap "gtk-common-themes" (1535) from channel "stab… 0% 333kB/s 4m48s Download snap "gtk-common-themes" (1535) from channel "stab… 0% 551kB/s 2m54s Download snap "gtk-common-themes" (1535) from channel "stab… 0% 471kB/s 3m23s Download snap "gtk-common-themes" (1535) from channel "stab… 0% 407kB/s 3m55s Download snap "gtk-common-themes" (1535) from channel "stab… 1% 546kB/s 2m55s Download snap "gtk-common-themes" (1535) from channel "stab… 1% 494kB/s 3m13s Download snap "gtk-common-themes" (1535) from channel "stab… 1% 601kB/s 2m39s Download snap "gtk-common-themes" (1535) from channel "stab… 1% 553kB/s 2m52s Download snap "gtk-common-themes" (1535) from channel "stab… 1% 635kB/s 2m30s Download snap "gtk-common-themes" (1535) from channel "stab… 1% 513kB/s 3m06s Download snap "gtk-common-themes" (1535) from channel "stab… 2% 775kB/s 2m02s Download snap "gtk-common-themes" (1535) from channel "stab… 2% 594kB/s 2m39s Download snap "gtk-common-themes" (1535) from channel "stab… 4% 1.27MB/s 1m12s Download snap "gtk-common-themes" (1535) from channel "stab… 4% 1.29MB/s 1m12s Download snap "gtk-common-themes" (1535) from channel "stab… 5% 1.36MB/s 1m07s Download snap "gtk-common-themes" (1535) from channel "stab… 5% 1.43MB/s 1m04s Download snap "gtk-common-themes" (1535) from channel "stab… 5% 1.50MB/s 1m01s Download snap "gtk-common-themes" (1535) from channel "stab… 6% 1.61MB/s 56.0s Download snap "gtk-common-themes" (1535) from channel "stab… 7% 1.72MB/s 52.2s Download snap "gtk-common-themes" (1535) from channel "stab… 8% 1.87MB/s 47.6s Download snap "gtk-common-themes" (1535) from channel "stab… 8% 2.01MB/s 43.7s Download snap "gtk-common-themes" (1535) from channel "stab… 9% 2.20MB/s 39.6s Download snap "gtk-common-themes" (1535) from channel "stab… 11% 2.42MB/s 35.5s Download snap "gtk-common-themes" (1535) from channel "stab… 12% 2.63MB/s 32.2s Download snap "gtk-common-themes" (1535) from channel "stab… 13% 2.92MB/s 28.5s Download snap "gtk-common-themes" (1535) from channel "stab… 15% 3.23MB/s 25.2s Download snap "gtk-common-themes" (1535) from channel "stab… 18% 3.62MB/s 21.9s Download snap "gtk-common-themes" (1535) from channel "stab… 20% 4.06MB/s 18.9s Download snap "gtk-common-themes" (1535) from channel "stab… 23% 4.57MB/s 16.2s Download snap "gtk-common-themes" (1535) from channel "stab… 27% 5.14MB/s 13.7s Download snap "gtk-common-themes" (1535) from channel "stab… 30% 5.71MB/s 11.7s Download snap "gtk-common-themes" (1535) from channel "stab… 34% 6.27MB/s 10.1s Download snap "gtk-common-themes" (1535) from channel "stab… 37% 6.76MB/s 8.89s Download snap "gtk-common-themes" (1535) from channel "stab… 41% 7.24MB/s 7.85s Download snap "gtk-common-themes" (1535) from channel "stab… 44% 7.69MB/s 6.95s Download snap "gtk-common-themes" (1535) from channel "stab… 48% 8.16MB/s 6.12s Download snap "gtk-common-themes" (1535) from channel "stab… 52% 8.61MB/s 5.39s Download snap "gtk-common-themes" (1535) from channel "stab… 55% 9.01MB/s 4.78s Download snap "gtk-common-themes" (1535) from channel "stab… 59% 9.41MB/s 4.20s Download snap "gtk-common-themes" (1535) from channel "stab… 63% 9.9MB/s 3.61s Download snap "gtk-common-themes" (1535) from channel "stab… 67% 10.3MB/s 3.10s Download snap "gtk-common-themes" (1535) from channel "stab… 70% 10.7MB/s 2.66s Download snap "gtk-common-themes" (1535) from channel "stab… 74% 11.0MB/s 2.28s Download snap "gtk-common-themes" (1535) from channel "stab…  77% 11.3MB/s 1.92s Download snap "gtk-common-themes" (1535) from channel "stab… 81% 11.7MB/s 1.52s Download snap "gtk-common-themes" (1535) from channel "stab… 84% 11.3MB/s 1.35s Download snap "gtk-common-themes" (1535) from channel "stab… 91% 12.0MB/s 748ms Download snap "gtk-common-themes" (1535) from channel "stab… 94% 12.3MB/s 444ms Download snap "gtk-common-themes" (1535) from channel "stab… 98% 12.6MB/s 154ms Download snap "gtk-common-themes" (1535) from channel "stab… 100% 12.7MB/s 0.0ns Fetch and check assertions for snap "gtk-common-themes" (1535) | Fetch and check assertions for snap "gtk-common-themes" (1535) / Connect cups:raw-usb to snapd:raw-usb - Connect cups:network-bind to snapd:network-bind \ Mount snap "gtk-common-themes" (1535) | Setup snap "cups" (1143) security profiles for auto-connections / Setup snap "cups" (1143) security profiles for auto-connections - Setup snap "cups" (1143) security profiles for auto-connections \ Setup snap "cups" (1143) security profiles for auto-connections | Setup snap "cups" (1143) security profiles for auto-connections / Setup snap "cups" (1143) security profiles for auto-connections - Setup snap "cups" (1143) security profiles for auto-connections \ Setup snap "cups" (1143) security profiles for auto-connections | Setup snap "cups" (1143) security profiles for auto-connections / Setup snap "cups" (1143) security profiles for auto-connections - Setup snap "cups" (1143) security profiles for auto-connections \ Setup snap "cups" (1143) security profiles for auto-connections | Setup snap "cups" (1143) security profiles for auto-connections / Setup snap "cups" (1143) security profiles for auto-connections - Setup snap "cups" (1143) security profiles for auto-connections \ Setup snap "cups" (1143) security profiles for auto-connections | Setup snap "cups" (1143) security profiles for auto-connections / Setup snap "cups" (1143) security profiles for auto-connections - Setup snap "cups" (1143) security profiles for auto-connections \ Setup snap "cups" (1143) security profiles for auto-connections | Setup snap "cups" (1143) security profiles for auto-connections / Setup snap "cups" (1143) security profiles for auto-connections - Setup snap "cups" (1143) security profiles for auto-connections \ Setup snap "cups" (1143) security profiles for auto-connections | Setup snap "cups" (1143) security profiles for auto-connections / Setup snap "cups" (1143) security profiles for auto-connections - Setup snap "cups" (1143) security profiles for auto-connections \ Setup snap "cups" (1143) security profiles for auto-connections | Setup snap "cups" (1143) security profiles for auto-connections / Setup snap "cups" (1143) security profiles for auto-connections - Setup snap "cups" (1143) security profiles for auto-connections \ Setup snap "cups" (1143) security profiles for auto-connections | Setup snap "cups" (1143) security profiles for auto-connections / Setup snap "cups" (1143) security profiles for auto-connections - Setup snap "cups" (1143) security profiles for auto-connections \ Setup snap "cups" (1143) security profiles for auto-connections | Setup snap "cups" (1143) security profiles for auto-connections / Setup snap "cups" (1143) security profiles for auto-connections - Setup snap "cups" (1143) security profiles for auto-connections \ Setup snap "cups" (1143) security profiles for auto-connections | Setup snap "cups" (1143) security profiles for auto-connections / Setup snap "cups" (1143) security profiles for auto-connections - Setup snap "cups" (1143) security profiles for auto-connections \ Setup snap "cups" (1143) security profiles for auto-connections | Setup snap "cups" (1143) security profiles for auto-connections / Setup snap "cups" (1143) security profiles for auto-connections - Setup snap "cups" (1143) security profiles for auto-connections \ Setup snap "cups" (1143) security profiles for auto-connections | Setup snap "cups" (1143) security profiles for auto-connections / Setup snap "cups" (1143) security profiles for auto-connections - Setup snap "cups" (1143) security profiles for auto-connections \ Setup snap "cups" (1143) security profiles for auto-connections | Setup snap "cups" (1143) security profiles for auto-connections / Setup snap "cups" (1143) security profiles for auto-connections - Setup snap "cups" (1143) security profiles for auto-connections \ Setup snap "cups" (1143) security profiles for auto-connections | Setup snap "cups" (1143) security profiles for auto-connections / Setup snap "cups" (1143) security profiles for auto-connections - Setup snap "cups" (1143) security profiles for auto-connections \ Setup snap "cups" (1143) security profiles for auto-connections | Setup snap "cups" (1143) security profiles for auto-connections / Setup snap "cups" (1143) security profiles for auto-connections - Setup snap "cups" (1143) security profiles for auto-connections \ Setup snap "cups" (1143) security profiles for auto-connections | Setup snap "gtk-common-themes" (1535) security profiles /[?25l Run install hook of "gtk-common-themes" snap if present - Download snap "gnome-46-2404" (154) from channel "stable" 72% 1.51GB/s 107ms Download snap "gnome-46-2404" (154) from channel "stable"  73% 1.08GB/s 146ms Download snap "gnome-46-2404" (154) from channel "stable"  74% 754MB/s 203ms Download snap "gnome-46-2404" (154) from channel "stable"  74% 627MB/s 237ms Download snap "gnome-46-2404" (154) from channel "stable"  75% 546MB/s 266ms Download snap "gnome-46-2404" (154) from channel "stable"  76% 484MB/s 292ms Download snap "gnome-46-2404" (154) from channel "stable"  76% 432MB/s 319ms Download snap "gnome-46-2404" (154) from channel "stable"  77% 392MB/s 343ms Download snap "gnome-46-2404" (154) from channel "stable"  77% 359MB/s 368ms Download snap "gnome-46-2404" (154) from channel "stable" 78% 331MB/s 388ms Download snap "gnome-46-2404" (154) from channel "stable" 79% 308MB/s 402ms Download snap "gnome-46-2404" (154) from channel "stable" 79% 289MB/s 417ms Download snap "gnome-46-2404" (154) from channel "stable" 80% 271MB/s 430ms Download snap "gnome-46-2404" (154) from channel "stable" 80% 257MB/s 441ms Download snap "gnome-46-2404" (154) from channel "stable" 81% 244MB/s 450ms Download snap "gnome-46-2404" (154) from channel "stable" 81% 231MB/s 465ms Download snap "gnome-46-2404" (154) from channel "stable" 82% 221MB/s 470ms Download snap "gnome-46-2404" (154) from channel "stable" 82% 211MB/s 493ms Download snap "gnome-46-2404" (154) from channel "stable" 82% 201MB/s 517ms Download snap "gnome-46-2404" (154) from channel "stable" 82% 193MB/s 533ms Download snap "gnome-46-2404" (154) from channel "stable" 83%  186MB/s 533ms Download snap "gnome-46-2404" (154) from channel "stable" 83%  179MB/s 540ms Download snap "gnome-46-2404" (154) from channel "stable" 84%  173MB/s 545ms Download snap "gnome-46-2404" (154) from channel "stable" 84% 167MB/s 558ms Download snap "gnome-46-2404" (154) from channel "stable" 84% 162MB/s 561ms Download snap "gnome-46-2404" (154) from channel "stable" 85% 158MB/s 555ms Download snap "gnome-46-2404" (154) from channel "stable" 86% 153MB/s 547ms Download snap "gnome-46-2404" (154) from channel "stable" 86% 149MB/s 538ms Download snap "gnome-46-2404" (154) from channel "stable" 87% 146MB/s 528ms Download snap "gnome-46-2404" (154) from channel "stable" 87% 142MB/s 515ms Download snap "gnome-46-2404" (154) from channel "stable" 88% 139MB/s 502ms Download snap "gnome-46-2404" (154) from channel "stable" 88% 136MB/s 497ms Download snap "gnome-46-2404" (154) from channel "stable" 89% 133MB/s 481ms Download snap "gnome-46-2404" (154) from channel "stable" 90% 130MB/s 465ms Download snap "gnome-46-2404" (154) from channel "stable" 90% 127MB/s 447ms Download snap "gnome-46-2404" (154) from channel "stable" 91% 125MB/s 427ms Download snap "gnome-46-2404" (154) from channel "stable" 91% 123MB/s 407ms Download snap "gnome-46-2404" (154) from channel "stable" 92% 120MB/s 396ms Download snap "gnome-46-2404" (154) from channel "stable" 92% 118MB/s 373ms Download snap "gnome-46-2404" (154) from channel "stable" 93% 116MB/s 349ms Download snap "gnome-46-2404" (154) from channel "stable" 94% 114MB/s 324ms Download snap "gnome-46-2404" (154) from channel "stable" 94% 112MB/s 298ms Download snap "gnome-46-2404" (154) from channel "stable" 95% 111MB/s 270ms Download snap "gnome-46-2404" (154) from channel "stable" 95% 109MB/s 242ms Download snap "gnome-46-2404" (154) from channel "stable" 96% 107MB/s 213ms Download snap "gnome-46-2404" (154) from channel "stable" 96% 105MB/s 194ms Download snap "gnome-46-2404" (154) from channel "stable" 97% 104MB/s 163ms Download snap "gnome-46-2404" (154) from channel "stable" 98% 103MB/s 131ms Download snap "gnome-46-2404" (154) from channel "stable" 98% 101MB/s 98ms Download snap "gnome-46-2404" (154) from channel "stable" 99% 100MB/s 64ms Download snap "gnome-46-2404" (154) from channel "stable" 100% 98.7MB/s 29ms Download snap "gnome-46-2404" (154) from channel "stable" 100% 97.2MB/s 0.0ns Download snap "gnome-46-2404" (154) from channel "stable" 100% 95.5MB/s 0.0ns Fetch and check assertions for snap "gnome-46-2404" (154) \ Fetch and check assertions for snap "gnome-46-2404" (154) | Fetch and check assertions for snap "gnome-46-2404" (154) / Fetch and check assertions for snap "gnome-46-2404" (154) - Mount snap "gnome-46-2404" (154) \ Mount snap "gnome-46-2404" (154) | Mount snap "gnome-46-2404" (154) / Mount snap "gnome-46-2404" (154) - Mount snap "gnome-46-2404" (154) \ Mount snap "gnome-46-2404" (154) | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Run install hook of "gnome-46-2404" snap if present \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Automatically connect eligible plugs and slots of snap "chromium" | Automatically connect eligible plugs and slots of snap "chromium" / Automatically connect eligible plugs and slots of snap "chromium" - Automatically connect eligible plugs and slots of snap "chromium" \ Connect chromium:unity7 to snapd:unity7 | Connect chromium:wayland to snapd:wayland / Connect chromium:desktop-legacy to snapd:desktop-legacy - Setup snap "chromium" (3353) security profiles for auto-connections \ Setup snap "chromium" (3353) security profiles for auto-connections | Setup snap "chromium" (3353) security profiles for auto-connections / Setup snap "chromium" (3353) security profiles for auto-connections - Setup snap "chromium" (3353) security profiles for auto-connections \ Setup snap "chromium" (3353) security profiles for auto-connections | Setup snap "chromium" (3353) security profiles for auto-connections / Setup snap "chromium" (3353) security profiles for auto-connections - Setup snap "chromium" (3353) security profiles for auto-connections \ Setup snap "chromium" (3353) security profiles for auto-connections | Setup snap "chromium" (3353) security profiles for auto-connections / Setup snap "chromium" (3353) security profiles for auto-connections - Setup snap "chromium" (3353) security profiles for auto-connections \ Setup snap "chromium" (3353) security profiles for auto-connections | Setup snap "chromium" (3353) security profiles for auto-connections / Setup snap "chromium" (3353) security profiles for auto-connections - Setup snap "chromium" (3353) security profiles for auto-connections \ Setup snap "chromium" (3353) security profiles for auto-connections | Setup snap "chromium" (3353) security profiles for auto-connections / Setup snap "chromium" (3353) security profiles for auto-connections - Setup snap "chromium" (3353) security profiles for auto-connections \ Setup snap "chromium" (3353) security profiles for auto-connections | Setup snap "chromium" (3353) security profiles for auto-connections / Setup snap "chromium" (3353) security profiles for auto-connections - Setup snap "chromium" (3353) security profiles for auto-connections \ Setup snap "chromium" (3353) security profiles for auto-connections | Setup snap "chromium" (3353) security profiles for auto-connections / Setup snap "chromium" (3353) security profiles for auto-connections - Setup snap "chromium" (3353) security profiles for auto-connections \ Setup snap "chromium" (3353) security profiles for auto-connections | Setup snap "chromium" (3353) security profiles for auto-connections / Setup snap "chromium" (3353) security profiles for auto-connections - Setup snap "chromium" (3353) security profiles for auto-connections \ Setup snap "chromium" (3353) security profiles for auto-connections | Setup snap "chromium" (3353) security profiles for auto-connections / Setup snap "chromium" (3353) security profiles for auto-connections - Setup snap "chromium" (3353) security profiles for auto-connections \ Setup snap "chromium" (3353) security profiles for auto-connections | Setup snap "chromium" (3353) security profiles for auto-connections / Setup snap "chromium" (3353) security profiles for auto-connections - Setup snap "chromium" (3353) security profiles for auto-connections \ Setup snap "chromium" (3353) security profiles for auto-connections | Run configure hook of "chromium" snap if present / Run configure hook of "chromium" snap if present - Run configure hook of "chromium" snap if present \ Run configure hook of "chromium" snap if present | Run configure hook of "chromium" snap if present / Run health check of "chromium" snap - Run service command "stop" for services ["daemon"] of snap "chromium" \ Run service command "stop" for services ["daemon"] of snap "chromium" | Run service command "stop" for services ["daemon"] of snap "chromium" / [?25hchromium 144.0.7559.109 from Canonical✓ installed 261s => Snap installation complete 261s Unpacking chromium-browser (2:1snap1-0ubuntu3) ... 261s Selecting previously unselected package python3-numpy-dev:arm64. 261s Preparing to unpack .../01-python3-numpy-dev_1%3a2.3.5+ds-3_arm64.deb ... 261s Unpacking python3-numpy-dev:arm64 (1:2.3.5+ds-3) ... 261s Selecting previously unselected package libblas3:arm64. 261s Preparing to unpack .../02-libblas3_3.12.1-7ubuntu1_arm64.deb ... 261s Unpacking libblas3:arm64 (3.12.1-7ubuntu1) ... 261s Selecting previously unselected package libgfortran5:arm64. 261s Preparing to unpack .../03-libgfortran5_15.2.0-12ubuntu1_arm64.deb ... 261s Unpacking libgfortran5:arm64 (15.2.0-12ubuntu1) ... 261s Selecting previously unselected package liblapack3:arm64. 261s Preparing to unpack .../04-liblapack3_3.12.1-7ubuntu1_arm64.deb ... 261s Unpacking liblapack3:arm64 (3.12.1-7ubuntu1) ... 261s Selecting previously unselected package python3-numpy. 261s Preparing to unpack .../05-python3-numpy_1%3a2.3.5+ds-3_arm64.deb ... 261s Unpacking python3-numpy (1:2.3.5+ds-3) ... 261s Selecting previously unselected package python3.14-minimal. 261s Preparing to unpack .../06-python3.14-minimal_3.14.2-1_arm64.deb ... 261s Unpacking python3.14-minimal (3.14.2-1) ... 261s Selecting previously unselected package chromium-chromedriver. 261s Preparing to unpack .../07-chromium-chromedriver_2%3a1snap1-0ubuntu3_arm64.deb ... 261s Unpacking chromium-chromedriver (2:1snap1-0ubuntu3) ... 261s Selecting previously unselected package python3.14. 261s Preparing to unpack .../08-python3.14_3.14.2-1_arm64.deb ... 261s Unpacking python3.14 (3.14.2-1) ... 261s Selecting previously unselected package python3-all. 261s Preparing to unpack .../09-python3-all_3.13.9-3_arm64.deb ... 261s Unpacking python3-all (3.13.9-3) ... 261s Selecting previously unselected package python3-asgiref. 261s Preparing to unpack .../10-python3-asgiref_3.11.0-1_all.deb ... 261s Unpacking python3-asgiref (3.11.0-1) ... 261s Selecting previously unselected package python3-brotli. 261s Preparing to unpack .../11-python3-brotli_1.1.0-2build6_arm64.deb ... 261s Unpacking python3-brotli (1.1.0-2build6) ... 261s Selecting previously unselected package python3-brotlicffi. 261s Preparing to unpack .../12-python3-brotlicffi_1.2.0.0+ds-2_arm64.deb ... 261s Unpacking python3-brotlicffi (1.2.0.0+ds-2) ... 262s Selecting previously unselected package python3-decorator. 262s Preparing to unpack .../13-python3-decorator_5.2.1-2_all.deb ... 262s Unpacking python3-decorator (5.2.1-2) ... 262s Selecting previously unselected package python3-sqlparse. 262s Preparing to unpack .../14-python3-sqlparse_0.5.4-1_all.deb ... 262s Unpacking python3-sqlparse (0.5.4-1) ... 262s Selecting previously unselected package python3-django. 262s Preparing to unpack .../15-python3-django_3%3a5.2.9-0ubuntu2_all.deb ... 262s Unpacking python3-django (3:5.2.9-0ubuntu2) ... 262s Selecting previously unselected package python3-flaky. 262s Preparing to unpack .../16-python3-flaky_3.8.1-4_all.deb ... 262s Unpacking python3-flaky (3.8.1-4) ... 262s Selecting previously unselected package python3-itsdangerous. 262s Preparing to unpack .../17-python3-itsdangerous_2.2.0-2build1_all.deb ... 262s Unpacking python3-itsdangerous (2.2.0-2build1) ... 262s Selecting previously unselected package python3-werkzeug. 262s Preparing to unpack .../18-python3-werkzeug_3.1.5-1_all.deb ... 262s Unpacking python3-werkzeug (3.1.5-1) ... 262s Selecting previously unselected package python3-flask. 262s Preparing to unpack .../19-python3-flask_3.1.2-1ubuntu1_all.deb ... 262s Unpacking python3-flask (3.1.2-1ubuntu1) ... 262s Selecting previously unselected package python3-mistune. 262s Preparing to unpack .../20-python3-mistune_3.1.4-1_all.deb ... 262s Unpacking python3-mistune (3.1.4-1) ... 262s Selecting previously unselected package python3-flasgger. 262s Preparing to unpack .../21-python3-flasgger_0.9.7.2~dev2+dfsg-4_all.deb ... 262s Unpacking python3-flasgger (0.9.7.2~dev2+dfsg-4) ... 262s Selecting previously unselected package python3-h11. 262s Preparing to unpack .../22-python3-h11_0.14.0-1.1_all.deb ... 262s Unpacking python3-h11 (0.14.0-1.1) ... 262s Selecting previously unselected package python3-greenlet. 262s Preparing to unpack .../23-python3-greenlet_3.2.4-3_arm64.deb ... 262s Unpacking python3-greenlet (3.2.4-3) ... 262s Selecting previously unselected package python3-httpbin. 262s Preparing to unpack .../24-python3-httpbin_0.10.2+dfsg-2build1_all.deb ... 262s Unpacking python3-httpbin (0.10.2+dfsg-2build1) ... 262s Selecting previously unselected package python3-iniconfig. 262s Preparing to unpack .../25-python3-iniconfig_2.1.0-2_all.deb ... 262s Unpacking python3-iniconfig (2.1.0-2) ... 262s Selecting previously unselected package python3-outcome. 263s Preparing to unpack .../26-python3-outcome_1.2.0-2_all.deb ... 263s Unpacking python3-outcome (1.2.0-2) ... 263s Selecting previously unselected package python3-pytz. 263s Preparing to unpack .../27-python3-pytz_2025.2-5_all.deb ... 263s Unpacking python3-pytz (2025.2-5) ... 263s Selecting previously unselected package python3-pandas-lib:arm64. 263s Preparing to unpack .../28-python3-pandas-lib_2.3.3+dfsg-3_arm64.deb ... 263s Unpacking python3-pandas-lib:arm64 (2.3.3+dfsg-3) ... 263s Selecting previously unselected package python3-pandas. 263s Preparing to unpack .../29-python3-pandas_2.3.3+dfsg-3_all.deb ... 263s Unpacking python3-pandas (2.3.3+dfsg-3) ... 263s Selecting previously unselected package python3-pluggy. 263s Preparing to unpack .../30-python3-pluggy_1.6.0-2_all.deb ... 263s Unpacking python3-pluggy (1.6.0-2) ... 263s Selecting previously unselected package python3-py. 263s Preparing to unpack .../31-python3-py_1.11.0-6_all.deb ... 263s Unpacking python3-py (1.11.0-6) ... 263s Selecting previously unselected package python3-xlrd. 263s Preparing to unpack .../32-python3-xlrd_2.0.2-2_all.deb ... 263s Unpacking python3-xlrd (2.0.2-2) ... 263s Selecting previously unselected package python3-pyfakefs. 263s Preparing to unpack .../33-python3-pyfakefs_5.10.2-1_all.deb ... 263s Unpacking python3-pyfakefs (5.10.2-1) ... 263s Selecting previously unselected package python3-pytest. 263s Preparing to unpack .../34-python3-pytest_9.0.2-2_all.deb ... 263s Unpacking python3-pytest (9.0.2-2) ... 263s Selecting previously unselected package python3-pytest-asyncio. 263s Preparing to unpack .../35-python3-pytest-asyncio_1.3.0-1_all.deb ... 263s Unpacking python3-pytest-asyncio (1.3.0-1) ... 263s Selecting previously unselected package python3-pytest-httpbin. 263s Preparing to unpack .../36-python3-pytest-httpbin_2.1.0-2_all.deb ... 263s Unpacking python3-pytest-httpbin (2.1.0-2) ... 263s Selecting previously unselected package python3-pytest-httpserver. 263s Preparing to unpack .../37-python3-pytest-httpserver_1.1.3-2_all.deb ... 263s Unpacking python3-pytest-httpserver (1.1.3-2) ... 263s Selecting previously unselected package python3-pytest-mock. 263s Preparing to unpack .../38-python3-pytest-mock_3.15.1-1_all.deb ... 263s Unpacking python3-pytest-mock (3.15.1-1) ... 263s Selecting previously unselected package python3-sniffio. 263s Preparing to unpack .../39-python3-sniffio_1.3.1-1_all.deb ... 263s Unpacking python3-sniffio (1.3.1-1) ... 263s Selecting previously unselected package python3-sortedcontainers. 263s Preparing to unpack .../40-python3-sortedcontainers_2.4.0-2build1_all.deb ... 263s Unpacking python3-sortedcontainers (2.4.0-2build1) ... 264s Selecting previously unselected package python3-trio. 264s Preparing to unpack .../41-python3-trio_0.32.0-1_all.deb ... 264s Unpacking python3-trio (0.32.0-1) ... 264s Selecting previously unselected package python3-wsproto. 264s Preparing to unpack .../42-python3-wsproto_1.3.2-1_all.deb ... 264s Unpacking python3-wsproto (1.3.2-1) ... 264s Selecting previously unselected package python3-trio-websocket. 264s Preparing to unpack .../43-python3-trio-websocket_0.12.2-1_all.deb ... 264s Unpacking python3-trio-websocket (0.12.2-1) ... 264s Selecting previously unselected package python3-websocket. 264s Preparing to unpack .../44-python3-websocket_1.8.0-2build1_all.deb ... 264s Unpacking python3-websocket (1.8.0-2build1) ... 264s Selecting previously unselected package python3-selenium. 264s Preparing to unpack .../45-python3-selenium_4.24.4+dfsg-1_all.deb ... 264s Unpacking python3-selenium (4.24.4+dfsg-1) ... 264s Selecting previously unselected package python3-xmltodict. 264s Preparing to unpack .../46-python3-xmltodict_0.13.0-1ubuntu1_all.deb ... 264s Unpacking python3-xmltodict (0.13.0-1ubuntu1) ... 264s Setting up python3-iniconfig (2.1.0-2) ... 264s Setting up python3-sniffio (1.3.1-1) ... 264s Setting up python3-outcome (1.2.0-2) ... 265s Setting up python3-brotlicffi (1.2.0.0+ds-2) ... 265s Setting up python3-py (1.11.0-6) ... 265s Setting up python3-itsdangerous (2.2.0-2build1) ... 265s Setting up python3-pytz (2025.2-5) ... 265s Setting up python3-sortedcontainers (2.4.0-2build1) ... 266s Setting up python3-decorator (5.2.1-2) ... 266s Setting up python3-xmltodict (0.13.0-1ubuntu1) ... 266s Setting up libblas3:arm64 (3.12.1-7ubuntu1) ... 266s update-alternatives: using /usr/lib/aarch64-linux-gnu/blas/libblas.so.3 to provide /usr/lib/aarch64-linux-gnu/libblas.so.3 (libblas.so.3-aarch64-linux-gnu) in auto mode 266s Setting up python3-sqlparse (0.5.4-1) ... 266s Setting up python3-flaky (3.8.1-4) ... 267s Setting up python3-trio (0.32.0-1) ... 267s Setting up python3-werkzeug (3.1.5-1) ... 268s Setting up python3-brotli (1.1.0-2build6) ... 268s Setting up python3-greenlet (3.2.4-3) ... 268s Setting up python3-numpy-dev:arm64 (1:2.3.5+ds-3) ... 268s Setting up python3-h11 (0.14.0-1.1) ... 268s Setting up libgfortran5:arm64 (15.2.0-12ubuntu1) ... 268s Setting up python3-pluggy (1.6.0-2) ... 269s Setting up chromium-browser (2:1snap1-0ubuntu3) ... 269s update-alternatives: using /usr/bin/chromium-browser to provide /usr/bin/x-www-browser (x-www-browser) in auto mode 269s update-alternatives: using /usr/bin/chromium-browser to provide /usr/bin/gnome-www-browser (gnome-www-browser) in auto mode 269s Setting up python3-pytest-httpserver (1.1.3-2) ... 269s Setting up python3-xlrd (2.0.2-2) ... 269s Setting up python3-mistune (3.1.4-1) ... 269s Setting up python3-websocket (1.8.0-2build1) ... 270s Setting up python3.14-minimal (3.14.2-1) ... 271s Setting up python3-asgiref (3.11.0-1) ... 271s Setting up liblapack3:arm64 (3.12.1-7ubuntu1) ... 271s update-alternatives: using /usr/lib/aarch64-linux-gnu/lapack/liblapack.so.3 to provide /usr/lib/aarch64-linux-gnu/liblapack.so.3 (liblapack.so.3-aarch64-linux-gnu) in auto mode 271s Setting up python3-django (3:5.2.9-0ubuntu2) ... 273s Setting up python3-wsproto (1.3.2-1) ... 274s Setting up python3-pytest (9.0.2-2) ... 274s Setting up python3-flask (3.1.2-1ubuntu1) ... 275s Setting up python3-trio-websocket (0.12.2-1) ... 275s Setting up chromium-chromedriver (2:1snap1-0ubuntu3) ... 275s Setting up python3-numpy (1:2.3.5+ds-3) ... 278s Setting up python3-pytest-asyncio (1.3.0-1) ... 278s Setting up python3-pytest-mock (3.15.1-1) ... 279s Setting up python3.14 (3.14.2-1) ... 280s Setting up python3-flasgger (0.9.7.2~dev2+dfsg-4) ... 280s Setting up python3-selenium (4.24.4+dfsg-1) ... 280s Setting up python3-pandas-lib:arm64 (2.3.3+dfsg-3) ... 280s Setting up python3-all (3.13.9-3) ... 280s Setting up python3-pandas (2.3.3+dfsg-3) ... 290s Setting up python3-httpbin (0.10.2+dfsg-2build1) ... 290s Setting up python3-pytest-httpbin (2.1.0-2) ... 290s Setting up python3-pyfakefs (5.10.2-1) ... 290s Processing triggers for systemd (259-1ubuntu3) ... 290s Processing triggers for man-db (2.13.1-1build1) ... 291s Processing triggers for dbus (1.16.2-2ubuntu3) ... 291s Processing triggers for libc-bin (2.42-2ubuntu4) ... 292s autopkgtest [05:21:34]: test upstream-tests: [----------------------- 292s Running testsuite with python3.14: 296s ============================= test session starts ============================== 296s platform linux -- Python 3.14.2, pytest-9.0.2, pluggy-1.6.0 296s rootdir: /tmp/autopkgtest.tBCPoX/autopkgtest_tmp 296s plugins: pyfakefs-5.10.2, typeguard-4.4.4, pytest_httpserver-1.1.3, mock-3.15.1, asyncio-1.3.0, httpbin-2.1.0, flaky-3.8.1 296s asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function 296s collected 13019 items / 10 deselected / 2 skipped / 13009 selected 296s 300s tests/test_api_and_interface.py ................. [ 0%] 300s tests/test_cfg.py ...................................................... [ 0%] 300s ...................................... [ 0%] 301s tests/test_config.py .x... [ 0%] 301s tests/test_decoder.py .................................................. [ 1%] 301s ........................................................................ [ 1%] 301s ....................... [ 1%] 302s tests/test_decorator.py ............ [ 2%] 303s tests/test_deobfuscate_filenames.py ............. [ 2%] 304s tests/test_dirscanner.py .................... [ 2%] 304s tests/test_encoding.py ... [ 2%] 304s tests/test_file_extension.py ... [ 2%] 322s tests/test_filesystem.py .........................s..................... [ 2%] 322s ..................sssss....................... [ 3%] 326s tests/test_functional_adding_nzbs.py ................................... [ 3%] 331s ........................................................................ [ 3%] 337s ........................................................ [ 4%] 365s tests/test_functional_adding_nzbs_clean.py . [ 4%] 367s tests/test_functional_api.py ........................................... [ 4%] 369s ........................................................................ [ 5%] 372s .............................. [ 5%] 374s tests/test_functional_misc.py E.E [ 5%] 384s tests/test_functional_sorting.py EEEEEEEEE [ 5%] 385s tests/test_getipaddress.py .... [ 5%] 385s tests/test_interface.py ................................................ [ 5%] 385s ........................................................................ [ 6%] 385s ........................................................................ [ 7%] 385s ........................................................................ [ 7%] 385s ........................................................................ [ 8%] 385s ........................................................................ [ 8%] 385s ........................................................................ [ 9%] 385s ........................................................................ [ 9%] 385s ........................................................................ [ 10%] 386s ........................................................................ [ 10%] 386s ........................................................................ [ 11%] 386s ........................................................................ [ 12%] 386s ........................................................................ [ 12%] 386s ........................................................................ [ 13%] 386s ........................................................................ [ 13%] 386s ........................................................................ [ 14%] 386s ........................................................................ [ 14%] 386s ........................................................................ [ 15%] 386s ........................................................................ [ 15%] 387s ........................................................................ [ 16%] 387s ........................................................................ [ 17%] 387s ........................................................................ [ 17%] 387s ........................................................................ [ 18%] 387s ........................................................................ [ 18%] 387s ........................................................................ [ 19%] 387s ........................................................................ [ 19%] 387s ........................................................................ [ 20%] 387s ........................................................................ [ 20%] 387s ........................................................................ [ 21%] 387s ........................................................................ [ 22%] 388s ........................................................................ [ 22%] 388s ........................................................................ [ 23%] 388s ........................................................................ [ 23%] 388s ........................................................................ [ 24%] 388s ........................................................................ [ 24%] 388s ........................................................................ [ 25%] 388s ........................................................................ [ 25%] 388s ........................................................................ [ 26%] 388s ........................................................................ [ 26%] 388s ........................................................................ [ 27%] 389s ........................................................................ [ 28%] 389s ........................................................................ [ 28%] 389s ........................................................................ [ 29%] 389s ........................................................................ [ 29%] 389s ........................................................................ [ 30%] 389s ........................................................................ [ 30%] 389s ........................................................................ [ 31%] 389s ........................................................................ [ 31%] 389s ........................................................................ [ 32%] 389s ........................................................................ [ 33%] 390s ........................................................................ [ 33%] 390s ........................................................................ [ 34%] 390s ........................................................................ [ 34%] 390s ........................................................................ [ 35%] 390s ........................................................................ [ 35%] 390s ........................................................................ [ 36%] 390s ........................................................................ [ 36%] 390s ........................................................................ [ 37%] 390s ........................................................................ [ 38%] 390s ........................................................................ [ 38%] 390s ........................................................................ [ 39%] 391s ........................................................................ [ 39%] 391s ........................................................................ [ 40%] 391s ........................................................................ [ 40%] 391s ........................................................................ [ 41%] 391s ........................................................................ [ 41%] 391s ........................................................................ [ 42%] 391s ........................................................................ [ 43%] 391s ........................................................................ [ 43%] 391s ........................................................................ [ 44%] 391s ........................................................................ [ 44%] 391s ........................................................................ [ 45%] 392s ........................................................................ [ 45%] 392s ........................................................................ [ 46%] 392s ........................................................................ [ 46%] 392s ........................................................................ [ 47%] 392s ........................................................................ [ 48%] 392s ........................................................................ [ 48%] 392s ........................................................................ [ 49%] 392s ........................................................................ [ 49%] 392s ........................................................................ [ 50%] 392s ........................................................................ [ 50%] 392s ........................................................................ [ 51%] 392s ........................................................................ [ 51%] 393s ........................................................................ [ 52%] 393s ........................................................................ [ 53%] 393s ........................................................................ [ 53%] 393s ........................................................................ [ 54%] 393s ........................................................................ [ 54%] 393s ........................................................................ [ 55%] 393s ........................................................................ [ 55%] 393s ........................................................................ [ 56%] 393s ........................................................................ [ 56%] 393s ........................................................................ [ 57%] 393s ........................................................................ [ 57%] 393s ........................................................................ [ 58%] 394s ........................................................................ [ 59%] 394s ........................................................................ [ 59%] 394s ........................................................................ [ 60%] 394s ........................................................................ [ 60%] 394s ........................................................................ [ 61%] 394s ...................................................................... [ 61%] 394s tests/test_lang.py . [ 61%] 394s tests/test_misc.py ..................................................... [ 62%] 394s ........................................................................ [ 62%] 394s ........................................................................ [ 63%] 394s ........................................................................ [ 63%] 394s ........................................................................ [ 64%] 395s ........................................................................ [ 65%] 395s ........................................................................ [ 65%] 395s ........................................................................ [ 66%] 395s ........................................................................ [ 66%] 395s ........................................................................ [ 67%] 395s ........................................................................ [ 67%] 396s ........................................................................ [ 68%] 396s ........................................................................ [ 68%] 396s ........................................................................ [ 69%] 396s ........................................................................ [ 70%] 396s ........................................................................ [ 70%] 396s ........................................................................ [ 71%] 397s ........................................................................ [ 71%] 397s ........................................................................ [ 72%] 397s ........................................................................ [ 72%] 397s ........................................................................ [ 73%] 397s ........................................................................ [ 73%] 397s ........................................................................ [ 74%] 398s ........................................................................ [ 74%] 398s ........................................................................ [ 75%] 398s ........................................................................ [ 76%] 398s ...........................s.. [ 76%] 400s tests/test_newsunpack.py ............. [ 76%] 410s tests/test_newswrapper.py ........ [ 76%] 410s tests/test_notifier.py .. [ 76%] 411s tests/test_nzbparser.py .x [ 76%] 411s tests/test_nzbstuff.py ................................................. [ 76%] 412s .. [ 76%] 412s tests/test_par2file.py .. [ 76%] 412s tests/test_postproc.py ................................................. [ 77%] 413s ........................................................................ [ 77%] 413s ........................................................................ [ 78%] 414s ........................................................................ [ 78%] 415s ............................. [ 79%] 415s tests/test_rss.py ..... [ 79%] 415s tests/test_sorting.py .................................................. [ 79%] 415s ...sssssssssssssssssssssssssss.......................................... [ 80%] 416s ........................................................................ [ 80%] 418s ........................................................................ [ 81%] 419s ........................................................................ [ 81%] 421s ........................................................................ [ 82%] 423s ........................................................................ [ 82%] 424s ........................................................................ [ 83%] 426s ........................................................................ [ 84%] 427s ........................................................................ [ 84%] 429s ........................................................................ [ 85%] 430s ........................................................................ [ 85%] 431s ................................................s....................... [ 86%] 432s ........................................................................ [ 86%] 432s ........................................................................ [ 87%] 432s ........................................................................ [ 87%] 433s ........................................................................ [ 88%] 433s ........................................................................ [ 89%] 434s ........................................................................ [ 89%] 436s ........................................................................ [ 90%] 437s ........................................................................ [ 90%] 439s ........................................................................ [ 91%] 441s ........................................................................ [ 91%] 442s ........................................................................ [ 92%] 444s ........................................................................ [ 92%] 446s ........................................................................ [ 93%] 448s ........................................................................ [ 94%] 449s ........................................................................ [ 94%] 451s ........................................................................ [ 95%] 452s ........................................................................ [ 95%] 454s ........................................................................ [ 96%] 456s ........................................................................ [ 96%] 458s ........................................................................ [ 97%] 459s ........................................................................ [ 97%] 460s ........................................................................ [ 98%] 462s ........................................................................ [ 98%] 464s ........................................................................ [ 99%] 466s ............................. [ 99%] 466s tests/test_urlgrabber.py .....127.0.0.1 - - [09/Feb/2026 05:24:28] "GET /basic-auth/abcdefghijklm01234/56789nopqrstuvwxyz HTTP/1.1" 401 0 466s ..127.0.0.1 - - [09/Feb/2026 05:24:28] "GET /basic-auth/a@B.cd/e@F.gh HTTP/1.1" 200 48 466s .127.0.0.1 - - [09/Feb/2026 05:24:28] "GET /headers HTTP/1.1" 200 146 466s .............. [ 99%] 474s tests/test_utils/test_cert_gen.py .... [ 99%] 476s tests/test_utils/test_diskspeed.py .... [ 99%] 477s tests/test_utils/test_pystone.py . [100%] 477s 477s ==================================== ERRORS ==================================== 477s ________________ ERROR at setup of TestShowLogging.test_showlog ________________ 477s 477s self = 477s method = 'POST', url = '/session' 477s body = '{"capabilities": {"firstMatch": [{}], "alwaysMatch": {"browserName": "chrome", "pageLoadStrategy": "normal", "browserVersion": "127", "goog:chromeOptions": {"extensions": [], "args": ["--headless", "--no-sandbox", "--single-process"]}}}}' 477s headers = HTTPHeaderDict({'Accept': 'application/json', 'Content-Type': 'application/json;charset=UTF-8', 'User-Agent': 'selenium/4.31.1 (python linux)', 'Connection': 'keep-alive'}) 477s retries = Retry(total=3, connect=None, read=None, redirect=None, status=None) 477s redirect = False, assert_same_host = False, timeout = <_TYPE_DEFAULT.token: -1> 477s pool_timeout = None, release_conn = True, chunked = False, body_pos = None 477s preload_content = True, decode_content = True, response_kw = {} 477s parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/session', query=None, fragment=None) 477s destination_scheme = None, conn = None, release_this_conn = True 477s http_tunnel_required = False, err = None, clean_exit = False 477s 477s def urlopen( # type: ignore[override] 477s self, 477s method: str, 477s url: str, 477s body: _TYPE_BODY | None = None, 477s headers: typing.Mapping[str, str] | None = None, 477s retries: Retry | bool | int | None = None, 477s redirect: bool = True, 477s assert_same_host: bool = True, 477s timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 477s pool_timeout: int | None = None, 477s release_conn: bool | None = None, 477s chunked: bool = False, 477s body_pos: _TYPE_BODY_POSITION | None = None, 477s preload_content: bool = True, 477s decode_content: bool = True, 477s **response_kw: typing.Any, 477s ) -> BaseHTTPResponse: 477s """ 477s Get a connection from the pool and perform an HTTP request. This is the 477s lowest level call for making a request, so you'll need to specify all 477s the raw details. 477s 477s .. note:: 477s 477s More commonly, it's appropriate to use a convenience method 477s such as :meth:`request`. 477s 477s .. note:: 477s 477s `release_conn` will only behave as expected if 477s `preload_content=False` because we want to make 477s `preload_content=False` the default behaviour someday soon without 477s breaking backwards compatibility. 477s 477s :param method: 477s HTTP request method (such as GET, POST, PUT, etc.) 477s 477s :param url: 477s The URL to perform the request on. 477s 477s :param body: 477s Data to send in the request body, either :class:`str`, :class:`bytes`, 477s an iterable of :class:`str`/:class:`bytes`, or a file-like object. 477s 477s :param headers: 477s Dictionary of custom headers to send, such as User-Agent, 477s If-None-Match, etc. If None, pool headers are used. If provided, 477s these headers completely replace any pool-specific headers. 477s 477s :param retries: 477s Configure the number of retries to allow before raising a 477s :class:`~urllib3.exceptions.MaxRetryError` exception. 477s 477s If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a 477s :class:`~urllib3.util.retry.Retry` object for fine-grained control 477s over different types of retries. 477s Pass an integer number to retry connection errors that many times, 477s but no other types of errors. Pass zero to never retry. 477s 477s If ``False``, then retries are disabled and any exception is raised 477s immediately. Also, instead of raising a MaxRetryError on redirects, 477s the redirect response will be returned. 477s 477s :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 477s 477s :param redirect: 477s If True, automatically handle redirects (status codes 301, 302, 477s 303, 307, 308). Each redirect counts as a retry. Disabling retries 477s will disable redirect, too. 477s 477s :param assert_same_host: 477s If ``True``, will make sure that the host of the pool requests is 477s consistent else will raise HostChangedError. When ``False``, you can 477s use the pool on an HTTP proxy and request foreign hosts. 477s 477s :param timeout: 477s If specified, overrides the default timeout for this one 477s request. It may be a float (in seconds) or an instance of 477s :class:`urllib3.util.Timeout`. 477s 477s :param pool_timeout: 477s If set and the pool is set to block=True, then this method will 477s block for ``pool_timeout`` seconds and raise EmptyPoolError if no 477s connection is available within the time period. 477s 477s :param bool preload_content: 477s If True, the response's body will be preloaded into memory. 477s 477s :param bool decode_content: 477s If True, will attempt to decode the body based on the 477s 'content-encoding' header. 477s 477s :param release_conn: 477s If False, then the urlopen call will not release the connection 477s back into the pool once a response is received (but will release if 477s you read the entire contents of the response such as when 477s `preload_content=True`). This is useful if you're not preloading 477s the response's content immediately. You will need to call 477s ``r.release_conn()`` on the response ``r`` to return the connection 477s back into the pool. If None, it takes the value of ``preload_content`` 477s which defaults to ``True``. 477s 477s :param bool chunked: 477s If True, urllib3 will send the body using chunked transfer 477s encoding. Otherwise, urllib3 will send the body using the standard 477s content-length form. Defaults to False. 477s 477s :param int body_pos: 477s Position to seek to in file-like body in the event of a retry or 477s redirect. Typically this won't need to be set because urllib3 will 477s auto-populate the value when needed. 477s """ 477s parsed_url = parse_url(url) 477s destination_scheme = parsed_url.scheme 477s 477s if headers is None: 477s headers = self.headers 477s 477s if not isinstance(retries, Retry): 477s retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 477s 477s if release_conn is None: 477s release_conn = preload_content 477s 477s # Check host 477s if assert_same_host and not self.is_same_host(url): 477s raise HostChangedError(self, url, retries) 477s 477s # Ensure that the URL we're connecting to is properly encoded 477s if url.startswith("/"): 477s url = to_str(_encode_target(url)) 477s else: 477s url = to_str(parsed_url.url) 477s 477s conn = None 477s 477s # Track whether `conn` needs to be released before 477s # returning/raising/recursing. Update this variable if necessary, and 477s # leave `release_conn` constant throughout the function. That way, if 477s # the function recurses, the original value of `release_conn` will be 477s # passed down into the recursive call, and its value will be respected. 477s # 477s # See issue #651 [1] for details. 477s # 477s # [1] 477s release_this_conn = release_conn 477s 477s http_tunnel_required = connection_requires_http_tunnel( 477s self.proxy, self.proxy_config, destination_scheme 477s ) 477s 477s # Merge the proxy headers. Only done when not using HTTP CONNECT. We 477s # have to copy the headers dict so we can safely change it without those 477s # changes being reflected in anyone else's copy. 477s if not http_tunnel_required: 477s headers = headers.copy() # type: ignore[attr-defined] 477s headers.update(self.proxy_headers) # type: ignore[union-attr] 477s 477s # Must keep the exception bound to a separate variable or else Python 3 477s # complains about UnboundLocalError. 477s err = None 477s 477s # Keep track of whether we cleanly exited the except block. This 477s # ensures we do proper cleanup in finally. 477s clean_exit = False 477s 477s # Rewind body position, if needed. Record current position 477s # for future rewinds in the event of a redirect/retry. 477s body_pos = set_file_position(body, body_pos) 477s 477s try: 477s # Request a connection from the queue. 477s timeout_obj = self._get_timeout(timeout) 477s conn = self._get_conn(timeout=pool_timeout) 477s 477s conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 477s 477s # Is this a closed/new connection that requires CONNECT tunnelling? 477s if self.proxy is not None and http_tunnel_required and conn.is_closed: 477s try: 477s self._prepare_proxy(conn) 477s except (BaseSSLError, OSError, SocketTimeout) as e: 477s self._raise_timeout( 477s err=e, url=self.proxy.url, timeout_value=conn.timeout 477s ) 477s raise 477s 477s # If we're going to release the connection in ``finally:``, then 477s # the response doesn't need to know about the connection. Otherwise 477s # it will also try to release it and we'll have a double-release 477s # mess. 477s response_conn = conn if not release_conn else None 477s 477s # Make the request on the HTTPConnection object 477s > response = self._make_request( 477s conn, 477s method, 477s url, 477s timeout=timeout_obj, 477s body=body, 477s headers=headers, 477s chunked=chunked, 477s retries=retries, 477s response_conn=response_conn, 477s preload_content=preload_content, 477s decode_content=decode_content, 477s **response_kw, 477s ) 477s 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s 477s During handling of the above exception, another exception occurred: 477s 477s self = 477s browser_name = 'chrome', vendor_prefix = 'goog' 477s options = 477s service = 477s keep_alive = True 477s 477s def __init__( 477s self, 477s browser_name: str = None, 477s vendor_prefix: str = None, 477s options: ArgOptions = ArgOptions(), 477s service: Service = None, 477s keep_alive: bool = True, 477s ) -> None: 477s """Creates a new WebDriver instance of the ChromiumDriver. Starts the 477s service and then creates new WebDriver instance of ChromiumDriver. 477s 477s :Args: 477s - browser_name - Browser name used when matching capabilities. 477s - vendor_prefix - Company prefix to apply to vendor-specific WebDriver extension commands. 477s - options - this takes an instance of ChromiumOptions 477s - service - Service object for handling the browser driver if you need to pass extra details 477s - keep_alive - Whether to configure ChromiumRemoteConnection to use HTTP keep-alive. 477s """ 477s self.service = service 477s 477s finder = DriverFinder(self.service, options) 477s if finder.get_browser_path(): 477s options.binary_location = finder.get_browser_path() 477s options.browser_version = None 477s 477s self.service.path = finder.get_driver_path() 477s self.service.start() 477s 477s executor = ChromiumRemoteConnection( 477s remote_server_addr=self.service.service_url, 477s browser_name=browser_name, 477s vendor_prefix=vendor_prefix, 477s keep_alive=keep_alive, 477s ignore_proxy=options._ignore_local_proxy, 477s ) 477s 477s try: 477s > super().__init__(command_executor=executor, options=options) 477s 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:66: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:212: in __init__ 477s self.start_session(capabilities) 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:299: in start_session 477s response = self.execute(Command.NEW_SESSION, caps)["value"] 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:352: in execute 477s response = self.command_executor.execute(driver_command, params) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:306: in execute 477s return self._request(command_info[0], url, body=data) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:326: in _request 477s response = self._conn.request(method, url, body=body, headers=headers) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:143: in request 477s return self.request_encode_body( 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:278: in request_encode_body 477s return self.urlopen(method, url, **extra_kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/poolmanager.py:459: in urlopen 477s response = conn.urlopen(method, u.request_uri, **kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:841: in urlopen 477s retries = retries.increment( 477s /usr/lib/python3/dist-packages/urllib3/util/retry.py:474: in increment 477s raise reraise(type(error), error, _stacktrace) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/util/util.py:38: in reraise 477s raise value.with_traceback(tb) 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: in urlopen 477s response = self._make_request( 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) 477s 477s /usr/lib/python3.14/socket.py:725: ProtocolError 477s 477s During handling of the above exception, another exception occurred: 477s 477s > lambda: ihook(item=item, **kwds), when=when, reraise=reraise 477s ^^^^^^^^^^^^^^^^^^^^^^^^ 477s ) 477s 477s /usr/lib/python3/dist-packages/flaky/flaky_pytest_plugin.py:146: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/pytest_asyncio/plugin.py:728: in pytest_fixture_setup 477s return (yield) 477s ^^^^^ 477s tests/conftest.py:148: in run_sabnews_and_selenium 477s driver = webdriver.Chrome(options=driver_options, service=service) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/chrome/webdriver.py:45: in __init__ 477s super().__init__( 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:68: in __init__ 477s self.quit() 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:193: in quit 477s self.service.stop() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:146: in stop 477s self.send_remote_shutdown_command() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:126: in send_remote_shutdown_command 477s request.urlopen(f"{self.service_url}/shutdown") 477s /usr/lib/python3.14/urllib/request.py:187: in urlopen 477s return opener.open(url, data, timeout) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:487: in open 477s response = self._open(req, data) 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:504: in _open 477s result = self._call_chain(self.handle_open, protocol, protocol + 477s /usr/lib/python3.14/urllib/request.py:464: in _call_chain 477s result = func(*args) 477s ^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1350: in http_open 477s return self.do_open(http.client.HTTPConnection, req) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1325: in do_open 477s r = h.getresponse() 477s ^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s ______________ ERROR at setup of TestDaemonizing.test_daemonizing ______________ 477s 477s self = 477s method = 'POST', url = '/session' 477s body = '{"capabilities": {"firstMatch": [{}], "alwaysMatch": {"browserName": "chrome", "pageLoadStrategy": "normal", "browserVersion": "127", "goog:chromeOptions": {"extensions": [], "args": ["--headless", "--no-sandbox", "--single-process"]}}}}' 477s headers = HTTPHeaderDict({'Accept': 'application/json', 'Content-Type': 'application/json;charset=UTF-8', 'User-Agent': 'selenium/4.31.1 (python linux)', 'Connection': 'keep-alive'}) 477s retries = Retry(total=3, connect=None, read=None, redirect=None, status=None) 477s redirect = False, assert_same_host = False, timeout = <_TYPE_DEFAULT.token: -1> 477s pool_timeout = None, release_conn = True, chunked = False, body_pos = None 477s preload_content = True, decode_content = True, response_kw = {} 477s parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/session', query=None, fragment=None) 477s destination_scheme = None, conn = None, release_this_conn = True 477s http_tunnel_required = False, err = None, clean_exit = False 477s 477s def urlopen( # type: ignore[override] 477s self, 477s method: str, 477s url: str, 477s body: _TYPE_BODY | None = None, 477s headers: typing.Mapping[str, str] | None = None, 477s retries: Retry | bool | int | None = None, 477s redirect: bool = True, 477s assert_same_host: bool = True, 477s timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 477s pool_timeout: int | None = None, 477s release_conn: bool | None = None, 477s chunked: bool = False, 477s body_pos: _TYPE_BODY_POSITION | None = None, 477s preload_content: bool = True, 477s decode_content: bool = True, 477s **response_kw: typing.Any, 477s ) -> BaseHTTPResponse: 477s """ 477s Get a connection from the pool and perform an HTTP request. This is the 477s lowest level call for making a request, so you'll need to specify all 477s the raw details. 477s 477s .. note:: 477s 477s More commonly, it's appropriate to use a convenience method 477s such as :meth:`request`. 477s 477s .. note:: 477s 477s `release_conn` will only behave as expected if 477s `preload_content=False` because we want to make 477s `preload_content=False` the default behaviour someday soon without 477s breaking backwards compatibility. 477s 477s :param method: 477s HTTP request method (such as GET, POST, PUT, etc.) 477s 477s :param url: 477s The URL to perform the request on. 477s 477s :param body: 477s Data to send in the request body, either :class:`str`, :class:`bytes`, 477s an iterable of :class:`str`/:class:`bytes`, or a file-like object. 477s 477s :param headers: 477s Dictionary of custom headers to send, such as User-Agent, 477s If-None-Match, etc. If None, pool headers are used. If provided, 477s these headers completely replace any pool-specific headers. 477s 477s :param retries: 477s Configure the number of retries to allow before raising a 477s :class:`~urllib3.exceptions.MaxRetryError` exception. 477s 477s If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a 477s :class:`~urllib3.util.retry.Retry` object for fine-grained control 477s over different types of retries. 477s Pass an integer number to retry connection errors that many times, 477s but no other types of errors. Pass zero to never retry. 477s 477s If ``False``, then retries are disabled and any exception is raised 477s immediately. Also, instead of raising a MaxRetryError on redirects, 477s the redirect response will be returned. 477s 477s :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 477s 477s :param redirect: 477s If True, automatically handle redirects (status codes 301, 302, 477s 303, 307, 308). Each redirect counts as a retry. Disabling retries 477s will disable redirect, too. 477s 477s :param assert_same_host: 477s If ``True``, will make sure that the host of the pool requests is 477s consistent else will raise HostChangedError. When ``False``, you can 477s use the pool on an HTTP proxy and request foreign hosts. 477s 477s :param timeout: 477s If specified, overrides the default timeout for this one 477s request. It may be a float (in seconds) or an instance of 477s :class:`urllib3.util.Timeout`. 477s 477s :param pool_timeout: 477s If set and the pool is set to block=True, then this method will 477s block for ``pool_timeout`` seconds and raise EmptyPoolError if no 477s connection is available within the time period. 477s 477s :param bool preload_content: 477s If True, the response's body will be preloaded into memory. 477s 477s :param bool decode_content: 477s If True, will attempt to decode the body based on the 477s 'content-encoding' header. 477s 477s :param release_conn: 477s If False, then the urlopen call will not release the connection 477s back into the pool once a response is received (but will release if 477s you read the entire contents of the response such as when 477s `preload_content=True`). This is useful if you're not preloading 477s the response's content immediately. You will need to call 477s ``r.release_conn()`` on the response ``r`` to return the connection 477s back into the pool. If None, it takes the value of ``preload_content`` 477s which defaults to ``True``. 477s 477s :param bool chunked: 477s If True, urllib3 will send the body using chunked transfer 477s encoding. Otherwise, urllib3 will send the body using the standard 477s content-length form. Defaults to False. 477s 477s :param int body_pos: 477s Position to seek to in file-like body in the event of a retry or 477s redirect. Typically this won't need to be set because urllib3 will 477s auto-populate the value when needed. 477s """ 477s parsed_url = parse_url(url) 477s destination_scheme = parsed_url.scheme 477s 477s if headers is None: 477s headers = self.headers 477s 477s if not isinstance(retries, Retry): 477s retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 477s 477s if release_conn is None: 477s release_conn = preload_content 477s 477s # Check host 477s if assert_same_host and not self.is_same_host(url): 477s raise HostChangedError(self, url, retries) 477s 477s # Ensure that the URL we're connecting to is properly encoded 477s if url.startswith("/"): 477s url = to_str(_encode_target(url)) 477s else: 477s url = to_str(parsed_url.url) 477s 477s conn = None 477s 477s # Track whether `conn` needs to be released before 477s # returning/raising/recursing. Update this variable if necessary, and 477s # leave `release_conn` constant throughout the function. That way, if 477s # the function recurses, the original value of `release_conn` will be 477s # passed down into the recursive call, and its value will be respected. 477s # 477s # See issue #651 [1] for details. 477s # 477s # [1] 477s release_this_conn = release_conn 477s 477s http_tunnel_required = connection_requires_http_tunnel( 477s self.proxy, self.proxy_config, destination_scheme 477s ) 477s 477s # Merge the proxy headers. Only done when not using HTTP CONNECT. We 477s # have to copy the headers dict so we can safely change it without those 477s # changes being reflected in anyone else's copy. 477s if not http_tunnel_required: 477s headers = headers.copy() # type: ignore[attr-defined] 477s headers.update(self.proxy_headers) # type: ignore[union-attr] 477s 477s # Must keep the exception bound to a separate variable or else Python 3 477s # complains about UnboundLocalError. 477s err = None 477s 477s # Keep track of whether we cleanly exited the except block. This 477s # ensures we do proper cleanup in finally. 477s clean_exit = False 477s 477s # Rewind body position, if needed. Record current position 477s # for future rewinds in the event of a redirect/retry. 477s body_pos = set_file_position(body, body_pos) 477s 477s try: 477s # Request a connection from the queue. 477s timeout_obj = self._get_timeout(timeout) 477s conn = self._get_conn(timeout=pool_timeout) 477s 477s conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 477s 477s # Is this a closed/new connection that requires CONNECT tunnelling? 477s if self.proxy is not None and http_tunnel_required and conn.is_closed: 477s try: 477s self._prepare_proxy(conn) 477s except (BaseSSLError, OSError, SocketTimeout) as e: 477s self._raise_timeout( 477s err=e, url=self.proxy.url, timeout_value=conn.timeout 477s ) 477s raise 477s 477s # If we're going to release the connection in ``finally:``, then 477s # the response doesn't need to know about the connection. Otherwise 477s # it will also try to release it and we'll have a double-release 477s # mess. 477s response_conn = conn if not release_conn else None 477s 477s # Make the request on the HTTPConnection object 477s > response = self._make_request( 477s conn, 477s method, 477s url, 477s timeout=timeout_obj, 477s body=body, 477s headers=headers, 477s chunked=chunked, 477s retries=retries, 477s response_conn=response_conn, 477s preload_content=preload_content, 477s decode_content=decode_content, 477s **response_kw, 477s ) 477s 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s 477s During handling of the above exception, another exception occurred: 477s 477s self = 477s browser_name = 'chrome', vendor_prefix = 'goog' 477s options = 477s service = 477s keep_alive = True 477s 477s def __init__( 477s self, 477s browser_name: str = None, 477s vendor_prefix: str = None, 477s options: ArgOptions = ArgOptions(), 477s service: Service = None, 477s keep_alive: bool = True, 477s ) -> None: 477s """Creates a new WebDriver instance of the ChromiumDriver. Starts the 477s service and then creates new WebDriver instance of ChromiumDriver. 477s 477s :Args: 477s - browser_name - Browser name used when matching capabilities. 477s - vendor_prefix - Company prefix to apply to vendor-specific WebDriver extension commands. 477s - options - this takes an instance of ChromiumOptions 477s - service - Service object for handling the browser driver if you need to pass extra details 477s - keep_alive - Whether to configure ChromiumRemoteConnection to use HTTP keep-alive. 477s """ 477s self.service = service 477s 477s finder = DriverFinder(self.service, options) 477s if finder.get_browser_path(): 477s options.binary_location = finder.get_browser_path() 477s options.browser_version = None 477s 477s self.service.path = finder.get_driver_path() 477s self.service.start() 477s 477s executor = ChromiumRemoteConnection( 477s remote_server_addr=self.service.service_url, 477s browser_name=browser_name, 477s vendor_prefix=vendor_prefix, 477s keep_alive=keep_alive, 477s ignore_proxy=options._ignore_local_proxy, 477s ) 477s 477s try: 477s > super().__init__(command_executor=executor, options=options) 477s 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:66: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:212: in __init__ 477s self.start_session(capabilities) 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:299: in start_session 477s response = self.execute(Command.NEW_SESSION, caps)["value"] 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:352: in execute 477s response = self.command_executor.execute(driver_command, params) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:306: in execute 477s return self._request(command_info[0], url, body=data) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:326: in _request 477s response = self._conn.request(method, url, body=body, headers=headers) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:143: in request 477s return self.request_encode_body( 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:278: in request_encode_body 477s return self.urlopen(method, url, **extra_kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/poolmanager.py:459: in urlopen 477s response = conn.urlopen(method, u.request_uri, **kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:841: in urlopen 477s retries = retries.increment( 477s /usr/lib/python3/dist-packages/urllib3/util/retry.py:474: in increment 477s raise reraise(type(error), error, _stacktrace) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/util/util.py:38: in reraise 477s raise value.with_traceback(tb) 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: in urlopen 477s response = self._make_request( 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) 477s 477s /usr/lib/python3.14/socket.py:725: ProtocolError 477s 477s During handling of the above exception, another exception occurred: 477s 477s > lambda: ihook(item=item, **kwds), when=when, reraise=reraise 477s ^^^^^^^^^^^^^^^^^^^^^^^^ 477s ) 477s 477s /usr/lib/python3/dist-packages/flaky/flaky_pytest_plugin.py:146: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s tests/conftest.py:148: in run_sabnews_and_selenium 477s driver = webdriver.Chrome(options=driver_options, service=service) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/chrome/webdriver.py:45: in __init__ 477s super().__init__( 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:68: in __init__ 477s self.quit() 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:193: in quit 477s self.service.stop() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:146: in stop 477s self.send_remote_shutdown_command() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:126: in send_remote_shutdown_command 477s request.urlopen(f"{self.service_url}/shutdown") 477s /usr/lib/python3.14/urllib/request.py:187: in urlopen 477s return opener.open(url, data, timeout) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:487: in open 477s response = self._open(req, data) 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:504: in _open 477s result = self._call_chain(self.handle_open, protocol, protocol + 477s /usr/lib/python3.14/urllib/request.py:464: in _call_chain 477s result = func(*args) 477s ^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1350: in http_open 477s return self.do_open(http.client.HTTPConnection, req) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1325: in do_open 477s r = h.getresponse() 477s ^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s ____ ERROR at setup of TestDownloadSorting.test_sorter_settings_conversion _____ 477s 477s self = 477s method = 'POST', url = '/session' 477s body = '{"capabilities": {"firstMatch": [{}], "alwaysMatch": {"browserName": "chrome", "pageLoadStrategy": "normal", "browserVersion": "127", "goog:chromeOptions": {"extensions": [], "args": ["--headless", "--no-sandbox", "--single-process"]}}}}' 477s headers = HTTPHeaderDict({'Accept': 'application/json', 'Content-Type': 'application/json;charset=UTF-8', 'User-Agent': 'selenium/4.31.1 (python linux)', 'Connection': 'keep-alive'}) 477s retries = Retry(total=3, connect=None, read=None, redirect=None, status=None) 477s redirect = False, assert_same_host = False, timeout = <_TYPE_DEFAULT.token: -1> 477s pool_timeout = None, release_conn = True, chunked = False, body_pos = None 477s preload_content = True, decode_content = True, response_kw = {} 477s parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/session', query=None, fragment=None) 477s destination_scheme = None, conn = None, release_this_conn = True 477s http_tunnel_required = False, err = None, clean_exit = False 477s 477s def urlopen( # type: ignore[override] 477s self, 477s method: str, 477s url: str, 477s body: _TYPE_BODY | None = None, 477s headers: typing.Mapping[str, str] | None = None, 477s retries: Retry | bool | int | None = None, 477s redirect: bool = True, 477s assert_same_host: bool = True, 477s timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 477s pool_timeout: int | None = None, 477s release_conn: bool | None = None, 477s chunked: bool = False, 477s body_pos: _TYPE_BODY_POSITION | None = None, 477s preload_content: bool = True, 477s decode_content: bool = True, 477s **response_kw: typing.Any, 477s ) -> BaseHTTPResponse: 477s """ 477s Get a connection from the pool and perform an HTTP request. This is the 477s lowest level call for making a request, so you'll need to specify all 477s the raw details. 477s 477s .. note:: 477s 477s More commonly, it's appropriate to use a convenience method 477s such as :meth:`request`. 477s 477s .. note:: 477s 477s `release_conn` will only behave as expected if 477s `preload_content=False` because we want to make 477s `preload_content=False` the default behaviour someday soon without 477s breaking backwards compatibility. 477s 477s :param method: 477s HTTP request method (such as GET, POST, PUT, etc.) 477s 477s :param url: 477s The URL to perform the request on. 477s 477s :param body: 477s Data to send in the request body, either :class:`str`, :class:`bytes`, 477s an iterable of :class:`str`/:class:`bytes`, or a file-like object. 477s 477s :param headers: 477s Dictionary of custom headers to send, such as User-Agent, 477s If-None-Match, etc. If None, pool headers are used. If provided, 477s these headers completely replace any pool-specific headers. 477s 477s :param retries: 477s Configure the number of retries to allow before raising a 477s :class:`~urllib3.exceptions.MaxRetryError` exception. 477s 477s If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a 477s :class:`~urllib3.util.retry.Retry` object for fine-grained control 477s over different types of retries. 477s Pass an integer number to retry connection errors that many times, 477s but no other types of errors. Pass zero to never retry. 477s 477s If ``False``, then retries are disabled and any exception is raised 477s immediately. Also, instead of raising a MaxRetryError on redirects, 477s the redirect response will be returned. 477s 477s :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 477s 477s :param redirect: 477s If True, automatically handle redirects (status codes 301, 302, 477s 303, 307, 308). Each redirect counts as a retry. Disabling retries 477s will disable redirect, too. 477s 477s :param assert_same_host: 477s If ``True``, will make sure that the host of the pool requests is 477s consistent else will raise HostChangedError. When ``False``, you can 477s use the pool on an HTTP proxy and request foreign hosts. 477s 477s :param timeout: 477s If specified, overrides the default timeout for this one 477s request. It may be a float (in seconds) or an instance of 477s :class:`urllib3.util.Timeout`. 477s 477s :param pool_timeout: 477s If set and the pool is set to block=True, then this method will 477s block for ``pool_timeout`` seconds and raise EmptyPoolError if no 477s connection is available within the time period. 477s 477s :param bool preload_content: 477s If True, the response's body will be preloaded into memory. 477s 477s :param bool decode_content: 477s If True, will attempt to decode the body based on the 477s 'content-encoding' header. 477s 477s :param release_conn: 477s If False, then the urlopen call will not release the connection 477s back into the pool once a response is received (but will release if 477s you read the entire contents of the response such as when 477s `preload_content=True`). This is useful if you're not preloading 477s the response's content immediately. You will need to call 477s ``r.release_conn()`` on the response ``r`` to return the connection 477s back into the pool. If None, it takes the value of ``preload_content`` 477s which defaults to ``True``. 477s 477s :param bool chunked: 477s If True, urllib3 will send the body using chunked transfer 477s encoding. Otherwise, urllib3 will send the body using the standard 477s content-length form. Defaults to False. 477s 477s :param int body_pos: 477s Position to seek to in file-like body in the event of a retry or 477s redirect. Typically this won't need to be set because urllib3 will 477s auto-populate the value when needed. 477s """ 477s parsed_url = parse_url(url) 477s destination_scheme = parsed_url.scheme 477s 477s if headers is None: 477s headers = self.headers 477s 477s if not isinstance(retries, Retry): 477s retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 477s 477s if release_conn is None: 477s release_conn = preload_content 477s 477s # Check host 477s if assert_same_host and not self.is_same_host(url): 477s raise HostChangedError(self, url, retries) 477s 477s # Ensure that the URL we're connecting to is properly encoded 477s if url.startswith("/"): 477s url = to_str(_encode_target(url)) 477s else: 477s url = to_str(parsed_url.url) 477s 477s conn = None 477s 477s # Track whether `conn` needs to be released before 477s # returning/raising/recursing. Update this variable if necessary, and 477s # leave `release_conn` constant throughout the function. That way, if 477s # the function recurses, the original value of `release_conn` will be 477s # passed down into the recursive call, and its value will be respected. 477s # 477s # See issue #651 [1] for details. 477s # 477s # [1] 477s release_this_conn = release_conn 477s 477s http_tunnel_required = connection_requires_http_tunnel( 477s self.proxy, self.proxy_config, destination_scheme 477s ) 477s 477s # Merge the proxy headers. Only done when not using HTTP CONNECT. We 477s # have to copy the headers dict so we can safely change it without those 477s # changes being reflected in anyone else's copy. 477s if not http_tunnel_required: 477s headers = headers.copy() # type: ignore[attr-defined] 477s headers.update(self.proxy_headers) # type: ignore[union-attr] 477s 477s # Must keep the exception bound to a separate variable or else Python 3 477s # complains about UnboundLocalError. 477s err = None 477s 477s # Keep track of whether we cleanly exited the except block. This 477s # ensures we do proper cleanup in finally. 477s clean_exit = False 477s 477s # Rewind body position, if needed. Record current position 477s # for future rewinds in the event of a redirect/retry. 477s body_pos = set_file_position(body, body_pos) 477s 477s try: 477s # Request a connection from the queue. 477s timeout_obj = self._get_timeout(timeout) 477s conn = self._get_conn(timeout=pool_timeout) 477s 477s conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 477s 477s # Is this a closed/new connection that requires CONNECT tunnelling? 477s if self.proxy is not None and http_tunnel_required and conn.is_closed: 477s try: 477s self._prepare_proxy(conn) 477s except (BaseSSLError, OSError, SocketTimeout) as e: 477s self._raise_timeout( 477s err=e, url=self.proxy.url, timeout_value=conn.timeout 477s ) 477s raise 477s 477s # If we're going to release the connection in ``finally:``, then 477s # the response doesn't need to know about the connection. Otherwise 477s # it will also try to release it and we'll have a double-release 477s # mess. 477s response_conn = conn if not release_conn else None 477s 477s # Make the request on the HTTPConnection object 477s > response = self._make_request( 477s conn, 477s method, 477s url, 477s timeout=timeout_obj, 477s body=body, 477s headers=headers, 477s chunked=chunked, 477s retries=retries, 477s response_conn=response_conn, 477s preload_content=preload_content, 477s decode_content=decode_content, 477s **response_kw, 477s ) 477s 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s 477s During handling of the above exception, another exception occurred: 477s 477s self = 477s browser_name = 'chrome', vendor_prefix = 'goog' 477s options = 477s service = 477s keep_alive = True 477s 477s def __init__( 477s self, 477s browser_name: str = None, 477s vendor_prefix: str = None, 477s options: ArgOptions = ArgOptions(), 477s service: Service = None, 477s keep_alive: bool = True, 477s ) -> None: 477s """Creates a new WebDriver instance of the ChromiumDriver. Starts the 477s service and then creates new WebDriver instance of ChromiumDriver. 477s 477s :Args: 477s - browser_name - Browser name used when matching capabilities. 477s - vendor_prefix - Company prefix to apply to vendor-specific WebDriver extension commands. 477s - options - this takes an instance of ChromiumOptions 477s - service - Service object for handling the browser driver if you need to pass extra details 477s - keep_alive - Whether to configure ChromiumRemoteConnection to use HTTP keep-alive. 477s """ 477s self.service = service 477s 477s finder = DriverFinder(self.service, options) 477s if finder.get_browser_path(): 477s options.binary_location = finder.get_browser_path() 477s options.browser_version = None 477s 477s self.service.path = finder.get_driver_path() 477s self.service.start() 477s 477s executor = ChromiumRemoteConnection( 477s remote_server_addr=self.service.service_url, 477s browser_name=browser_name, 477s vendor_prefix=vendor_prefix, 477s keep_alive=keep_alive, 477s ignore_proxy=options._ignore_local_proxy, 477s ) 477s 477s try: 477s > super().__init__(command_executor=executor, options=options) 477s 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:66: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:212: in __init__ 477s self.start_session(capabilities) 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:299: in start_session 477s response = self.execute(Command.NEW_SESSION, caps)["value"] 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:352: in execute 477s response = self.command_executor.execute(driver_command, params) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:306: in execute 477s return self._request(command_info[0], url, body=data) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:326: in _request 477s response = self._conn.request(method, url, body=body, headers=headers) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:143: in request 477s return self.request_encode_body( 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:278: in request_encode_body 477s return self.urlopen(method, url, **extra_kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/poolmanager.py:459: in urlopen 477s response = conn.urlopen(method, u.request_uri, **kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:841: in urlopen 477s retries = retries.increment( 477s /usr/lib/python3/dist-packages/urllib3/util/retry.py:474: in increment 477s raise reraise(type(error), error, _stacktrace) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/util/util.py:38: in reraise 477s raise value.with_traceback(tb) 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: in urlopen 477s response = self._make_request( 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) 477s 477s /usr/lib/python3.14/socket.py:725: ProtocolError 477s 477s During handling of the above exception, another exception occurred: 477s 477s > lambda: ihook(item=item, **kwds), when=when, reraise=reraise 477s ^^^^^^^^^^^^^^^^^^^^^^^^ 477s ) 477s 477s /usr/lib/python3/dist-packages/flaky/flaky_pytest_plugin.py:146: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s tests/conftest.py:148: in run_sabnews_and_selenium 477s driver = webdriver.Chrome(options=driver_options, service=service) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/chrome/webdriver.py:45: in __init__ 477s super().__init__( 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:68: in __init__ 477s self.quit() 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:193: in quit 477s self.service.stop() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:146: in stop 477s self.send_remote_shutdown_command() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:126: in send_remote_shutdown_command 477s request.urlopen(f"{self.service_url}/shutdown") 477s /usr/lib/python3.14/urllib/request.py:187: in urlopen 477s return opener.open(url, data, timeout) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:487: in open 477s response = self._open(req, data) 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:504: in _open 477s result = self._call_chain(self.handle_open, protocol, protocol + 477s /usr/lib/python3.14/urllib/request.py:464: in _call_chain 477s result = func(*args) 477s ^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1350: in http_open 477s return self.do_open(http.client.HTTPConnection, req) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1325: in do_open 477s r = h.getresponse() 477s ^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s _ ERROR at setup of TestDownloadSorting.test_download_season_sorting[sea_sort_s01_4k_uhd-SABnzbd-result0] _ 477s 477s self = 477s method = 'POST', url = '/session' 477s body = '{"capabilities": {"firstMatch": [{}], "alwaysMatch": {"browserName": "chrome", "pageLoadStrategy": "normal", "browserVersion": "127", "goog:chromeOptions": {"extensions": [], "args": ["--headless", "--no-sandbox", "--single-process"]}}}}' 477s headers = HTTPHeaderDict({'Accept': 'application/json', 'Content-Type': 'application/json;charset=UTF-8', 'User-Agent': 'selenium/4.31.1 (python linux)', 'Connection': 'keep-alive'}) 477s retries = Retry(total=3, connect=None, read=None, redirect=None, status=None) 477s redirect = False, assert_same_host = False, timeout = <_TYPE_DEFAULT.token: -1> 477s pool_timeout = None, release_conn = True, chunked = False, body_pos = None 477s preload_content = True, decode_content = True, response_kw = {} 477s parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/session', query=None, fragment=None) 477s destination_scheme = None, conn = None, release_this_conn = True 477s http_tunnel_required = False, err = None, clean_exit = False 477s 477s def urlopen( # type: ignore[override] 477s self, 477s method: str, 477s url: str, 477s body: _TYPE_BODY | None = None, 477s headers: typing.Mapping[str, str] | None = None, 477s retries: Retry | bool | int | None = None, 477s redirect: bool = True, 477s assert_same_host: bool = True, 477s timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 477s pool_timeout: int | None = None, 477s release_conn: bool | None = None, 477s chunked: bool = False, 477s body_pos: _TYPE_BODY_POSITION | None = None, 477s preload_content: bool = True, 477s decode_content: bool = True, 477s **response_kw: typing.Any, 477s ) -> BaseHTTPResponse: 477s """ 477s Get a connection from the pool and perform an HTTP request. This is the 477s lowest level call for making a request, so you'll need to specify all 477s the raw details. 477s 477s .. note:: 477s 477s More commonly, it's appropriate to use a convenience method 477s such as :meth:`request`. 477s 477s .. note:: 477s 477s `release_conn` will only behave as expected if 477s `preload_content=False` because we want to make 477s `preload_content=False` the default behaviour someday soon without 477s breaking backwards compatibility. 477s 477s :param method: 477s HTTP request method (such as GET, POST, PUT, etc.) 477s 477s :param url: 477s The URL to perform the request on. 477s 477s :param body: 477s Data to send in the request body, either :class:`str`, :class:`bytes`, 477s an iterable of :class:`str`/:class:`bytes`, or a file-like object. 477s 477s :param headers: 477s Dictionary of custom headers to send, such as User-Agent, 477s If-None-Match, etc. If None, pool headers are used. If provided, 477s these headers completely replace any pool-specific headers. 477s 477s :param retries: 477s Configure the number of retries to allow before raising a 477s :class:`~urllib3.exceptions.MaxRetryError` exception. 477s 477s If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a 477s :class:`~urllib3.util.retry.Retry` object for fine-grained control 477s over different types of retries. 477s Pass an integer number to retry connection errors that many times, 477s but no other types of errors. Pass zero to never retry. 477s 477s If ``False``, then retries are disabled and any exception is raised 477s immediately. Also, instead of raising a MaxRetryError on redirects, 477s the redirect response will be returned. 477s 477s :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 477s 477s :param redirect: 477s If True, automatically handle redirects (status codes 301, 302, 477s 303, 307, 308). Each redirect counts as a retry. Disabling retries 477s will disable redirect, too. 477s 477s :param assert_same_host: 477s If ``True``, will make sure that the host of the pool requests is 477s consistent else will raise HostChangedError. When ``False``, you can 477s use the pool on an HTTP proxy and request foreign hosts. 477s 477s :param timeout: 477s If specified, overrides the default timeout for this one 477s request. It may be a float (in seconds) or an instance of 477s :class:`urllib3.util.Timeout`. 477s 477s :param pool_timeout: 477s If set and the pool is set to block=True, then this method will 477s block for ``pool_timeout`` seconds and raise EmptyPoolError if no 477s connection is available within the time period. 477s 477s :param bool preload_content: 477s If True, the response's body will be preloaded into memory. 477s 477s :param bool decode_content: 477s If True, will attempt to decode the body based on the 477s 'content-encoding' header. 477s 477s :param release_conn: 477s If False, then the urlopen call will not release the connection 477s back into the pool once a response is received (but will release if 477s you read the entire contents of the response such as when 477s `preload_content=True`). This is useful if you're not preloading 477s the response's content immediately. You will need to call 477s ``r.release_conn()`` on the response ``r`` to return the connection 477s back into the pool. If None, it takes the value of ``preload_content`` 477s which defaults to ``True``. 477s 477s :param bool chunked: 477s If True, urllib3 will send the body using chunked transfer 477s encoding. Otherwise, urllib3 will send the body using the standard 477s content-length form. Defaults to False. 477s 477s :param int body_pos: 477s Position to seek to in file-like body in the event of a retry or 477s redirect. Typically this won't need to be set because urllib3 will 477s auto-populate the value when needed. 477s """ 477s parsed_url = parse_url(url) 477s destination_scheme = parsed_url.scheme 477s 477s if headers is None: 477s headers = self.headers 477s 477s if not isinstance(retries, Retry): 477s retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 477s 477s if release_conn is None: 477s release_conn = preload_content 477s 477s # Check host 477s if assert_same_host and not self.is_same_host(url): 477s raise HostChangedError(self, url, retries) 477s 477s # Ensure that the URL we're connecting to is properly encoded 477s if url.startswith("/"): 477s url = to_str(_encode_target(url)) 477s else: 477s url = to_str(parsed_url.url) 477s 477s conn = None 477s 477s # Track whether `conn` needs to be released before 477s # returning/raising/recursing. Update this variable if necessary, and 477s # leave `release_conn` constant throughout the function. That way, if 477s # the function recurses, the original value of `release_conn` will be 477s # passed down into the recursive call, and its value will be respected. 477s # 477s # See issue #651 [1] for details. 477s # 477s # [1] 477s release_this_conn = release_conn 477s 477s http_tunnel_required = connection_requires_http_tunnel( 477s self.proxy, self.proxy_config, destination_scheme 477s ) 477s 477s # Merge the proxy headers. Only done when not using HTTP CONNECT. We 477s # have to copy the headers dict so we can safely change it without those 477s # changes being reflected in anyone else's copy. 477s if not http_tunnel_required: 477s headers = headers.copy() # type: ignore[attr-defined] 477s headers.update(self.proxy_headers) # type: ignore[union-attr] 477s 477s # Must keep the exception bound to a separate variable or else Python 3 477s # complains about UnboundLocalError. 477s err = None 477s 477s # Keep track of whether we cleanly exited the except block. This 477s # ensures we do proper cleanup in finally. 477s clean_exit = False 477s 477s # Rewind body position, if needed. Record current position 477s # for future rewinds in the event of a redirect/retry. 477s body_pos = set_file_position(body, body_pos) 477s 477s try: 477s # Request a connection from the queue. 477s timeout_obj = self._get_timeout(timeout) 477s conn = self._get_conn(timeout=pool_timeout) 477s 477s conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 477s 477s # Is this a closed/new connection that requires CONNECT tunnelling? 477s if self.proxy is not None and http_tunnel_required and conn.is_closed: 477s try: 477s self._prepare_proxy(conn) 477s except (BaseSSLError, OSError, SocketTimeout) as e: 477s self._raise_timeout( 477s err=e, url=self.proxy.url, timeout_value=conn.timeout 477s ) 477s raise 477s 477s # If we're going to release the connection in ``finally:``, then 477s # the response doesn't need to know about the connection. Otherwise 477s # it will also try to release it and we'll have a double-release 477s # mess. 477s response_conn = conn if not release_conn else None 477s 477s # Make the request on the HTTPConnection object 477s > response = self._make_request( 477s conn, 477s method, 477s url, 477s timeout=timeout_obj, 477s body=body, 477s headers=headers, 477s chunked=chunked, 477s retries=retries, 477s response_conn=response_conn, 477s preload_content=preload_content, 477s decode_content=decode_content, 477s **response_kw, 477s ) 477s 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s 477s During handling of the above exception, another exception occurred: 477s 477s self = 477s browser_name = 'chrome', vendor_prefix = 'goog' 477s options = 477s service = 477s keep_alive = True 477s 477s def __init__( 477s self, 477s browser_name: str = None, 477s vendor_prefix: str = None, 477s options: ArgOptions = ArgOptions(), 477s service: Service = None, 477s keep_alive: bool = True, 477s ) -> None: 477s """Creates a new WebDriver instance of the ChromiumDriver. Starts the 477s service and then creates new WebDriver instance of ChromiumDriver. 477s 477s :Args: 477s - browser_name - Browser name used when matching capabilities. 477s - vendor_prefix - Company prefix to apply to vendor-specific WebDriver extension commands. 477s - options - this takes an instance of ChromiumOptions 477s - service - Service object for handling the browser driver if you need to pass extra details 477s - keep_alive - Whether to configure ChromiumRemoteConnection to use HTTP keep-alive. 477s """ 477s self.service = service 477s 477s finder = DriverFinder(self.service, options) 477s if finder.get_browser_path(): 477s options.binary_location = finder.get_browser_path() 477s options.browser_version = None 477s 477s self.service.path = finder.get_driver_path() 477s self.service.start() 477s 477s executor = ChromiumRemoteConnection( 477s remote_server_addr=self.service.service_url, 477s browser_name=browser_name, 477s vendor_prefix=vendor_prefix, 477s keep_alive=keep_alive, 477s ignore_proxy=options._ignore_local_proxy, 477s ) 477s 477s try: 477s > super().__init__(command_executor=executor, options=options) 477s 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:66: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:212: in __init__ 477s self.start_session(capabilities) 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:299: in start_session 477s response = self.execute(Command.NEW_SESSION, caps)["value"] 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:352: in execute 477s response = self.command_executor.execute(driver_command, params) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:306: in execute 477s return self._request(command_info[0], url, body=data) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:326: in _request 477s response = self._conn.request(method, url, body=body, headers=headers) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:143: in request 477s return self.request_encode_body( 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:278: in request_encode_body 477s return self.urlopen(method, url, **extra_kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/poolmanager.py:459: in urlopen 477s response = conn.urlopen(method, u.request_uri, **kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:841: in urlopen 477s retries = retries.increment( 477s /usr/lib/python3/dist-packages/urllib3/util/retry.py:474: in increment 477s raise reraise(type(error), error, _stacktrace) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/util/util.py:38: in reraise 477s raise value.with_traceback(tb) 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: in urlopen 477s response = self._make_request( 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) 477s 477s /usr/lib/python3.14/socket.py:725: ProtocolError 477s 477s During handling of the above exception, another exception occurred: 477s 477s > lambda: ihook(item=item, **kwds), when=when, reraise=reraise 477s ^^^^^^^^^^^^^^^^^^^^^^^^ 477s ) 477s 477s /usr/lib/python3/dist-packages/flaky/flaky_pytest_plugin.py:146: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s tests/conftest.py:148: in run_sabnews_and_selenium 477s driver = webdriver.Chrome(options=driver_options, service=service) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/chrome/webdriver.py:45: in __init__ 477s super().__init__( 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:68: in __init__ 477s self.quit() 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:193: in quit 477s self.service.stop() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:146: in stop 477s self.send_remote_shutdown_command() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:126: in send_remote_shutdown_command 477s request.urlopen(f"{self.service_url}/shutdown") 477s /usr/lib/python3.14/urllib/request.py:187: in urlopen 477s return opener.open(url, data, timeout) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:487: in open 477s response = self._open(req, data) 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:504: in _open 477s result = self._call_chain(self.handle_open, protocol, protocol + 477s /usr/lib/python3.14/urllib/request.py:464: in _call_chain 477s result = func(*args) 477s ^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1350: in http_open 477s return self.do_open(http.client.HTTPConnection, req) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1325: in do_open 477s r = h.getresponse() 477s ^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s _ ERROR at setup of TestDownloadSorting.test_download_season_sorting[sea_sort_s02_4k_uhd-SABnzbd-result1] _ 477s 477s self = 477s method = 'POST', url = '/session' 477s body = '{"capabilities": {"firstMatch": [{}], "alwaysMatch": {"browserName": "chrome", "pageLoadStrategy": "normal", "browserVersion": "127", "goog:chromeOptions": {"extensions": [], "args": ["--headless", "--no-sandbox", "--single-process"]}}}}' 477s headers = HTTPHeaderDict({'Accept': 'application/json', 'Content-Type': 'application/json;charset=UTF-8', 'User-Agent': 'selenium/4.31.1 (python linux)', 'Connection': 'keep-alive'}) 477s retries = Retry(total=3, connect=None, read=None, redirect=None, status=None) 477s redirect = False, assert_same_host = False, timeout = <_TYPE_DEFAULT.token: -1> 477s pool_timeout = None, release_conn = True, chunked = False, body_pos = None 477s preload_content = True, decode_content = True, response_kw = {} 477s parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/session', query=None, fragment=None) 477s destination_scheme = None, conn = None, release_this_conn = True 477s http_tunnel_required = False, err = None, clean_exit = False 477s 477s def urlopen( # type: ignore[override] 477s self, 477s method: str, 477s url: str, 477s body: _TYPE_BODY | None = None, 477s headers: typing.Mapping[str, str] | None = None, 477s retries: Retry | bool | int | None = None, 477s redirect: bool = True, 477s assert_same_host: bool = True, 477s timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 477s pool_timeout: int | None = None, 477s release_conn: bool | None = None, 477s chunked: bool = False, 477s body_pos: _TYPE_BODY_POSITION | None = None, 477s preload_content: bool = True, 477s decode_content: bool = True, 477s **response_kw: typing.Any, 477s ) -> BaseHTTPResponse: 477s """ 477s Get a connection from the pool and perform an HTTP request. This is the 477s lowest level call for making a request, so you'll need to specify all 477s the raw details. 477s 477s .. note:: 477s 477s More commonly, it's appropriate to use a convenience method 477s such as :meth:`request`. 477s 477s .. note:: 477s 477s `release_conn` will only behave as expected if 477s `preload_content=False` because we want to make 477s `preload_content=False` the default behaviour someday soon without 477s breaking backwards compatibility. 477s 477s :param method: 477s HTTP request method (such as GET, POST, PUT, etc.) 477s 477s :param url: 477s The URL to perform the request on. 477s 477s :param body: 477s Data to send in the request body, either :class:`str`, :class:`bytes`, 477s an iterable of :class:`str`/:class:`bytes`, or a file-like object. 477s 477s :param headers: 477s Dictionary of custom headers to send, such as User-Agent, 477s If-None-Match, etc. If None, pool headers are used. If provided, 477s these headers completely replace any pool-specific headers. 477s 477s :param retries: 477s Configure the number of retries to allow before raising a 477s :class:`~urllib3.exceptions.MaxRetryError` exception. 477s 477s If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a 477s :class:`~urllib3.util.retry.Retry` object for fine-grained control 477s over different types of retries. 477s Pass an integer number to retry connection errors that many times, 477s but no other types of errors. Pass zero to never retry. 477s 477s If ``False``, then retries are disabled and any exception is raised 477s immediately. Also, instead of raising a MaxRetryError on redirects, 477s the redirect response will be returned. 477s 477s :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 477s 477s :param redirect: 477s If True, automatically handle redirects (status codes 301, 302, 477s 303, 307, 308). Each redirect counts as a retry. Disabling retries 477s will disable redirect, too. 477s 477s :param assert_same_host: 477s If ``True``, will make sure that the host of the pool requests is 477s consistent else will raise HostChangedError. When ``False``, you can 477s use the pool on an HTTP proxy and request foreign hosts. 477s 477s :param timeout: 477s If specified, overrides the default timeout for this one 477s request. It may be a float (in seconds) or an instance of 477s :class:`urllib3.util.Timeout`. 477s 477s :param pool_timeout: 477s If set and the pool is set to block=True, then this method will 477s block for ``pool_timeout`` seconds and raise EmptyPoolError if no 477s connection is available within the time period. 477s 477s :param bool preload_content: 477s If True, the response's body will be preloaded into memory. 477s 477s :param bool decode_content: 477s If True, will attempt to decode the body based on the 477s 'content-encoding' header. 477s 477s :param release_conn: 477s If False, then the urlopen call will not release the connection 477s back into the pool once a response is received (but will release if 477s you read the entire contents of the response such as when 477s `preload_content=True`). This is useful if you're not preloading 477s the response's content immediately. You will need to call 477s ``r.release_conn()`` on the response ``r`` to return the connection 477s back into the pool. If None, it takes the value of ``preload_content`` 477s which defaults to ``True``. 477s 477s :param bool chunked: 477s If True, urllib3 will send the body using chunked transfer 477s encoding. Otherwise, urllib3 will send the body using the standard 477s content-length form. Defaults to False. 477s 477s :param int body_pos: 477s Position to seek to in file-like body in the event of a retry or 477s redirect. Typically this won't need to be set because urllib3 will 477s auto-populate the value when needed. 477s """ 477s parsed_url = parse_url(url) 477s destination_scheme = parsed_url.scheme 477s 477s if headers is None: 477s headers = self.headers 477s 477s if not isinstance(retries, Retry): 477s retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 477s 477s if release_conn is None: 477s release_conn = preload_content 477s 477s # Check host 477s if assert_same_host and not self.is_same_host(url): 477s raise HostChangedError(self, url, retries) 477s 477s # Ensure that the URL we're connecting to is properly encoded 477s if url.startswith("/"): 477s url = to_str(_encode_target(url)) 477s else: 477s url = to_str(parsed_url.url) 477s 477s conn = None 477s 477s # Track whether `conn` needs to be released before 477s # returning/raising/recursing. Update this variable if necessary, and 477s # leave `release_conn` constant throughout the function. That way, if 477s # the function recurses, the original value of `release_conn` will be 477s # passed down into the recursive call, and its value will be respected. 477s # 477s # See issue #651 [1] for details. 477s # 477s # [1] 477s release_this_conn = release_conn 477s 477s http_tunnel_required = connection_requires_http_tunnel( 477s self.proxy, self.proxy_config, destination_scheme 477s ) 477s 477s # Merge the proxy headers. Only done when not using HTTP CONNECT. We 477s # have to copy the headers dict so we can safely change it without those 477s # changes being reflected in anyone else's copy. 477s if not http_tunnel_required: 477s headers = headers.copy() # type: ignore[attr-defined] 477s headers.update(self.proxy_headers) # type: ignore[union-attr] 477s 477s # Must keep the exception bound to a separate variable or else Python 3 477s # complains about UnboundLocalError. 477s err = None 477s 477s # Keep track of whether we cleanly exited the except block. This 477s # ensures we do proper cleanup in finally. 477s clean_exit = False 477s 477s # Rewind body position, if needed. Record current position 477s # for future rewinds in the event of a redirect/retry. 477s body_pos = set_file_position(body, body_pos) 477s 477s try: 477s # Request a connection from the queue. 477s timeout_obj = self._get_timeout(timeout) 477s conn = self._get_conn(timeout=pool_timeout) 477s 477s conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 477s 477s # Is this a closed/new connection that requires CONNECT tunnelling? 477s if self.proxy is not None and http_tunnel_required and conn.is_closed: 477s try: 477s self._prepare_proxy(conn) 477s except (BaseSSLError, OSError, SocketTimeout) as e: 477s self._raise_timeout( 477s err=e, url=self.proxy.url, timeout_value=conn.timeout 477s ) 477s raise 477s 477s # If we're going to release the connection in ``finally:``, then 477s # the response doesn't need to know about the connection. Otherwise 477s # it will also try to release it and we'll have a double-release 477s # mess. 477s response_conn = conn if not release_conn else None 477s 477s # Make the request on the HTTPConnection object 477s > response = self._make_request( 477s conn, 477s method, 477s url, 477s timeout=timeout_obj, 477s body=body, 477s headers=headers, 477s chunked=chunked, 477s retries=retries, 477s response_conn=response_conn, 477s preload_content=preload_content, 477s decode_content=decode_content, 477s **response_kw, 477s ) 477s 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s 477s During handling of the above exception, another exception occurred: 477s 477s self = 477s browser_name = 'chrome', vendor_prefix = 'goog' 477s options = 477s service = 477s keep_alive = True 477s 477s def __init__( 477s self, 477s browser_name: str = None, 477s vendor_prefix: str = None, 477s options: ArgOptions = ArgOptions(), 477s service: Service = None, 477s keep_alive: bool = True, 477s ) -> None: 477s """Creates a new WebDriver instance of the ChromiumDriver. Starts the 477s service and then creates new WebDriver instance of ChromiumDriver. 477s 477s :Args: 477s - browser_name - Browser name used when matching capabilities. 477s - vendor_prefix - Company prefix to apply to vendor-specific WebDriver extension commands. 477s - options - this takes an instance of ChromiumOptions 477s - service - Service object for handling the browser driver if you need to pass extra details 477s - keep_alive - Whether to configure ChromiumRemoteConnection to use HTTP keep-alive. 477s """ 477s self.service = service 477s 477s finder = DriverFinder(self.service, options) 477s if finder.get_browser_path(): 477s options.binary_location = finder.get_browser_path() 477s options.browser_version = None 477s 477s self.service.path = finder.get_driver_path() 477s self.service.start() 477s 477s executor = ChromiumRemoteConnection( 477s remote_server_addr=self.service.service_url, 477s browser_name=browser_name, 477s vendor_prefix=vendor_prefix, 477s keep_alive=keep_alive, 477s ignore_proxy=options._ignore_local_proxy, 477s ) 477s 477s try: 477s > super().__init__(command_executor=executor, options=options) 477s 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:66: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:212: in __init__ 477s self.start_session(capabilities) 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:299: in start_session 477s response = self.execute(Command.NEW_SESSION, caps)["value"] 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:352: in execute 477s response = self.command_executor.execute(driver_command, params) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:306: in execute 477s return self._request(command_info[0], url, body=data) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:326: in _request 477s response = self._conn.request(method, url, body=body, headers=headers) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:143: in request 477s return self.request_encode_body( 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:278: in request_encode_body 477s return self.urlopen(method, url, **extra_kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/poolmanager.py:459: in urlopen 477s response = conn.urlopen(method, u.request_uri, **kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:841: in urlopen 477s retries = retries.increment( 477s /usr/lib/python3/dist-packages/urllib3/util/retry.py:474: in increment 477s raise reraise(type(error), error, _stacktrace) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/util/util.py:38: in reraise 477s raise value.with_traceback(tb) 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: in urlopen 477s response = self._make_request( 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) 477s 477s /usr/lib/python3.14/socket.py:725: ProtocolError 477s 477s During handling of the above exception, another exception occurred: 477s 477s > lambda: ihook(item=item, **kwds), when=when, reraise=reraise 477s ^^^^^^^^^^^^^^^^^^^^^^^^ 477s ) 477s 477s /usr/lib/python3/dist-packages/flaky/flaky_pytest_plugin.py:146: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s tests/conftest.py:148: in run_sabnews_and_selenium 477s driver = webdriver.Chrome(options=driver_options, service=service) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/chrome/webdriver.py:45: in __init__ 477s super().__init__( 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:68: in __init__ 477s self.quit() 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:193: in quit 477s self.service.stop() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:146: in stop 477s self.send_remote_shutdown_command() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:126: in send_remote_shutdown_command 477s request.urlopen(f"{self.service_url}/shutdown") 477s /usr/lib/python3.14/urllib/request.py:187: in urlopen 477s return opener.open(url, data, timeout) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:487: in open 477s response = self._open(req, data) 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:504: in _open 477s result = self._call_chain(self.handle_open, protocol, protocol + 477s /usr/lib/python3.14/urllib/request.py:464: in _call_chain 477s result = func(*args) 477s ^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1350: in http_open 477s return self.do_open(http.client.HTTPConnection, req) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1325: in do_open 477s r = h.getresponse() 477s ^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s _ ERROR at setup of TestDownloadSorting.test_download_sequential[Long_live_CDs_2023_576i_mono-SABnzbd-result0] _ 477s 477s self = 477s method = 'POST', url = '/session' 477s body = '{"capabilities": {"firstMatch": [{}], "alwaysMatch": {"browserName": "chrome", "pageLoadStrategy": "normal", "browserVersion": "127", "goog:chromeOptions": {"extensions": [], "args": ["--headless", "--no-sandbox", "--single-process"]}}}}' 477s headers = HTTPHeaderDict({'Accept': 'application/json', 'Content-Type': 'application/json;charset=UTF-8', 'User-Agent': 'selenium/4.31.1 (python linux)', 'Connection': 'keep-alive'}) 477s retries = Retry(total=3, connect=None, read=None, redirect=None, status=None) 477s redirect = False, assert_same_host = False, timeout = <_TYPE_DEFAULT.token: -1> 477s pool_timeout = None, release_conn = True, chunked = False, body_pos = None 477s preload_content = True, decode_content = True, response_kw = {} 477s parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/session', query=None, fragment=None) 477s destination_scheme = None, conn = None, release_this_conn = True 477s http_tunnel_required = False, err = None, clean_exit = False 477s 477s def urlopen( # type: ignore[override] 477s self, 477s method: str, 477s url: str, 477s body: _TYPE_BODY | None = None, 477s headers: typing.Mapping[str, str] | None = None, 477s retries: Retry | bool | int | None = None, 477s redirect: bool = True, 477s assert_same_host: bool = True, 477s timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 477s pool_timeout: int | None = None, 477s release_conn: bool | None = None, 477s chunked: bool = False, 477s body_pos: _TYPE_BODY_POSITION | None = None, 477s preload_content: bool = True, 477s decode_content: bool = True, 477s **response_kw: typing.Any, 477s ) -> BaseHTTPResponse: 477s """ 477s Get a connection from the pool and perform an HTTP request. This is the 477s lowest level call for making a request, so you'll need to specify all 477s the raw details. 477s 477s .. note:: 477s 477s More commonly, it's appropriate to use a convenience method 477s such as :meth:`request`. 477s 477s .. note:: 477s 477s `release_conn` will only behave as expected if 477s `preload_content=False` because we want to make 477s `preload_content=False` the default behaviour someday soon without 477s breaking backwards compatibility. 477s 477s :param method: 477s HTTP request method (such as GET, POST, PUT, etc.) 477s 477s :param url: 477s The URL to perform the request on. 477s 477s :param body: 477s Data to send in the request body, either :class:`str`, :class:`bytes`, 477s an iterable of :class:`str`/:class:`bytes`, or a file-like object. 477s 477s :param headers: 477s Dictionary of custom headers to send, such as User-Agent, 477s If-None-Match, etc. If None, pool headers are used. If provided, 477s these headers completely replace any pool-specific headers. 477s 477s :param retries: 477s Configure the number of retries to allow before raising a 477s :class:`~urllib3.exceptions.MaxRetryError` exception. 477s 477s If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a 477s :class:`~urllib3.util.retry.Retry` object for fine-grained control 477s over different types of retries. 477s Pass an integer number to retry connection errors that many times, 477s but no other types of errors. Pass zero to never retry. 477s 477s If ``False``, then retries are disabled and any exception is raised 477s immediately. Also, instead of raising a MaxRetryError on redirects, 477s the redirect response will be returned. 477s 477s :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 477s 477s :param redirect: 477s If True, automatically handle redirects (status codes 301, 302, 477s 303, 307, 308). Each redirect counts as a retry. Disabling retries 477s will disable redirect, too. 477s 477s :param assert_same_host: 477s If ``True``, will make sure that the host of the pool requests is 477s consistent else will raise HostChangedError. When ``False``, you can 477s use the pool on an HTTP proxy and request foreign hosts. 477s 477s :param timeout: 477s If specified, overrides the default timeout for this one 477s request. It may be a float (in seconds) or an instance of 477s :class:`urllib3.util.Timeout`. 477s 477s :param pool_timeout: 477s If set and the pool is set to block=True, then this method will 477s block for ``pool_timeout`` seconds and raise EmptyPoolError if no 477s connection is available within the time period. 477s 477s :param bool preload_content: 477s If True, the response's body will be preloaded into memory. 477s 477s :param bool decode_content: 477s If True, will attempt to decode the body based on the 477s 'content-encoding' header. 477s 477s :param release_conn: 477s If False, then the urlopen call will not release the connection 477s back into the pool once a response is received (but will release if 477s you read the entire contents of the response such as when 477s `preload_content=True`). This is useful if you're not preloading 477s the response's content immediately. You will need to call 477s ``r.release_conn()`` on the response ``r`` to return the connection 477s back into the pool. If None, it takes the value of ``preload_content`` 477s which defaults to ``True``. 477s 477s :param bool chunked: 477s If True, urllib3 will send the body using chunked transfer 477s encoding. Otherwise, urllib3 will send the body using the standard 477s content-length form. Defaults to False. 477s 477s :param int body_pos: 477s Position to seek to in file-like body in the event of a retry or 477s redirect. Typically this won't need to be set because urllib3 will 477s auto-populate the value when needed. 477s """ 477s parsed_url = parse_url(url) 477s destination_scheme = parsed_url.scheme 477s 477s if headers is None: 477s headers = self.headers 477s 477s if not isinstance(retries, Retry): 477s retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 477s 477s if release_conn is None: 477s release_conn = preload_content 477s 477s # Check host 477s if assert_same_host and not self.is_same_host(url): 477s raise HostChangedError(self, url, retries) 477s 477s # Ensure that the URL we're connecting to is properly encoded 477s if url.startswith("/"): 477s url = to_str(_encode_target(url)) 477s else: 477s url = to_str(parsed_url.url) 477s 477s conn = None 477s 477s # Track whether `conn` needs to be released before 477s # returning/raising/recursing. Update this variable if necessary, and 477s # leave `release_conn` constant throughout the function. That way, if 477s # the function recurses, the original value of `release_conn` will be 477s # passed down into the recursive call, and its value will be respected. 477s # 477s # See issue #651 [1] for details. 477s # 477s # [1] 477s release_this_conn = release_conn 477s 477s http_tunnel_required = connection_requires_http_tunnel( 477s self.proxy, self.proxy_config, destination_scheme 477s ) 477s 477s # Merge the proxy headers. Only done when not using HTTP CONNECT. We 477s # have to copy the headers dict so we can safely change it without those 477s # changes being reflected in anyone else's copy. 477s if not http_tunnel_required: 477s headers = headers.copy() # type: ignore[attr-defined] 477s headers.update(self.proxy_headers) # type: ignore[union-attr] 477s 477s # Must keep the exception bound to a separate variable or else Python 3 477s # complains about UnboundLocalError. 477s err = None 477s 477s # Keep track of whether we cleanly exited the except block. This 477s # ensures we do proper cleanup in finally. 477s clean_exit = False 477s 477s # Rewind body position, if needed. Record current position 477s # for future rewinds in the event of a redirect/retry. 477s body_pos = set_file_position(body, body_pos) 477s 477s try: 477s # Request a connection from the queue. 477s timeout_obj = self._get_timeout(timeout) 477s conn = self._get_conn(timeout=pool_timeout) 477s 477s conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 477s 477s # Is this a closed/new connection that requires CONNECT tunnelling? 477s if self.proxy is not None and http_tunnel_required and conn.is_closed: 477s try: 477s self._prepare_proxy(conn) 477s except (BaseSSLError, OSError, SocketTimeout) as e: 477s self._raise_timeout( 477s err=e, url=self.proxy.url, timeout_value=conn.timeout 477s ) 477s raise 477s 477s # If we're going to release the connection in ``finally:``, then 477s # the response doesn't need to know about the connection. Otherwise 477s # it will also try to release it and we'll have a double-release 477s # mess. 477s response_conn = conn if not release_conn else None 477s 477s # Make the request on the HTTPConnection object 477s > response = self._make_request( 477s conn, 477s method, 477s url, 477s timeout=timeout_obj, 477s body=body, 477s headers=headers, 477s chunked=chunked, 477s retries=retries, 477s response_conn=response_conn, 477s preload_content=preload_content, 477s decode_content=decode_content, 477s **response_kw, 477s ) 477s 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s 477s During handling of the above exception, another exception occurred: 477s 477s self = 477s browser_name = 'chrome', vendor_prefix = 'goog' 477s options = 477s service = 477s keep_alive = True 477s 477s def __init__( 477s self, 477s browser_name: str = None, 477s vendor_prefix: str = None, 477s options: ArgOptions = ArgOptions(), 477s service: Service = None, 477s keep_alive: bool = True, 477s ) -> None: 477s """Creates a new WebDriver instance of the ChromiumDriver. Starts the 477s service and then creates new WebDriver instance of ChromiumDriver. 477s 477s :Args: 477s - browser_name - Browser name used when matching capabilities. 477s - vendor_prefix - Company prefix to apply to vendor-specific WebDriver extension commands. 477s - options - this takes an instance of ChromiumOptions 477s - service - Service object for handling the browser driver if you need to pass extra details 477s - keep_alive - Whether to configure ChromiumRemoteConnection to use HTTP keep-alive. 477s """ 477s self.service = service 477s 477s finder = DriverFinder(self.service, options) 477s if finder.get_browser_path(): 477s options.binary_location = finder.get_browser_path() 477s options.browser_version = None 477s 477s self.service.path = finder.get_driver_path() 477s self.service.start() 477s 477s executor = ChromiumRemoteConnection( 477s remote_server_addr=self.service.service_url, 477s browser_name=browser_name, 477s vendor_prefix=vendor_prefix, 477s keep_alive=keep_alive, 477s ignore_proxy=options._ignore_local_proxy, 477s ) 477s 477s try: 477s > super().__init__(command_executor=executor, options=options) 477s 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:66: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:212: in __init__ 477s self.start_session(capabilities) 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:299: in start_session 477s response = self.execute(Command.NEW_SESSION, caps)["value"] 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:352: in execute 477s response = self.command_executor.execute(driver_command, params) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:306: in execute 477s return self._request(command_info[0], url, body=data) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:326: in _request 477s response = self._conn.request(method, url, body=body, headers=headers) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:143: in request 477s return self.request_encode_body( 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:278: in request_encode_body 477s return self.urlopen(method, url, **extra_kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/poolmanager.py:459: in urlopen 477s response = conn.urlopen(method, u.request_uri, **kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:841: in urlopen 477s retries = retries.increment( 477s /usr/lib/python3/dist-packages/urllib3/util/retry.py:474: in increment 477s raise reraise(type(error), error, _stacktrace) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/util/util.py:38: in reraise 477s raise value.with_traceback(tb) 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: in urlopen 477s response = self._make_request( 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) 477s 477s /usr/lib/python3.14/socket.py:725: ProtocolError 477s 477s During handling of the above exception, another exception occurred: 477s 477s > lambda: ihook(item=item, **kwds), when=when, reraise=reraise 477s ^^^^^^^^^^^^^^^^^^^^^^^^ 477s ) 477s 477s /usr/lib/python3/dist-packages/flaky/flaky_pytest_plugin.py:146: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s tests/conftest.py:148: in run_sabnews_and_selenium 477s driver = webdriver.Chrome(options=driver_options, service=service) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/chrome/webdriver.py:45: in __init__ 477s super().__init__( 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:68: in __init__ 477s self.quit() 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:193: in quit 477s self.service.stop() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:146: in stop 477s self.send_remote_shutdown_command() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:126: in send_remote_shutdown_command 477s request.urlopen(f"{self.service_url}/shutdown") 477s /usr/lib/python3.14/urllib/request.py:187: in urlopen 477s return opener.open(url, data, timeout) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:487: in open 477s response = self._open(req, data) 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:504: in _open 477s result = self._call_chain(self.handle_open, protocol, protocol + 477s /usr/lib/python3.14/urllib/request.py:464: in _call_chain 477s result = func(*args) 477s ^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1350: in http_open 477s return self.do_open(http.client.HTTPConnection, req) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1325: in do_open 477s r = h.getresponse() 477s ^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s _ ERROR at setup of TestDownloadSorting.test_download_sequential[Its_all_about_parts_2023_576i_mono-SABnzbd-result1] _ 477s 477s self = 477s method = 'POST', url = '/session' 477s body = '{"capabilities": {"firstMatch": [{}], "alwaysMatch": {"browserName": "chrome", "pageLoadStrategy": "normal", "browserVersion": "127", "goog:chromeOptions": {"extensions": [], "args": ["--headless", "--no-sandbox", "--single-process"]}}}}' 477s headers = HTTPHeaderDict({'Accept': 'application/json', 'Content-Type': 'application/json;charset=UTF-8', 'User-Agent': 'selenium/4.31.1 (python linux)', 'Connection': 'keep-alive'}) 477s retries = Retry(total=3, connect=None, read=None, redirect=None, status=None) 477s redirect = False, assert_same_host = False, timeout = <_TYPE_DEFAULT.token: -1> 477s pool_timeout = None, release_conn = True, chunked = False, body_pos = None 477s preload_content = True, decode_content = True, response_kw = {} 477s parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/session', query=None, fragment=None) 477s destination_scheme = None, conn = None, release_this_conn = True 477s http_tunnel_required = False, err = None, clean_exit = False 477s 477s def urlopen( # type: ignore[override] 477s self, 477s method: str, 477s url: str, 477s body: _TYPE_BODY | None = None, 477s headers: typing.Mapping[str, str] | None = None, 477s retries: Retry | bool | int | None = None, 477s redirect: bool = True, 477s assert_same_host: bool = True, 477s timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 477s pool_timeout: int | None = None, 477s release_conn: bool | None = None, 477s chunked: bool = False, 477s body_pos: _TYPE_BODY_POSITION | None = None, 477s preload_content: bool = True, 477s decode_content: bool = True, 477s **response_kw: typing.Any, 477s ) -> BaseHTTPResponse: 477s """ 477s Get a connection from the pool and perform an HTTP request. This is the 477s lowest level call for making a request, so you'll need to specify all 477s the raw details. 477s 477s .. note:: 477s 477s More commonly, it's appropriate to use a convenience method 477s such as :meth:`request`. 477s 477s .. note:: 477s 477s `release_conn` will only behave as expected if 477s `preload_content=False` because we want to make 477s `preload_content=False` the default behaviour someday soon without 477s breaking backwards compatibility. 477s 477s :param method: 477s HTTP request method (such as GET, POST, PUT, etc.) 477s 477s :param url: 477s The URL to perform the request on. 477s 477s :param body: 477s Data to send in the request body, either :class:`str`, :class:`bytes`, 477s an iterable of :class:`str`/:class:`bytes`, or a file-like object. 477s 477s :param headers: 477s Dictionary of custom headers to send, such as User-Agent, 477s If-None-Match, etc. If None, pool headers are used. If provided, 477s these headers completely replace any pool-specific headers. 477s 477s :param retries: 477s Configure the number of retries to allow before raising a 477s :class:`~urllib3.exceptions.MaxRetryError` exception. 477s 477s If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a 477s :class:`~urllib3.util.retry.Retry` object for fine-grained control 477s over different types of retries. 477s Pass an integer number to retry connection errors that many times, 477s but no other types of errors. Pass zero to never retry. 477s 477s If ``False``, then retries are disabled and any exception is raised 477s immediately. Also, instead of raising a MaxRetryError on redirects, 477s the redirect response will be returned. 477s 477s :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 477s 477s :param redirect: 477s If True, automatically handle redirects (status codes 301, 302, 477s 303, 307, 308). Each redirect counts as a retry. Disabling retries 477s will disable redirect, too. 477s 477s :param assert_same_host: 477s If ``True``, will make sure that the host of the pool requests is 477s consistent else will raise HostChangedError. When ``False``, you can 477s use the pool on an HTTP proxy and request foreign hosts. 477s 477s :param timeout: 477s If specified, overrides the default timeout for this one 477s request. It may be a float (in seconds) or an instance of 477s :class:`urllib3.util.Timeout`. 477s 477s :param pool_timeout: 477s If set and the pool is set to block=True, then this method will 477s block for ``pool_timeout`` seconds and raise EmptyPoolError if no 477s connection is available within the time period. 477s 477s :param bool preload_content: 477s If True, the response's body will be preloaded into memory. 477s 477s :param bool decode_content: 477s If True, will attempt to decode the body based on the 477s 'content-encoding' header. 477s 477s :param release_conn: 477s If False, then the urlopen call will not release the connection 477s back into the pool once a response is received (but will release if 477s you read the entire contents of the response such as when 477s `preload_content=True`). This is useful if you're not preloading 477s the response's content immediately. You will need to call 477s ``r.release_conn()`` on the response ``r`` to return the connection 477s back into the pool. If None, it takes the value of ``preload_content`` 477s which defaults to ``True``. 477s 477s :param bool chunked: 477s If True, urllib3 will send the body using chunked transfer 477s encoding. Otherwise, urllib3 will send the body using the standard 477s content-length form. Defaults to False. 477s 477s :param int body_pos: 477s Position to seek to in file-like body in the event of a retry or 477s redirect. Typically this won't need to be set because urllib3 will 477s auto-populate the value when needed. 477s """ 477s parsed_url = parse_url(url) 477s destination_scheme = parsed_url.scheme 477s 477s if headers is None: 477s headers = self.headers 477s 477s if not isinstance(retries, Retry): 477s retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 477s 477s if release_conn is None: 477s release_conn = preload_content 477s 477s # Check host 477s if assert_same_host and not self.is_same_host(url): 477s raise HostChangedError(self, url, retries) 477s 477s # Ensure that the URL we're connecting to is properly encoded 477s if url.startswith("/"): 477s url = to_str(_encode_target(url)) 477s else: 477s url = to_str(parsed_url.url) 477s 477s conn = None 477s 477s # Track whether `conn` needs to be released before 477s # returning/raising/recursing. Update this variable if necessary, and 477s # leave `release_conn` constant throughout the function. That way, if 477s # the function recurses, the original value of `release_conn` will be 477s # passed down into the recursive call, and its value will be respected. 477s # 477s # See issue #651 [1] for details. 477s # 477s # [1] 477s release_this_conn = release_conn 477s 477s http_tunnel_required = connection_requires_http_tunnel( 477s self.proxy, self.proxy_config, destination_scheme 477s ) 477s 477s # Merge the proxy headers. Only done when not using HTTP CONNECT. We 477s # have to copy the headers dict so we can safely change it without those 477s # changes being reflected in anyone else's copy. 477s if not http_tunnel_required: 477s headers = headers.copy() # type: ignore[attr-defined] 477s headers.update(self.proxy_headers) # type: ignore[union-attr] 477s 477s # Must keep the exception bound to a separate variable or else Python 3 477s # complains about UnboundLocalError. 477s err = None 477s 477s # Keep track of whether we cleanly exited the except block. This 477s # ensures we do proper cleanup in finally. 477s clean_exit = False 477s 477s # Rewind body position, if needed. Record current position 477s # for future rewinds in the event of a redirect/retry. 477s body_pos = set_file_position(body, body_pos) 477s 477s try: 477s # Request a connection from the queue. 477s timeout_obj = self._get_timeout(timeout) 477s conn = self._get_conn(timeout=pool_timeout) 477s 477s conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 477s 477s # Is this a closed/new connection that requires CONNECT tunnelling? 477s if self.proxy is not None and http_tunnel_required and conn.is_closed: 477s try: 477s self._prepare_proxy(conn) 477s except (BaseSSLError, OSError, SocketTimeout) as e: 477s self._raise_timeout( 477s err=e, url=self.proxy.url, timeout_value=conn.timeout 477s ) 477s raise 477s 477s # If we're going to release the connection in ``finally:``, then 477s # the response doesn't need to know about the connection. Otherwise 477s # it will also try to release it and we'll have a double-release 477s # mess. 477s response_conn = conn if not release_conn else None 477s 477s # Make the request on the HTTPConnection object 477s > response = self._make_request( 477s conn, 477s method, 477s url, 477s timeout=timeout_obj, 477s body=body, 477s headers=headers, 477s chunked=chunked, 477s retries=retries, 477s response_conn=response_conn, 477s preload_content=preload_content, 477s decode_content=decode_content, 477s **response_kw, 477s ) 477s 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s 477s During handling of the above exception, another exception occurred: 477s 477s self = 477s browser_name = 'chrome', vendor_prefix = 'goog' 477s options = 477s service = 477s keep_alive = True 477s 477s def __init__( 477s self, 477s browser_name: str = None, 477s vendor_prefix: str = None, 477s options: ArgOptions = ArgOptions(), 477s service: Service = None, 477s keep_alive: bool = True, 477s ) -> None: 477s """Creates a new WebDriver instance of the ChromiumDriver. Starts the 477s service and then creates new WebDriver instance of ChromiumDriver. 477s 477s :Args: 477s - browser_name - Browser name used when matching capabilities. 477s - vendor_prefix - Company prefix to apply to vendor-specific WebDriver extension commands. 477s - options - this takes an instance of ChromiumOptions 477s - service - Service object for handling the browser driver if you need to pass extra details 477s - keep_alive - Whether to configure ChromiumRemoteConnection to use HTTP keep-alive. 477s """ 477s self.service = service 477s 477s finder = DriverFinder(self.service, options) 477s if finder.get_browser_path(): 477s options.binary_location = finder.get_browser_path() 477s options.browser_version = None 477s 477s self.service.path = finder.get_driver_path() 477s self.service.start() 477s 477s executor = ChromiumRemoteConnection( 477s remote_server_addr=self.service.service_url, 477s browser_name=browser_name, 477s vendor_prefix=vendor_prefix, 477s keep_alive=keep_alive, 477s ignore_proxy=options._ignore_local_proxy, 477s ) 477s 477s try: 477s > super().__init__(command_executor=executor, options=options) 477s 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:66: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:212: in __init__ 477s self.start_session(capabilities) 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:299: in start_session 477s response = self.execute(Command.NEW_SESSION, caps)["value"] 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:352: in execute 477s response = self.command_executor.execute(driver_command, params) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:306: in execute 477s return self._request(command_info[0], url, body=data) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:326: in _request 477s response = self._conn.request(method, url, body=body, headers=headers) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:143: in request 477s return self.request_encode_body( 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:278: in request_encode_body 477s return self.urlopen(method, url, **extra_kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/poolmanager.py:459: in urlopen 477s response = conn.urlopen(method, u.request_uri, **kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:841: in urlopen 477s retries = retries.increment( 477s /usr/lib/python3/dist-packages/urllib3/util/retry.py:474: in increment 477s raise reraise(type(error), error, _stacktrace) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/util/util.py:38: in reraise 477s raise value.with_traceback(tb) 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: in urlopen 477s response = self._make_request( 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) 477s 477s /usr/lib/python3.14/socket.py:725: ProtocolError 477s 477s During handling of the above exception, another exception occurred: 477s 477s > lambda: ihook(item=item, **kwds), when=when, reraise=reraise 477s ^^^^^^^^^^^^^^^^^^^^^^^^ 477s ) 477s 477s /usr/lib/python3/dist-packages/flaky/flaky_pytest_plugin.py:146: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s tests/conftest.py:148: in run_sabnews_and_selenium 477s driver = webdriver.Chrome(options=driver_options, service=service) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/chrome/webdriver.py:45: in __init__ 477s super().__init__( 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:68: in __init__ 477s self.quit() 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:193: in quit 477s self.service.stop() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:146: in stop 477s self.send_remote_shutdown_command() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:126: in send_remote_shutdown_command 477s request.urlopen(f"{self.service_url}/shutdown") 477s /usr/lib/python3.14/urllib/request.py:187: in urlopen 477s return opener.open(url, data, timeout) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:487: in open 477s response = self._open(req, data) 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:504: in _open 477s result = self._call_chain(self.handle_open, protocol, protocol + 477s /usr/lib/python3.14/urllib/request.py:464: in _call_chain 477s result = func(*args) 477s ^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1350: in http_open 477s return self.do_open(http.client.HTTPConnection, req) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1325: in do_open 477s r = h.getresponse() 477s ^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s _ ERROR at setup of TestDownloadSorting.test_download_sorting_single[SINGLE_sort_s23e06_480i-SABnzbd-result0] _ 477s 477s self = 477s method = 'POST', url = '/session' 477s body = '{"capabilities": {"firstMatch": [{}], "alwaysMatch": {"browserName": "chrome", "pageLoadStrategy": "normal", "browserVersion": "127", "goog:chromeOptions": {"extensions": [], "args": ["--headless", "--no-sandbox", "--single-process"]}}}}' 477s headers = HTTPHeaderDict({'Accept': 'application/json', 'Content-Type': 'application/json;charset=UTF-8', 'User-Agent': 'selenium/4.31.1 (python linux)', 'Connection': 'keep-alive'}) 477s retries = Retry(total=3, connect=None, read=None, redirect=None, status=None) 477s redirect = False, assert_same_host = False, timeout = <_TYPE_DEFAULT.token: -1> 477s pool_timeout = None, release_conn = True, chunked = False, body_pos = None 477s preload_content = True, decode_content = True, response_kw = {} 477s parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/session', query=None, fragment=None) 477s destination_scheme = None, conn = None, release_this_conn = True 477s http_tunnel_required = False, err = None, clean_exit = False 477s 477s def urlopen( # type: ignore[override] 477s self, 477s method: str, 477s url: str, 477s body: _TYPE_BODY | None = None, 477s headers: typing.Mapping[str, str] | None = None, 477s retries: Retry | bool | int | None = None, 477s redirect: bool = True, 477s assert_same_host: bool = True, 477s timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 477s pool_timeout: int | None = None, 477s release_conn: bool | None = None, 477s chunked: bool = False, 477s body_pos: _TYPE_BODY_POSITION | None = None, 477s preload_content: bool = True, 477s decode_content: bool = True, 477s **response_kw: typing.Any, 477s ) -> BaseHTTPResponse: 477s """ 477s Get a connection from the pool and perform an HTTP request. This is the 477s lowest level call for making a request, so you'll need to specify all 477s the raw details. 477s 477s .. note:: 477s 477s More commonly, it's appropriate to use a convenience method 477s such as :meth:`request`. 477s 477s .. note:: 477s 477s `release_conn` will only behave as expected if 477s `preload_content=False` because we want to make 477s `preload_content=False` the default behaviour someday soon without 477s breaking backwards compatibility. 477s 477s :param method: 477s HTTP request method (such as GET, POST, PUT, etc.) 477s 477s :param url: 477s The URL to perform the request on. 477s 477s :param body: 477s Data to send in the request body, either :class:`str`, :class:`bytes`, 477s an iterable of :class:`str`/:class:`bytes`, or a file-like object. 477s 477s :param headers: 477s Dictionary of custom headers to send, such as User-Agent, 477s If-None-Match, etc. If None, pool headers are used. If provided, 477s these headers completely replace any pool-specific headers. 477s 477s :param retries: 477s Configure the number of retries to allow before raising a 477s :class:`~urllib3.exceptions.MaxRetryError` exception. 477s 477s If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a 477s :class:`~urllib3.util.retry.Retry` object for fine-grained control 477s over different types of retries. 477s Pass an integer number to retry connection errors that many times, 477s but no other types of errors. Pass zero to never retry. 477s 477s If ``False``, then retries are disabled and any exception is raised 477s immediately. Also, instead of raising a MaxRetryError on redirects, 477s the redirect response will be returned. 477s 477s :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 477s 477s :param redirect: 477s If True, automatically handle redirects (status codes 301, 302, 477s 303, 307, 308). Each redirect counts as a retry. Disabling retries 477s will disable redirect, too. 477s 477s :param assert_same_host: 477s If ``True``, will make sure that the host of the pool requests is 477s consistent else will raise HostChangedError. When ``False``, you can 477s use the pool on an HTTP proxy and request foreign hosts. 477s 477s :param timeout: 477s If specified, overrides the default timeout for this one 477s request. It may be a float (in seconds) or an instance of 477s :class:`urllib3.util.Timeout`. 477s 477s :param pool_timeout: 477s If set and the pool is set to block=True, then this method will 477s block for ``pool_timeout`` seconds and raise EmptyPoolError if no 477s connection is available within the time period. 477s 477s :param bool preload_content: 477s If True, the response's body will be preloaded into memory. 477s 477s :param bool decode_content: 477s If True, will attempt to decode the body based on the 477s 'content-encoding' header. 477s 477s :param release_conn: 477s If False, then the urlopen call will not release the connection 477s back into the pool once a response is received (but will release if 477s you read the entire contents of the response such as when 477s `preload_content=True`). This is useful if you're not preloading 477s the response's content immediately. You will need to call 477s ``r.release_conn()`` on the response ``r`` to return the connection 477s back into the pool. If None, it takes the value of ``preload_content`` 477s which defaults to ``True``. 477s 477s :param bool chunked: 477s If True, urllib3 will send the body using chunked transfer 477s encoding. Otherwise, urllib3 will send the body using the standard 477s content-length form. Defaults to False. 477s 477s :param int body_pos: 477s Position to seek to in file-like body in the event of a retry or 477s redirect. Typically this won't need to be set because urllib3 will 477s auto-populate the value when needed. 477s """ 477s parsed_url = parse_url(url) 477s destination_scheme = parsed_url.scheme 477s 477s if headers is None: 477s headers = self.headers 477s 477s if not isinstance(retries, Retry): 477s retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 477s 477s if release_conn is None: 477s release_conn = preload_content 477s 477s # Check host 477s if assert_same_host and not self.is_same_host(url): 477s raise HostChangedError(self, url, retries) 477s 477s # Ensure that the URL we're connecting to is properly encoded 477s if url.startswith("/"): 477s url = to_str(_encode_target(url)) 477s else: 477s url = to_str(parsed_url.url) 477s 477s conn = None 477s 477s # Track whether `conn` needs to be released before 477s # returning/raising/recursing. Update this variable if necessary, and 477s # leave `release_conn` constant throughout the function. That way, if 477s # the function recurses, the original value of `release_conn` will be 477s # passed down into the recursive call, and its value will be respected. 477s # 477s # See issue #651 [1] for details. 477s # 477s # [1] 477s release_this_conn = release_conn 477s 477s http_tunnel_required = connection_requires_http_tunnel( 477s self.proxy, self.proxy_config, destination_scheme 477s ) 477s 477s # Merge the proxy headers. Only done when not using HTTP CONNECT. We 477s # have to copy the headers dict so we can safely change it without those 477s # changes being reflected in anyone else's copy. 477s if not http_tunnel_required: 477s headers = headers.copy() # type: ignore[attr-defined] 477s headers.update(self.proxy_headers) # type: ignore[union-attr] 477s 477s # Must keep the exception bound to a separate variable or else Python 3 477s # complains about UnboundLocalError. 477s err = None 477s 477s # Keep track of whether we cleanly exited the except block. This 477s # ensures we do proper cleanup in finally. 477s clean_exit = False 477s 477s # Rewind body position, if needed. Record current position 477s # for future rewinds in the event of a redirect/retry. 477s body_pos = set_file_position(body, body_pos) 477s 477s try: 477s # Request a connection from the queue. 477s timeout_obj = self._get_timeout(timeout) 477s conn = self._get_conn(timeout=pool_timeout) 477s 477s conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 477s 477s # Is this a closed/new connection that requires CONNECT tunnelling? 477s if self.proxy is not None and http_tunnel_required and conn.is_closed: 477s try: 477s self._prepare_proxy(conn) 477s except (BaseSSLError, OSError, SocketTimeout) as e: 477s self._raise_timeout( 477s err=e, url=self.proxy.url, timeout_value=conn.timeout 477s ) 477s raise 477s 477s # If we're going to release the connection in ``finally:``, then 477s # the response doesn't need to know about the connection. Otherwise 477s # it will also try to release it and we'll have a double-release 477s # mess. 477s response_conn = conn if not release_conn else None 477s 477s # Make the request on the HTTPConnection object 477s > response = self._make_request( 477s conn, 477s method, 477s url, 477s timeout=timeout_obj, 477s body=body, 477s headers=headers, 477s chunked=chunked, 477s retries=retries, 477s response_conn=response_conn, 477s preload_content=preload_content, 477s decode_content=decode_content, 477s **response_kw, 477s ) 477s 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s 477s During handling of the above exception, another exception occurred: 477s 477s self = 477s browser_name = 'chrome', vendor_prefix = 'goog' 477s options = 477s service = 477s keep_alive = True 477s 477s def __init__( 477s self, 477s browser_name: str = None, 477s vendor_prefix: str = None, 477s options: ArgOptions = ArgOptions(), 477s service: Service = None, 477s keep_alive: bool = True, 477s ) -> None: 477s """Creates a new WebDriver instance of the ChromiumDriver. Starts the 477s service and then creates new WebDriver instance of ChromiumDriver. 477s 477s :Args: 477s - browser_name - Browser name used when matching capabilities. 477s - vendor_prefix - Company prefix to apply to vendor-specific WebDriver extension commands. 477s - options - this takes an instance of ChromiumOptions 477s - service - Service object for handling the browser driver if you need to pass extra details 477s - keep_alive - Whether to configure ChromiumRemoteConnection to use HTTP keep-alive. 477s """ 477s self.service = service 477s 477s finder = DriverFinder(self.service, options) 477s if finder.get_browser_path(): 477s options.binary_location = finder.get_browser_path() 477s options.browser_version = None 477s 477s self.service.path = finder.get_driver_path() 477s self.service.start() 477s 477s executor = ChromiumRemoteConnection( 477s remote_server_addr=self.service.service_url, 477s browser_name=browser_name, 477s vendor_prefix=vendor_prefix, 477s keep_alive=keep_alive, 477s ignore_proxy=options._ignore_local_proxy, 477s ) 477s 477s try: 477s > super().__init__(command_executor=executor, options=options) 477s 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:66: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:212: in __init__ 477s self.start_session(capabilities) 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:299: in start_session 477s response = self.execute(Command.NEW_SESSION, caps)["value"] 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:352: in execute 477s response = self.command_executor.execute(driver_command, params) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:306: in execute 477s return self._request(command_info[0], url, body=data) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:326: in _request 477s response = self._conn.request(method, url, body=body, headers=headers) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:143: in request 477s return self.request_encode_body( 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:278: in request_encode_body 477s return self.urlopen(method, url, **extra_kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/poolmanager.py:459: in urlopen 477s response = conn.urlopen(method, u.request_uri, **kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:841: in urlopen 477s retries = retries.increment( 477s /usr/lib/python3/dist-packages/urllib3/util/retry.py:474: in increment 477s raise reraise(type(error), error, _stacktrace) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/util/util.py:38: in reraise 477s raise value.with_traceback(tb) 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: in urlopen 477s response = self._make_request( 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) 477s 477s /usr/lib/python3.14/socket.py:725: ProtocolError 477s 477s During handling of the above exception, another exception occurred: 477s 477s > lambda: ihook(item=item, **kwds), when=when, reraise=reraise 477s ^^^^^^^^^^^^^^^^^^^^^^^^ 477s ) 477s 477s /usr/lib/python3/dist-packages/flaky/flaky_pytest_plugin.py:146: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s tests/conftest.py:148: in run_sabnews_and_selenium 477s driver = webdriver.Chrome(options=driver_options, service=service) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/chrome/webdriver.py:45: in __init__ 477s super().__init__( 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:68: in __init__ 477s self.quit() 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:193: in quit 477s self.service.stop() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:146: in stop 477s self.send_remote_shutdown_command() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:126: in send_remote_shutdown_command 477s request.urlopen(f"{self.service_url}/shutdown") 477s /usr/lib/python3.14/urllib/request.py:187: in urlopen 477s return opener.open(url, data, timeout) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:487: in open 477s response = self._open(req, data) 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:504: in _open 477s result = self._call_chain(self.handle_open, protocol, protocol + 477s /usr/lib/python3.14/urllib/request.py:464: in _call_chain 477s result = func(*args) 477s ^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1350: in http_open 477s return self.do_open(http.client.HTTPConnection, req) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1325: in do_open 477s r = h.getresponse() 477s ^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s _ ERROR at setup of TestDownloadSorting.test_download_sorting_single[SINGLE_sort_s23e06_480i-SABnzbd-result1] _ 477s 477s self = 477s method = 'POST', url = '/session' 477s body = '{"capabilities": {"firstMatch": [{}], "alwaysMatch": {"browserName": "chrome", "pageLoadStrategy": "normal", "browserVersion": "127", "goog:chromeOptions": {"extensions": [], "args": ["--headless", "--no-sandbox", "--single-process"]}}}}' 477s headers = HTTPHeaderDict({'Accept': 'application/json', 'Content-Type': 'application/json;charset=UTF-8', 'User-Agent': 'selenium/4.31.1 (python linux)', 'Connection': 'keep-alive'}) 477s retries = Retry(total=3, connect=None, read=None, redirect=None, status=None) 477s redirect = False, assert_same_host = False, timeout = <_TYPE_DEFAULT.token: -1> 477s pool_timeout = None, release_conn = True, chunked = False, body_pos = None 477s preload_content = True, decode_content = True, response_kw = {} 477s parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/session', query=None, fragment=None) 477s destination_scheme = None, conn = None, release_this_conn = True 477s http_tunnel_required = False, err = None, clean_exit = False 477s 477s def urlopen( # type: ignore[override] 477s self, 477s method: str, 477s url: str, 477s body: _TYPE_BODY | None = None, 477s headers: typing.Mapping[str, str] | None = None, 477s retries: Retry | bool | int | None = None, 477s redirect: bool = True, 477s assert_same_host: bool = True, 477s timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 477s pool_timeout: int | None = None, 477s release_conn: bool | None = None, 477s chunked: bool = False, 477s body_pos: _TYPE_BODY_POSITION | None = None, 477s preload_content: bool = True, 477s decode_content: bool = True, 477s **response_kw: typing.Any, 477s ) -> BaseHTTPResponse: 477s """ 477s Get a connection from the pool and perform an HTTP request. This is the 477s lowest level call for making a request, so you'll need to specify all 477s the raw details. 477s 477s .. note:: 477s 477s More commonly, it's appropriate to use a convenience method 477s such as :meth:`request`. 477s 477s .. note:: 477s 477s `release_conn` will only behave as expected if 477s `preload_content=False` because we want to make 477s `preload_content=False` the default behaviour someday soon without 477s breaking backwards compatibility. 477s 477s :param method: 477s HTTP request method (such as GET, POST, PUT, etc.) 477s 477s :param url: 477s The URL to perform the request on. 477s 477s :param body: 477s Data to send in the request body, either :class:`str`, :class:`bytes`, 477s an iterable of :class:`str`/:class:`bytes`, or a file-like object. 477s 477s :param headers: 477s Dictionary of custom headers to send, such as User-Agent, 477s If-None-Match, etc. If None, pool headers are used. If provided, 477s these headers completely replace any pool-specific headers. 477s 477s :param retries: 477s Configure the number of retries to allow before raising a 477s :class:`~urllib3.exceptions.MaxRetryError` exception. 477s 477s If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a 477s :class:`~urllib3.util.retry.Retry` object for fine-grained control 477s over different types of retries. 477s Pass an integer number to retry connection errors that many times, 477s but no other types of errors. Pass zero to never retry. 477s 477s If ``False``, then retries are disabled and any exception is raised 477s immediately. Also, instead of raising a MaxRetryError on redirects, 477s the redirect response will be returned. 477s 477s :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 477s 477s :param redirect: 477s If True, automatically handle redirects (status codes 301, 302, 477s 303, 307, 308). Each redirect counts as a retry. Disabling retries 477s will disable redirect, too. 477s 477s :param assert_same_host: 477s If ``True``, will make sure that the host of the pool requests is 477s consistent else will raise HostChangedError. When ``False``, you can 477s use the pool on an HTTP proxy and request foreign hosts. 477s 477s :param timeout: 477s If specified, overrides the default timeout for this one 477s request. It may be a float (in seconds) or an instance of 477s :class:`urllib3.util.Timeout`. 477s 477s :param pool_timeout: 477s If set and the pool is set to block=True, then this method will 477s block for ``pool_timeout`` seconds and raise EmptyPoolError if no 477s connection is available within the time period. 477s 477s :param bool preload_content: 477s If True, the response's body will be preloaded into memory. 477s 477s :param bool decode_content: 477s If True, will attempt to decode the body based on the 477s 'content-encoding' header. 477s 477s :param release_conn: 477s If False, then the urlopen call will not release the connection 477s back into the pool once a response is received (but will release if 477s you read the entire contents of the response such as when 477s `preload_content=True`). This is useful if you're not preloading 477s the response's content immediately. You will need to call 477s ``r.release_conn()`` on the response ``r`` to return the connection 477s back into the pool. If None, it takes the value of ``preload_content`` 477s which defaults to ``True``. 477s 477s :param bool chunked: 477s If True, urllib3 will send the body using chunked transfer 477s encoding. Otherwise, urllib3 will send the body using the standard 477s content-length form. Defaults to False. 477s 477s :param int body_pos: 477s Position to seek to in file-like body in the event of a retry or 477s redirect. Typically this won't need to be set because urllib3 will 477s auto-populate the value when needed. 477s """ 477s parsed_url = parse_url(url) 477s destination_scheme = parsed_url.scheme 477s 477s if headers is None: 477s headers = self.headers 477s 477s if not isinstance(retries, Retry): 477s retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 477s 477s if release_conn is None: 477s release_conn = preload_content 477s 477s # Check host 477s if assert_same_host and not self.is_same_host(url): 477s raise HostChangedError(self, url, retries) 477s 477s # Ensure that the URL we're connecting to is properly encoded 477s if url.startswith("/"): 477s url = to_str(_encode_target(url)) 477s else: 477s url = to_str(parsed_url.url) 477s 477s conn = None 477s 477s # Track whether `conn` needs to be released before 477s # returning/raising/recursing. Update this variable if necessary, and 477s # leave `release_conn` constant throughout the function. That way, if 477s # the function recurses, the original value of `release_conn` will be 477s # passed down into the recursive call, and its value will be respected. 477s # 477s # See issue #651 [1] for details. 477s # 477s # [1] 477s release_this_conn = release_conn 477s 477s http_tunnel_required = connection_requires_http_tunnel( 477s self.proxy, self.proxy_config, destination_scheme 477s ) 477s 477s # Merge the proxy headers. Only done when not using HTTP CONNECT. We 477s # have to copy the headers dict so we can safely change it without those 477s # changes being reflected in anyone else's copy. 477s if not http_tunnel_required: 477s headers = headers.copy() # type: ignore[attr-defined] 477s headers.update(self.proxy_headers) # type: ignore[union-attr] 477s 477s # Must keep the exception bound to a separate variable or else Python 3 477s # complains about UnboundLocalError. 477s err = None 477s 477s # Keep track of whether we cleanly exited the except block. This 477s # ensures we do proper cleanup in finally. 477s clean_exit = False 477s 477s # Rewind body position, if needed. Record current position 477s # for future rewinds in the event of a redirect/retry. 477s body_pos = set_file_position(body, body_pos) 477s 477s try: 477s # Request a connection from the queue. 477s timeout_obj = self._get_timeout(timeout) 477s conn = self._get_conn(timeout=pool_timeout) 477s 477s conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 477s 477s # Is this a closed/new connection that requires CONNECT tunnelling? 477s if self.proxy is not None and http_tunnel_required and conn.is_closed: 477s try: 477s self._prepare_proxy(conn) 477s except (BaseSSLError, OSError, SocketTimeout) as e: 477s self._raise_timeout( 477s err=e, url=self.proxy.url, timeout_value=conn.timeout 477s ) 477s raise 477s 477s # If we're going to release the connection in ``finally:``, then 477s # the response doesn't need to know about the connection. Otherwise 477s # it will also try to release it and we'll have a double-release 477s # mess. 477s response_conn = conn if not release_conn else None 477s 477s # Make the request on the HTTPConnection object 477s > response = self._make_request( 477s conn, 477s method, 477s url, 477s timeout=timeout_obj, 477s body=body, 477s headers=headers, 477s chunked=chunked, 477s retries=retries, 477s response_conn=response_conn, 477s preload_content=preload_content, 477s decode_content=decode_content, 477s **response_kw, 477s ) 477s 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s 477s During handling of the above exception, another exception occurred: 477s 477s self = 477s browser_name = 'chrome', vendor_prefix = 'goog' 477s options = 477s service = 477s keep_alive = True 477s 477s def __init__( 477s self, 477s browser_name: str = None, 477s vendor_prefix: str = None, 477s options: ArgOptions = ArgOptions(), 477s service: Service = None, 477s keep_alive: bool = True, 477s ) -> None: 477s """Creates a new WebDriver instance of the ChromiumDriver. Starts the 477s service and then creates new WebDriver instance of ChromiumDriver. 477s 477s :Args: 477s - browser_name - Browser name used when matching capabilities. 477s - vendor_prefix - Company prefix to apply to vendor-specific WebDriver extension commands. 477s - options - this takes an instance of ChromiumOptions 477s - service - Service object for handling the browser driver if you need to pass extra details 477s - keep_alive - Whether to configure ChromiumRemoteConnection to use HTTP keep-alive. 477s """ 477s self.service = service 477s 477s finder = DriverFinder(self.service, options) 477s if finder.get_browser_path(): 477s options.binary_location = finder.get_browser_path() 477s options.browser_version = None 477s 477s self.service.path = finder.get_driver_path() 477s self.service.start() 477s 477s executor = ChromiumRemoteConnection( 477s remote_server_addr=self.service.service_url, 477s browser_name=browser_name, 477s vendor_prefix=vendor_prefix, 477s keep_alive=keep_alive, 477s ignore_proxy=options._ignore_local_proxy, 477s ) 477s 477s try: 477s > super().__init__(command_executor=executor, options=options) 477s 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:66: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:212: in __init__ 477s self.start_session(capabilities) 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:299: in start_session 477s response = self.execute(Command.NEW_SESSION, caps)["value"] 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:352: in execute 477s response = self.command_executor.execute(driver_command, params) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:306: in execute 477s return self._request(command_info[0], url, body=data) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:326: in _request 477s response = self._conn.request(method, url, body=body, headers=headers) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:143: in request 477s return self.request_encode_body( 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:278: in request_encode_body 477s return self.urlopen(method, url, **extra_kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/poolmanager.py:459: in urlopen 477s response = conn.urlopen(method, u.request_uri, **kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:841: in urlopen 477s retries = retries.increment( 477s /usr/lib/python3/dist-packages/urllib3/util/retry.py:474: in increment 477s raise reraise(type(error), error, _stacktrace) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/util/util.py:38: in reraise 477s raise value.with_traceback(tb) 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: in urlopen 477s response = self._make_request( 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) 477s 477s /usr/lib/python3.14/socket.py:725: ProtocolError 477s 477s During handling of the above exception, another exception occurred: 477s 477s > lambda: ihook(item=item, **kwds), when=when, reraise=reraise 477s ^^^^^^^^^^^^^^^^^^^^^^^^ 477s ) 477s 477s /usr/lib/python3/dist-packages/flaky/flaky_pytest_plugin.py:146: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s tests/conftest.py:148: in run_sabnews_and_selenium 477s driver = webdriver.Chrome(options=driver_options, service=service) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/chrome/webdriver.py:45: in __init__ 477s super().__init__( 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:68: in __init__ 477s self.quit() 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:193: in quit 477s self.service.stop() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:146: in stop 477s self.send_remote_shutdown_command() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:126: in send_remote_shutdown_command 477s request.urlopen(f"{self.service_url}/shutdown") 477s /usr/lib/python3.14/urllib/request.py:187: in urlopen 477s return opener.open(url, data, timeout) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:487: in open 477s response = self._open(req, data) 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:504: in _open 477s result = self._call_chain(self.handle_open, protocol, protocol + 477s /usr/lib/python3.14/urllib/request.py:464: in _call_chain 477s result = func(*args) 477s ^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1350: in http_open 477s return self.do_open(http.client.HTTPConnection, req) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1325: in do_open 477s r = h.getresponse() 477s ^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s _ ERROR at setup of TestDownloadSorting.test_download_sorting_single[single-ep_sort_s06e66_4k_uhd-SABnzbd-result2] _ 477s 477s self = 477s method = 'POST', url = '/session' 477s body = '{"capabilities": {"firstMatch": [{}], "alwaysMatch": {"browserName": "chrome", "pageLoadStrategy": "normal", "browserVersion": "127", "goog:chromeOptions": {"extensions": [], "args": ["--headless", "--no-sandbox", "--single-process"]}}}}' 477s headers = HTTPHeaderDict({'Accept': 'application/json', 'Content-Type': 'application/json;charset=UTF-8', 'User-Agent': 'selenium/4.31.1 (python linux)', 'Connection': 'keep-alive'}) 477s retries = Retry(total=3, connect=None, read=None, redirect=None, status=None) 477s redirect = False, assert_same_host = False, timeout = <_TYPE_DEFAULT.token: -1> 477s pool_timeout = None, release_conn = True, chunked = False, body_pos = None 477s preload_content = True, decode_content = True, response_kw = {} 477s parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/session', query=None, fragment=None) 477s destination_scheme = None, conn = None, release_this_conn = True 477s http_tunnel_required = False, err = None, clean_exit = False 477s 477s def urlopen( # type: ignore[override] 477s self, 477s method: str, 477s url: str, 477s body: _TYPE_BODY | None = None, 477s headers: typing.Mapping[str, str] | None = None, 477s retries: Retry | bool | int | None = None, 477s redirect: bool = True, 477s assert_same_host: bool = True, 477s timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 477s pool_timeout: int | None = None, 477s release_conn: bool | None = None, 477s chunked: bool = False, 477s body_pos: _TYPE_BODY_POSITION | None = None, 477s preload_content: bool = True, 477s decode_content: bool = True, 477s **response_kw: typing.Any, 477s ) -> BaseHTTPResponse: 477s """ 477s Get a connection from the pool and perform an HTTP request. This is the 477s lowest level call for making a request, so you'll need to specify all 477s the raw details. 477s 477s .. note:: 477s 477s More commonly, it's appropriate to use a convenience method 477s such as :meth:`request`. 477s 477s .. note:: 477s 477s `release_conn` will only behave as expected if 477s `preload_content=False` because we want to make 477s `preload_content=False` the default behaviour someday soon without 477s breaking backwards compatibility. 477s 477s :param method: 477s HTTP request method (such as GET, POST, PUT, etc.) 477s 477s :param url: 477s The URL to perform the request on. 477s 477s :param body: 477s Data to send in the request body, either :class:`str`, :class:`bytes`, 477s an iterable of :class:`str`/:class:`bytes`, or a file-like object. 477s 477s :param headers: 477s Dictionary of custom headers to send, such as User-Agent, 477s If-None-Match, etc. If None, pool headers are used. If provided, 477s these headers completely replace any pool-specific headers. 477s 477s :param retries: 477s Configure the number of retries to allow before raising a 477s :class:`~urllib3.exceptions.MaxRetryError` exception. 477s 477s If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a 477s :class:`~urllib3.util.retry.Retry` object for fine-grained control 477s over different types of retries. 477s Pass an integer number to retry connection errors that many times, 477s but no other types of errors. Pass zero to never retry. 477s 477s If ``False``, then retries are disabled and any exception is raised 477s immediately. Also, instead of raising a MaxRetryError on redirects, 477s the redirect response will be returned. 477s 477s :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 477s 477s :param redirect: 477s If True, automatically handle redirects (status codes 301, 302, 477s 303, 307, 308). Each redirect counts as a retry. Disabling retries 477s will disable redirect, too. 477s 477s :param assert_same_host: 477s If ``True``, will make sure that the host of the pool requests is 477s consistent else will raise HostChangedError. When ``False``, you can 477s use the pool on an HTTP proxy and request foreign hosts. 477s 477s :param timeout: 477s If specified, overrides the default timeout for this one 477s request. It may be a float (in seconds) or an instance of 477s :class:`urllib3.util.Timeout`. 477s 477s :param pool_timeout: 477s If set and the pool is set to block=True, then this method will 477s block for ``pool_timeout`` seconds and raise EmptyPoolError if no 477s connection is available within the time period. 477s 477s :param bool preload_content: 477s If True, the response's body will be preloaded into memory. 477s 477s :param bool decode_content: 477s If True, will attempt to decode the body based on the 477s 'content-encoding' header. 477s 477s :param release_conn: 477s If False, then the urlopen call will not release the connection 477s back into the pool once a response is received (but will release if 477s you read the entire contents of the response such as when 477s `preload_content=True`). This is useful if you're not preloading 477s the response's content immediately. You will need to call 477s ``r.release_conn()`` on the response ``r`` to return the connection 477s back into the pool. If None, it takes the value of ``preload_content`` 477s which defaults to ``True``. 477s 477s :param bool chunked: 477s If True, urllib3 will send the body using chunked transfer 477s encoding. Otherwise, urllib3 will send the body using the standard 477s content-length form. Defaults to False. 477s 477s :param int body_pos: 477s Position to seek to in file-like body in the event of a retry or 477s redirect. Typically this won't need to be set because urllib3 will 477s auto-populate the value when needed. 477s """ 477s parsed_url = parse_url(url) 477s destination_scheme = parsed_url.scheme 477s 477s if headers is None: 477s headers = self.headers 477s 477s if not isinstance(retries, Retry): 477s retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 477s 477s if release_conn is None: 477s release_conn = preload_content 477s 477s # Check host 477s if assert_same_host and not self.is_same_host(url): 477s raise HostChangedError(self, url, retries) 477s 477s # Ensure that the URL we're connecting to is properly encoded 477s if url.startswith("/"): 477s url = to_str(_encode_target(url)) 477s else: 477s url = to_str(parsed_url.url) 477s 477s conn = None 477s 477s # Track whether `conn` needs to be released before 477s # returning/raising/recursing. Update this variable if necessary, and 477s # leave `release_conn` constant throughout the function. That way, if 477s # the function recurses, the original value of `release_conn` will be 477s # passed down into the recursive call, and its value will be respected. 477s # 477s # See issue #651 [1] for details. 477s # 477s # [1] 477s release_this_conn = release_conn 477s 477s http_tunnel_required = connection_requires_http_tunnel( 477s self.proxy, self.proxy_config, destination_scheme 477s ) 477s 477s # Merge the proxy headers. Only done when not using HTTP CONNECT. We 477s # have to copy the headers dict so we can safely change it without those 477s # changes being reflected in anyone else's copy. 477s if not http_tunnel_required: 477s headers = headers.copy() # type: ignore[attr-defined] 477s headers.update(self.proxy_headers) # type: ignore[union-attr] 477s 477s # Must keep the exception bound to a separate variable or else Python 3 477s # complains about UnboundLocalError. 477s err = None 477s 477s # Keep track of whether we cleanly exited the except block. This 477s # ensures we do proper cleanup in finally. 477s clean_exit = False 477s 477s # Rewind body position, if needed. Record current position 477s # for future rewinds in the event of a redirect/retry. 477s body_pos = set_file_position(body, body_pos) 477s 477s try: 477s # Request a connection from the queue. 477s timeout_obj = self._get_timeout(timeout) 477s conn = self._get_conn(timeout=pool_timeout) 477s 477s conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 477s 477s # Is this a closed/new connection that requires CONNECT tunnelling? 477s if self.proxy is not None and http_tunnel_required and conn.is_closed: 477s try: 477s self._prepare_proxy(conn) 477s except (BaseSSLError, OSError, SocketTimeout) as e: 477s self._raise_timeout( 477s err=e, url=self.proxy.url, timeout_value=conn.timeout 477s ) 477s raise 477s 477s # If we're going to release the connection in ``finally:``, then 477s # the response doesn't need to know about the connection. Otherwise 477s # it will also try to release it and we'll have a double-release 477s # mess. 477s response_conn = conn if not release_conn else None 477s 477s # Make the request on the HTTPConnection object 477s > response = self._make_request( 477s conn, 477s method, 477s url, 477s timeout=timeout_obj, 477s body=body, 477s headers=headers, 477s chunked=chunked, 477s retries=retries, 477s response_conn=response_conn, 477s preload_content=preload_content, 477s decode_content=decode_content, 477s **response_kw, 477s ) 477s 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s 477s During handling of the above exception, another exception occurred: 477s 477s self = 477s browser_name = 'chrome', vendor_prefix = 'goog' 477s options = 477s service = 477s keep_alive = True 477s 477s def __init__( 477s self, 477s browser_name: str = None, 477s vendor_prefix: str = None, 477s options: ArgOptions = ArgOptions(), 477s service: Service = None, 477s keep_alive: bool = True, 477s ) -> None: 477s """Creates a new WebDriver instance of the ChromiumDriver. Starts the 477s service and then creates new WebDriver instance of ChromiumDriver. 477s 477s :Args: 477s - browser_name - Browser name used when matching capabilities. 477s - vendor_prefix - Company prefix to apply to vendor-specific WebDriver extension commands. 477s - options - this takes an instance of ChromiumOptions 477s - service - Service object for handling the browser driver if you need to pass extra details 477s - keep_alive - Whether to configure ChromiumRemoteConnection to use HTTP keep-alive. 477s """ 477s self.service = service 477s 477s finder = DriverFinder(self.service, options) 477s if finder.get_browser_path(): 477s options.binary_location = finder.get_browser_path() 477s options.browser_version = None 477s 477s self.service.path = finder.get_driver_path() 477s self.service.start() 477s 477s executor = ChromiumRemoteConnection( 477s remote_server_addr=self.service.service_url, 477s browser_name=browser_name, 477s vendor_prefix=vendor_prefix, 477s keep_alive=keep_alive, 477s ignore_proxy=options._ignore_local_proxy, 477s ) 477s 477s try: 477s > super().__init__(command_executor=executor, options=options) 477s 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:66: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:212: in __init__ 477s self.start_session(capabilities) 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:299: in start_session 477s response = self.execute(Command.NEW_SESSION, caps)["value"] 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:352: in execute 477s response = self.command_executor.execute(driver_command, params) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:306: in execute 477s return self._request(command_info[0], url, body=data) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:326: in _request 477s response = self._conn.request(method, url, body=body, headers=headers) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:143: in request 477s return self.request_encode_body( 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:278: in request_encode_body 477s return self.urlopen(method, url, **extra_kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/poolmanager.py:459: in urlopen 477s response = conn.urlopen(method, u.request_uri, **kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:841: in urlopen 477s retries = retries.increment( 477s /usr/lib/python3/dist-packages/urllib3/util/retry.py:474: in increment 477s raise reraise(type(error), error, _stacktrace) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/util/util.py:38: in reraise 477s raise value.with_traceback(tb) 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: in urlopen 477s response = self._make_request( 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) 477s 477s /usr/lib/python3.14/socket.py:725: ProtocolError 477s 477s During handling of the above exception, another exception occurred: 477s 477s > lambda: ihook(item=item, **kwds), when=when, reraise=reraise 477s ^^^^^^^^^^^^^^^^^^^^^^^^ 477s ) 477s 477s /usr/lib/python3/dist-packages/flaky/flaky_pytest_plugin.py:146: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s tests/conftest.py:148: in run_sabnews_and_selenium 477s driver = webdriver.Chrome(options=driver_options, service=service) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/chrome/webdriver.py:45: in __init__ 477s super().__init__( 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:68: in __init__ 477s self.quit() 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:193: in quit 477s self.service.stop() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:146: in stop 477s self.send_remote_shutdown_command() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:126: in send_remote_shutdown_command 477s request.urlopen(f"{self.service_url}/shutdown") 477s /usr/lib/python3.14/urllib/request.py:187: in urlopen 477s return opener.open(url, data, timeout) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:487: in open 477s response = self._open(req, data) 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:504: in _open 477s result = self._call_chain(self.handle_open, protocol, protocol + 477s /usr/lib/python3.14/urllib/request.py:464: in _call_chain 477s result = func(*args) 477s ^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1350: in http_open 477s return self.do_open(http.client.HTTPConnection, req) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1325: in do_open 477s r = h.getresponse() 477s ^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s _ ERROR at setup of TestDownloadSorting.test_download_sorting_single[single-ep_sort_s06e66_4k_uhd-SABnzbd-result3] _ 477s 477s self = 477s method = 'POST', url = '/session' 477s body = '{"capabilities": {"firstMatch": [{}], "alwaysMatch": {"browserName": "chrome", "pageLoadStrategy": "normal", "browserVersion": "127", "goog:chromeOptions": {"extensions": [], "args": ["--headless", "--no-sandbox", "--single-process"]}}}}' 477s headers = HTTPHeaderDict({'Accept': 'application/json', 'Content-Type': 'application/json;charset=UTF-8', 'User-Agent': 'selenium/4.31.1 (python linux)', 'Connection': 'keep-alive'}) 477s retries = Retry(total=3, connect=None, read=None, redirect=None, status=None) 477s redirect = False, assert_same_host = False, timeout = <_TYPE_DEFAULT.token: -1> 477s pool_timeout = None, release_conn = True, chunked = False, body_pos = None 477s preload_content = True, decode_content = True, response_kw = {} 477s parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/session', query=None, fragment=None) 477s destination_scheme = None, conn = None, release_this_conn = True 477s http_tunnel_required = False, err = None, clean_exit = False 477s 477s def urlopen( # type: ignore[override] 477s self, 477s method: str, 477s url: str, 477s body: _TYPE_BODY | None = None, 477s headers: typing.Mapping[str, str] | None = None, 477s retries: Retry | bool | int | None = None, 477s redirect: bool = True, 477s assert_same_host: bool = True, 477s timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 477s pool_timeout: int | None = None, 477s release_conn: bool | None = None, 477s chunked: bool = False, 477s body_pos: _TYPE_BODY_POSITION | None = None, 477s preload_content: bool = True, 477s decode_content: bool = True, 477s **response_kw: typing.Any, 477s ) -> BaseHTTPResponse: 477s """ 477s Get a connection from the pool and perform an HTTP request. This is the 477s lowest level call for making a request, so you'll need to specify all 477s the raw details. 477s 477s .. note:: 477s 477s More commonly, it's appropriate to use a convenience method 477s such as :meth:`request`. 477s 477s .. note:: 477s 477s `release_conn` will only behave as expected if 477s `preload_content=False` because we want to make 477s `preload_content=False` the default behaviour someday soon without 477s breaking backwards compatibility. 477s 477s :param method: 477s HTTP request method (such as GET, POST, PUT, etc.) 477s 477s :param url: 477s The URL to perform the request on. 477s 477s :param body: 477s Data to send in the request body, either :class:`str`, :class:`bytes`, 477s an iterable of :class:`str`/:class:`bytes`, or a file-like object. 477s 477s :param headers: 477s Dictionary of custom headers to send, such as User-Agent, 477s If-None-Match, etc. If None, pool headers are used. If provided, 477s these headers completely replace any pool-specific headers. 477s 477s :param retries: 477s Configure the number of retries to allow before raising a 477s :class:`~urllib3.exceptions.MaxRetryError` exception. 477s 477s If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a 477s :class:`~urllib3.util.retry.Retry` object for fine-grained control 477s over different types of retries. 477s Pass an integer number to retry connection errors that many times, 477s but no other types of errors. Pass zero to never retry. 477s 477s If ``False``, then retries are disabled and any exception is raised 477s immediately. Also, instead of raising a MaxRetryError on redirects, 477s the redirect response will be returned. 477s 477s :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 477s 477s :param redirect: 477s If True, automatically handle redirects (status codes 301, 302, 477s 303, 307, 308). Each redirect counts as a retry. Disabling retries 477s will disable redirect, too. 477s 477s :param assert_same_host: 477s If ``True``, will make sure that the host of the pool requests is 477s consistent else will raise HostChangedError. When ``False``, you can 477s use the pool on an HTTP proxy and request foreign hosts. 477s 477s :param timeout: 477s If specified, overrides the default timeout for this one 477s request. It may be a float (in seconds) or an instance of 477s :class:`urllib3.util.Timeout`. 477s 477s :param pool_timeout: 477s If set and the pool is set to block=True, then this method will 477s block for ``pool_timeout`` seconds and raise EmptyPoolError if no 477s connection is available within the time period. 477s 477s :param bool preload_content: 477s If True, the response's body will be preloaded into memory. 477s 477s :param bool decode_content: 477s If True, will attempt to decode the body based on the 477s 'content-encoding' header. 477s 477s :param release_conn: 477s If False, then the urlopen call will not release the connection 477s back into the pool once a response is received (but will release if 477s you read the entire contents of the response such as when 477s `preload_content=True`). This is useful if you're not preloading 477s the response's content immediately. You will need to call 477s ``r.release_conn()`` on the response ``r`` to return the connection 477s back into the pool. If None, it takes the value of ``preload_content`` 477s which defaults to ``True``. 477s 477s :param bool chunked: 477s If True, urllib3 will send the body using chunked transfer 477s encoding. Otherwise, urllib3 will send the body using the standard 477s content-length form. Defaults to False. 477s 477s :param int body_pos: 477s Position to seek to in file-like body in the event of a retry or 477s redirect. Typically this won't need to be set because urllib3 will 477s auto-populate the value when needed. 477s """ 477s parsed_url = parse_url(url) 477s destination_scheme = parsed_url.scheme 477s 477s if headers is None: 477s headers = self.headers 477s 477s if not isinstance(retries, Retry): 477s retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 477s 477s if release_conn is None: 477s release_conn = preload_content 477s 477s # Check host 477s if assert_same_host and not self.is_same_host(url): 477s raise HostChangedError(self, url, retries) 477s 477s # Ensure that the URL we're connecting to is properly encoded 477s if url.startswith("/"): 477s url = to_str(_encode_target(url)) 477s else: 477s url = to_str(parsed_url.url) 477s 477s conn = None 477s 477s # Track whether `conn` needs to be released before 477s # returning/raising/recursing. Update this variable if necessary, and 477s # leave `release_conn` constant throughout the function. That way, if 477s # the function recurses, the original value of `release_conn` will be 477s # passed down into the recursive call, and its value will be respected. 477s # 477s # See issue #651 [1] for details. 477s # 477s # [1] 477s release_this_conn = release_conn 477s 477s http_tunnel_required = connection_requires_http_tunnel( 477s self.proxy, self.proxy_config, destination_scheme 477s ) 477s 477s # Merge the proxy headers. Only done when not using HTTP CONNECT. We 477s # have to copy the headers dict so we can safely change it without those 477s # changes being reflected in anyone else's copy. 477s if not http_tunnel_required: 477s headers = headers.copy() # type: ignore[attr-defined] 477s headers.update(self.proxy_headers) # type: ignore[union-attr] 477s 477s # Must keep the exception bound to a separate variable or else Python 3 477s # complains about UnboundLocalError. 477s err = None 477s 477s # Keep track of whether we cleanly exited the except block. This 477s # ensures we do proper cleanup in finally. 477s clean_exit = False 477s 477s # Rewind body position, if needed. Record current position 477s # for future rewinds in the event of a redirect/retry. 477s body_pos = set_file_position(body, body_pos) 477s 477s try: 477s # Request a connection from the queue. 477s timeout_obj = self._get_timeout(timeout) 477s conn = self._get_conn(timeout=pool_timeout) 477s 477s conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 477s 477s # Is this a closed/new connection that requires CONNECT tunnelling? 477s if self.proxy is not None and http_tunnel_required and conn.is_closed: 477s try: 477s self._prepare_proxy(conn) 477s except (BaseSSLError, OSError, SocketTimeout) as e: 477s self._raise_timeout( 477s err=e, url=self.proxy.url, timeout_value=conn.timeout 477s ) 477s raise 477s 477s # If we're going to release the connection in ``finally:``, then 477s # the response doesn't need to know about the connection. Otherwise 477s # it will also try to release it and we'll have a double-release 477s # mess. 477s response_conn = conn if not release_conn else None 477s 477s # Make the request on the HTTPConnection object 477s > response = self._make_request( 477s conn, 477s method, 477s url, 477s timeout=timeout_obj, 477s body=body, 477s headers=headers, 477s chunked=chunked, 477s retries=retries, 477s response_conn=response_conn, 477s preload_content=preload_content, 477s decode_content=decode_content, 477s **response_kw, 477s ) 477s 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s 477s During handling of the above exception, another exception occurred: 477s 477s self = 477s browser_name = 'chrome', vendor_prefix = 'goog' 477s options = 477s service = 477s keep_alive = True 477s 477s def __init__( 477s self, 477s browser_name: str = None, 477s vendor_prefix: str = None, 477s options: ArgOptions = ArgOptions(), 477s service: Service = None, 477s keep_alive: bool = True, 477s ) -> None: 477s """Creates a new WebDriver instance of the ChromiumDriver. Starts the 477s service and then creates new WebDriver instance of ChromiumDriver. 477s 477s :Args: 477s - browser_name - Browser name used when matching capabilities. 477s - vendor_prefix - Company prefix to apply to vendor-specific WebDriver extension commands. 477s - options - this takes an instance of ChromiumOptions 477s - service - Service object for handling the browser driver if you need to pass extra details 477s - keep_alive - Whether to configure ChromiumRemoteConnection to use HTTP keep-alive. 477s """ 477s self.service = service 477s 477s finder = DriverFinder(self.service, options) 477s if finder.get_browser_path(): 477s options.binary_location = finder.get_browser_path() 477s options.browser_version = None 477s 477s self.service.path = finder.get_driver_path() 477s self.service.start() 477s 477s executor = ChromiumRemoteConnection( 477s remote_server_addr=self.service.service_url, 477s browser_name=browser_name, 477s vendor_prefix=vendor_prefix, 477s keep_alive=keep_alive, 477s ignore_proxy=options._ignore_local_proxy, 477s ) 477s 477s try: 477s > super().__init__(command_executor=executor, options=options) 477s 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:66: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:212: in __init__ 477s self.start_session(capabilities) 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:299: in start_session 477s response = self.execute(Command.NEW_SESSION, caps)["value"] 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/webdriver.py:352: in execute 477s response = self.command_executor.execute(driver_command, params) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:306: in execute 477s return self._request(command_info[0], url, body=data) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/remote/remote_connection.py:326: in _request 477s response = self._conn.request(method, url, body=body, headers=headers) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:143: in request 477s return self.request_encode_body( 477s /usr/lib/python3/dist-packages/urllib3/_request_methods.py:278: in request_encode_body 477s return self.urlopen(method, url, **extra_kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/poolmanager.py:459: in urlopen 477s response = conn.urlopen(method, u.request_uri, **kw) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:841: in urlopen 477s retries = retries.increment( 477s /usr/lib/python3/dist-packages/urllib3/util/retry.py:474: in increment 477s raise reraise(type(error), error, _stacktrace) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/util/util.py:38: in reraise 477s raise value.with_traceback(tb) 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:787: in urlopen 477s response = self._make_request( 477s /usr/lib/python3/dist-packages/urllib3/connectionpool.py:534: in _make_request 477s response = conn.getresponse() 477s ^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/urllib3/connection.py:565: in getresponse 477s httplib_response = super().getresponse() 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) 477s 477s /usr/lib/python3.14/socket.py:725: ProtocolError 477s 477s During handling of the above exception, another exception occurred: 477s 477s > lambda: ihook(item=item, **kwds), when=when, reraise=reraise 477s ^^^^^^^^^^^^^^^^^^^^^^^^ 477s ) 477s 477s /usr/lib/python3/dist-packages/flaky/flaky_pytest_plugin.py:146: 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s tests/conftest.py:148: in run_sabnews_and_selenium 477s driver = webdriver.Chrome(options=driver_options, service=service) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3/dist-packages/selenium/webdriver/chrome/webdriver.py:45: in __init__ 477s super().__init__( 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:68: in __init__ 477s self.quit() 477s /usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py:193: in quit 477s self.service.stop() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:146: in stop 477s self.send_remote_shutdown_command() 477s /usr/lib/python3/dist-packages/selenium/webdriver/common/service.py:126: in send_remote_shutdown_command 477s request.urlopen(f"{self.service_url}/shutdown") 477s /usr/lib/python3.14/urllib/request.py:187: in urlopen 477s return opener.open(url, data, timeout) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:487: in open 477s response = self._open(req, data) 477s ^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:504: in _open 477s result = self._call_chain(self.handle_open, protocol, protocol + 477s /usr/lib/python3.14/urllib/request.py:464: in _call_chain 477s result = func(*args) 477s ^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1350: in http_open 477s return self.do_open(http.client.HTTPConnection, req) 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/urllib/request.py:1325: in do_open 477s r = h.getresponse() 477s ^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:1450: in getresponse 477s response.begin() 477s /usr/lib/python3.14/http/client.py:336: in begin 477s version, status, reason = self._read_status() 477s ^^^^^^^^^^^^^^^^^^^ 477s /usr/lib/python3.14/http/client.py:297: in _read_status 477s line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 477s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 477s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 477s 477s self = 477s b = 477s 477s def readinto(self, b): 477s """Read up to len(b) bytes into the writable buffer *b* and return 477s the number of bytes read. If the socket is non-blocking and no bytes 477s are available, None is returned. 477s 477s If *b* is non-empty, a 0 return value indicates that the connection 477s was shutdown at the other end. 477s """ 477s self._checkClosed() 477s self._checkReadable() 477s if self._timeout_occurred: 477s raise OSError("cannot read from timed out object") 477s try: 477s > return self._sock.recv_into(b) 477s ^^^^^^^^^^^^^^^^^^^^^^^ 477s E ConnectionResetError: [Errno 104] Connection reset by peer 477s 477s /usr/lib/python3.14/socket.py:725: ConnectionResetError 477s ===Flaky Test Report=== 477s 478s test_sorter_settings_conversion failed (2 runs remaining out of 3). 478s 478s [Errno 104] Connection reset by peer 478s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 478s test_sorter_settings_conversion failed (1 runs remaining out of 3). 478s 478s [Errno 104] Connection reset by peer 478s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 478s test_sorter_settings_conversion failed; it passed 0 out of the required 1 times. 478s 478s [Errno 104] Connection reset by peer 478s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 478s test_download_season_sorting[sea_sort_s01_4k_uhd-SABnzbd-result0] failed (2 runs remaining out of 3). 478s 478s [Errno 104] Connection reset by peer 478s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 478s test_download_season_sorting[sea_sort_s01_4k_uhd-SABnzbd-result0] failed (1 runs remaining out of 3). 478s 478s [Errno 104] Connection reset by peer 478s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 478s test_download_season_sorting[sea_sort_s01_4k_uhd-SABnzbd-result0] failed; it passed 0 out of the required 1 times. 478s 478s [Errno 104] Connection reset by peer 478s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 478s test_download_season_sorting[sea_sort_s02_4k_uhd-SABnzbd-result1] failed (2 runs remaining out of 3). 478s 478s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_season_sorting[sea_sort_s02_4k_uhd-SABnzbd-result1] failed (1 runs remaining out of 3). 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_season_sorting[sea_sort_s02_4k_uhd-SABnzbd-result1] failed; it passed 0 out of the required 1 times. 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_sequential[Long_live_CDs_2023_576i_mono-SABnzbd-result0] failed (2 runs remaining out of 3). 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_sequential[Long_live_CDs_2023_576i_mono-SABnzbd-result0] failed (1 runs remaining out of 3). 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_sequential[Long_live_CDs_2023_576i_mono-SABnzbd-result0] failed; it passed 0 out of the required 1 times. 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_sequential[Its_all_about_parts_2023_576i_mono-SABnzbd-result1] failed (2 runs remaining out of 3). 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_sequential[Its_all_about_parts_2023_576i_mono-SABnzbd-result1] failed (1 runs remaining out of 3). 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_sequential[Its_all_about_parts_2023_576i_mono-SABnzbd-result1] failed; it passed 0 out of the required 1 times. 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_sorting_single[SINGLE_sort_s23e06_480i-SABnzbd-result0] failed (2 runs remaining out of 3). 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_sorting_single[SINGLE_sort_s23e06_480i-SABnzbd-result0] failed (1 runs remaining out of 3). 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_sorting_single[SINGLE_sort_s23e06_480i-SABnzbd-result0] failed; it passed 0 out of the required 1 times. 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_sorting_single[SINGLE_sort_s23e06_480i-SABnzbd-result1] failed (2 runs remaining out of 3). 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_sorting_single[SINGLE_sort_s23e06_480i-SABnzbd-result1] failed (1 runs remaining out of 3). 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_sorting_single[SINGLE_sort_s23e06_480i-SABnzbd-result1] failed; it passed 0 out of the required 1 times. 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_sorting_single[single-ep_sort_s06e66_4k_uhd-SABnzbd-result2] failed (2 runs remaining out of 3). 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_sorting_single[single-ep_sort_s06e66_4k_uhd-SABnzbd-result2] failed (1 runs remaining out of 3). 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_sorting_single[single-ep_sort_s06e66_4k_uhd-SABnzbd-result2] failed; it passed 0 out of the required 1 times. 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_sorting_single[single-ep_sort_s06e66_4k_uhd-SABnzbd-result3] failed (2 runs remaining out of 3). 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_sorting_single[single-ep_sort_s06e66_4k_uhd-SABnzbd-result3] failed (1 runs remaining out of 3). 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_download_sorting_single[single-ep_sort_s06e66_4k_uhd-SABnzbd-result3] failed; it passed 0 out of the required 1 times. 479s 479s [Errno 104] Connection reset by peer 479s [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 479s test_newswrapper[None-TLSv1.3-None-True] passed 1 out of the required 1 times. Success! 479s test_newswrapper[771-TLSv1.2-None-True] passed 1 out of the required 1 times. Success! 479s test_newswrapper[768-None-None-False] passed 1 out of the required 1 times. Success! 479s test_newswrapper[769-None-None-False] passed 1 out of the required 1 times. Success! 479s test_newswrapper[770-None-None-False] passed 1 out of the required 1 times. Success! 479s test_newswrapper[None-None-RC4-MD5-False] passed 1 out of the required 1 times. Success! 479s test_newswrapper[None-TLSv1.2-AES256-SHA-True] passed 1 out of the required 1 times. Success! 479s test_newswrapper[None-None-TLS_AES_128_CCM_SHA256-False] passed 1 out of the required 1 times. Success! 479s 479s ===End Flaky Test Report=== 479s =========================== short test summary info ============================ 479s ERROR tests/test_functional_misc.py::TestShowLogging::test_showlog - ConnectionResetError: [Errno 104] Connection reset by peer 479s ERROR tests/test_functional_misc.py::TestDaemonizing::test_daemonizing - ConnectionResetError: [Errno 104] Connection reset by peer 479s ERROR tests/test_functional_sorting.py::TestDownloadSorting::test_sorter_settings_conversion - ConnectionResetError: [Errno 104] Connection reset by peer 479s ERROR tests/test_functional_sorting.py::TestDownloadSorting::test_download_season_sorting[sea_sort_s01_4k_uhd-SABnzbd-result0] - ConnectionResetError: [Errno 104] Connection reset by peer 479s ERROR tests/test_functional_sorting.py::TestDownloadSorting::test_download_season_sorting[sea_sort_s02_4k_uhd-SABnzbd-result1] - ConnectionResetError: [Errno 104] Connection reset by peer 479s ERROR tests/test_functional_sorting.py::TestDownloadSorting::test_download_sequential[Long_live_CDs_2023_576i_mono-SABnzbd-result0] - ConnectionResetError: [Errno 104] Connection reset by peer 479s ERROR tests/test_functional_sorting.py::TestDownloadSorting::test_download_sequential[Its_all_about_parts_2023_576i_mono-SABnzbd-result1] - ConnectionResetError: [Errno 104] Connection reset by peer 479s ERROR tests/test_functional_sorting.py::TestDownloadSorting::test_download_sorting_single[SINGLE_sort_s23e06_480i-SABnzbd-result0] - ConnectionResetError: [Errno 104] Connection reset by peer 479s ERROR tests/test_functional_sorting.py::TestDownloadSorting::test_download_sorting_single[SINGLE_sort_s23e06_480i-SABnzbd-result1] - ConnectionResetError: [Errno 104] Connection reset by peer 479s ERROR tests/test_functional_sorting.py::TestDownloadSorting::test_download_sorting_single[single-ep_sort_s06e66_4k_uhd-SABnzbd-result2] - ConnectionResetError: [Errno 104] Connection reset by peer 479s ERROR tests/test_functional_sorting.py::TestDownloadSorting::test_download_sorting_single[single-ep_sort_s06e66_4k_uhd-SABnzbd-result3] - ConnectionResetError: [Errno 104] Connection reset by peer 479s = 12961 passed, 37 skipped, 10 deselected, 2 xfailed, 11 errors in 182.62s (0:03:02) = 480s autopkgtest [05:24:42]: test upstream-tests: -----------------------] 481s autopkgtest [05:24:43]: test upstream-tests: - - - - - - - - - - results - - - - - - - - - - 481s upstream-tests FAIL non-zero exit status 1 481s autopkgtest [05:24:43]: @@@@@@@@@@@@@@@@@@@@ summary 481s basic-runs PASS (superficial) 481s upstream-tests FAIL non-zero exit status 1