==> Building on centiskorch ==> Checking for remote environment... ==> Syncing package to remote host... sending incremental file list ./ .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 829 100% 809.57kB/s 0:00:00 829 100% 809.57kB/s 0:00:00 (xfr#7, to-chk=6/14) LICENSES/ LICENSES/0BSD.txt -> ../LICENSE LICENSES/Apache-2.0.txt 10,280 100% 9.80MB/s 0:00:00 10,280 100% 9.80MB/s 0:00:00 (xfr#8, to-chk=2/14) keys/ keys/pgp/ keys/pgp/87227E29AD9CFF5CFAC3EA6A44D3FF97B80DC864.asc 8,513 100% 8.12MB/s 0:00:00 8,513 100% 8.12MB/s 0:00:00 (xfr#9, to-chk=0/14) sent 13,815 bytes received 243 bytes 28,116.00 bytes/sec total size is 23,502 speedup is 1.67 ==> 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-3 ==> Building python-requests for [extra] (riscv64) ]2;🔵 Container arch-nspawn-2005945 on centiskorch.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-3]...done ==> Making package: python-requests 2.32.5-1 (Thu Aug 21 14:16:44 2025) ==> Retrieving sources...  -> Cloning requests git repo... Cloning into bare repository '/home/felix/packages/python-requests/requests'... remote: Enumerating objects: 41053, done. remote: Counting objects: 0% (1/164) remote: Counting objects: 1% (2/164) remote: Counting objects: 2% (4/164) remote: Counting objects: 3% (5/164) remote: Counting objects: 4% (7/164) remote: Counting objects: 5% (9/164) remote: Counting objects: 6% (10/164) remote: Counting objects: 7% (12/164) remote: Counting objects: 8% (14/164) remote: Counting objects: 9% (15/164) remote: Counting objects: 10% (17/164) remote: Counting objects: 11% (19/164) remote: Counting objects: 12% (20/164) remote: Counting objects: 13% (22/164) remote: Counting objects: 14% (23/164) remote: Counting objects: 15% (25/164) remote: Counting objects: 16% (27/164) remote: Counting objects: 17% (28/164) remote: Counting objects: 18% (30/164) remote: Counting objects: 19% (32/164) remote: Counting objects: 20% (33/164) remote: Counting objects: 21% (35/164) remote: Counting objects: 22% (37/164) remote: Counting objects: 23% (38/164) remote: Counting objects: 24% (40/164) remote: Counting objects: 25% (41/164) remote: Counting objects: 26% (43/164) remote: Counting objects: 27% (45/164) remote: Counting objects: 28% (46/164) remote: Counting objects: 29% (48/164) remote: Counting objects: 30% (50/164) remote: Counting objects: 31% (51/164) remote: Counting objects: 32% (53/164) remote: Counting objects: 33% (55/164) remote: Counting objects: 34% (56/164) remote: Counting objects: 35% (58/164) remote: Counting objects: 36% (60/164) remote: Counting objects: 37% (61/164) remote: Counting objects: 38% (63/164) remote: Counting objects: 39% (64/164) remote: Counting objects: 40% (66/164) remote: Counting objects: 41% (68/164) remote: Counting objects: 42% (69/164) remote: Counting objects: 43% (71/164) remote: Counting objects: 44% (73/164) remote: Counting objects: 45% (74/164) remote: Counting objects: 46% (76/164) remote: Counting objects: 47% (78/164) remote: Counting objects: 48% (79/164) remote: Counting objects: 49% (81/164) remote: Counting objects: 50% (82/164) remote: Counting objects: 51% (84/164) remote: Counting objects: 52% (86/164) remote: Counting objects: 53% (87/164) remote: Counting objects: 54% (89/164) remote: Counting objects: 55% (91/164) remote: Counting objects: 56% (92/164) remote: Counting objects: 57% (94/164) remote: Counting objects: 58% (96/164) remote: Counting objects: 59% (97/164) remote: Counting objects: 60% (99/164) remote: Counting objects: 61% (101/164) remote: Counting objects: 62% (102/164) remote: Counting objects: 63% (104/164) remote: Counting objects: 64% (105/164) remote: Counting objects: 65% (107/164) remote: Counting objects: 66% (109/164) remote: Counting objects: 67% (110/164) remote: Counting objects: 68% (112/164) remote: Counting objects: 69% (114/164) remote: Counting objects: 70% (115/164) remote: Counting objects: 71% (117/164) remote: Counting objects: 72% (119/164) remote: Counting objects: 73% (120/164) remote: Counting objects: 74% (122/164) remote: Counting objects: 75% (123/164) remote: Counting objects: 76% (125/164) remote: Counting objects: 77% (127/164) remote: Counting objects: 78% (128/164) remote: Counting objects: 79% (130/164) remote: Counting objects: 80% (132/164) remote: Counting objects: 81% (133/164) remote: Counting objects: 82% (135/164) remote: Counting objects: 83% (137/164) remote: Counting objects: 84% (138/164) remote: Counting objects: 85% (140/164) remote: Counting objects: 86% (142/164) remote: Counting objects: 87% (143/164) remote: Counting objects: 88% (145/164) remote: Counting objects: 89% (146/164) remote: Counting objects: 90% (148/164) remote: Counting objects: 91% (150/164) remote: Counting objects: 92% (151/164) remote: Counting objects: 93% (153/164) remote: Counting objects: 94% (155/164) remote: Counting objects: 95% (156/164) remote: Counting objects: 96% (158/164) remote: Counting objects: 97% (160/164) remote: Counting objects: 98% (161/164) remote: Counting objects: 99% (163/164) remote: Counting objects: 100% (164/164) remote: Counting objects: 100% (164/164), done. remote: Compressing objects: 0% (1/123) remote: Compressing objects: 1% (2/123) remote: Compressing objects: 2% (3/123) remote: Compressing objects: 3% (4/123) remote: Compressing objects: 4% (5/123) remote: Compressing objects: 5% (7/123) remote: Compressing objects: 6% (8/123) remote: Compressing objects: 7% (9/123) remote: Compressing objects: 8% (10/123) remote: Compressing objects: 9% (12/123) remote: Compressing objects: 10% (13/123) remote: Compressing objects: 11% (14/123) remote: Compressing objects: 12% (15/123) remote: Compressing objects: 13% (16/123) remote: Compressing objects: 14% (18/123) remote: Compressing objects: 15% (19/123) remote: Compressing objects: 16% (20/123) remote: Compressing objects: 17% (21/123) remote: Compressing objects: 18% (23/123) remote: Compressing objects: 19% (24/123) remote: Compressing objects: 20% (25/123) remote: Compressing objects: 21% (26/123) remote: Compressing objects: 22% (28/123) remote: Compressing objects: 23% (29/123) remote: Compressing objects: 24% (30/123) remote: Compressing objects: 25% (31/123) remote: Compressing objects: 26% (32/123) remote: Compressing objects: 27% (34/123) remote: Compressing objects: 28% (35/123) remote: Compressing objects: 29% (36/123) remote: Compressing objects: 30% (37/123) remote: Compressing objects: 31% (39/123) remote: Compressing objects: 32% (40/123) remote: Compressing objects: 33% (41/123) remote: Compressing objects: 34% (42/123) remote: Compressing objects: 35% (44/123) remote: Compressing objects: 36% (45/123) remote: Compressing objects: 37% (46/123) remote: Compressing objects: 38% (47/123) remote: Compressing objects: 39% (48/123) remote: Compressing objects: 40% (50/123) remote: Compressing objects: 41% (51/123) remote: Compressing objects: 42% (52/123) remote: Compressing objects: 43% (53/123) remote: Compressing objects: 44% (55/123) remote: Compressing objects: 45% (56/123) remote: Compressing objects: 46% (57/123) remote: Compressing objects: 47% (58/123) remote: Compressing objects: 48% (60/123) remote: Compressing objects: 49% (61/123) remote: Compressing objects: 50% (62/123) remote: Compressing objects: 51% (63/123) remote: Compressing objects: 52% (64/123) remote: Compressing objects: 53% (66/123) remote: Compressing objects: 54% (67/123) remote: Compressing objects: 55% (68/123) remote: Compressing objects: 56% (69/123) remote: Compressing objects: 57% (71/123) remote: Compressing objects: 58% (72/123) remote: Compressing objects: 59% (73/123) remote: Compressing objects: 60% (74/123) remote: Compressing objects: 61% (76/123) remote: Compressing objects: 62% (77/123) remote: Compressing objects: 63% (78/123) remote: Compressing objects: 64% (79/123) remote: Compressing objects: 65% (80/123) remote: Compressing objects: 66% (82/123) remote: Compressing objects: 67% (83/123) remote: Compressing objects: 68% (84/123) remote: Compressing objects: 69% (85/123) remote: Compressing objects: 70% (87/123) remote: Compressing objects: 71% (88/123) remote: Compressing objects: 72% (89/123) remote: Compressing objects: 73% (90/123) remote: Compressing objects: 74% (92/123) remote: Compressing objects: 75% (93/123) remote: Compressing objects: 76% (94/123) remote: Compressing objects: 77% (95/123) remote: Compressing objects: 78% (96/123) remote: Compressing objects: 79% (98/123) remote: Compressing objects: 80% (99/123) remote: Compressing objects: 81% (100/123) remote: Compressing objects: 82% (101/123) remote: Compressing objects: 83% (103/123) remote: Compressing objects: 84% (104/123) remote: Compressing objects: 85% (105/123) remote: Compressing objects: 86% (106/123) remote: Compressing objects: 87% (108/123) remote: Compressing objects: 88% (109/123) remote: Compressing objects: 89% (110/123) remote: Compressing objects: 90% (111/123) remote: Compressing objects: 91% (112/123) remote: Compressing objects: 92% (114/123) remote: Compressing objects: 93% (115/123) remote: Compressing objects: 94% (116/123) remote: Compressing objects: 95% (117/123) remote: Compressing objects: 96% (119/123) remote: Compressing objects: 97% (120/123) remote: Compressing objects: 98% (121/123) remote: Compressing objects: 99% (122/123) remote: Compressing objects: 100% (123/123) remote: Compressing objects: 100% (123/123), done. Receiving objects: 0% (1/41053) Receiving objects: 1% (411/41053) Receiving objects: 2% (822/41053) Receiving objects: 3% (1232/41053) Receiving objects: 4% (1643/41053), 692.01 KiB | 1.26 MiB/s Receiving objects: 5% (2053/41053), 692.01 KiB | 1.26 MiB/s Receiving objects: 6% (2464/41053), 692.01 KiB | 1.26 MiB/s Receiving objects: 7% (2874/41053), 692.01 KiB | 1.26 MiB/s Receiving objects: 8% (3285/41053), 692.01 KiB | 1.26 MiB/s Receiving objects: 9% (3695/41053), 692.01 KiB | 1.26 MiB/s Receiving objects: 10% (4106/41053), 692.01 KiB | 1.26 MiB/s Receiving objects: 11% (4516/41053), 692.01 KiB | 1.26 MiB/s Receiving objects: 12% (4927/41053), 692.01 KiB | 1.26 MiB/s Receiving objects: 13% (5337/41053), 692.01 KiB | 1.26 MiB/s Receiving objects: 14% (5748/41053), 692.01 KiB | 1.26 MiB/s Receiving objects: 15% (6158/41053), 692.01 KiB | 1.26 MiB/s Receiving objects: 15% (6236/41053), 1.64 MiB | 1.58 MiB/s Receiving objects: 16% (6569/41053), 1.64 MiB | 1.58 MiB/s Receiving objects: 16% (6781/41053), 4.05 MiB | 1.81 MiB/s Receiving objects: 17% (6980/41053), 4.05 MiB | 1.81 MiB/s Receiving objects: 18% (7390/41053), 4.05 MiB | 1.81 MiB/s Receiving objects: 18% (7790/41053), 5.51 MiB | 2.01 MiB/s Receiving objects: 19% (7801/41053), 5.51 MiB | 2.01 MiB/s Receiving objects: 20% (8211/41053), 5.51 MiB | 2.01 MiB/s Receiving objects: 21% (8622/41053), 7.00 MiB | 2.16 MiB/s Receiving objects: 22% (9032/41053), 7.00 MiB | 2.16 MiB/s Receiving objects: 22% (9223/41053), 7.53 MiB | 1.80 MiB/s Receiving objects: 23% (9443/41053), 7.53 MiB | 1.80 MiB/s Receiving objects: 24% (9853/41053), 7.53 MiB | 1.80 MiB/s Receiving objects: 25% (10264/41053), 7.53 MiB | 1.80 MiB/s Receiving objects: 26% (10674/41053), 7.53 MiB | 1.80 MiB/s Receiving objects: 27% (11085/41053), 7.53 MiB | 1.80 MiB/s Receiving objects: 28% (11495/41053), 8.72 MiB | 1.86 MiB/s Receiving objects: 29% (11906/41053), 8.72 MiB | 1.86 MiB/s Receiving objects: 30% (12316/41053), 8.72 MiB | 1.86 MiB/s Receiving objects: 31% (12727/41053), 8.72 MiB | 1.86 MiB/s Receiving objects: 32% (13137/41053), 8.72 MiB | 1.86 MiB/s Receiving objects: 33% (13548/41053), 8.72 MiB | 1.86 MiB/s Receiving objects: 33% (13875/41053), 8.72 MiB | 1.86 MiB/s Receiving objects: 34% (13959/41053), 8.72 MiB | 1.86 MiB/s Receiving objects: 35% (14369/41053), 8.72 MiB | 1.86 MiB/s Receiving objects: 36% (14780/41053), 8.72 MiB | 1.86 MiB/s Receiving objects: 37% (15190/41053), 8.72 MiB | 1.86 MiB/s Receiving objects: 38% (15601/41053), 8.72 MiB | 1.86 MiB/s Receiving objects: 39% (16011/41053), 8.72 MiB | 1.86 MiB/s Receiving objects: 40% (16422/41053), 8.72 MiB | 1.86 MiB/s Receiving objects: 41% (16832/41053), 8.72 MiB | 1.86 MiB/s Receiving objects: 42% (17243/41053), 8.72 MiB | 1.86 MiB/s Receiving objects: 43% (17653/41053), 11.28 MiB | 2.17 MiB/s Receiving objects: 44% (18064/41053), 11.28 MiB | 2.17 MiB/s Receiving objects: 45% (18474/41053), 11.28 MiB | 2.17 MiB/s Receiving objects: 46% (18885/41053), 11.28 MiB | 2.17 MiB/s Receiving objects: 47% (19295/41053), 11.28 MiB | 2.17 MiB/s Receiving objects: 48% (19706/41053), 11.28 MiB | 2.17 MiB/s Receiving objects: 49% (20116/41053), 11.28 MiB | 2.17 MiB/s Receiving objects: 50% (20527/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 51% (20938/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 52% (21348/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 53% (21759/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 54% (22169/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 55% (22580/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 56% (22990/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 57% (23401/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 58% (23811/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 59% (24222/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 60% (24632/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 61% (25043/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 62% (25453/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 63% (25864/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 64% (26274/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 64% (26663/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 65% (26685/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 66% (27095/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 67% (27506/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 68% (27917/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 69% (28327/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 70% (28738/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 71% (29148/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 72% (29559/41053), 11.76 MiB | 2.12 MiB/s Receiving objects: 73% (29969/41053), 13.79 MiB | 2.33 MiB/s Receiving objects: 74% (30380/41053), 13.79 MiB | 2.33 MiB/s Receiving objects: 75% (30790/41053), 13.79 MiB | 2.33 MiB/s Receiving objects: 75% (30975/41053), 17.16 MiB | 2.85 MiB/s Receiving objects: 76% (31201/41053), 20.09 MiB | 3.12 MiB/s Receiving objects: 76% (31336/41053), 23.74 MiB | 3.54 MiB/s Receiving objects: 77% (31611/41053), 27.60 MiB | 4.00 MiB/s Receiving objects: 78% (32022/41053), 27.60 MiB | 4.00 MiB/s Receiving objects: 79% (32432/41053), 27.60 MiB | 4.00 MiB/s Receiving objects: 80% (32843/41053), 27.60 MiB | 4.00 MiB/s Receiving objects: 81% (33253/41053), 27.60 MiB | 4.00 MiB/s Receiving objects: 82% (33664/41053), 27.60 MiB | 4.00 MiB/s Receiving objects: 83% (34074/41053), 27.60 MiB | 4.00 MiB/s Receiving objects: 84% (34485/41053), 27.60 MiB | 4.00 MiB/s Receiving objects: 85% (34896/41053), 27.60 MiB | 4.00 MiB/s Receiving objects: 86% (35306/41053), 27.60 MiB | 4.00 MiB/s Receiving objects: 87% (35717/41053), 31.73 MiB | 5.14 MiB/s Receiving objects: 88% (36127/41053), 31.73 MiB | 5.14 MiB/s Receiving objects: 89% (36538/41053), 31.73 MiB | 5.14 MiB/s Receiving objects: 90% (36948/41053), 31.73 MiB | 5.14 MiB/s Receiving objects: 91% (37359/41053), 31.73 MiB | 5.14 MiB/s Receiving objects: 92% (37769/41053), 31.73 MiB | 5.14 MiB/s Receiving objects: 93% (38180/41053), 31.73 MiB | 5.14 MiB/s Receiving objects: 94% (38590/41053), 31.73 MiB | 5.14 MiB/s Receiving objects: 95% (39001/41053), 31.73 MiB | 5.14 MiB/s Receiving objects: 96% (39411/41053), 31.73 MiB | 5.14 MiB/s Receiving objects: 97% (39822/41053), 31.73 MiB | 5.14 MiB/s Receiving objects: 98% (40232/41053), 31.73 MiB | 5.14 MiB/s Receiving objects: 99% (40643/41053), 31.73 MiB | 5.14 MiB/s remote: Total 41053 (delta 91), reused 27 (delta 26), pack-reused 40889 (from 3) Receiving objects: 100% (41053/41053), 31.73 MiB | 5.14 MiB/s Receiving objects: 100% (41053/41053), 34.27 MiB | 3.73 MiB/s, done. Resolving deltas: 0% (0/25511) Resolving deltas: 1% (258/25511) Resolving deltas: 2% (511/25511) Resolving deltas: 3% (768/25511) Resolving deltas: 4% (1023/25511) Resolving deltas: 5% (1276/25511) Resolving deltas: 6% (1531/25511) Resolving deltas: 7% (1786/25511) Resolving deltas: 8% (2041/25511) Resolving deltas: 9% (2296/25511) Resolving deltas: 10% (2553/25511) Resolving deltas: 11% (2807/25511) Resolving deltas: 12% (3062/25511) Resolving deltas: 13% (3317/25511) Resolving deltas: 14% (3572/25511) Resolving deltas: 15% (3827/25511) Resolving deltas: 16% (4082/25511) Resolving deltas: 17% (4337/25511) Resolving deltas: 18% (4592/25511) Resolving deltas: 19% (4848/25511) Resolving deltas: 20% (5103/25511) Resolving deltas: 21% (5359/25511) Resolving deltas: 22% (5617/25511) Resolving deltas: 23% (5869/25511) Resolving deltas: 24% (6124/25511) Resolving deltas: 25% (6378/25511) Resolving deltas: 26% (6633/25511) Resolving deltas: 27% (6891/25511) Resolving deltas: 28% (7144/25511) Resolving deltas: 29% (7399/25511) Resolving deltas: 30% (7654/25511) Resolving deltas: 31% (7909/25511) Resolving deltas: 32% (8165/25511) Resolving deltas: 33% (8420/25511) Resolving deltas: 34% (8674/25511) Resolving deltas: 35% (8930/25511) Resolving deltas: 36% (9185/25511) Resolving deltas: 37% (9440/25511) Resolving deltas: 38% (9695/25511) Resolving deltas: 39% (9950/25511) Resolving deltas: 40% (10209/25511) Resolving deltas: 41% (10460/25511) Resolving deltas: 42% (10721/25511) Resolving deltas: 43% (10971/25511) Resolving deltas: 44% (11225/25511) Resolving deltas: 45% (11480/25511) Resolving deltas: 46% (11736/25511) Resolving deltas: 47% (11992/25511) Resolving deltas: 48% (12246/25511) Resolving deltas: 49% (12501/25511) Resolving deltas: 50% (12758/25511) Resolving deltas: 51% (13012/25511) Resolving deltas: 52% (13266/25511) Resolving deltas: 53% (13521/25511) Resolving deltas: 54% (13776/25511) Resolving deltas: 55% (14032/25511) Resolving deltas: 56% (14288/25511) Resolving deltas: 57% (14542/25511) Resolving deltas: 58% (14798/25511) Resolving deltas: 59% (15052/25511) Resolving deltas: 60% (15307/25511) Resolving deltas: 61% (15562/25511) Resolving deltas: 62% (15817/25511) Resolving deltas: 63% (16074/25511) Resolving deltas: 64% (16328/25511) Resolving deltas: 65% (16583/25511) Resolving deltas: 66% (16838/25511) Resolving deltas: 67% (17093/25511) Resolving deltas: 68% (17348/25511) Resolving deltas: 69% (17603/25511) Resolving deltas: 70% (17858/25511) Resolving deltas: 71% (18113/25511) Resolving deltas: 72% (18368/25511) Resolving deltas: 73% (18625/25511) Resolving deltas: 74% (18879/25511) Resolving deltas: 75% (19134/25511) Resolving deltas: 76% (19389/25511) Resolving deltas: 77% (19644/25511) Resolving deltas: 78% (19899/25511) Resolving deltas: 79% (20154/25511) Resolving deltas: 80% (20409/25511) Resolving deltas: 81% (20664/25511) Resolving deltas: 82% (20920/25511) Resolving deltas: 83% (21175/25511) Resolving deltas: 84% (21430/25511) Resolving deltas: 85% (21686/25511) Resolving deltas: 86% (21940/25511) Resolving deltas: 87% (22195/25511) Resolving deltas: 88% (22450/25511) Resolving deltas: 89% (22705/25511) Resolving deltas: 90% (22960/25511) Resolving deltas: 91% (23217/25511) Resolving deltas: 92% (23471/25511) Resolving deltas: 93% (23726/25511) Resolving deltas: 94% (23982/25511) Resolving deltas: 95% (24237/25511) Resolving deltas: 96% (24492/25511) Resolving deltas: 97% (24748/25511) Resolving deltas: 98% (25001/25511) Resolving deltas: 99% (25256/25511) Resolving deltas: 100% (25511/25511) Resolving deltas: 100% (25511/25511), done.  -> Found certs.patch ==> Validating source files with b2sums... requests ... Passed certs.patch ... Passed ]2;🔵 Container arch-nspawn-2007029 on centiskorch.felixc.at\==> Making package: python-requests 2.32.5-1 (Thu Aug 21 18:17:14 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.5-1 123.83 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: 127.00 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 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.1-1 1.03 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.4.1-1 0.05 MiB extra/python-markupsafe 3.0.2-1 0.08 MiB extra/python-mistune 1:3.1.3-1 0.56 MiB extra/python-more-itertools 10.7.0-1 0.67 MiB extra/python-packaging 25.0-1 0.67 MiB extra/python-platformdirs 4.3.8-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.1-1 4.17 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.50.1-3 28.58 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-1 7.65 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.33 MiB Total Installed Size: 93.44 MiB :: Proceed with installation? [Y/n] :: Retrieving packages... python-jsonschema-4.25.1-1-any downloading... python-greenlet-3.2.4-1-riscv64 downloading... python-pysocks-1.7.1-10-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/sessions.py -> build/lib/requests copying src/requests/hooks.py -> build/lib/requests copying src/requests/adapters.py -> build/lib/requests copying src/requests/structures.py -> build/lib/requests copying src/requests/status_codes.py -> build/lib/requests copying src/requests/certs.py -> build/lib/requests copying src/requests/auth.py -> build/lib/requests copying src/requests/packages.py -> build/lib/requests copying src/requests/utils.py -> build/lib/requests copying src/requests/cookies.py -> build/lib/requests copying src/requests/help.py -> build/lib/requests copying src/requests/compat.py -> build/lib/requests copying src/requests/__version__.py -> build/lib/requests copying src/requests/__init__.py -> build/lib/requests copying src/requests/_internal_utils.py -> build/lib/requests copying src/requests/api.py -> build/lib/requests copying src/requests/models.py -> build/lib/requests copying src/requests/exceptions.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/sessions.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/hooks.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/adapters.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/structures.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/status_codes.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/certs.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/auth.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/packages.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/utils.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/cookies.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/help.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/compat.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/__version__.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/__init__.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/_internal_utils.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/api.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/models.py -> build/bdist.linux-riscv64/wheel/./requests copying build/lib/requests/exceptions.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-03pmw0zk/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.5, pytest-8.4.1, 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:1028) 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 127.0.0.1 - - [21/Aug/2025 18:18:05] "GET /get HTTP/1.1" 200 222 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 87.34s (0:01:27) = ==> ERROR: A failure occurred in check().  Aborting... ==> ERROR: Build failed, check /var/lib/archbuild/extra-riscv64/felix-3/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,946 bytes 38,054.00 bytes/sec total size is 186,176 speedup is 9.78