==> Building on articuno ==> Checking for remote environment... ==> Syncing package to remote host... sending incremental file list created directory packages/python-requests ./ .SRCINFO 1,081 100% 0.00kB/s 0:00:00 1,081 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=12/14) .nvchecker.toml 90 100% 87.89kB/s 0:00:00 90 100% 87.89kB/s 0:00:00 (xfr#2, to-chk=11/14) LICENSE 646 100% 630.86kB/s 0:00:00 646 100% 630.86kB/s 0:00:00 (xfr#3, to-chk=10/14) PKGBUILD 1,683 100% 1.61MB/s 0:00:00 1,683 100% 1.61MB/s 0:00:00 (xfr#4, to-chk=9/14) REUSE.toml 517 100% 504.88kB/s 0:00:00 517 100% 504.88kB/s 0:00:00 (xfr#5, to-chk=8/14) certs.patch 484 100% 472.66kB/s 0:00:00 484 100% 472.66kB/s 0:00:00 (xfr#6, to-chk=7/14) python-requests-2.32.5-1.log 250 100% 244.14kB/s 0:00:00 250 100% 244.14kB/s 0:00:00 (xfr#7, to-chk=6/14) LICENSES/ LICENSES/0BSD.txt -> ../LICENSE LICENSES/Apache-2.0.txt 10,280 100% 4.90MB/s 0:00:00 10,280 100% 4.90MB/s 0:00:00 (xfr#8, to-chk=2/14) keys/ keys/pgp/ keys/pgp/87227E29AD9CFF5CFAC3EA6A44D3FF97B80DC864.asc 8,513 100% 4.06MB/s 0:00:00 8,513 100% 4.06MB/s 0:00:00 (xfr#9, to-chk=0/14) sent 13,654 bytes received 260 bytes 27,828.00 bytes/sec total size is 23,499 speedup is 1.69 ==> Ensuring required PGP keys are present...  -> Checking for 87227E29AD9CFF5CFAC3EA6A44D3FF97B80DC864... ==> Running pkgctl build --arch riscv64 --repo extra on remote host... ==> WARNING: unsupported architecture: riscv64 ==> Building python-requests  -> repo: extra  -> arch: riscv64  -> worker: felix-0 ==> Building python-requests for [extra] (riscv64) ]2;🔵 Container arch-nspawn-1889005 on articuno.felixc.at\[?25l:: Synchronizing package databases... core downloading... extra downloading... :: Starting full system upgrade... there is nothing to do [?25h==> Building in chroot for [extra] (riscv64)... ==> Synchronizing chroot copy [/var/lib/archbuild/extra-riscv64/root] -> [felix-0]...done ==> Making package: python-requests 2.32.5-1 (Wed Sep 24 16:49:48 2025) ==> Retrieving sources...  -> Cloning requests git repo... Cloning into bare repository '/home/felix/packages/python-requests/requests'... remote: Enumerating objects: 41096, done. remote: Counting objects: 0% (1/121) remote: Counting objects: 1% (2/121) remote: Counting objects: 2% (3/121) remote: Counting objects: 3% (4/121) remote: Counting objects: 4% (5/121) remote: Counting objects: 5% (7/121) remote: Counting objects: 6% (8/121) remote: Counting objects: 7% (9/121) remote: Counting objects: 8% (10/121) remote: Counting objects: 9% (11/121) remote: Counting objects: 10% (13/121) remote: Counting objects: 11% (14/121) remote: Counting objects: 12% (15/121) remote: Counting objects: 13% (16/121) remote: Counting objects: 14% (17/121) remote: Counting objects: 15% (19/121) remote: Counting objects: 16% (20/121) remote: Counting objects: 17% (21/121) remote: Counting objects: 18% (22/121) remote: Counting objects: 19% (23/121) remote: Counting objects: 20% (25/121) remote: Counting objects: 21% (26/121) remote: Counting objects: 22% (27/121) remote: Counting objects: 23% (28/121) remote: Counting objects: 24% (30/121) remote: Counting objects: 25% (31/121) remote: Counting objects: 26% (32/121) remote: Counting objects: 27% (33/121) remote: Counting objects: 28% (34/121) remote: Counting objects: 29% (36/121) remote: Counting objects: 30% (37/121) remote: Counting objects: 31% (38/121) remote: Counting objects: 32% (39/121) remote: Counting objects: 33% (40/121) remote: Counting objects: 34% (42/121) remote: Counting objects: 35% (43/121) remote: Counting objects: 36% (44/121) remote: Counting objects: 37% (45/121) remote: Counting objects: 38% (46/121) remote: Counting objects: 39% (48/121) remote: Counting objects: 40% (49/121) remote: Counting objects: 41% (50/121) remote: Counting objects: 42% (51/121) remote: Counting objects: 43% (53/121) remote: Counting objects: 44% (54/121) remote: Counting objects: 45% (55/121) remote: Counting objects: 46% (56/121) remote: Counting objects: 47% (57/121) remote: Counting objects: 48% (59/121) remote: Counting objects: 49% (60/121) remote: Counting objects: 50% (61/121) remote: Counting objects: 51% (62/121) remote: Counting objects: 52% (63/121) remote: Counting objects: 53% (65/121) remote: Counting objects: 54% (66/121) remote: Counting objects: 55% (67/121) remote: Counting objects: 56% (68/121) remote: Counting objects: 57% (69/121) remote: Counting objects: 58% (71/121) remote: Counting objects: 59% (72/121) remote: Counting objects: 60% (73/121) remote: Counting objects: 61% (74/121) remote: Counting objects: 62% (76/121) remote: Counting objects: 63% (77/121) remote: Counting objects: 64% (78/121) remote: Counting objects: 65% (79/121) remote: Counting objects: 66% (80/121) remote: Counting objects: 67% (82/121) remote: Counting objects: 68% (83/121) remote: Counting objects: 69% (84/121) remote: Counting objects: 70% (85/121) remote: Counting objects: 71% (86/121) remote: Counting objects: 72% (88/121) remote: Counting objects: 73% (89/121) remote: Counting objects: 74% (90/121) remote: Counting objects: 75% (91/121) remote: Counting objects: 76% (92/121) remote: Counting objects: 77% (94/121) remote: Counting objects: 78% (95/121) remote: Counting objects: 79% (96/121) remote: Counting objects: 80% (97/121) remote: Counting objects: 81% (99/121) remote: Counting objects: 82% (100/121) remote: Counting objects: 83% (101/121) remote: Counting objects: 84% (102/121) remote: Counting objects: 85% (103/121) remote: Counting objects: 86% (105/121) remote: Counting objects: 87% (106/121) remote: Counting objects: 88% (107/121) remote: Counting objects: 89% (108/121) remote: Counting objects: 90% (109/121) remote: Counting objects: 91% (111/121) remote: Counting objects: 92% (112/121) remote: Counting objects: 93% (113/121) remote: Counting objects: 94% (114/121) remote: Counting objects: 95% (115/121) remote: Counting objects: 96% (117/121) remote: Counting objects: 97% (118/121) remote: Counting objects: 98% (119/121) remote: Counting objects: 99% (120/121) remote: Counting objects: 100% (121/121) remote: Counting objects: 100% (121/121), done. remote: Compressing objects: 1% (1/79) remote: Compressing objects: 2% (2/79) remote: Compressing objects: 3% (3/79) remote: Compressing objects: 5% (4/79) remote: Compressing objects: 6% (5/79) remote: Compressing objects: 7% (6/79) remote: Compressing objects: 8% (7/79) remote: Compressing objects: 10% (8/79) remote: Compressing objects: 11% (9/79) remote: Compressing objects: 12% (10/79) remote: Compressing objects: 13% (11/79) remote: Compressing objects: 15% (12/79) remote: Compressing objects: 16% (13/79) remote: Compressing objects: 17% (14/79) remote: Compressing objects: 18% (15/79) remote: Compressing objects: 20% (16/79) remote: Compressing objects: 21% (17/79) remote: Compressing objects: 22% (18/79) remote: Compressing objects: 24% (19/79) remote: Compressing objects: 25% (20/79) remote: Compressing objects: 26% (21/79) remote: Compressing objects: 27% (22/79) remote: Compressing objects: 29% (23/79) remote: Compressing objects: 30% (24/79) remote: Compressing objects: 31% (25/79) remote: Compressing objects: 32% (26/79) remote: Compressing objects: 34% (27/79) remote: Compressing objects: 35% (28/79) remote: Compressing objects: 36% (29/79) remote: Compressing objects: 37% (30/79) remote: Compressing objects: 39% (31/79) remote: Compressing objects: 40% (32/79) remote: Compressing objects: 41% (33/79) remote: Compressing objects: 43% (34/79) remote: Compressing objects: 44% (35/79) remote: Compressing objects: 45% (36/79) remote: Compressing objects: 46% (37/79) remote: Compressing objects: 48% (38/79) remote: Compressing objects: 49% (39/79) remote: Compressing objects: 50% (40/79) remote: Compressing objects: 51% (41/79) remote: Compressing objects: 53% (42/79) remote: Compressing objects: 54% (43/79) remote: Compressing objects: 55% (44/79) remote: Compressing objects: 56% (45/79) remote: Compressing objects: 58% (46/79) remote: Compressing objects: 59% (47/79) remote: Compressing objects: 60% (48/79) remote: Compressing objects: 62% (49/79) remote: Compressing objects: 63% (50/79) remote: Compressing objects: 64% (51/79) remote: Compressing objects: 65% (52/79) remote: Compressing objects: 67% (53/79) remote: Compressing objects: 68% (54/79) remote: Compressing objects: 69% (55/79) remote: Compressing objects: 70% (56/79) remote: Compressing objects: 72% (57/79) remote: Compressing objects: 73% (58/79) remote: Compressing objects: 74% (59/79) remote: Compressing objects: 75% (60/79) remote: Compressing objects: 77% (61/79) remote: Compressing objects: 78% (62/79) remote: Compressing objects: 79% (63/79) remote: Compressing objects: 81% (64/79) remote: Compressing objects: 82% (65/79) remote: Compressing objects: 83% (66/79) remote: Compressing objects: 84% (67/79) remote: Compressing objects: 86% (68/79) remote: Compressing objects: 87% (69/79) remote: Compressing objects: 88% (70/79) remote: Compressing objects: 89% (71/79) remote: Compressing objects: 91% (72/79) remote: Compressing objects: 92% (73/79) remote: Compressing objects: 93% (74/79) remote: Compressing objects: 94% (75/79) remote: Compressing objects: 96% (76/79) remote: Compressing objects: 97% (77/79) remote: Compressing objects: 98% (78/79) remote: Compressing objects: 100% (79/79) remote: Compressing objects: 100% (79/79), done. Receiving objects: 0% (1/41096) Receiving objects: 1% (411/41096) Receiving objects: 2% (822/41096) Receiving objects: 3% (1233/41096) Receiving objects: 4% (1644/41096) Receiving objects: 5% (2055/41096), 764.01 KiB | 1.23 MiB/s Receiving objects: 6% (2466/41096), 764.01 KiB | 1.23 MiB/s Receiving objects: 7% (2877/41096), 764.01 KiB | 1.23 MiB/s Receiving objects: 8% (3288/41096), 764.01 KiB | 1.23 MiB/s Receiving objects: 9% (3699/41096), 764.01 KiB | 1.23 MiB/s Receiving objects: 10% (4110/41096), 764.01 KiB | 1.23 MiB/s Receiving objects: 11% (4521/41096), 764.01 KiB | 1.23 MiB/s Receiving objects: 12% (4932/41096), 764.01 KiB | 1.23 MiB/s Receiving objects: 12% (5212/41096), 1.47 MiB | 955.00 KiB/s Receiving objects: 13% (5343/41096), 1.47 MiB | 955.00 KiB/s Receiving objects: 14% (5754/41096), 1.47 MiB | 955.00 KiB/s Receiving objects: 15% (6165/41096), 1.47 MiB | 955.00 KiB/s Receiving objects: 16% (6576/41096), 1.47 MiB | 955.00 KiB/s Receiving objects: 16% (6778/41096), 2.14 MiB | 979.00 KiB/s Receiving objects: 16% (6781/41096), 3.42 MiB | 1024.00 KiB/s Receiving objects: 16% (6783/41096), 4.41 MiB | 1.13 MiB/s Receiving objects: 17% (6987/41096), 4.41 MiB | 1.13 MiB/s Receiving objects: 18% (7398/41096), 5.25 MiB | 1.15 MiB/s Receiving objects: 18% (7624/41096), 5.84 MiB | 1.13 MiB/s Receiving objects: 19% (7809/41096), 5.84 MiB | 1.13 MiB/s Receiving objects: 20% (8220/41096), 6.68 MiB | 1.15 MiB/s Receiving objects: 20% (8578/41096), 6.68 MiB | 1.15 MiB/s Receiving objects: 21% (8631/41096), 6.68 MiB | 1.15 MiB/s Receiving objects: 22% (9042/41096), 7.28 MiB | 1.09 MiB/s Receiving objects: 23% (9453/41096), 7.28 MiB | 1.09 MiB/s Receiving objects: 23% (9722/41096), 7.28 MiB | 1.09 MiB/s Receiving objects: 24% (9864/41096), 7.28 MiB | 1.09 MiB/s Receiving objects: 25% (10274/41096), 8.07 MiB | 1.18 MiB/s Receiving objects: 26% (10685/41096), 8.07 MiB | 1.18 MiB/s Receiving objects: 27% (11096/41096), 8.54 MiB | 1.12 MiB/s Receiving objects: 27% (11250/41096), 8.54 MiB | 1.12 MiB/s Receiving objects: 28% (11507/41096), 9.27 MiB | 1.14 MiB/s Receiving objects: 29% (11918/41096), 9.27 MiB | 1.14 MiB/s Receiving objects: 29% (12180/41096), 10.04 MiB | 1.17 MiB/s Receiving objects: 30% (12329/41096), 10.04 MiB | 1.17 MiB/s Receiving objects: 31% (12740/41096), 10.04 MiB | 1.17 MiB/s Receiving objects: 32% (13151/41096), 10.04 MiB | 1.17 MiB/s Receiving objects: 33% (13562/41096), 10.04 MiB | 1.17 MiB/s Receiving objects: 34% (13973/41096), 10.04 MiB | 1.17 MiB/s Receiving objects: 35% (14384/41096), 10.04 MiB | 1.17 MiB/s Receiving objects: 36% (14795/41096), 10.04 MiB | 1.17 MiB/s Receiving objects: 37% (15206/41096), 10.80 MiB | 1.13 MiB/s Receiving objects: 38% (15617/41096), 10.80 MiB | 1.13 MiB/s Receiving objects: 39% (16028/41096), 10.80 MiB | 1.13 MiB/s Receiving objects: 40% (16439/41096), 10.80 MiB | 1.13 MiB/s Receiving objects: 41% (16850/41096), 10.80 MiB | 1.13 MiB/s Receiving objects: 42% (17261/41096), 10.80 MiB | 1.13 MiB/s Receiving objects: 43% (17672/41096), 10.80 MiB | 1.13 MiB/s Receiving objects: 43% (18064/41096), 10.80 MiB | 1.13 MiB/s Receiving objects: 44% (18083/41096), 10.80 MiB | 1.13 MiB/s Receiving objects: 45% (18494/41096), 11.58 MiB | 1.14 MiB/s Receiving objects: 46% (18905/41096), 11.58 MiB | 1.14 MiB/s Receiving objects: 47% (19316/41096), 11.58 MiB | 1.14 MiB/s Receiving objects: 48% (19727/41096), 11.58 MiB | 1.14 MiB/s Receiving objects: 49% (20138/41096), 11.58 MiB | 1.14 MiB/s Receiving objects: 50% (20548/41096), 11.58 MiB | 1.14 MiB/s Receiving objects: 51% (20959/41096), 11.58 MiB | 1.14 MiB/s Receiving objects: 52% (21370/41096), 11.58 MiB | 1.14 MiB/s Receiving objects: 53% (21781/41096), 11.58 MiB | 1.14 MiB/s Receiving objects: 54% (22192/41096), 11.58 MiB | 1.14 MiB/s Receiving objects: 55% (22603/41096), 11.58 MiB | 1.14 MiB/s Receiving objects: 56% (23014/41096), 11.58 MiB | 1.14 MiB/s Receiving objects: 57% (23425/41096), 11.58 MiB | 1.14 MiB/s Receiving objects: 58% (23836/41096), 12.36 MiB | 1.19 MiB/s Receiving objects: 59% (24247/41096), 12.36 MiB | 1.19 MiB/s Receiving objects: 60% (24658/41096), 12.36 MiB | 1.19 MiB/s Receiving objects: 61% (25069/41096), 12.36 MiB | 1.19 MiB/s Receiving objects: 62% (25480/41096), 12.36 MiB | 1.19 MiB/s Receiving objects: 63% (25891/41096), 12.36 MiB | 1.19 MiB/s Receiving objects: 64% (26302/41096), 12.36 MiB | 1.19 MiB/s Receiving objects: 64% (26499/41096), 12.36 MiB | 1.19 MiB/s Receiving objects: 65% (26713/41096), 12.36 MiB | 1.19 MiB/s Receiving objects: 66% (27124/41096), 13.14 MiB | 1.17 MiB/s Receiving objects: 67% (27535/41096), 13.14 MiB | 1.17 MiB/s Receiving objects: 68% (27946/41096), 13.14 MiB | 1.17 MiB/s Receiving objects: 69% (28357/41096), 13.14 MiB | 1.17 MiB/s Receiving objects: 70% (28768/41096), 13.14 MiB | 1.17 MiB/s Receiving objects: 71% (29179/41096), 13.14 MiB | 1.17 MiB/s Receiving objects: 72% (29590/41096), 13.14 MiB | 1.17 MiB/s Receiving objects: 72% (29817/41096), 13.77 MiB | 1.25 MiB/s Receiving objects: 73% (30001/41096), 14.47 MiB | 1.23 MiB/s Receiving objects: 74% (30412/41096), 14.47 MiB | 1.23 MiB/s Receiving objects: 74% (30819/41096), 15.25 MiB | 1.36 MiB/s Receiving objects: 75% (30822/41096), 15.25 MiB | 1.36 MiB/s Receiving objects: 75% (30974/41096), 17.66 MiB | 1.42 MiB/s Receiving objects: 75% (30975/41096), 18.50 MiB | 1.43 MiB/s Receiving objects: 75% (31152/41096), 21.25 MiB | 1.60 MiB/s Receiving objects: 75% (31152/41096), 22.28 MiB | 1.68 MiB/s Receiving objects: 76% (31233/41096), 22.83 MiB | 1.61 MiB/s Receiving objects: 76% (31335/41096), 24.03 MiB | 1.70 MiB/s Receiving objects: 76% (31351/41096), 25.34 MiB | 1.81 MiB/s Receiving objects: 77% (31644/41096), 26.72 MiB | 1.93 MiB/s Receiving objects: 78% (32055/41096), 28.36 MiB | 2.10 MiB/s Receiving objects: 78% (32241/41096), 28.36 MiB | 2.10 MiB/s Receiving objects: 79% (32466/41096), 30.11 MiB | 2.28 MiB/s Receiving objects: 80% (32877/41096), 31.03 MiB | 2.25 MiB/s Receiving objects: 81% (33288/41096), 31.03 MiB | 2.25 MiB/s Receiving objects: 82% (33699/41096), 31.03 MiB | 2.25 MiB/s Receiving objects: 83% (34110/41096), 31.03 MiB | 2.25 MiB/s Receiving objects: 84% (34521/41096), 31.03 MiB | 2.25 MiB/s Receiving objects: 85% (34932/41096), 31.03 MiB | 2.25 MiB/s Receiving objects: 86% (35343/41096), 31.03 MiB | 2.25 MiB/s Receiving objects: 87% (35754/41096), 31.03 MiB | 2.25 MiB/s Receiving objects: 88% (36165/41096), 31.03 MiB | 2.25 MiB/s Receiving objects: 89% (36576/41096), 31.03 MiB | 2.25 MiB/s Receiving objects: 89% (36772/41096), 31.03 MiB | 2.25 MiB/s Receiving objects: 90% (36987/41096), 31.03 MiB | 2.25 MiB/s Receiving objects: 91% (37398/41096), 31.03 MiB | 2.25 MiB/s Receiving objects: 92% (37809/41096), 31.03 MiB | 2.25 MiB/s Receiving objects: 93% (38220/41096), 31.03 MiB | 2.25 MiB/s Receiving objects: 94% (38631/41096), 31.03 MiB | 2.25 MiB/s Receiving objects: 95% (39042/41096), 31.03 MiB | 2.25 MiB/s Receiving objects: 96% (39453/41096), 33.18 MiB | 2.50 MiB/s Receiving objects: 97% (39864/41096), 33.18 MiB | 2.50 MiB/s Receiving objects: 98% (40275/41096), 33.18 MiB | 2.50 MiB/s Receiving objects: 99% (40686/41096), 33.18 MiB | 2.50 MiB/s remote: Total 41096 (delta 83), reused 42 (delta 42), pack-reused 40975 (from 4) Receiving objects: 100% (41096/41096), 33.18 MiB | 2.50 MiB/s Receiving objects: 100% (41096/41096), 34.60 MiB | 1.60 MiB/s, done. Resolving deltas: 0% (0/25483) Resolving deltas: 1% (255/25483) Resolving deltas: 2% (510/25483) Resolving deltas: 3% (765/25483) Resolving deltas: 4% (1023/25483) Resolving deltas: 5% (1275/25483) Resolving deltas: 6% (1529/25483) Resolving deltas: 7% (1784/25483) Resolving deltas: 8% (2039/25483) Resolving deltas: 9% (2294/25483) Resolving deltas: 10% (2549/25483) Resolving deltas: 11% (2804/25483) Resolving deltas: 12% (3059/25483) Resolving deltas: 13% (3316/25483) Resolving deltas: 14% (3568/25483) Resolving deltas: 15% (3823/25483) Resolving deltas: 16% (4078/25483) Resolving deltas: 17% (4333/25483) Resolving deltas: 18% (4588/25483) Resolving deltas: 19% (4843/25483) Resolving deltas: 20% (5098/25483) Resolving deltas: 21% (5353/25483) Resolving deltas: 22% (5607/25483) Resolving deltas: 23% (5862/25483) Resolving deltas: 24% (6116/25483) Resolving deltas: 25% (6372/25483) Resolving deltas: 26% (6627/25483) Resolving deltas: 27% (6882/25483) Resolving deltas: 28% (7136/25483) Resolving deltas: 29% (7391/25483) Resolving deltas: 30% (7645/25483) Resolving deltas: 31% (7900/25483) Resolving deltas: 32% (8155/25483) Resolving deltas: 33% (8410/25483) Resolving deltas: 34% (8665/25483) Resolving deltas: 35% (8920/25483) Resolving deltas: 36% (9175/25483) Resolving deltas: 37% (9430/25483) Resolving deltas: 38% (9686/25483) Resolving deltas: 39% (9939/25483) Resolving deltas: 40% (10194/25483) Resolving deltas: 41% (10453/25483) Resolving deltas: 42% (10703/25483) Resolving deltas: 43% (10960/25483) Resolving deltas: 44% (11213/25483) Resolving deltas: 45% (11468/25483) Resolving deltas: 46% (11723/25483) Resolving deltas: 47% (11981/25483) Resolving deltas: 48% (12233/25483) Resolving deltas: 49% (12489/25483) Resolving deltas: 50% (12742/25483) Resolving deltas: 51% (12997/25483) Resolving deltas: 52% (13252/25483) Resolving deltas: 53% (13506/25483) Resolving deltas: 54% (13761/25483) Resolving deltas: 55% (14018/25483) Resolving deltas: 56% (14271/25483) Resolving deltas: 57% (14526/25483) Resolving deltas: 58% (14781/25483) Resolving deltas: 59% (15035/25483) Resolving deltas: 60% (15291/25483) Resolving deltas: 61% (15545/25483) Resolving deltas: 62% (15800/25483) Resolving deltas: 63% (16058/25483) Resolving deltas: 64% (16310/25483) Resolving deltas: 65% (16564/25483) Resolving deltas: 66% (16821/25483) Resolving deltas: 67% (17076/25483) Resolving deltas: 68% (17330/25483) Resolving deltas: 69% (17584/25483) Resolving deltas: 70% (17839/25483) Resolving deltas: 71% (18093/25483) Resolving deltas: 72% (18350/25483) Resolving deltas: 73% (18603/25483) Resolving deltas: 74% (18858/25483) Resolving deltas: 75% (19113/25483) Resolving deltas: 76% (19368/25483) Resolving deltas: 77% (19622/25483) Resolving deltas: 78% (19877/25483) Resolving deltas: 79% (20132/25483) Resolving deltas: 80% (20387/25483) Resolving deltas: 81% (20642/25483) Resolving deltas: 82% (20897/25483) Resolving deltas: 83% (21151/25483) Resolving deltas: 84% (21406/25483) Resolving deltas: 85% (21663/25483) Resolving deltas: 86% (21916/25483) Resolving deltas: 87% (22171/25483) Resolving deltas: 88% (22427/25483) Resolving deltas: 89% (22680/25483) Resolving deltas: 90% (22935/25483) Resolving deltas: 91% (23190/25483) Resolving deltas: 92% (23445/25483) Resolving deltas: 93% (23700/25483) Resolving deltas: 94% (23955/25483) Resolving deltas: 95% (24209/25483) Resolving deltas: 96% (24464/25483) Resolving deltas: 97% (24719/25483) Resolving deltas: 98% (24975/25483) Resolving deltas: 99% (25229/25483) Resolving deltas: 100% (25483/25483) Resolving deltas: 100% (25483/25483), done.  -> Found certs.patch ==> Validating source files with b2sums... requests ... Passed certs.patch ... Passed ]2;🔵 Container arch-nspawn-1890071 on articuno.felixc.at\==> Making package: python-requests 2.32.5-1 (Wed Sep 24 16:50:31 2025) ==> Checking runtime dependencies... ==> Installing missing dependencies... [?25lresolving dependencies... looking for conflicting packages... Package (5) New Version Net Change core/mpdecimal 4.0.1-1 0.31 MiB core/python 3.13.7-1 281.87 MiB extra/python-charset-normalizer 3.4.3-1 0.71 MiB extra/python-idna 3.10-2 0.88 MiB extra/python-urllib3 2.5.0-1 1.28 MiB Total Installed Size: 285.04 MiB :: Proceed with installation? [Y/n] checking keyring... checking package integrity... loading package files... checking for file conflicts... :: Processing package changes... installing mpdecimal... installing python... Optional dependencies for python python-setuptools: for building Python packages using tooling that is usually bundled with Python python-pip: for installing Python packages using tooling that is usually bundled with Python python-pipx: for installing Python software not packaged on Arch Linux sqlite: for a default database integration [installed] xz: for lzma [installed] tk: for tkinter installing python-charset-normalizer... installing python-idna... installing python-urllib3... Optional dependencies for python-urllib3 python-brotli: Brotli support python-brotlicffi: Brotli support python-h2: HTTP/2 support python-pysocks: SOCKS support python-zstandard: Zstandard support :: Running post-transaction hooks... (1/1) Arming ConditionNeedsUpdate... [?25h==> Checking buildtime dependencies... ==> Installing missing dependencies... [?25lresolving dependencies... looking for conflicting packages... Package (50) New Version Net Change Download Size extra/httpbin 0.10.2-5 0.34 MiB extra/libyaml 0.2.5-3 0.16 MiB extra/perl-error 0.17030-2 0.04 MiB extra/perl-mailtools 2.22-2 0.10 MiB extra/perl-timedate 2.33-8 0.08 MiB extra/python-attrs 25.3.0-1 0.58 MiB extra/python-autocommand 2.2.2-7 0.08 MiB extra/python-blinker 1.9.0-1 0.07 MiB 0.02 MiB extra/python-brotlicffi 1.1.0.0-3 0.11 MiB extra/python-cffi 1.17.1-2 1.35 MiB extra/python-click 8.2.1-1 1.18 MiB extra/python-cryptography 45.0.4-1 5.53 MiB extra/python-decorator 5.2.1-1 0.06 MiB extra/python-flasgger 0.9.7.1-5.1 13.35 MiB extra/python-flask 3.1.2-1 1.03 MiB 0.17 MiB extra/python-greenlet 3.2.4-1 0.44 MiB 0.12 MiB extra/python-iniconfig 2.1.0-1 0.04 MiB extra/python-itsdangerous 2.2.0-1 0.14 MiB extra/python-jaraco.collections 5.1.0-1 0.10 MiB extra/python-jaraco.context 6.0.1-1 0.04 MiB extra/python-jaraco.functools 4.1.0-1 0.07 MiB extra/python-jaraco.text 4.0.0-2 0.08 MiB extra/python-jinja 1:3.1.6-1 1.77 MiB extra/python-jsonschema 4.25.1-1 1.35 MiB 0.19 MiB extra/python-jsonschema-specifications 2025.9.1-1 0.05 MiB 0.01 MiB extra/python-markupsafe 3.0.2-1 0.08 MiB extra/python-mistune 1:3.1.4-1 0.57 MiB 0.11 MiB extra/python-more-itertools 10.8.0-1 0.71 MiB extra/python-packaging 25.0-1 0.67 MiB extra/python-platformdirs 4.4.0-1 0.24 MiB extra/python-pluggy 1.6.0-1 0.20 MiB extra/python-pycparser 2.22-3 1.69 MiB extra/python-pygments 2.19.2-1 14.38 MiB extra/python-pyopenssl 25.1.0-1 0.68 MiB extra/python-pyproject-hooks 1.2.0-3 0.10 MiB extra/python-pytest 1:8.4.2-1 4.18 MiB extra/python-referencing 0.36.2-1 0.38 MiB extra/python-rpds-py 0.22.3-1 0.65 MiB extra/python-six 1.17.0-1 0.12 MiB extra/python-werkzeug 3.1.3-1 2.43 MiB extra/python-yaml 6.0.2-2 0.91 MiB extra/zlib-ng 2.2.5-1 0.21 MiB extra/git 2.51.0-1 28.36 MiB extra/python-build 1.3.0-1 0.20 MiB extra/python-installer 0.7.0-10 0.17 MiB extra/python-pysocks 1.7.1-10 0.13 MiB 0.03 MiB extra/python-pytest-httpbin 2.1.0-1 0.04 MiB extra/python-setuptools 1:80.9.0-2 7.54 MiB extra/python-trustme 1.2.0-2 0.10 MiB extra/python-wheel 0.45.1-1 0.28 MiB Total Download Size: 0.65 MiB Total Installed Size: 93.15 MiB :: Proceed with installation? [Y/n] :: Retrieving packages... python-jsonschema-4.25.1-1-any downloading... python-flask-3.1.2-1-any downloading... python-greenlet-3.2.4-1-riscv64 downloading... python-mistune-1:3.1.4-1-any downloading... python-pysocks-1.7.1-10-any downloading... python-blinker-1.9.0-1-any downloading... python-jsonschema-specifications-2025.9.1-1-any downloading... checking keyring... checking package integrity... loading package files... checking for file conflicts... :: Processing package changes... installing perl-error... installing perl-timedate... installing perl-mailtools... installing zlib-ng... installing git... Optional dependencies for git git-zsh-completion: upstream zsh completion tk: gitk and git gui openssh: ssh transport and crypto man: show help with `git command --help` perl-libwww: git svn perl-term-readkey: git svn and interactive.singlekey setting perl-io-socket-ssl: git send-email TLS support perl-authen-sasl: git send-email TLS support perl-mediawiki-api: git mediawiki support perl-datetime-format-iso8601: git mediawiki support perl-lwp-protocol-https: git mediawiki https support perl-cgi: gitweb (web interface) support python: git svn & git p4 [installed] subversion: git svn org.freedesktop.secrets: keyring credential helper libsecret: libsecret credential helper [installed] less: the default pager for git installing python-packaging... installing python-pyproject-hooks... installing python-build... Optional dependencies for python-build python-pip: to use as the Python package installer (default) python-uv: to use as the Python package installer python-virtualenv: to use virtualenv for build isolation installing python-installer... installing python-more-itertools... installing python-jaraco.functools... installing python-jaraco.context... installing python-autocommand... installing python-jaraco.text... Optional dependencies for python-jaraco.text python-inflect: for show-newlines script installing python-jaraco.collections... installing python-platformdirs... installing python-wheel... Optional dependencies for python-wheel python-keyring: for wheel.signatures python-xdg: for wheel.signatures python-setuptools: for legacy bdist_wheel subcommand [pending] installing python-setuptools... installing python-pysocks... installing python-iniconfig... installing python-pluggy... installing python-pygments... installing python-pytest... installing python-blinker... installing python-click... installing python-itsdangerous... installing python-markupsafe... installing python-jinja... Optional dependencies for python-jinja python-babel: for i18n support installing python-werkzeug... Optional dependencies for python-werkzeug python-watchdog: faster and more advanced reloader installing python-flask... Optional dependencies for python-flask python-asgiref: async functions and views python-cryptography: using ad-hoc certificates [pending] python-dotenv: loading env vars from files installing python-decorator... installing python-pycparser... installing python-cffi... Optional dependencies for python-cffi python-setuptools: "limited api" version checking in cffi.setuptools_ext [installed] installing python-brotlicffi... installing libyaml... installing python-yaml... installing python-attrs... installing python-rpds-py... installing python-referencing... installing python-jsonschema-specifications... installing python-jsonschema... Optional dependencies for python-jsonschema python-isoduration: for duration format python-fqdn: for hostname format python-idna: for idn-hostname format [installed] python-jsonpointer: for json-pointer & relative-json-pointer format python-rfc3339-validator: for date-time format python-rfc3987: for iri, iri-reference, uri & uri-reference format python-uri-template: for uri-template format python-webcolors: for color format installing python-mistune... installing python-six... installing python-flasgger... installing python-greenlet... installing httpbin... installing python-pytest-httpbin... installing python-cryptography... installing python-pyopenssl... installing python-trustme... :: Running post-transaction hooks... (1/4) Creating system user accounts... Creating group 'git' with GID 971. Creating user 'git' (git daemon user) with UID 971 and GID 971. (2/4) Reloading system manager configuration... Skipped: Current root is not booted. (3/4) Arming ConditionNeedsUpdate... (4/4) Checking for old perl modules... [?25h==> Retrieving sources...  -> Found certs.patch ==> WARNING: Skipping all source file integrity checks. ==> Extracting sources...  -> Creating working copy of requests git repo... Cloning into 'requests'... done. Switched to a new branch 'makepkg' ==> Starting prepare()... patching file src/requests/certs.py ==> Starting build()... * Getting build dependencies for wheel... /usr/lib/python3.13/site-packages/setuptools/dist.py:599: SetuptoolsDeprecationWarning: Invalid dash-separated key 'provides-extra' in 'metadata' (setup.cfg), please use the underscore name 'provides_extra' instead. !! ******************************************************************************** Usage of dash-separated 'provides-extra' will not be supported in future versions. Please use the underscore name 'provides_extra' instead. By 2026-Mar-03, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details. ******************************************************************************** !! opt = self._enforce_underscore(opt, section) /usr/lib/python3.13/site-packages/setuptools/dist.py:599: SetuptoolsDeprecationWarning: Invalid dash-separated key 'requires-dist' in 'metadata' (setup.cfg), please use the underscore name 'requires_dist' instead. !! ******************************************************************************** Usage of dash-separated 'requires-dist' will not be supported in future versions. Please use the underscore name 'requires_dist' instead. By 2026-Mar-03, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details. ******************************************************************************** !! opt = self._enforce_underscore(opt, section) /usr/lib/python3.13/site-packages/setuptools/_distutils/dist.py:289: UserWarning: Unknown distribution option: 'tests_require' warnings.warn(msg) /usr/lib/python3.13/site-packages/setuptools/dist.py:599: SetuptoolsDeprecationWarning: Invalid dash-separated key 'provides-extra' in 'metadata' (setup.cfg), please use the underscore name 'provides_extra' instead. !! ******************************************************************************** Usage of dash-separated 'provides-extra' will not be supported in future versions. Please use the underscore name 'provides_extra' instead. (Affected: requests). By 2026-Mar-03, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details. ******************************************************************************** !! opt = self._enforce_underscore(opt, section) /usr/lib/python3.13/site-packages/setuptools/dist.py:599: SetuptoolsDeprecationWarning: Invalid dash-separated key 'requires-dist' in 'metadata' (setup.cfg), please use the underscore name 'requires_dist' instead. !! ******************************************************************************** Usage of dash-separated 'requires-dist' will not be supported in future versions. Please use the underscore name 'requires_dist' instead. (Affected: requests). By 2026-Mar-03, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details. ******************************************************************************** !! opt = self._enforce_underscore(opt, section) /usr/lib/python3.13/site-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: Apache Software License See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! self._finalize_license_expression() running egg_info creating src/requests.egg-info writing src/requests.egg-info/PKG-INFO writing dependency_links to src/requests.egg-info/dependency_links.txt writing requirements to src/requests.egg-info/requires.txt writing top-level names to src/requests.egg-info/top_level.txt writing manifest file 'src/requests.egg-info/SOURCES.txt' reading manifest file 'src/requests.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' adding license file 'LICENSE' writing manifest file 'src/requests.egg-info/SOURCES.txt' * Building wheel... /usr/lib/python3.13/site-packages/setuptools/_distutils/dist.py:289: UserWarning: Unknown distribution option: 'tests_require' warnings.warn(msg) /usr/lib/python3.13/site-packages/setuptools/dist.py:599: SetuptoolsDeprecationWarning: Invalid dash-separated key 'provides-extra' in 'metadata' (setup.cfg), please use the underscore name 'provides_extra' instead. !! ******************************************************************************** Usage of dash-separated 'provides-extra' will not be supported in future versions. Please use the underscore name 'provides_extra' instead. (Affected: requests). By 2026-Mar-03, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details. ******************************************************************************** !! opt = self._enforce_underscore(opt, section) /usr/lib/python3.13/site-packages/setuptools/dist.py:599: SetuptoolsDeprecationWarning: Invalid dash-separated key 'requires-dist' in 'metadata' (setup.cfg), please use the underscore name 'requires_dist' instead. !! ******************************************************************************** Usage of dash-separated 'requires-dist' will not be supported in future versions. Please use the underscore name 'requires_dist' instead. (Affected: requests). By 2026-Mar-03, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details. ******************************************************************************** !! opt = self._enforce_underscore(opt, section) /usr/lib/python3.13/site-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: Apache Software License See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! self._finalize_license_expression() running bdist_wheel running build running build_py creating build/lib/requests copying src/requests/compat.py -> build/lib/requests copying src/requests/cookies.py -> build/lib/requests copying src/requests/certs.py -> build/lib/requests copying src/requests/models.py -> build/lib/requests copying src/requests/_internal_utils.py -> build/lib/requests copying src/requests/packages.py -> build/lib/requests copying src/requests/status_codes.py -> build/lib/requests copying src/requests/sessions.py -> build/lib/requests copying src/requests/auth.py -> build/lib/requests copying src/requests/__init__.py -> build/lib/requests copying src/requests/api.py -> build/lib/requests copying src/requests/adapters.py -> build/lib/requests copying src/requests/help.py -> build/lib/requests copying src/requests/structures.py -> build/lib/requests copying src/requests/utils.py -> build/lib/requests copying src/requests/exceptions.py -> build/lib/requests copying src/requests/__version__.py -> build/lib/requests copying src/requests/hooks.py -> build/lib/requests running egg_info writing src/requests.egg-info/PKG-INFO writing dependency_links to src/requests.egg-info/dependency_links.txt writing requirements to src/requests.egg-info/requires.txt writing top-level names to src/requests.egg-info/top_level.txt reading manifest file 'src/requests.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' adding license file 'LICENSE' writing manifest file 'src/requests.egg-info/SOURCES.txt' installing to build/bdist.linux-riscv64/wheel running install running install_lib creating build/bdist.linux-riscv64/wheel creating build/bdist.linux-riscv64/wheel/requests copying build/lib/requests/compat.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/cookies.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/certs.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/models.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/_internal_utils.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/packages.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/status_codes.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/sessions.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/auth.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/__init__.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/api.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/adapters.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/help.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/structures.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/utils.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/exceptions.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/__version__.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/hooks.py -> build/bdist.linux-riscv64/wheel/./requests running install_egg_info Copying src/requests.egg-info to build/bdist.linux-riscv64/wheel/./requests-2.32.5-py3.13.egg-info running install_scripts creating build/bdist.linux-riscv64/wheel/requests-2.32.5.dist-info/WHEEL creating '/build/python-requests/src/requests/dist/.tmp-luwsw8z2/requests-2.32.5-py3-none-any.whl' and adding 'build/bdist.linux-riscv64/wheel' to it adding 'requests/__init__.py' adding 'requests/__version__.py' adding 'requests/_internal_utils.py' adding 'requests/adapters.py' adding 'requests/api.py' adding 'requests/auth.py' adding 'requests/certs.py' adding 'requests/compat.py' adding 'requests/cookies.py' adding 'requests/exceptions.py' adding 'requests/help.py' adding 'requests/hooks.py' adding 'requests/models.py' adding 'requests/packages.py' adding 'requests/sessions.py' adding 'requests/status_codes.py' adding 'requests/structures.py' adding 'requests/utils.py' adding 'requests-2.32.5.dist-info/licenses/LICENSE' adding 'requests-2.32.5.dist-info/METADATA' adding 'requests-2.32.5.dist-info/WHEEL' adding 'requests-2.32.5.dist-info/top_level.txt' adding 'requests-2.32.5.dist-info/RECORD' removing build/bdist.linux-riscv64/wheel Successfully built requests-2.32.5-py3-none-any.whl ==> Starting check()... ============================= test session starts ============================== platform linux -- Python 3.13.7, pytest-8.4.2, pluggy-1.6.0 -- /usr/bin/python cachedir: .pytest_cache rootdir: /build/python-requests/src/requests configfile: pyproject.toml plugins: httpbin-2.1.0 collecting ... collected 611 items / 1 deselected / 610 selected tests/test_adapters.py::test_request_url_trims_leading_path_separators PASSED [ 0%] tests/test_help.py::test_system_ssl PASSED [ 0%] tests/test_help.py::test_idna_without_version_attribute PASSED [ 0%] tests/test_help.py::test_idna_with_version_attribute PASSED [ 0%] tests/test_hooks.py::test_hooks[hook-ata] PASSED [ 0%] tests/test_hooks.py::test_hooks[hooks_list1-ta] PASSED [ 0%] tests/test_hooks.py::test_default_hooks PASSED [ 1%] tests/test_lowlevel.py::test_chunked_upload PASSED [ 1%] tests/test_lowlevel.py::test_chunked_encoding_error PASSED [ 1%] tests/test_lowlevel.py::test_chunked_upload_uses_only_specified_host_header PASSED [ 1%] tests/test_lowlevel.py::test_chunked_upload_doesnt_skip_host_header PASSED [ 1%] tests/test_lowlevel.py::test_conflicting_content_lengths PASSED [ 1%] tests/test_lowlevel.py::test_digestauth_401_count_reset_on_redirect PASSED [ 2%] tests/test_lowlevel.py::test_digestauth_401_only_sent_once PASSED [ 2%] tests/test_lowlevel.py::test_digestauth_only_on_4xx PASSED [ 2%] tests/test_lowlevel.py::test_use_proxy_from_environment[http_proxy-http] PASSED [ 2%] tests/test_lowlevel.py::test_use_proxy_from_environment[https_proxy-https] PASSED [ 2%] tests/test_lowlevel.py::test_use_proxy_from_environment[all_proxy-http] PASSED [ 2%] tests/test_lowlevel.py::test_use_proxy_from_environment[all_proxy-https] PASSED [ 3%] tests/test_lowlevel.py::test_use_proxy_from_environment[HTTP_PROXY-http] PASSED [ 3%] tests/test_lowlevel.py::test_use_proxy_from_environment[HTTPS_PROXY-https] PASSED [ 3%] tests/test_lowlevel.py::test_use_proxy_from_environment[ALL_PROXY-http] PASSED [ 3%] tests/test_lowlevel.py::test_use_proxy_from_environment[ALL_PROXY-https] PASSED [ 3%] tests/test_lowlevel.py::test_redirect_rfc1808_to_non_ascii_location PASSED [ 3%] tests/test_lowlevel.py::test_fragment_not_sent_with_request PASSED [ 4%] tests/test_lowlevel.py::test_fragment_update_on_redirect PASSED [ 4%] tests/test_lowlevel.py::test_json_decode_compatibility_for_alt_utf_encodings PASSED [ 4%] tests/test_packages.py::test_can_access_urllib3_attribute PASSED [ 4%] tests/test_packages.py::test_can_access_idna_attribute PASSED [ 4%] tests/test_packages.py::test_can_access_chardet_attribute PASSED [ 4%] tests/test_requests.py::TestRequests::test_entry_points PASSED [ 5%] tests/test_requests.py::TestRequests::test_invalid_url[MissingSchema-hiwpefhipowhefopw] PASSED [ 5%] tests/test_requests.py::TestRequests::test_invalid_url[InvalidSchema-localhost:3128] PASSED [ 5%] tests/test_requests.py::TestRequests::test_invalid_url[InvalidSchema-localhost.localdomain:3128/] PASSED [ 5%] tests/test_requests.py::TestRequests::test_invalid_url[InvalidSchema-10.122.1.1:3128/] PASSED [ 5%] tests/test_requests.py::TestRequests::test_invalid_url[InvalidURL-http://] PASSED [ 5%] tests/test_requests.py::TestRequests::test_invalid_url[InvalidURL-http://*example.com] PASSED [ 6%] tests/test_requests.py::TestRequests::test_invalid_url[InvalidURL-http://.example.com] PASSED [ 6%] tests/test_requests.py::TestRequests::test_basic_building PASSED [ 6%] tests/test_requests.py::TestRequests::test_no_content_length[GET] PASSED [ 6%] tests/test_requests.py::TestRequests::test_no_content_length[HEAD] PASSED [ 6%] tests/test_requests.py::TestRequests::test_no_body_content_length[POST] PASSED [ 6%] tests/test_requests.py::TestRequests::test_no_body_content_length[PUT] PASSED [ 7%] tests/test_requests.py::TestRequests::test_no_body_content_length[PATCH] PASSED [ 7%] tests/test_requests.py::TestRequests::test_no_body_content_length[OPTIONS] PASSED [ 7%] tests/test_requests.py::TestRequests::test_empty_content_length[POST] PASSED [ 7%] tests/test_requests.py::TestRequests::test_empty_content_length[PUT] PASSED [ 7%] tests/test_requests.py::TestRequests::test_empty_content_length[PATCH] PASSED [ 7%] tests/test_requests.py::TestRequests::test_empty_content_length[OPTIONS] PASSED [ 8%] tests/test_requests.py::TestRequests::test_override_content_length PASSED [ 8%] tests/test_requests.py::TestRequests::test_path_is_not_double_encoded PASSED [ 8%] tests/test_requests.py::TestRequests::test_params_are_added_before_fragment[http://example.com/path#fragment-http://example.com/path?a=b#fragment] PASSED [ 8%] tests/test_requests.py::TestRequests::test_params_are_added_before_fragment[http://example.com/path?key=value#fragment-http://example.com/path?key=value&a=b#fragment] PASSED [ 8%] tests/test_requests.py::TestRequests::test_params_original_order_is_preserved_by_default PASSED [ 8%] tests/test_requests.py::TestRequests::test_params_bytes_are_encoded PASSED [ 9%] tests/test_requests.py::TestRequests::test_binary_put PASSED [ 9%] tests/test_requests.py::TestRequests::test_whitespaces_are_removed_from_url PASSED [ 9%] tests/test_requests.py::TestRequests::test_mixed_case_scheme_acceptable[http://] PASSED [ 9%] tests/test_requests.py::TestRequests::test_mixed_case_scheme_acceptable[HTTP://] PASSED [ 9%] tests/test_requests.py::TestRequests::test_mixed_case_scheme_acceptable[hTTp://] PASSED [ 9%] tests/test_requests.py::TestRequests::test_mixed_case_scheme_acceptable[HttP://] PASSED [ 10%] tests/test_requests.py::TestRequests::test_HTTP_200_OK_GET_ALTERNATIVE PASSED [ 10%] tests/test_requests.py::TestRequests::test_HTTP_302_ALLOW_REDIRECT_GET PASSED [ 10%] tests/test_requests.py::TestRequests::test_HTTP_307_ALLOW_REDIRECT_POST PASSED [ 10%] tests/test_requests.py::TestRequests::test_HTTP_307_ALLOW_REDIRECT_POST_WITH_SEEKABLE PASSED [ 10%] tests/test_requests.py::TestRequests::test_HTTP_302_TOO_MANY_REDIRECTS PASSED [ 10%] tests/test_requests.py::TestRequests::test_HTTP_302_TOO_MANY_REDIRECTS_WITH_PARAMS PASSED [ 10%] tests/test_requests.py::TestRequests::test_http_301_changes_post_to_get PASSED [ 11%] tests/test_requests.py::TestRequests::test_http_301_doesnt_change_head_to_get PASSED [ 11%] tests/test_requests.py::TestRequests::test_http_302_changes_post_to_get PASSED [ 11%] tests/test_requests.py::TestRequests::test_http_302_doesnt_change_head_to_get PASSED [ 11%] tests/test_requests.py::TestRequests::test_http_303_changes_post_to_get PASSED [ 11%] tests/test_requests.py::TestRequests::test_http_303_doesnt_change_head_to_get PASSED [ 11%] tests/test_requests.py::TestRequests::test_header_and_body_removal_on_redirect PASSED [ 12%] tests/test_requests.py::TestRequests::test_transfer_enc_removal_on_redirect PASSED [ 12%] tests/test_requests.py::TestRequests::test_fragment_maintained_on_redirect PASSED [ 12%] tests/test_requests.py::TestRequests::test_HTTP_200_OK_GET_WITH_PARAMS PASSED [ 12%] tests/test_requests.py::TestRequests::test_HTTP_200_OK_GET_WITH_MIXED_PARAMS PASSED [ 12%] tests/test_requests.py::TestRequests::test_set_cookie_on_301 PASSED [ 12%] tests/test_requests.py::TestRequests::test_cookie_sent_on_redirect PASSED [ 13%] tests/test_requests.py::TestRequests::test_cookie_removed_on_expire PASSED [ 13%] tests/test_requests.py::TestRequests::test_cookie_quote_wrapped PASSED [ 13%] tests/test_requests.py::TestRequests::test_cookie_persists_via_api PASSED [ 13%] tests/test_requests.py::TestRequests::test_request_cookie_overrides_session_cookie PASSED [ 13%] tests/test_requests.py::TestRequests::test_request_cookies_not_persisted PASSED [ 13%] tests/test_requests.py::TestRequests::test_generic_cookiejar_works PASSED [ 14%] tests/test_requests.py::TestRequests::test_param_cookiejar_works PASSED [ 14%] tests/test_requests.py::TestRequests::test_cookielib_cookiejar_on_redirect PASSED [ 14%] tests/test_requests.py::TestRequests::test_requests_in_history_are_not_overridden PASSED [ 14%] tests/test_requests.py::TestRequests::test_history_is_always_a_list PASSED [ 14%] tests/test_requests.py::TestRequests::test_headers_on_session_with_None_are_not_sent PASSED [ 14%] tests/test_requests.py::TestRequests::test_headers_preserve_order PASSED [ 15%] tests/test_requests.py::TestRequests::test_user_agent_transfers[User-agent] PASSED [ 15%] tests/test_requests.py::TestRequests::test_user_agent_transfers[user-agent] PASSED [ 15%] tests/test_requests.py::TestRequests::test_HTTP_200_OK_HEAD PASSED [ 15%] tests/test_requests.py::TestRequests::test_HTTP_200_OK_PUT PASSED [ 15%] tests/test_requests.py::TestRequests::test_BASICAUTH_TUPLE_HTTP_200_OK_GET PASSED [ 15%] tests/test_requests.py::TestRequests::test_set_basicauth[user-pass] PASSED [ 16%] tests/test_requests.py::TestRequests::test_set_basicauth[\xd0\xb8\xd0\xbc\xd1\x8f-\xd0\xbf\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c] PASSED [ 16%] tests/test_requests.py::TestRequests::test_set_basicauth[42-42] PASSED [ 16%] tests/test_requests.py::TestRequests::test_set_basicauth[None-None] PASSED [ 16%] tests/test_requests.py::TestRequests::test_basicauth_encodes_byte_strings PASSED [ 16%] tests/test_requests.py::TestRequests::test_errors[http://doesnotexist.google.com-ConnectionError] PASSED [ 16%] tests/test_requests.py::TestRequests::test_errors[http://localhost:1-ConnectionError] PASSED [ 17%] tests/test_requests.py::TestRequests::test_errors[http://fe80::5054:ff:fe5a:fc0-InvalidURL] PASSED [ 17%] tests/test_requests.py::TestRequests::test_proxy_error PASSED [ 17%] tests/test_requests.py::TestRequests::test_proxy_error_on_bad_url PASSED [ 17%] tests/test_requests.py::TestRequests::test_respect_proxy_env_on_send_self_prepared_request PASSED [ 17%] tests/test_requests.py::TestRequests::test_respect_proxy_env_on_send_session_prepared_request PASSED [ 17%] tests/test_requests.py::TestRequests::test_respect_proxy_env_on_send_with_redirects PASSED [ 18%] tests/test_requests.py::TestRequests::test_respect_proxy_env_on_get PASSED [ 18%] tests/test_requests.py::TestRequests::test_respect_proxy_env_on_request PASSED [ 18%] tests/test_requests.py::TestRequests::test_proxy_authorization_preserved_on_request PASSED [ 18%] tests/test_requests.py::TestRequests::test_proxy_authorization_not_appended_to_https_request[http://example.com-True] PASSED [ 18%] tests/test_requests.py::TestRequests::test_proxy_authorization_not_appended_to_https_request[https://example.com-False] PASSED [ 18%] tests/test_requests.py::TestRequests::test_basicauth_with_netrc PASSED [ 19%] tests/test_requests.py::TestRequests::test_basicauth_with_netrc_leak PASSED [ 19%] tests/test_requests.py::TestRequests::test_DIGEST_HTTP_200_OK_GET PASSED [ 19%] tests/test_requests.py::TestRequests::test_DIGEST_AUTH_RETURNS_COOKIE PASSED [ 19%] tests/test_requests.py::TestRequests::test_DIGEST_AUTH_SETS_SESSION_COOKIES PASSED [ 19%] tests/test_requests.py::TestRequests::test_DIGEST_STREAM PASSED [ 19%] tests/test_requests.py::TestRequests::test_DIGESTAUTH_WRONG_HTTP_401_GET PASSED [ 20%] tests/test_requests.py::TestRequests::test_DIGESTAUTH_QUOTES_QOP_VALUE PASSED [ 20%] tests/test_requests.py::TestRequests::test_POSTBIN_GET_POST_FILES PASSED [ 20%] tests/test_requests.py::TestRequests::test_invalid_files_input PASSED [ 20%] tests/test_requests.py::TestRequests::test_POSTBIN_SEEKED_OBJECT_WITH_NO_ITER PASSED [ 20%] tests/test_requests.py::TestRequests::test_POSTBIN_GET_POST_FILES_WITH_DATA PASSED [ 20%] tests/test_requests.py::TestRequests::test_post_with_custom_mapping PASSED [ 20%] tests/test_requests.py::TestRequests::test_conflicting_post_params PASSED [ 21%] tests/test_requests.py::TestRequests::test_request_ok_set PASSED [ 21%] tests/test_requests.py::TestRequests::test_status_raising PASSED [ 21%] tests/test_requests.py::TestRequests::test_decompress_gzip PASSED [ 21%] tests/test_requests.py::TestRequests::test_unicode_get[/get-params0] PASSED [ 21%] tests/test_requests.py::TestRequests::test_unicode_get[/get-params1] PASSED [ 21%] tests/test_requests.py::TestRequests::test_unicode_get[/get-params2] PASSED [ 22%] tests/test_requests.py::TestRequests::test_unicode_get[/get-params3] PASSED [ 22%] tests/test_requests.py::TestRequests::test_unicode_get[\xf8-params4] PASSED [ 22%] tests/test_requests.py::TestRequests::test_pyopenssl_redirect PASSED [ 22%] tests/test_requests.py::TestRequests::test_invalid_ca_certificate_path PASSED [ 22%] tests/test_requests.py::TestRequests::test_invalid_ssl_certificate_files PASSED [ 22%] tests/test_requests.py::TestRequests::test_env_cert_bundles[env0-True] PASSED [ 23%] tests/test_requests.py::TestRequests::test_env_cert_bundles[env1-/some/path] PASSED [ 23%] tests/test_requests.py::TestRequests::test_env_cert_bundles[env2-True] PASSED [ 23%] tests/test_requests.py::TestRequests::test_env_cert_bundles[env3-/some/path] PASSED [ 23%] tests/test_requests.py::TestRequests::test_env_cert_bundles[env4-True] PASSED [ 23%] tests/test_requests.py::TestRequests::test_env_cert_bundles[env5-True] PASSED [ 23%] tests/test_requests.py::TestRequests::test_env_cert_bundles[env6-/some/path] PASSED [ 24%] tests/test_requests.py::TestRequests::test_env_cert_bundles[env7-/curl/path] PASSED [ 24%] tests/test_requests.py::TestRequests::test_http_with_certificate PASSED [ 24%] tests/test_requests.py::TestRequests::test_https_warnings SKIPPED (u...) [ 24%] tests/test_requests.py::TestRequests::test_certificate_failure pytest-httpbin server hit an exception serving request: [SSL: TLSV1_ALERT_UNKNOWN_CA] tlsv1 alert unknown ca (_ssl.c:1032) attempting to ignore so the rest of the tests can run PASSED [ 24%] tests/test_requests.py::TestRequests::test_urlencoded_get_query_multivalued_param PASSED [ 24%] tests/test_requests.py::TestRequests::test_form_encoded_post_query_multivalued_element PASSED [ 25%] tests/test_requests.py::TestRequests::test_different_encodings_dont_break_post PASSED [ 25%] tests/test_requests.py::TestRequests::test_unicode_multipart_post[data0] PASSED [ 25%] tests/test_requests.py::TestRequests::test_unicode_multipart_post[data1] PASSED [ 25%] tests/test_requests.py::TestRequests::test_unicode_multipart_post[data2] PASSED [ 25%] tests/test_requests.py::TestRequests::test_unicode_multipart_post[data3] PASSED [ 25%] tests/test_requests.py::TestRequests::test_unicode_multipart_post_fieldnames PASSED [ 26%] tests/test_requests.py::TestRequests::test_unicode_method_name PASSED [ 26%] tests/test_requests.py::TestRequests::test_unicode_method_name_with_request_object PASSED [ 26%] tests/test_requests.py::TestRequests::test_non_prepared_request_error PASSED [ 26%] tests/test_requests.py::TestRequests::test_custom_content_type PASSED [ 26%] tests/test_requests.py::TestRequests::test_hook_receives_request_arguments PASSED [ 26%] tests/test_requests.py::TestRequests::test_session_hooks_are_used_with_no_request_hooks PASSED [ 27%] tests/test_requests.py::TestRequests::test_session_hooks_are_overridden_by_request_hooks PASSED [ 27%] tests/test_requests.py::TestRequests::test_prepared_request_hook PASSED [ 27%] tests/test_requests.py::TestRequests::test_prepared_from_session PASSED [ 27%] tests/test_requests.py::TestRequests::test_prepare_request_with_bytestring_url PASSED [ 27%] tests/test_requests.py::TestRequests::test_request_with_bytestring_host PASSED [ 27%] tests/test_requests.py::TestRequests::test_links PASSED [ 28%] tests/test_requests.py::TestRequests::test_cookie_parameters PASSED [ 28%] tests/test_requests.py::TestRequests::test_cookie_as_dict_keeps_len PASSED [ 28%] tests/test_requests.py::TestRequests::test_cookie_as_dict_keeps_items PASSED [ 28%] tests/test_requests.py::TestRequests::test_cookie_as_dict_keys PASSED [ 28%] tests/test_requests.py::TestRequests::test_cookie_as_dict_values PASSED [ 28%] tests/test_requests.py::TestRequests::test_cookie_as_dict_items PASSED [ 29%] tests/test_requests.py::TestRequests::test_cookie_duplicate_names_different_domains PASSED [ 29%] tests/test_requests.py::TestRequests::test_cookie_duplicate_names_raises_cookie_conflict_error PASSED [ 29%] tests/test_requests.py::TestRequests::test_cookie_policy_copy PASSED [ 29%] tests/test_requests.py::TestRequests::test_time_elapsed_blank PASSED [ 29%] tests/test_requests.py::TestRequests::test_empty_response_has_content_none PASSED [ 29%] tests/test_requests.py::TestRequests::test_response_is_iterable PASSED [ 30%] tests/test_requests.py::TestRequests::test_response_decode_unicode PASSED [ 30%] tests/test_requests.py::TestRequests::test_response_reason_unicode PASSED [ 30%] tests/test_requests.py::TestRequests::test_response_reason_unicode_fallback PASSED [ 30%] tests/test_requests.py::TestRequests::test_response_chunk_size_type PASSED [ 30%] tests/test_requests.py::TestRequests::test_iter_content_wraps_exceptions[ProtocolError-args0-ChunkedEncodingError] PASSED [ 30%] tests/test_requests.py::TestRequests::test_iter_content_wraps_exceptions[DecodeError-args1-ContentDecodingError] PASSED [ 30%] tests/test_requests.py::TestRequests::test_iter_content_wraps_exceptions[ReadTimeoutError-args2-ConnectionError] PASSED [ 31%] tests/test_requests.py::TestRequests::test_iter_content_wraps_exceptions[SSLError-args3-SSLError] PASSED [ 31%] tests/test_requests.py::TestRequests::test_request_and_response_are_pickleable PASSED [ 31%] tests/test_requests.py::TestRequests::test_prepared_request_is_pickleable PASSED [ 31%] tests/test_requests.py::TestRequests::test_prepared_request_with_file_is_pickleable PASSED [ 31%] tests/test_requests.py::TestRequests::test_prepared_request_with_hook_is_pickleable PASSED [ 31%] tests/test_requests.py::TestRequests::test_cannot_send_unprepared_requests PASSED [ 32%] tests/test_requests.py::TestRequests::test_http_error PASSED [ 32%] tests/test_requests.py::TestRequests::test_session_pickling PASSED [ 32%] tests/test_requests.py::TestRequests::test_fixes_1329 PASSED [ 32%] tests/test_requests.py::TestRequests::test_uppercase_scheme_redirect PASSED [ 32%] tests/test_requests.py::TestRequests::test_transport_adapter_ordering PASSED [ 32%] tests/test_requests.py::TestRequests::test_session_get_adapter_prefix_matching PASSED [ 33%] tests/test_requests.py::TestRequests::test_session_get_adapter_prefix_matching_mixed_case PASSED [ 33%] tests/test_requests.py::TestRequests::test_session_get_adapter_prefix_matching_is_case_insensitive PASSED [ 33%] tests/test_requests.py::TestRequests::test_session_get_adapter_prefix_with_trailing_slash PASSED [ 33%] tests/test_requests.py::TestRequests::test_session_get_adapter_prefix_without_trailing_slash PASSED [ 33%] tests/test_requests.py::TestRequests::test_header_remove_is_case_insensitive PASSED [ 33%] tests/test_requests.py::TestRequests::test_params_are_merged_case_sensitive PASSED [ 34%] tests/test_requests.py::TestRequests::test_long_authinfo_in_url PASSED [ 34%] tests/test_requests.py::TestRequests::test_header_keys_are_native PASSED [ 34%] tests/test_requests.py::TestRequests::test_header_validation PASSED [ 34%] tests/test_requests.py::TestRequests::test_header_value_not_str[invalid_header0-foo] PASSED [ 34%] tests/test_requests.py::TestRequests::test_header_value_not_str[invalid_header1-bar] PASSED [ 34%] tests/test_requests.py::TestRequests::test_header_value_not_str[invalid_header2-baz] PASSED [ 35%] tests/test_requests.py::TestRequests::test_header_no_return_chars[invalid_header0] PASSED [ 35%] tests/test_requests.py::TestRequests::test_header_no_return_chars[invalid_header1] PASSED [ 35%] tests/test_requests.py::TestRequests::test_header_no_return_chars[invalid_header2] PASSED [ 35%] tests/test_requests.py::TestRequests::test_header_no_return_chars[invalid_header3] PASSED [ 35%] tests/test_requests.py::TestRequests::test_header_no_return_chars[invalid_header4] PASSED [ 35%] tests/test_requests.py::TestRequests::test_header_no_return_chars[invalid_header5] PASSED [ 36%] tests/test_requests.py::TestRequests::test_header_no_return_chars[invalid_header6] PASSED [ 36%] tests/test_requests.py::TestRequests::test_header_no_return_chars[invalid_header7] PASSED [ 36%] tests/test_requests.py::TestRequests::test_header_no_leading_space[invalid_header0] PASSED [ 36%] tests/test_requests.py::TestRequests::test_header_no_leading_space[invalid_header1] PASSED [ 36%] tests/test_requests.py::TestRequests::test_header_no_leading_space[invalid_header2] PASSED [ 36%] tests/test_requests.py::TestRequests::test_header_no_leading_space[invalid_header3] PASSED [ 37%] tests/test_requests.py::TestRequests::test_header_no_leading_space[invalid_header4] PASSED [ 37%] tests/test_requests.py::TestRequests::test_header_no_leading_space[invalid_header5] PASSED [ 37%] tests/test_requests.py::TestRequests::test_header_no_leading_space[invalid_header6] PASSED [ 37%] tests/test_requests.py::TestRequests::test_header_with_subclass_types PASSED [ 37%] tests/test_requests.py::TestRequests::test_can_send_objects_with_files[foo0] PASSED [ 37%] tests/test_requests.py::TestRequests::test_can_send_objects_with_files[foo1] PASSED [ 38%] tests/test_requests.py::TestRequests::test_can_send_objects_with_files[files2] PASSED [ 38%] tests/test_requests.py::TestRequests::test_can_send_file_object_with_non_string_filename PASSED [ 38%] tests/test_requests.py::TestRequests::test_autoset_header_values_are_native PASSED [ 38%] tests/test_requests.py::TestRequests::test_nonhttp_schemes_dont_check_URLs PASSED [ 38%] tests/test_requests.py::TestRequests::test_auth_is_stripped_on_http_downgrade PASSED [ 38%] tests/test_requests.py::TestRequests::test_auth_is_retained_for_redirect_on_host PASSED [ 39%] tests/test_requests.py::TestRequests::test_should_strip_auth_host_change PASSED [ 39%] tests/test_requests.py::TestRequests::test_should_strip_auth_http_downgrade PASSED [ 39%] tests/test_requests.py::TestRequests::test_should_strip_auth_https_upgrade PASSED [ 39%] tests/test_requests.py::TestRequests::test_should_strip_auth_port_change PASSED [ 39%] tests/test_requests.py::TestRequests::test_should_strip_auth_default_port[https://example.com:443/foo-https://example.com/bar] PASSED [ 39%] tests/test_requests.py::TestRequests::test_should_strip_auth_default_port[http://example.com:80/foo-http://example.com/bar] PASSED [ 40%] tests/test_requests.py::TestRequests::test_should_strip_auth_default_port[https://example.com/foo-https://example.com:443/bar] PASSED [ 40%] tests/test_requests.py::TestRequests::test_should_strip_auth_default_port[http://example.com/foo-http://example.com:80/bar] PASSED [ 40%] tests/test_requests.py::TestRequests::test_manual_redirect_with_partial_body_read PASSED [ 40%] tests/test_requests.py::TestRequests::test_prepare_body_position_non_stream PASSED [ 40%] tests/test_requests.py::TestRequests::test_rewind_body PASSED [ 40%] tests/test_requests.py::TestRequests::test_rewind_partially_read_body PASSED [ 40%] tests/test_requests.py::TestRequests::test_rewind_body_no_seek PASSED [ 41%] tests/test_requests.py::TestRequests::test_rewind_body_failed_seek PASSED [ 41%] tests/test_requests.py::TestRequests::test_rewind_body_failed_tell PASSED [ 41%] tests/test_requests.py::TestRequests::test_redirect_with_wrong_gzipped_header PASSED [ 41%] tests/test_requests.py::TestRequests::test_basic_auth_str_is_always_native[test-test-Basic dGVzdDp0ZXN0] PASSED [ 41%] tests/test_requests.py::TestRequests::test_basic_auth_str_is_always_native[\xd0\xb8\xd0\xbc\xd1\x8f-\xd0\xbf\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c-Basic 0LjQvNGPOtC/0LDRgNC+0LvRjA==] PASSED [ 41%] tests/test_requests.py::TestRequests::test_requests_history_is_saved PASSED [ 42%] tests/test_requests.py::TestRequests::test_json_param_post_content_type_works PASSED [ 42%] tests/test_requests.py::TestRequests::test_json_param_post_should_not_override_data_param PASSED [ 42%] tests/test_requests.py::TestRequests::test_response_iter_lines PASSED [ 42%] tests/test_requests.py::TestRequests::test_response_context_manager PASSED [ 42%] tests/test_requests.py::TestRequests::test_unconsumed_session_response_closes_connection PASSED [ 42%] tests/test_requests.py::TestRequests::test_response_iter_lines_reentrant XFAIL [ 43%] tests/test_requests.py::TestRequests::test_session_close_proxy_clear PASSED [ 43%] tests/test_requests.py::TestRequests::test_proxy_auth PASSED [ 43%] tests/test_requests.py::TestRequests::test_proxy_auth_empty_pass PASSED [ 43%] tests/test_requests.py::TestRequests::test_response_json_when_content_is_None PASSED [ 43%] tests/test_requests.py::TestRequests::test_response_without_release_conn PASSED [ 43%] tests/test_requests.py::TestRequests::test_empty_stream_with_auth_does_not_set_content_length_header PASSED [ 44%] tests/test_requests.py::TestRequests::test_stream_with_auth_does_not_set_transfer_encoding_header PASSED [ 44%] tests/test_requests.py::TestRequests::test_chunked_upload_does_not_set_content_length_header PASSED [ 44%] tests/test_requests.py::TestRequests::test_custom_redirect_mixin PASSED [ 44%] tests/test_requests.py::TestCaseInsensitiveDict::test_init[cid0] PASSED [ 44%] tests/test_requests.py::TestCaseInsensitiveDict::test_init[cid1] PASSED [ 44%] tests/test_requests.py::TestCaseInsensitiveDict::test_init[cid2] PASSED [ 45%] tests/test_requests.py::TestCaseInsensitiveDict::test_docstring_example PASSED [ 45%] tests/test_requests.py::TestCaseInsensitiveDict::test_len PASSED [ 45%] tests/test_requests.py::TestCaseInsensitiveDict::test_getitem PASSED [ 45%] tests/test_requests.py::TestCaseInsensitiveDict::test_fixes_649 PASSED [ 45%] tests/test_requests.py::TestCaseInsensitiveDict::test_delitem PASSED [ 45%] tests/test_requests.py::TestCaseInsensitiveDict::test_contains PASSED [ 46%] tests/test_requests.py::TestCaseInsensitiveDict::test_get PASSED [ 46%] tests/test_requests.py::TestCaseInsensitiveDict::test_update PASSED [ 46%] tests/test_requests.py::TestCaseInsensitiveDict::test_update_retains_unchanged PASSED [ 46%] tests/test_requests.py::TestCaseInsensitiveDict::test_iter PASSED [ 46%] tests/test_requests.py::TestCaseInsensitiveDict::test_equality PASSED [ 46%] tests/test_requests.py::TestCaseInsensitiveDict::test_setdefault PASSED [ 47%] tests/test_requests.py::TestCaseInsensitiveDict::test_lower_items PASSED [ 47%] tests/test_requests.py::TestCaseInsensitiveDict::test_preserve_key_case PASSED [ 47%] tests/test_requests.py::TestCaseInsensitiveDict::test_preserve_last_key_case PASSED [ 47%] tests/test_requests.py::TestCaseInsensitiveDict::test_copy PASSED [ 47%] tests/test_requests.py::TestMorselToCookieExpires::test_expires_valid_str PASSED [ 47%] tests/test_requests.py::TestMorselToCookieExpires::test_expires_invalid_int[100-TypeError] PASSED [ 48%] tests/test_requests.py::TestMorselToCookieExpires::test_expires_invalid_int[woops-ValueError] PASSED [ 48%] tests/test_requests.py::TestMorselToCookieExpires::test_expires_none PASSED [ 48%] tests/test_requests.py::TestMorselToCookieMaxAge::test_max_age_valid_int PASSED [ 48%] tests/test_requests.py::TestMorselToCookieMaxAge::test_max_age_invalid_str PASSED [ 48%] tests/test_requests.py::TestTimeout::test_stream_timeout PASSED [ 48%] tests/test_requests.py::TestTimeout::test_invalid_timeout[timeout0-(connect, read)] PASSED [ 49%] tests/test_requests.py::TestTimeout::test_invalid_timeout[foo-must be an int, float or None] PASSED [ 49%] tests/test_requests.py::TestTimeout::test_none_timeout[None] PASSED [ 49%] tests/test_requests.py::TestTimeout::test_none_timeout[timeout1] PASSED [ 49%] tests/test_requests.py::TestTimeout::test_read_timeout[timeout0] PASSED [ 49%] tests/test_requests.py::TestTimeout::test_read_timeout[timeout1] PASSED [ 49%] tests/test_requests.py::TestTimeout::test_connect_timeout[timeout0] FAILED [ 50%] tests/test_requests.py::TestTimeout::test_connect_timeout[timeout1] FAILED [ 50%] tests/test_requests.py::TestTimeout::test_total_timeout_connect[timeout0] FAILED [ 50%] tests/test_requests.py::TestTimeout::test_total_timeout_connect[timeout1] FAILED [ 50%] tests/test_requests.py::TestTimeout::test_encoded_methods PASSED [ 50%] tests/test_requests.py::test_json_encodes_as_bytes PASSED [ 50%] tests/test_requests.py::test_requests_are_updated_each_time PASSED [ 50%] tests/test_requests.py::test_proxy_env_vars_override_default[http_proxy-http://example.com-socks5://proxy.com:9876] PASSED [ 51%] tests/test_requests.py::test_proxy_env_vars_override_default[https_proxy-https://example.com-socks5://proxy.com:9876] PASSED [ 51%] tests/test_requests.py::test_proxy_env_vars_override_default[all_proxy-http://example.com-socks5://proxy.com:9876] PASSED [ 51%] tests/test_requests.py::test_proxy_env_vars_override_default[all_proxy-https://example.com-socks5://proxy.com:9876] PASSED [ 51%] tests/test_requests.py::test_data_argument_accepts_tuples[data0] PASSED [ 51%] tests/test_requests.py::test_data_argument_accepts_tuples[data1] PASSED [ 51%] tests/test_requests.py::test_data_argument_accepts_tuples[data2] PASSED [ 52%] tests/test_requests.py::test_prepared_copy[None] PASSED [ 52%] tests/test_requests.py::test_prepared_copy[kwargs1] PASSED [ 52%] tests/test_requests.py::test_prepared_copy[kwargs2] PASSED [ 52%] tests/test_requests.py::test_prepared_copy[kwargs3] PASSED [ 52%] tests/test_requests.py::test_urllib3_retries PASSED [ 52%] tests/test_requests.py::test_urllib3_pool_connection_closed PASSED [ 53%] tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://google.com-http://google.com/] PASSED [ 53%] tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://\u30b8\u30a7\u30fc\u30d4\u30fc\u30cb\u30c3\u30af.jp-http://xn--hckqz9bzb1cyrb.jp/] PASSED [ 53%] tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://xn--n3h.net/-http://xn--n3h.net/0] PASSED [ 53%] tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://\xe3\x82\xb8\xe3\x82\xa7\xe3\x83\xbc\xe3\x83\x94\xe3\x83\xbc\xe3\x83\x8b\xe3\x83\x83\xe3\x82\xaf.jp-http://xn--hckqz9bzb1cyrb.jp/] PASSED [ 53%] tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://stra\xdfe.de/stra\xdfe-http://xn--strae-oqa.de/stra%C3%9Fe] PASSED [ 53%] tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://stra\xc3\x9fe.de/stra\xc3\x9fe-http://xn--strae-oqa.de/stra%C3%9Fe] PASSED [ 54%] tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://K\xf6nigsg\xe4\xdfchen.de/stra\xdfe-http://xn--knigsgchen-b4a3dun.de/stra%C3%9Fe] PASSED [ 54%] tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://K\xc3\xb6nigsg\xc3\xa4\xc3\x9fchen.de/stra\xc3\x9fe-http://xn--knigsgchen-b4a3dun.de/stra%C3%9Fe] PASSED [ 54%] tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://xn--n3h.net/-http://xn--n3h.net/1] PASSED [ 54%] tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://[1200:0000:ab00:1234:0000:2552:7777:1313]:12345/-http://[1200:0000:ab00:1234:0000:2552:7777:1313]:12345/0] PASSED [ 54%] tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://[1200:0000:ab00:1234:0000:2552:7777:1313]:12345/-http://[1200:0000:ab00:1234:0000:2552:7777:1313]:12345/1] PASSED [ 54%] tests/test_requests.py::TestPreparingURLs::test_preparing_bad_url[http://*.google.com0] PASSED [ 55%] tests/test_requests.py::TestPreparingURLs::test_preparing_bad_url[http://*0] PASSED [ 55%] tests/test_requests.py::TestPreparingURLs::test_preparing_bad_url[http://*.google.com1] PASSED [ 55%] tests/test_requests.py::TestPreparingURLs::test_preparing_bad_url[http://*1] PASSED [ 55%] tests/test_requests.py::TestPreparingURLs::test_preparing_bad_url[http://\u2603.net/] PASSED [ 55%] tests/test_requests.py::TestPreparingURLs::test_redirecting_to_bad_url[http://:1-InvalidURL] PASSED [ 55%] tests/test_requests.py::TestPreparingURLs::test_url_mutation[http+unix://%2Fvar%2Frun%2Fsocket/path%7E-http+unix://%2Fvar%2Frun%2Fsocket/path~0] PASSED [ 56%] tests/test_requests.py::TestPreparingURLs::test_url_mutation[http+unix://%2Fvar%2Frun%2Fsocket/path%7E-http+unix://%2Fvar%2Frun%2Fsocket/path~1] PASSED [ 56%] tests/test_requests.py::TestPreparingURLs::test_url_mutation[mailto:user@example.org-mailto:user@example.org0] PASSED [ 56%] tests/test_requests.py::TestPreparingURLs::test_url_mutation[mailto:user@example.org-mailto:user@example.org1] PASSED [ 56%] tests/test_requests.py::TestPreparingURLs::test_url_mutation[data:SSDimaUgUHl0aG9uIQ==-data:SSDimaUgUHl0aG9uIQ==] PASSED [ 56%] tests/test_requests.py::TestPreparingURLs::test_parameters_for_nonstandard_schemes[http+unix://%2Fvar%2Frun%2Fsocket/path-params0-http+unix://%2Fvar%2Frun%2Fsocket/path?key=value] PASSED [ 56%] tests/test_requests.py::TestPreparingURLs::test_parameters_for_nonstandard_schemes[http+unix://%2Fvar%2Frun%2Fsocket/path-params1-http+unix://%2Fvar%2Frun%2Fsocket/path?key=value] PASSED [ 57%] tests/test_requests.py::TestPreparingURLs::test_parameters_for_nonstandard_schemes[mailto:user@example.org-params2-mailto:user@example.org] PASSED [ 57%] tests/test_requests.py::TestPreparingURLs::test_parameters_for_nonstandard_schemes[mailto:user@example.org-params3-mailto:user@example.org] PASSED [ 57%] tests/test_requests.py::TestPreparingURLs::test_post_json_nan PASSED [ 57%] tests/test_requests.py::TestPreparingURLs::test_json_decode_compatibility PASSED [ 57%] tests/test_requests.py::TestPreparingURLs::test_json_decode_persists_doc_attr PASSED [ 57%] tests/test_requests.py::TestPreparingURLs::test_status_code_425 PASSED [ 58%] tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_True PASSED [ 58%] tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_bundle_expired_cert PASSED [ 58%] tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_bundle_unexpired_cert PASSED [ 58%] tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_mtls_settings PASSED [ 58%] tests/test_requests.py::test_content_length_for_bytes_data PASSED [ 58%] tests/test_requests.py::test_content_length_for_string_data_counts_bytes PASSED [ 59%] tests/test_requests.py::test_json_decode_errors_are_serializable_deserializable PASSED [ 59%] tests/test_structures.py::TestCaseInsensitiveDict::test_list PASSED [ 59%] tests/test_structures.py::TestCaseInsensitiveDict::test_getitem[accept] PASSED [ 59%] tests/test_structures.py::TestCaseInsensitiveDict::test_getitem[ACCEPT] PASSED [ 59%] tests/test_structures.py::TestCaseInsensitiveDict::test_getitem[aCcEpT] PASSED [ 59%] tests/test_structures.py::TestCaseInsensitiveDict::test_getitem[Accept] PASSED [ 60%] tests/test_structures.py::TestCaseInsensitiveDict::test_delitem[accept] PASSED [ 60%] tests/test_structures.py::TestCaseInsensitiveDict::test_delitem[ACCEPT] PASSED [ 60%] tests/test_structures.py::TestCaseInsensitiveDict::test_delitem[aCcEpT] PASSED [ 60%] tests/test_structures.py::TestCaseInsensitiveDict::test_delitem[Accept] PASSED [ 60%] tests/test_structures.py::TestCaseInsensitiveDict::test_lower_items PASSED [ 60%] tests/test_structures.py::TestCaseInsensitiveDict::test_repr PASSED [ 60%] tests/test_structures.py::TestCaseInsensitiveDict::test_copy PASSED [ 61%] tests/test_structures.py::TestCaseInsensitiveDict::test_instance_equality[other0-True] PASSED [ 61%] tests/test_structures.py::TestCaseInsensitiveDict::test_instance_equality[other1-False] PASSED [ 61%] tests/test_structures.py::TestCaseInsensitiveDict::test_instance_equality[None-False] PASSED [ 61%] tests/test_structures.py::TestLookupDict::test_repr PASSED [ 61%] tests/test_structures.py::TestLookupDict::test_getitem[bad_gateway-502] PASSED [ 61%] tests/test_structures.py::TestLookupDict::test_getitem[not_a_key-None] PASSED [ 62%] tests/test_structures.py::TestLookupDict::test_get[bad_gateway-502] PASSED [ 62%] tests/test_structures.py::TestLookupDict::test_get[not_a_key-None] PASSED [ 62%] tests/test_testserver.py::TestTestServer::test_basic PASSED [ 62%] tests/test_testserver.py::TestTestServer::test_server_closes PASSED [ 62%] tests/test_testserver.py::TestTestServer::test_text_response PASSED [ 62%] tests/test_testserver.py::TestTestServer::test_basic_response PASSED [ 63%] tests/test_testserver.py::TestTestServer::test_basic_waiting_server PASSED [ 63%] tests/test_testserver.py::TestTestServer::test_multiple_requests PASSED [ 63%] tests/test_testserver.py::TestTestServer::test_request_recovery SKIPPED [ 63%] tests/test_testserver.py::TestTestServer::test_requests_after_timeout_are_not_received PASSED [ 63%] tests/test_testserver.py::TestTestServer::test_request_recovery_with_bigger_timeout PASSED [ 63%] tests/test_testserver.py::TestTestServer::test_server_finishes_on_error PASSED [ 64%] tests/test_testserver.py::TestTestServer::test_server_finishes_when_no_connections PASSED [ 64%] tests/test_utils.py::TestSuperLen::test_io_streams[StringIO-Test] PASSED [ 64%] tests/test_utils.py::TestSuperLen::test_io_streams[BytesIO-Test] PASSED [ 64%] tests/test_utils.py::TestSuperLen::test_io_streams[None-Test] SKIPPED [ 64%] tests/test_utils.py::TestSuperLen::test_super_len_correctly_calculates_len_of_partially_read_file PASSED [ 64%] tests/test_utils.py::TestSuperLen::test_super_len_handles_files_raising_weird_errors_in_tell[OSError0] PASSED [ 65%] tests/test_utils.py::TestSuperLen::test_super_len_handles_files_raising_weird_errors_in_tell[OSError1] PASSED [ 65%] tests/test_utils.py::TestSuperLen::test_super_len_tell_ioerror[OSError0] PASSED [ 65%] tests/test_utils.py::TestSuperLen::test_super_len_tell_ioerror[OSError1] PASSED [ 65%] tests/test_utils.py::TestSuperLen::test_string PASSED [ 65%] tests/test_utils.py::TestSuperLen::test_file[r-1] PASSED [ 65%] tests/test_utils.py::TestSuperLen::test_file[rb-0] PASSED [ 66%] tests/test_utils.py::TestSuperLen::test_tarfile_member PASSED [ 66%] tests/test_utils.py::TestSuperLen::test_super_len_with__len__ PASSED [ 66%] tests/test_utils.py::TestSuperLen::test_super_len_with_no__len__ PASSED [ 66%] tests/test_utils.py::TestSuperLen::test_super_len_with_tell PASSED [ 66%] tests/test_utils.py::TestSuperLen::test_super_len_with_fileno PASSED [ 66%] tests/test_utils.py::TestSuperLen::test_super_len_with_no_matches PASSED [ 67%] tests/test_utils.py::TestGetNetrcAuth::test_works PASSED [ 67%] tests/test_utils.py::TestGetNetrcAuth::test_not_vulnerable_to_bad_url_parsing PASSED [ 67%] tests/test_utils.py::TestToKeyValList::test_valid[value0-expected0] PASSED [ 67%] tests/test_utils.py::TestToKeyValList::test_valid[value1-expected1] PASSED [ 67%] tests/test_utils.py::TestToKeyValList::test_valid[value2-expected2] PASSED [ 67%] tests/test_utils.py::TestToKeyValList::test_valid[None-None] PASSED [ 68%] tests/test_utils.py::TestToKeyValList::test_invalid PASSED [ 68%] tests/test_utils.py::TestUnquoteHeaderValue::test_valid[None-None] PASSED [ 68%] tests/test_utils.py::TestUnquoteHeaderValue::test_valid[Test-Test] PASSED [ 68%] tests/test_utils.py::TestUnquoteHeaderValue::test_valid["Test"-Test] PASSED [ 68%] tests/test_utils.py::TestUnquoteHeaderValue::test_valid["Test\\\\"-Test\\] PASSED [ 68%] tests/test_utils.py::TestUnquoteHeaderValue::test_valid["\\\\Comp\\Res"-\\Comp\\Res] PASSED [ 69%] tests/test_utils.py::TestUnquoteHeaderValue::test_is_filename PASSED [ 69%] tests/test_utils.py::TestGetEnvironProxies::test_bypass[no_proxy-http://192.168.0.1:5000/] PASSED [ 69%] tests/test_utils.py::TestGetEnvironProxies::test_bypass[no_proxy-http://192.168.0.1/] PASSED [ 69%] tests/test_utils.py::TestGetEnvironProxies::test_bypass[no_proxy-http://172.16.1.1/] PASSED [ 69%] tests/test_utils.py::TestGetEnvironProxies::test_bypass[no_proxy-http://172.16.1.1:5000/] PASSED [ 69%] tests/test_utils.py::TestGetEnvironProxies::test_bypass[no_proxy-http://localhost.localdomain:5000/v1.0/] PASSED [ 70%] tests/test_utils.py::TestGetEnvironProxies::test_bypass[NO_PROXY-http://192.168.0.1:5000/] PASSED [ 70%] tests/test_utils.py::TestGetEnvironProxies::test_bypass[NO_PROXY-http://192.168.0.1/] PASSED [ 70%] tests/test_utils.py::TestGetEnvironProxies::test_bypass[NO_PROXY-http://172.16.1.1/] PASSED [ 70%] tests/test_utils.py::TestGetEnvironProxies::test_bypass[NO_PROXY-http://172.16.1.1:5000/] PASSED [ 70%] tests/test_utils.py::TestGetEnvironProxies::test_bypass[NO_PROXY-http://localhost.localdomain:5000/v1.0/] PASSED [ 70%] tests/test_utils.py::TestGetEnvironProxies::test_not_bypass[no_proxy-http://192.168.1.1:5000/] PASSED [ 70%] tests/test_utils.py::TestGetEnvironProxies::test_not_bypass[no_proxy-http://192.168.1.1/] PASSED [ 71%] tests/test_utils.py::TestGetEnvironProxies::test_not_bypass[no_proxy-http://www.requests.com/] PASSED [ 71%] tests/test_utils.py::TestGetEnvironProxies::test_not_bypass[NO_PROXY-http://192.168.1.1:5000/] PASSED [ 71%] tests/test_utils.py::TestGetEnvironProxies::test_not_bypass[NO_PROXY-http://192.168.1.1/] PASSED [ 71%] tests/test_utils.py::TestGetEnvironProxies::test_not_bypass[NO_PROXY-http://www.requests.com/] PASSED [ 71%] tests/test_utils.py::TestGetEnvironProxies::test_bypass_no_proxy_keyword[no_proxy-http://192.168.1.1:5000/] PASSED [ 71%] tests/test_utils.py::TestGetEnvironProxies::test_bypass_no_proxy_keyword[no_proxy-http://192.168.1.1/] PASSED [ 72%] tests/test_utils.py::TestGetEnvironProxies::test_bypass_no_proxy_keyword[no_proxy-http://www.requests.com/] PASSED [ 72%] tests/test_utils.py::TestGetEnvironProxies::test_bypass_no_proxy_keyword[NO_PROXY-http://192.168.1.1:5000/] PASSED [ 72%] tests/test_utils.py::TestGetEnvironProxies::test_bypass_no_proxy_keyword[NO_PROXY-http://192.168.1.1/] PASSED [ 72%] tests/test_utils.py::TestGetEnvironProxies::test_bypass_no_proxy_keyword[NO_PROXY-http://www.requests.com/] PASSED [ 72%] tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[no_proxy-http://192.168.0.1:5000/] PASSED [ 72%] tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[no_proxy-http://192.168.0.1/] PASSED [ 73%] tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[no_proxy-http://172.16.1.1/] PASSED [ 73%] tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[no_proxy-http://172.16.1.1:5000/] PASSED [ 73%] tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[no_proxy-http://localhost.localdomain:5000/v1.0/] PASSED [ 73%] tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[NO_PROXY-http://192.168.0.1:5000/] PASSED [ 73%] tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[NO_PROXY-http://192.168.0.1/] PASSED [ 73%] tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[NO_PROXY-http://172.16.1.1/] PASSED [ 74%] tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[NO_PROXY-http://172.16.1.1:5000/] PASSED [ 74%] tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[NO_PROXY-http://localhost.localdomain:5000/v1.0/] PASSED [ 74%] tests/test_utils.py::TestIsIPv4Address::test_valid PASSED [ 74%] tests/test_utils.py::TestIsIPv4Address::test_invalid[8.8.8.8.8] PASSED [ 74%] tests/test_utils.py::TestIsIPv4Address::test_invalid[localhost.localdomain] PASSED [ 74%] tests/test_utils.py::TestIsValidCIDR::test_valid PASSED [ 75%] tests/test_utils.py::TestIsValidCIDR::test_invalid[8.8.8.8] PASSED [ 75%] tests/test_utils.py::TestIsValidCIDR::test_invalid[192.168.1.0/a] PASSED [ 75%] tests/test_utils.py::TestIsValidCIDR::test_invalid[192.168.1.0/128] PASSED [ 75%] tests/test_utils.py::TestIsValidCIDR::test_invalid[192.168.1.0/-1] PASSED [ 75%] tests/test_utils.py::TestIsValidCIDR::test_invalid[192.168.1.999/24] PASSED [ 75%] tests/test_utils.py::TestAddressInNetwork::test_valid PASSED [ 76%] tests/test_utils.py::TestAddressInNetwork::test_invalid PASSED [ 76%] tests/test_utils.py::TestGuessFilename::test_guess_filename_invalid[1] PASSED [ 76%] tests/test_utils.py::TestGuessFilename::test_guess_filename_invalid[value1] PASSED [ 76%] tests/test_utils.py::TestGuessFilename::test_guess_filename_valid[value-bytes] PASSED [ 76%] tests/test_utils.py::TestGuessFilename::test_guess_filename_valid[value-str] PASSED [ 76%] tests/test_utils.py::TestExtractZippedPaths::test_unzipped_paths_unchanged[/] PASSED [ 77%] tests/test_utils.py::TestExtractZippedPaths::test_unzipped_paths_unchanged[/build/python-requests/src/requests/tests/test_utils.py] PASSED [ 77%] tests/test_utils.py::TestExtractZippedPaths::test_unzipped_paths_unchanged[/usr/lib/python3.13/site-packages/pytest/__init__.py] PASSED [ 77%] tests/test_utils.py::TestExtractZippedPaths::test_unzipped_paths_unchanged[/etc/invalid/location] PASSED [ 77%] tests/test_utils.py::TestExtractZippedPaths::test_zipped_paths_extracted PASSED [ 77%] tests/test_utils.py::TestExtractZippedPaths::test_invalid_unc_path PASSED [ 77%] tests/test_utils.py::TestContentEncodingDetection::test_none PASSED [ 78%] tests/test_utils.py::TestContentEncodingDetection::test_pragmas[] PASSED [ 78%] tests/test_utils.py::TestContentEncodingDetection::test_pragmas[] PASSED [ 78%] tests/test_utils.py::TestContentEncodingDetection::test_pragmas[] PASSED [ 78%] tests/test_utils.py::TestContentEncodingDetection::test_pragmas[] PASSED [ 78%] tests/test_utils.py::TestContentEncodingDetection::test_precedence PASSED [ 78%] tests/test_utils.py::TestGuessJSONUTF::test_encoded[utf-32] PASSED [ 79%] tests/test_utils.py::TestGuessJSONUTF::test_encoded[utf-8-sig] PASSED [ 79%] tests/test_utils.py::TestGuessJSONUTF::test_encoded[utf-16] PASSED [ 79%] tests/test_utils.py::TestGuessJSONUTF::test_encoded[utf-8] PASSED [ 79%] tests/test_utils.py::TestGuessJSONUTF::test_encoded[utf-16-be] PASSED [ 79%] tests/test_utils.py::TestGuessJSONUTF::test_encoded[utf-16-le] PASSED [ 79%] tests/test_utils.py::TestGuessJSONUTF::test_encoded[utf-32-be] PASSED [ 80%] tests/test_utils.py::TestGuessJSONUTF::test_encoded[utf-32-le] PASSED [ 80%] tests/test_utils.py::TestGuessJSONUTF::test_bad_utf_like_encoding PASSED [ 80%] tests/test_utils.py::TestGuessJSONUTF::test_guess_by_bom[utf-16-be-utf-16] PASSED [ 80%] tests/test_utils.py::TestGuessJSONUTF::test_guess_by_bom[utf-16-le-utf-16] PASSED [ 80%] tests/test_utils.py::TestGuessJSONUTF::test_guess_by_bom[utf-32-be-utf-32] PASSED [ 80%] tests/test_utils.py::TestGuessJSONUTF::test_guess_by_bom[utf-32-le-utf-32] PASSED [ 80%] tests/test_utils.py::test_get_auth_from_url[http://%25%21%2A%27%28%29%3B%3A%40%26%3D%2B%24%2C%2F%3F%23%5B%5D%20:%25%21%2A%27%28%29%3B%3A%40%26%3D%2B%24%2C%2F%3F%23%5B%5D%20@request.com/url.html#test-auth0] PASSED [ 81%] tests/test_utils.py::test_get_auth_from_url[http://user:pass@complex.url.com/path?query=yes-auth1] PASSED [ 81%] tests/test_utils.py::test_get_auth_from_url[http://user:pass%20pass@complex.url.com/path?query=yes-auth2] PASSED [ 81%] tests/test_utils.py::test_get_auth_from_url[http://user:pass pass@complex.url.com/path?query=yes-auth3] PASSED [ 81%] tests/test_utils.py::test_get_auth_from_url[http://user%25user:pass@complex.url.com/path?query=yes-auth4] PASSED [ 81%] tests/test_utils.py::test_get_auth_from_url[http://user:pass%23pass@complex.url.com/path?query=yes-auth5] PASSED [ 81%] tests/test_utils.py::test_get_auth_from_url[http://complex.url.com/path?query=yes-auth6] PASSED [ 82%] tests/test_utils.py::test_requote_uri_with_unquoted_percents[http://example.com/fiz?buz=%25ppicture-http://example.com/fiz?buz=%25ppicture] PASSED [ 82%] tests/test_utils.py::test_requote_uri_with_unquoted_percents[http://example.com/fiz?buz=%ppicture-http://example.com/fiz?buz=%25ppicture] PASSED [ 82%] tests/test_utils.py::test_unquote_unreserved[http://example.com/?a=%---http://example.com/?a=%--] PASSED [ 82%] tests/test_utils.py::test_unquote_unreserved[http://example.com/?a=%300-http://example.com/?a=00] PASSED [ 82%] tests/test_utils.py::test_dotted_netmask[8-255.0.0.0] PASSED [ 82%] tests/test_utils.py::test_dotted_netmask[24-255.255.255.0] PASSED [ 83%] tests/test_utils.py::test_dotted_netmask[25-255.255.255.128] PASSED [ 83%] tests/test_utils.py::test_select_proxies[hTTp://u:p@Some.Host/path-http://some.host.proxy-proxies0] PASSED [ 83%] tests/test_utils.py::test_select_proxies[hTTp://u:p@Other.Host/path-http://http.proxy-proxies1] PASSED [ 83%] tests/test_utils.py::test_select_proxies[hTTp:///path-http://http.proxy-proxies2] PASSED [ 83%] tests/test_utils.py::test_select_proxies[hTTps://Other.Host-None-proxies3] PASSED [ 83%] tests/test_utils.py::test_select_proxies[file:///etc/motd-None-proxies4] PASSED [ 84%] tests/test_utils.py::test_select_proxies[hTTp://u:p@Some.Host/path-socks5://some.host.proxy-proxies5] PASSED [ 84%] tests/test_utils.py::test_select_proxies[hTTp://u:p@Other.Host/path-socks5://http.proxy-proxies6] PASSED [ 84%] tests/test_utils.py::test_select_proxies[hTTp:///path-socks5://http.proxy-proxies7] PASSED [ 84%] tests/test_utils.py::test_select_proxies[hTTps://Other.Host-socks5://http.proxy-proxies8] PASSED [ 84%] tests/test_utils.py::test_select_proxies[http://u:p@other.host/path-http://http.proxy-proxies9] PASSED [ 84%] tests/test_utils.py::test_select_proxies[http://u:p@some.host/path-http://some.host.proxy-proxies10] PASSED [ 85%] tests/test_utils.py::test_select_proxies[https://u:p@other.host/path-socks5://http.proxy-proxies11] PASSED [ 85%] tests/test_utils.py::test_select_proxies[https://u:p@some.host/path-socks5://http.proxy-proxies12] PASSED [ 85%] tests/test_utils.py::test_select_proxies[https://-socks5://http.proxy-proxies13] PASSED [ 85%] tests/test_utils.py::test_select_proxies[file:///etc/motd-socks5://http.proxy-proxies14] PASSED [ 85%] tests/test_utils.py::test_parse_dict_header[foo="is a fish", bar="as well"-expected0] PASSED [ 85%] tests/test_utils.py::test_parse_dict_header[key_without_value-expected1] PASSED [ 86%] tests/test_utils.py::test__parse_content_type_header[application/xml-expected0] PASSED [ 86%] tests/test_utils.py::test__parse_content_type_header[application/json ; charset=utf-8-expected1] PASSED [ 86%] tests/test_utils.py::test__parse_content_type_header[application/json ; Charset=utf-8-expected2] PASSED [ 86%] tests/test_utils.py::test__parse_content_type_header[text/plain-expected3] PASSED [ 86%] tests/test_utils.py::test__parse_content_type_header[multipart/form-data; boundary = something ; boundary2='something_else' ; no_equals -expected4] PASSED [ 86%] tests/test_utils.py::test__parse_content_type_header[multipart/form-data; boundary = something ; boundary2="something_else" ; no_equals -expected5] PASSED [ 87%] tests/test_utils.py::test__parse_content_type_header[multipart/form-data; boundary = something ; 'boundary2=something_else' ; no_equals -expected6] PASSED [ 87%] tests/test_utils.py::test__parse_content_type_header[multipart/form-data; boundary = something ; "boundary2=something_else" ; no_equals -expected7] PASSED [ 87%] tests/test_utils.py::test__parse_content_type_header[application/json ; ; -expected8] PASSED [ 87%] tests/test_utils.py::test_get_encoding_from_headers[value0-None] PASSED [ 87%] tests/test_utils.py::test_get_encoding_from_headers[value1-utf-8] PASSED [ 87%] tests/test_utils.py::test_get_encoding_from_headers[value2-ISO-8859-1] PASSED [ 88%] tests/test_utils.py::test_iter_slices[-0] PASSED [ 88%] tests/test_utils.py::test_iter_slices[T-1] PASSED [ 88%] tests/test_utils.py::test_iter_slices[Test-4] PASSED [ 88%] tests/test_utils.py::test_iter_slices[Cont-0] PASSED [ 88%] tests/test_utils.py::test_iter_slices[Other--5] PASSED [ 88%] tests/test_utils.py::test_iter_slices[Content-None] PASSED [ 89%] tests/test_utils.py::test_parse_header_links[; rel=front; type="image/jpeg"-expected0] PASSED [ 89%] tests/test_utils.py::test_parse_header_links[-expected1] PASSED [ 89%] tests/test_utils.py::test_parse_header_links[;-expected2] PASSED [ 89%] tests/test_utils.py::test_parse_header_links[; type="image/jpeg",;-expected3] PASSED [ 89%] tests/test_utils.py::test_parse_header_links[-expected4] PASSED [ 89%] tests/test_utils.py::test_prepend_scheme_if_needed[example.com/path-http://example.com/path] PASSED [ 90%] tests/test_utils.py::test_prepend_scheme_if_needed[//example.com/path-http://example.com/path] PASSED [ 90%] tests/test_utils.py::test_prepend_scheme_if_needed[example.com:80-http://example.com:80] PASSED [ 90%] tests/test_utils.py::test_prepend_scheme_if_needed[http://user:pass@example.com/path?query-http://user:pass@example.com/path?query] PASSED [ 90%] tests/test_utils.py::test_prepend_scheme_if_needed[http://user@example.com/path?query-http://user@example.com/path?query] PASSED [ 90%] tests/test_utils.py::test_to_native_string[T-T0] PASSED [ 90%] tests/test_utils.py::test_to_native_string[T-T1] PASSED [ 90%] tests/test_utils.py::test_to_native_string[T-T2] PASSED [ 91%] tests/test_utils.py::test_urldefragauth[http://u:p@example.com/path?a=1#test-http://example.com/path?a=1] PASSED [ 91%] tests/test_utils.py::test_urldefragauth[http://example.com/path-http://example.com/path] PASSED [ 91%] tests/test_utils.py::test_urldefragauth[//u:p@example.com/path-//example.com/path] PASSED [ 91%] tests/test_utils.py::test_urldefragauth[//example.com/path-//example.com/path] PASSED [ 91%] tests/test_utils.py::test_urldefragauth[example.com/path-//example.com/path] PASSED [ 91%] tests/test_utils.py::test_urldefragauth[scheme:u:p@example.com/path-scheme://example.com/path] PASSED [ 92%] tests/test_utils.py::test_should_bypass_proxies[http://192.168.0.1:5000/-True] PASSED [ 92%] tests/test_utils.py::test_should_bypass_proxies[http://192.168.0.1/-True] PASSED [ 92%] tests/test_utils.py::test_should_bypass_proxies[http://172.16.1.1/-True] PASSED [ 92%] tests/test_utils.py::test_should_bypass_proxies[http://172.16.1.1:5000/-True] PASSED [ 92%] tests/test_utils.py::test_should_bypass_proxies[http://localhost.localdomain:5000/v1.0/-True] PASSED [ 92%] tests/test_utils.py::test_should_bypass_proxies[http://google.com:6000/-True] PASSED [ 93%] tests/test_utils.py::test_should_bypass_proxies[http://172.16.1.12/-False] PASSED [ 93%] tests/test_utils.py::test_should_bypass_proxies[http://172.16.1.12:5000/-False] PASSED [ 93%] tests/test_utils.py::test_should_bypass_proxies[http://google.com:5000/v1.0/-False] PASSED [ 93%] tests/test_utils.py::test_should_bypass_proxies[file:///some/path/on/disk-True] PASSED [ 93%] tests/test_utils.py::test_should_bypass_proxies_pass_only_hostname[http://172.16.1.1/-172.16.1.1] PASSED [ 93%] tests/test_utils.py::test_should_bypass_proxies_pass_only_hostname[http://172.16.1.1:5000/-172.16.1.1] PASSED [ 94%] tests/test_utils.py::test_should_bypass_proxies_pass_only_hostname[http://user:pass@172.16.1.1-172.16.1.1] PASSED [ 94%] tests/test_utils.py::test_should_bypass_proxies_pass_only_hostname[http://user:pass@172.16.1.1:5000-172.16.1.1] PASSED [ 94%] tests/test_utils.py::test_should_bypass_proxies_pass_only_hostname[http://hostname/-hostname] PASSED [ 94%] tests/test_utils.py::test_should_bypass_proxies_pass_only_hostname[http://hostname:5000/-hostname] PASSED [ 94%] tests/test_utils.py::test_should_bypass_proxies_pass_only_hostname[http://user:pass@hostname-hostname] PASSED [ 94%] tests/test_utils.py::test_should_bypass_proxies_pass_only_hostname[http://user:pass@hostname:5000-hostname] PASSED [ 95%] tests/test_utils.py::test_add_dict_to_cookiejar[cookiejar0] PASSED [ 95%] tests/test_utils.py::test_add_dict_to_cookiejar[cookiejar1] PASSED [ 95%] tests/test_utils.py::test_unicode_is_ascii[test-True] PASSED [ 95%] tests/test_utils.py::test_unicode_is_ascii[\xe6\xed\xf6\xfb-False] PASSED [ 95%] tests/test_utils.py::test_unicode_is_ascii[\u30b8\u30a7\u30fc\u30d4\u30fc\u30cb\u30c3\u30af-False] PASSED [ 95%] tests/test_utils.py::test_should_bypass_proxies_no_proxy[http://192.168.0.1:5000/-True] PASSED [ 96%] tests/test_utils.py::test_should_bypass_proxies_no_proxy[http://192.168.0.1/-True] PASSED [ 96%] tests/test_utils.py::test_should_bypass_proxies_no_proxy[http://172.16.1.1/-True] PASSED [ 96%] tests/test_utils.py::test_should_bypass_proxies_no_proxy[http://172.16.1.1:5000/-True] PASSED [ 96%] tests/test_utils.py::test_should_bypass_proxies_no_proxy[http://localhost.localdomain:5000/v1.0/-True] PASSED [ 96%] tests/test_utils.py::test_should_bypass_proxies_no_proxy[http://172.16.1.12/-False] PASSED [ 96%] tests/test_utils.py::test_should_bypass_proxies_no_proxy[http://172.16.1.12:5000/-False] PASSED [ 97%] tests/test_utils.py::test_should_bypass_proxies_no_proxy[http://google.com:5000/v1.0/-False] PASSED [ 97%] tests/test_utils.py::test_should_bypass_proxies_win_registry[http://192.168.0.1:5000/-True-None] SKIPPED [ 97%] tests/test_utils.py::test_should_bypass_proxies_win_registry[http://192.168.0.1/-True-None] SKIPPED [ 97%] tests/test_utils.py::test_should_bypass_proxies_win_registry[http://172.16.1.1/-True-None] SKIPPED [ 97%] tests/test_utils.py::test_should_bypass_proxies_win_registry[http://172.16.1.1:5000/-True-None] SKIPPED [ 97%] tests/test_utils.py::test_should_bypass_proxies_win_registry[http://localhost.localdomain:5000/v1.0/-True-None] SKIPPED [ 98%] tests/test_utils.py::test_should_bypass_proxies_win_registry[http://172.16.1.22/-False-None] SKIPPED [ 98%] tests/test_utils.py::test_should_bypass_proxies_win_registry[http://172.16.1.22:5000/-False-None] SKIPPED [ 98%] tests/test_utils.py::test_should_bypass_proxies_win_registry[http://google.com:5000/v1.0/-False-None] SKIPPED [ 98%] tests/test_utils.py::test_should_bypass_proxies_win_registry[http://mylocalhostname:5000/v1.0/-True-] SKIPPED [ 98%] tests/test_utils.py::test_should_bypass_proxies_win_registry[http://192.168.0.1/-False-] SKIPPED [ 98%] tests/test_utils.py::test_should_bypass_proxies_win_registry_bad_values SKIPPED [ 99%] tests/test_utils.py::test_set_environ[no_proxy-192.168.0.0/24,127.0.0.1,localhost.localdomain] PASSED [ 99%] tests/test_utils.py::test_set_environ[no_proxy-None] PASSED [ 99%] tests/test_utils.py::test_set_environ[a_new_key-192.168.0.0/24,127.0.0.1,localhost.localdomain] PASSED [ 99%] tests/test_utils.py::test_set_environ[a_new_key-None] PASSED [ 99%] tests/test_utils.py::test_set_environ_raises_exception PASSED [ 99%] tests/test_utils.py::test_should_bypass_proxies_win_registry_ProxyOverride_value SKIPPED [100%] =================================== FAILURES =================================== __________________ TestTimeout.test_connect_timeout[timeout0] __________________ self = def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: > sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) /usr/lib/python3.13/site-packages/urllib3/connection.py:198: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/site-packages/urllib3/util/connection.py:85: in create_connection raise err _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ address = ('10.255.255.1', 80), timeout = 0.1, source_address = None socket_options = [(6, 1, 1)] def create_connection( address: tuple[str, int], timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, source_address: tuple[str, int] | None = None, socket_options: _TYPE_SOCKET_OPTIONS | None = None, ) -> socket.socket: """Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, port)``) and return the socket object. Passing the optional *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`socket.getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. An host of '' or port 0 tells the OS to use the default. """ host, port = address if host.startswith("["): host = host.strip("[]") err = None # Using the value from allowed_gai_family() in the context of getaddrinfo lets # us select whether to work with IPv4 DNS records, IPv6 records, or both. # The original create_connection function always returns all records. family = allowed_gai_family() try: host.encode("idna") except UnicodeError: raise LocationParseError(f"'{host}', label empty or too long") from None for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None try: sock = socket.socket(af, socktype, proto) # If provided, set socket level options before connecting. _set_socket_options(sock, socket_options) if timeout is not _DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) > sock.connect(sa) E ConnectionRefusedError: [Errno 111] Connection refused /usr/lib/python3.13/site-packages/urllib3/util/connection.py:73: ConnectionRefusedError The above exception was the direct cause of the following exception: self = method = 'GET', url = '/', body = None headers = {'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive'} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=0.1, read=None, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None, preload_content = False decode_content = False, response_kw = {} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( # type: ignore[override] self, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | bool | int | None = None, redirect: bool = True, assert_same_host: bool = True, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, pool_timeout: int | None = None, release_conn: bool | None = None, chunked: bool = False, body_pos: _TYPE_BODY_POSITION | None = None, preload_content: bool = True, decode_content: bool = True, **response_kw: typing.Any, ) -> BaseHTTPResponse: """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param bool preload_content: If True, the response's body will be preloaded into memory. :param bool decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``preload_content`` which defaults to ``True``. :param bool chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = preload_content # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = to_str(_encode_target(url)) else: url = to_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() # type: ignore[attr-defined] headers.update(self.proxy_headers) # type: ignore[union-attr] # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] # Is this a closed/new connection that requires CONNECT tunnelling? if self.proxy is not None and http_tunnel_required and conn.is_closed: try: self._prepare_proxy(conn) except (BaseSSLError, OSError, SocketTimeout) as e: self._raise_timeout( err=e, url=self.proxy.url, timeout_value=conn.timeout ) raise # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Make the request on the HTTPConnection object > response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, retries=retries, response_conn=response_conn, preload_content=preload_content, decode_content=decode_content, **response_kw, ) /usr/lib/python3.13/site-packages/urllib3/connectionpool.py:787: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/site-packages/urllib3/connectionpool.py:493: in _make_request conn.request( /usr/lib/python3.13/site-packages/urllib3/connection.py:494: in request self.endheaders() /usr/lib/python3.13/http/client.py:1333: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib/python3.13/http/client.py:1093: in _send_output self.send(msg) /usr/lib/python3.13/http/client.py:1037: in send self.connect() /usr/lib/python3.13/site-packages/urllib3/connection.py:325: in connect self.sock = self._new_conn() ^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) except socket.gaierror as e: raise NameResolutionError(self.host, self, e) from e except SocketTimeout as e: raise ConnectTimeoutError( self, f"Connection to {self.host} timed out. (connect timeout={self.timeout})", ) from e except OSError as e: > raise NewConnectionError( self, f"Failed to establish a new connection: {e}" ) from e E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 111] Connection refused /usr/lib/python3.13/site-packages/urllib3/connection.py:213: NewConnectionError The above exception was the direct cause of the following exception: self = request = , stream = False timeout = Timeout(connect=0.1, read=None, total=None), verify = True cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: > resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) src/requests/adapters.py:644: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/site-packages/urllib3/connectionpool.py:841: in urlopen retries = retries.increment( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Retry(total=0, connect=None, read=False, redirect=None, status=None) method = 'GET', url = '/', response = None error = NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused') _pool = _stacktrace = def increment( self, method: str | None = None, url: str | None = None, response: BaseHTTPResponse | None = None, error: Exception | None = None, _pool: ConnectionPool | None = None, _stacktrace: TracebackType | None = None, ) -> Self: """Return a new Retry object with incremented retry counters. :param response: A response object, or None, if the server did not return a response. :type response: :class:`~urllib3.response.BaseHTTPResponse` :param Exception error: An error encountered during the request, or None if the response was received successfully. :return: A new ``Retry`` object. """ if self.total is False and error: # Disabled, indicate to re-raise the error. raise reraise(type(error), error, _stacktrace) total = self.total if total is not None: total -= 1 connect = self.connect read = self.read redirect = self.redirect status_count = self.status other = self.other cause = "unknown" status = None redirect_location = None if error and self._is_connection_error(error): # Connect retry? if connect is False: raise reraise(type(error), error, _stacktrace) elif connect is not None: connect -= 1 elif error and self._is_read_error(error): # Read retry? if read is False or method is None or not self._is_method_retryable(method): raise reraise(type(error), error, _stacktrace) elif read is not None: read -= 1 elif error: # Other retry? if other is not None: other -= 1 elif response and response.get_redirect_location(): # Redirect retry? if redirect is not None: redirect -= 1 cause = "too many redirects" response_redirect_location = response.get_redirect_location() if response_redirect_location: redirect_location = response_redirect_location status = response.status else: # Incrementing because of a server error like a 500 in # status_forcelist and the given method is in the allowed_methods cause = ResponseError.GENERIC_ERROR if response and response.status: if status_count is not None: status_count -= 1 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) status = response.status history = self.history + ( RequestHistory(method, url, error, status, redirect_location), ) new_retry = self.new( total=total, connect=connect, read=read, redirect=redirect, status=status_count, other=other, history=history, ) if new_retry.is_exhausted(): reason = error or ResponseError(cause) > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='10.255.255.1', port=80): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) /usr/lib/python3.13/site-packages/urllib3/util/retry.py:519: MaxRetryError During handling of the above exception, another exception occurred: self = timeout = (0.1, None) @pytest.mark.parametrize( "timeout", ((0.1, None), Urllib3Timeout(connect=0.1, read=None)) ) def test_connect_timeout(self, timeout): try: > requests.get(TARPIT, timeout=timeout) tests/test_requests.py:2530: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src/requests/api.py:73: in get return request("get", url, params=params, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ src/requests/api.py:59: in request return session.request(method=method, url=url, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ src/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ src/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = request = , stream = False timeout = Timeout(connect=0.1, read=None, total=None), verify = True cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) except (ProtocolError, OSError) as err: raise ConnectionError(err, request=request) except MaxRetryError as e: if isinstance(e.reason, ConnectTimeoutError): # TODO: Remove this in 3.0.0: see #2811 if not isinstance(e.reason, NewConnectionError): raise ConnectTimeout(e, request=request) if isinstance(e.reason, ResponseError): raise RetryError(e, request=request) if isinstance(e.reason, _ProxyError): raise ProxyError(e, request=request) if isinstance(e.reason, _SSLError): # This branch is for urllib3 v1.22 and later. raise SSLError(e, request=request) > raise ConnectionError(e, request=request) E requests.exceptions.ConnectionError: HTTPConnectionPool(host='10.255.255.1', port=80): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) src/requests/adapters.py:677: ConnectionError __________________ TestTimeout.test_connect_timeout[timeout1] __________________ self = def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: > sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) /usr/lib/python3.13/site-packages/urllib3/connection.py:198: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/site-packages/urllib3/util/connection.py:85: in create_connection raise err _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ address = ('10.255.255.1', 80), timeout = 0.1, source_address = None socket_options = [(6, 1, 1)] def create_connection( address: tuple[str, int], timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, source_address: tuple[str, int] | None = None, socket_options: _TYPE_SOCKET_OPTIONS | None = None, ) -> socket.socket: """Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, port)``) and return the socket object. Passing the optional *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`socket.getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. An host of '' or port 0 tells the OS to use the default. """ host, port = address if host.startswith("["): host = host.strip("[]") err = None # Using the value from allowed_gai_family() in the context of getaddrinfo lets # us select whether to work with IPv4 DNS records, IPv6 records, or both. # The original create_connection function always returns all records. family = allowed_gai_family() try: host.encode("idna") except UnicodeError: raise LocationParseError(f"'{host}', label empty or too long") from None for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None try: sock = socket.socket(af, socktype, proto) # If provided, set socket level options before connecting. _set_socket_options(sock, socket_options) if timeout is not _DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) > sock.connect(sa) E ConnectionRefusedError: [Errno 111] Connection refused /usr/lib/python3.13/site-packages/urllib3/util/connection.py:73: ConnectionRefusedError The above exception was the direct cause of the following exception: self = method = 'GET', url = '/', body = None headers = {'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive'} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=0.1, read=None, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None, preload_content = False decode_content = False, response_kw = {} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( # type: ignore[override] self, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | bool | int | None = None, redirect: bool = True, assert_same_host: bool = True, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, pool_timeout: int | None = None, release_conn: bool | None = None, chunked: bool = False, body_pos: _TYPE_BODY_POSITION | None = None, preload_content: bool = True, decode_content: bool = True, **response_kw: typing.Any, ) -> BaseHTTPResponse: """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param bool preload_content: If True, the response's body will be preloaded into memory. :param bool decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``preload_content`` which defaults to ``True``. :param bool chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = preload_content # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = to_str(_encode_target(url)) else: url = to_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() # type: ignore[attr-defined] headers.update(self.proxy_headers) # type: ignore[union-attr] # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] # Is this a closed/new connection that requires CONNECT tunnelling? if self.proxy is not None and http_tunnel_required and conn.is_closed: try: self._prepare_proxy(conn) except (BaseSSLError, OSError, SocketTimeout) as e: self._raise_timeout( err=e, url=self.proxy.url, timeout_value=conn.timeout ) raise # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Make the request on the HTTPConnection object > response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, retries=retries, response_conn=response_conn, preload_content=preload_content, decode_content=decode_content, **response_kw, ) /usr/lib/python3.13/site-packages/urllib3/connectionpool.py:787: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/site-packages/urllib3/connectionpool.py:493: in _make_request conn.request( /usr/lib/python3.13/site-packages/urllib3/connection.py:494: in request self.endheaders() /usr/lib/python3.13/http/client.py:1333: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib/python3.13/http/client.py:1093: in _send_output self.send(msg) /usr/lib/python3.13/http/client.py:1037: in send self.connect() /usr/lib/python3.13/site-packages/urllib3/connection.py:325: in connect self.sock = self._new_conn() ^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) except socket.gaierror as e: raise NameResolutionError(self.host, self, e) from e except SocketTimeout as e: raise ConnectTimeoutError( self, f"Connection to {self.host} timed out. (connect timeout={self.timeout})", ) from e except OSError as e: > raise NewConnectionError( self, f"Failed to establish a new connection: {e}" ) from e E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 111] Connection refused /usr/lib/python3.13/site-packages/urllib3/connection.py:213: NewConnectionError The above exception was the direct cause of the following exception: self = request = , stream = False timeout = Timeout(connect=0.1, read=None, total=None), verify = True cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: > resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) src/requests/adapters.py:644: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/site-packages/urllib3/connectionpool.py:841: in urlopen retries = retries.increment( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Retry(total=0, connect=None, read=False, redirect=None, status=None) method = 'GET', url = '/', response = None error = NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused') _pool = _stacktrace = def increment( self, method: str | None = None, url: str | None = None, response: BaseHTTPResponse | None = None, error: Exception | None = None, _pool: ConnectionPool | None = None, _stacktrace: TracebackType | None = None, ) -> Self: """Return a new Retry object with incremented retry counters. :param response: A response object, or None, if the server did not return a response. :type response: :class:`~urllib3.response.BaseHTTPResponse` :param Exception error: An error encountered during the request, or None if the response was received successfully. :return: A new ``Retry`` object. """ if self.total is False and error: # Disabled, indicate to re-raise the error. raise reraise(type(error), error, _stacktrace) total = self.total if total is not None: total -= 1 connect = self.connect read = self.read redirect = self.redirect status_count = self.status other = self.other cause = "unknown" status = None redirect_location = None if error and self._is_connection_error(error): # Connect retry? if connect is False: raise reraise(type(error), error, _stacktrace) elif connect is not None: connect -= 1 elif error and self._is_read_error(error): # Read retry? if read is False or method is None or not self._is_method_retryable(method): raise reraise(type(error), error, _stacktrace) elif read is not None: read -= 1 elif error: # Other retry? if other is not None: other -= 1 elif response and response.get_redirect_location(): # Redirect retry? if redirect is not None: redirect -= 1 cause = "too many redirects" response_redirect_location = response.get_redirect_location() if response_redirect_location: redirect_location = response_redirect_location status = response.status else: # Incrementing because of a server error like a 500 in # status_forcelist and the given method is in the allowed_methods cause = ResponseError.GENERIC_ERROR if response and response.status: if status_count is not None: status_count -= 1 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) status = response.status history = self.history + ( RequestHistory(method, url, error, status, redirect_location), ) new_retry = self.new( total=total, connect=connect, read=read, redirect=redirect, status=status_count, other=other, history=history, ) if new_retry.is_exhausted(): reason = error or ResponseError(cause) > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='10.255.255.1', port=80): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) /usr/lib/python3.13/site-packages/urllib3/util/retry.py:519: MaxRetryError During handling of the above exception, another exception occurred: self = timeout = Timeout(connect=0.1, read=None, total=None) @pytest.mark.parametrize( "timeout", ((0.1, None), Urllib3Timeout(connect=0.1, read=None)) ) def test_connect_timeout(self, timeout): try: > requests.get(TARPIT, timeout=timeout) tests/test_requests.py:2530: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src/requests/api.py:73: in get return request("get", url, params=params, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ src/requests/api.py:59: in request return session.request(method=method, url=url, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ src/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ src/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = request = , stream = False timeout = Timeout(connect=0.1, read=None, total=None), verify = True cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) except (ProtocolError, OSError) as err: raise ConnectionError(err, request=request) except MaxRetryError as e: if isinstance(e.reason, ConnectTimeoutError): # TODO: Remove this in 3.0.0: see #2811 if not isinstance(e.reason, NewConnectionError): raise ConnectTimeout(e, request=request) if isinstance(e.reason, ResponseError): raise RetryError(e, request=request) if isinstance(e.reason, _ProxyError): raise ProxyError(e, request=request) if isinstance(e.reason, _SSLError): # This branch is for urllib3 v1.22 and later. raise SSLError(e, request=request) > raise ConnectionError(e, request=request) E requests.exceptions.ConnectionError: HTTPConnectionPool(host='10.255.255.1', port=80): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) src/requests/adapters.py:677: ConnectionError _______________ TestTimeout.test_total_timeout_connect[timeout0] _______________ self = def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: > sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) /usr/lib/python3.13/site-packages/urllib3/connection.py:198: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/site-packages/urllib3/util/connection.py:85: in create_connection raise err _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ address = ('10.255.255.1', 80), timeout = 0.1, source_address = None socket_options = [(6, 1, 1)] def create_connection( address: tuple[str, int], timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, source_address: tuple[str, int] | None = None, socket_options: _TYPE_SOCKET_OPTIONS | None = None, ) -> socket.socket: """Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, port)``) and return the socket object. Passing the optional *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`socket.getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. An host of '' or port 0 tells the OS to use the default. """ host, port = address if host.startswith("["): host = host.strip("[]") err = None # Using the value from allowed_gai_family() in the context of getaddrinfo lets # us select whether to work with IPv4 DNS records, IPv6 records, or both. # The original create_connection function always returns all records. family = allowed_gai_family() try: host.encode("idna") except UnicodeError: raise LocationParseError(f"'{host}', label empty or too long") from None for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None try: sock = socket.socket(af, socktype, proto) # If provided, set socket level options before connecting. _set_socket_options(sock, socket_options) if timeout is not _DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) > sock.connect(sa) E ConnectionRefusedError: [Errno 111] Connection refused /usr/lib/python3.13/site-packages/urllib3/util/connection.py:73: ConnectionRefusedError The above exception was the direct cause of the following exception: self = method = 'GET', url = '/', body = None headers = {'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive'} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=0.1, read=0.1, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None, preload_content = False decode_content = False, response_kw = {} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( # type: ignore[override] self, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | bool | int | None = None, redirect: bool = True, assert_same_host: bool = True, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, pool_timeout: int | None = None, release_conn: bool | None = None, chunked: bool = False, body_pos: _TYPE_BODY_POSITION | None = None, preload_content: bool = True, decode_content: bool = True, **response_kw: typing.Any, ) -> BaseHTTPResponse: """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param bool preload_content: If True, the response's body will be preloaded into memory. :param bool decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``preload_content`` which defaults to ``True``. :param bool chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = preload_content # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = to_str(_encode_target(url)) else: url = to_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() # type: ignore[attr-defined] headers.update(self.proxy_headers) # type: ignore[union-attr] # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] # Is this a closed/new connection that requires CONNECT tunnelling? if self.proxy is not None and http_tunnel_required and conn.is_closed: try: self._prepare_proxy(conn) except (BaseSSLError, OSError, SocketTimeout) as e: self._raise_timeout( err=e, url=self.proxy.url, timeout_value=conn.timeout ) raise # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Make the request on the HTTPConnection object > response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, retries=retries, response_conn=response_conn, preload_content=preload_content, decode_content=decode_content, **response_kw, ) /usr/lib/python3.13/site-packages/urllib3/connectionpool.py:787: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/site-packages/urllib3/connectionpool.py:493: in _make_request conn.request( /usr/lib/python3.13/site-packages/urllib3/connection.py:494: in request self.endheaders() /usr/lib/python3.13/http/client.py:1333: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib/python3.13/http/client.py:1093: in _send_output self.send(msg) /usr/lib/python3.13/http/client.py:1037: in send self.connect() /usr/lib/python3.13/site-packages/urllib3/connection.py:325: in connect self.sock = self._new_conn() ^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) except socket.gaierror as e: raise NameResolutionError(self.host, self, e) from e except SocketTimeout as e: raise ConnectTimeoutError( self, f"Connection to {self.host} timed out. (connect timeout={self.timeout})", ) from e except OSError as e: > raise NewConnectionError( self, f"Failed to establish a new connection: {e}" ) from e E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 111] Connection refused /usr/lib/python3.13/site-packages/urllib3/connection.py:213: NewConnectionError The above exception was the direct cause of the following exception: self = request = , stream = False timeout = Timeout(connect=0.1, read=0.1, total=None), verify = True, cert = None proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: > resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) src/requests/adapters.py:644: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/site-packages/urllib3/connectionpool.py:841: in urlopen retries = retries.increment( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Retry(total=0, connect=None, read=False, redirect=None, status=None) method = 'GET', url = '/', response = None error = NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused') _pool = _stacktrace = def increment( self, method: str | None = None, url: str | None = None, response: BaseHTTPResponse | None = None, error: Exception | None = None, _pool: ConnectionPool | None = None, _stacktrace: TracebackType | None = None, ) -> Self: """Return a new Retry object with incremented retry counters. :param response: A response object, or None, if the server did not return a response. :type response: :class:`~urllib3.response.BaseHTTPResponse` :param Exception error: An error encountered during the request, or None if the response was received successfully. :return: A new ``Retry`` object. """ if self.total is False and error: # Disabled, indicate to re-raise the error. raise reraise(type(error), error, _stacktrace) total = self.total if total is not None: total -= 1 connect = self.connect read = self.read redirect = self.redirect status_count = self.status other = self.other cause = "unknown" status = None redirect_location = None if error and self._is_connection_error(error): # Connect retry? if connect is False: raise reraise(type(error), error, _stacktrace) elif connect is not None: connect -= 1 elif error and self._is_read_error(error): # Read retry? if read is False or method is None or not self._is_method_retryable(method): raise reraise(type(error), error, _stacktrace) elif read is not None: read -= 1 elif error: # Other retry? if other is not None: other -= 1 elif response and response.get_redirect_location(): # Redirect retry? if redirect is not None: redirect -= 1 cause = "too many redirects" response_redirect_location = response.get_redirect_location() if response_redirect_location: redirect_location = response_redirect_location status = response.status else: # Incrementing because of a server error like a 500 in # status_forcelist and the given method is in the allowed_methods cause = ResponseError.GENERIC_ERROR if response and response.status: if status_count is not None: status_count -= 1 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) status = response.status history = self.history + ( RequestHistory(method, url, error, status, redirect_location), ) new_retry = self.new( total=total, connect=connect, read=read, redirect=redirect, status=status_count, other=other, history=history, ) if new_retry.is_exhausted(): reason = error or ResponseError(cause) > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='10.255.255.1', port=80): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) /usr/lib/python3.13/site-packages/urllib3/util/retry.py:519: MaxRetryError During handling of the above exception, another exception occurred: self = timeout = (0.1, 0.1) @pytest.mark.parametrize( "timeout", ((0.1, 0.1), Urllib3Timeout(connect=0.1, read=0.1)) ) def test_total_timeout_connect(self, timeout): try: > requests.get(TARPIT, timeout=timeout) tests/test_requests.py:2541: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src/requests/api.py:73: in get return request("get", url, params=params, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ src/requests/api.py:59: in request return session.request(method=method, url=url, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ src/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ src/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = request = , stream = False timeout = Timeout(connect=0.1, read=0.1, total=None), verify = True, cert = None proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) except (ProtocolError, OSError) as err: raise ConnectionError(err, request=request) except MaxRetryError as e: if isinstance(e.reason, ConnectTimeoutError): # TODO: Remove this in 3.0.0: see #2811 if not isinstance(e.reason, NewConnectionError): raise ConnectTimeout(e, request=request) if isinstance(e.reason, ResponseError): raise RetryError(e, request=request) if isinstance(e.reason, _ProxyError): raise ProxyError(e, request=request) if isinstance(e.reason, _SSLError): # This branch is for urllib3 v1.22 and later. raise SSLError(e, request=request) > raise ConnectionError(e, request=request) E requests.exceptions.ConnectionError: HTTPConnectionPool(host='10.255.255.1', port=80): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) src/requests/adapters.py:677: ConnectionError _______________ TestTimeout.test_total_timeout_connect[timeout1] _______________ self = def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: > sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) /usr/lib/python3.13/site-packages/urllib3/connection.py:198: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/site-packages/urllib3/util/connection.py:85: in create_connection raise err _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ address = ('10.255.255.1', 80), timeout = 0.1, source_address = None socket_options = [(6, 1, 1)] def create_connection( address: tuple[str, int], timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, source_address: tuple[str, int] | None = None, socket_options: _TYPE_SOCKET_OPTIONS | None = None, ) -> socket.socket: """Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, port)``) and return the socket object. Passing the optional *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`socket.getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. An host of '' or port 0 tells the OS to use the default. """ host, port = address if host.startswith("["): host = host.strip("[]") err = None # Using the value from allowed_gai_family() in the context of getaddrinfo lets # us select whether to work with IPv4 DNS records, IPv6 records, or both. # The original create_connection function always returns all records. family = allowed_gai_family() try: host.encode("idna") except UnicodeError: raise LocationParseError(f"'{host}', label empty or too long") from None for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None try: sock = socket.socket(af, socktype, proto) # If provided, set socket level options before connecting. _set_socket_options(sock, socket_options) if timeout is not _DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) > sock.connect(sa) E ConnectionRefusedError: [Errno 111] Connection refused /usr/lib/python3.13/site-packages/urllib3/util/connection.py:73: ConnectionRefusedError The above exception was the direct cause of the following exception: self = method = 'GET', url = '/', body = None headers = {'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive'} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=0.1, read=0.1, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None, preload_content = False decode_content = False, response_kw = {} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( # type: ignore[override] self, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | bool | int | None = None, redirect: bool = True, assert_same_host: bool = True, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, pool_timeout: int | None = None, release_conn: bool | None = None, chunked: bool = False, body_pos: _TYPE_BODY_POSITION | None = None, preload_content: bool = True, decode_content: bool = True, **response_kw: typing.Any, ) -> BaseHTTPResponse: """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param bool preload_content: If True, the response's body will be preloaded into memory. :param bool decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``preload_content`` which defaults to ``True``. :param bool chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = preload_content # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = to_str(_encode_target(url)) else: url = to_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() # type: ignore[attr-defined] headers.update(self.proxy_headers) # type: ignore[union-attr] # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] # Is this a closed/new connection that requires CONNECT tunnelling? if self.proxy is not None and http_tunnel_required and conn.is_closed: try: self._prepare_proxy(conn) except (BaseSSLError, OSError, SocketTimeout) as e: self._raise_timeout( err=e, url=self.proxy.url, timeout_value=conn.timeout ) raise # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Make the request on the HTTPConnection object > response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, retries=retries, response_conn=response_conn, preload_content=preload_content, decode_content=decode_content, **response_kw, ) /usr/lib/python3.13/site-packages/urllib3/connectionpool.py:787: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/site-packages/urllib3/connectionpool.py:493: in _make_request conn.request( /usr/lib/python3.13/site-packages/urllib3/connection.py:494: in request self.endheaders() /usr/lib/python3.13/http/client.py:1333: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib/python3.13/http/client.py:1093: in _send_output self.send(msg) /usr/lib/python3.13/http/client.py:1037: in send self.connect() /usr/lib/python3.13/site-packages/urllib3/connection.py:325: in connect self.sock = self._new_conn() ^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) except socket.gaierror as e: raise NameResolutionError(self.host, self, e) from e except SocketTimeout as e: raise ConnectTimeoutError( self, f"Connection to {self.host} timed out. (connect timeout={self.timeout})", ) from e except OSError as e: > raise NewConnectionError( self, f"Failed to establish a new connection: {e}" ) from e E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 111] Connection refused /usr/lib/python3.13/site-packages/urllib3/connection.py:213: NewConnectionError The above exception was the direct cause of the following exception: self = request = , stream = False timeout = Timeout(connect=0.1, read=0.1, total=None), verify = True, cert = None proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: > resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) src/requests/adapters.py:644: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/site-packages/urllib3/connectionpool.py:841: in urlopen retries = retries.increment( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Retry(total=0, connect=None, read=False, redirect=None, status=None) method = 'GET', url = '/', response = None error = NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused') _pool = _stacktrace = def increment( self, method: str | None = None, url: str | None = None, response: BaseHTTPResponse | None = None, error: Exception | None = None, _pool: ConnectionPool | None = None, _stacktrace: TracebackType | None = None, ) -> Self: """Return a new Retry object with incremented retry counters. :param response: A response object, or None, if the server did not return a response. :type response: :class:`~urllib3.response.BaseHTTPResponse` :param Exception error: An error encountered during the request, or None if the response was received successfully. :return: A new ``Retry`` object. """ if self.total is False and error: # Disabled, indicate to re-raise the error. raise reraise(type(error), error, _stacktrace) total = self.total if total is not None: total -= 1 connect = self.connect read = self.read redirect = self.redirect status_count = self.status other = self.other cause = "unknown" status = None redirect_location = None if error and self._is_connection_error(error): # Connect retry? if connect is False: raise reraise(type(error), error, _stacktrace) elif connect is not None: connect -= 1 elif error and self._is_read_error(error): # Read retry? if read is False or method is None or not self._is_method_retryable(method): raise reraise(type(error), error, _stacktrace) elif read is not None: read -= 1 elif error: # Other retry? if other is not None: other -= 1 elif response and response.get_redirect_location(): # Redirect retry? if redirect is not None: redirect -= 1 cause = "too many redirects" response_redirect_location = response.get_redirect_location() if response_redirect_location: redirect_location = response_redirect_location status = response.status else: # Incrementing because of a server error like a 500 in # status_forcelist and the given method is in the allowed_methods cause = ResponseError.GENERIC_ERROR if response and response.status: if status_count is not None: status_count -= 1 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) status = response.status history = self.history + ( RequestHistory(method, url, error, status, redirect_location), ) new_retry = self.new( total=total, connect=connect, read=read, redirect=redirect, status=status_count, other=other, history=history, ) if new_retry.is_exhausted(): reason = error or ResponseError(cause) > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='10.255.255.1', port=80): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) /usr/lib/python3.13/site-packages/urllib3/util/retry.py:519: MaxRetryError During handling of the above exception, another exception occurred: self = timeout = Timeout(connect=0.1, read=0.1, total=None) @pytest.mark.parametrize( "timeout", ((0.1, 0.1), Urllib3Timeout(connect=0.1, read=0.1)) ) def test_total_timeout_connect(self, timeout): try: > requests.get(TARPIT, timeout=timeout) tests/test_requests.py:2541: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src/requests/api.py:73: in get return request("get", url, params=params, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ src/requests/api.py:59: in request return session.request(method=method, url=url, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ src/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ src/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = request = , stream = False timeout = Timeout(connect=0.1, read=0.1, total=None), verify = True, cert = None proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) except (ProtocolError, OSError) as err: raise ConnectionError(err, request=request) except MaxRetryError as e: if isinstance(e.reason, ConnectTimeoutError): # TODO: Remove this in 3.0.0: see #2811 if not isinstance(e.reason, NewConnectionError): raise ConnectTimeout(e, request=request) if isinstance(e.reason, ResponseError): raise RetryError(e, request=request) if isinstance(e.reason, _ProxyError): raise ProxyError(e, request=request) if isinstance(e.reason, _SSLError): # This branch is for urllib3 v1.22 and later. raise SSLError(e, request=request) > raise ConnectionError(e, request=request) E requests.exceptions.ConnectionError: HTTPConnectionPool(host='10.255.255.1', port=80): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) src/requests/adapters.py:677: ConnectionError =============================== warnings summary =============================== tests/test_requests.py::TestRequests::test_set_basicauth[42-42] tests/test_requests.py::TestRequests::test_set_basicauth[42-42] /build/python-requests/src/requests/src/requests/auth.py:36: DeprecationWarning: Non-string usernames will no longer be supported in Requests 3.0.0. Please convert the object you've passed in (42) to a string or bytes object in the near future to avoid problems. warnings.warn( tests/test_requests.py::TestRequests::test_set_basicauth[42-42] tests/test_requests.py::TestRequests::test_set_basicauth[42-42] /build/python-requests/src/requests/src/requests/auth.py:46: DeprecationWarning: Non-string passwords will no longer be supported in Requests 3.0.0. Please convert the object you've passed in () to a string or bytes object in the near future to avoid problems. warnings.warn( tests/test_requests.py::TestRequests::test_set_basicauth[None-None] tests/test_requests.py::TestRequests::test_set_basicauth[None-None] /build/python-requests/src/requests/src/requests/auth.py:36: DeprecationWarning: Non-string usernames will no longer be supported in Requests 3.0.0. Please convert the object you've passed in (None) to a string or bytes object in the near future to avoid problems. warnings.warn( tests/test_requests.py::TestRequests::test_set_basicauth[None-None] tests/test_requests.py::TestRequests::test_set_basicauth[None-None] /build/python-requests/src/requests/src/requests/auth.py:46: DeprecationWarning: Non-string passwords will no longer be supported in Requests 3.0.0. Please convert the object you've passed in () to a string or bytes object in the near future to avoid problems. warnings.warn( tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_True tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_bundle_expired_cert tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_bundle_unexpired_cert tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_mtls_settings /usr/lib/python3.13/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings warnings.warn( tests/test_utils.py::TestContentEncodingDetection::test_none tests/test_utils.py::TestContentEncodingDetection::test_pragmas[] tests/test_utils.py::TestContentEncodingDetection::test_pragmas[] tests/test_utils.py::TestContentEncodingDetection::test_pragmas[] tests/test_utils.py::TestContentEncodingDetection::test_pragmas[] tests/test_utils.py::TestContentEncodingDetection::test_precedence /build/python-requests/src/requests/src/requests/utils.py:484: DeprecationWarning: In requests 3.0, get_encodings_from_content will be removed. For more information, please see the discussion on issue #2266. (This warning should only appear once.) warnings.warn( -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED tests/test_requests.py::TestTimeout::test_connect_timeout[timeout0] - ... FAILED tests/test_requests.py::TestTimeout::test_connect_timeout[timeout1] - ... FAILED tests/test_requests.py::TestTimeout::test_total_timeout_connect[timeout0] FAILED tests/test_requests.py::TestTimeout::test_total_timeout_connect[timeout1] = 4 failed, 590 passed, 15 skipped, 1 deselected, 1 xfailed, 18 warnings in 86.73s (0:01:26) = ==> ERROR: A failure occurred in check().  Aborting... ==> ERROR: Build failed, check /var/lib/archbuild/extra-riscv64/felix-0/build [?25h[?25h[?25hreceiving incremental file list python-requests-2.32.5-1-riscv64-build.log python-requests-2.32.5-1-riscv64-check.log python-requests-2.32.5-1-riscv64-prepare.log sent 81 bytes received 18,880 bytes 37,922.00 bytes/sec total size is 186,111 speedup is 9.82