==> Building on aurorus ==> Checking for remote environment... ==> Syncing package to remote host... sending incremental file list created directory packages/python-validate-pyproject ./ .SRCINFO 793 100% 0.00kB/s 0:00:00 793 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=9/11) .nvchecker.toml 118 100% 115.23kB/s 0:00:00 118 100% 115.23kB/s 0:00:00 (xfr#2, to-chk=8/11) LICENSE 646 100% 630.86kB/s 0:00:00 646 100% 630.86kB/s 0:00:00 (xfr#3, to-chk=7/11) PKGBUILD 1,172 100% 1.12MB/s 0:00:00 1,172 100% 1.12MB/s 0:00:00 (xfr#4, to-chk=6/11) REUSE.toml 547 100% 534.18kB/s 0:00:00 547 100% 534.18kB/s 0:00:00 (xfr#5, to-chk=5/11) python-validate-pyproject-0.26-1.log 751 100% 733.40kB/s 0:00:00 751 100% 733.40kB/s 0:00:00 (xfr#6, to-chk=4/11) python-validate-pyproject-fix-tests.patch 1,820 100% 1.74MB/s 0:00:00 1,820 100% 1.74MB/s 0:00:00 (xfr#7, to-chk=3/11) LICENSES/ LICENSES/0BSD.txt -> ../LICENSE LICENSES/MPL-2.0.txt 16,727 100% 5.32MB/s 0:00:00 16,727 100% 5.32MB/s 0:00:00 (xfr#8, to-chk=0/11) sent 8,909 bytes received 243 bytes 6,101.33 bytes/sec total size is 22,027 speedup is 2.41 ==> Running pkgctl build --arch riscv64 on remote host... ==> WARNING: invalid architecture: riscv64 ==> Updating pacman database cache [?25l:: Synchronizing package databases... core downloading... extra downloading... multilib downloading... [?25h==> Building python-validate-pyproject -> repo: extra -> arch: riscv64 -> worker: felix-4 ==> Building python-validate-pyproject for [extra] (riscv64) ==> Locking clean chroot...done Note: in a future version of systemd-nspawn the default set of permitted socket address families will be restricted to AF_INET, AF_INET6 and AF_UNIX. Use --restrict-address-families= to configure the set of permitted socket address families, or set RestrictAddressFamilies= in a .nspawn file. [?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-4]...done ==> Making package: python-validate-pyproject 0.26-1 (Mon Aug 24 19:55:32 2026) ==> Retrieving sources...  -> Cloning validate-pyproject git repo... Cloning into bare repository '/home/felix/packages/python-validate-pyproject/validate-pyproject'... remote: Enumerating objects: 4783, done. remote: Counting objects: 0% (1/1083) remote: Counting objects: 1% (11/1083) remote: Counting objects: 2% (22/1083) remote: Counting objects: 3% (33/1083) remote: Counting objects: 4% (44/1083) remote: Counting objects: 5% (55/1083) remote: Counting objects: 6% (65/1083) remote: Counting objects: 7% (76/1083) remote: Counting objects: 8% (87/1083) remote: Counting objects: 9% (98/1083) remote: Counting objects: 10% (109/1083) remote: Counting objects: 11% (120/1083) remote: Counting objects: 12% (130/1083) remote: Counting objects: 13% (141/1083) remote: Counting objects: 14% (152/1083) remote: Counting objects: 15% (163/1083) remote: Counting objects: 16% (174/1083) remote: Counting objects: 17% (185/1083) remote: Counting objects: 18% (195/1083) remote: Counting objects: 19% (206/1083) remote: Counting objects: 20% (217/1083) remote: Counting objects: 21% (228/1083) remote: Counting objects: 22% (239/1083) remote: Counting objects: 23% (250/1083) remote: Counting objects: 24% (260/1083) remote: Counting objects: 25% (271/1083) remote: Counting objects: 26% (282/1083) remote: Counting objects: 27% (293/1083) remote: Counting objects: 28% (304/1083) remote: Counting objects: 29% (315/1083) remote: Counting objects: 30% (325/1083) remote: Counting objects: 31% (336/1083) remote: Counting objects: 32% (347/1083) remote: Counting objects: 33% (358/1083) remote: Counting objects: 34% (369/1083) remote: Counting objects: 35% (380/1083) remote: Counting objects: 36% (390/1083) remote: Counting objects: 37% (401/1083) remote: Counting objects: 38% (412/1083) remote: Counting objects: 39% (423/1083) remote: Counting objects: 40% (434/1083) remote: Counting objects: 41% (445/1083) remote: Counting objects: 42% (455/1083) remote: Counting objects: 43% (466/1083) remote: Counting objects: 44% (477/1083) remote: Counting objects: 45% (488/1083) remote: Counting objects: 46% (499/1083) remote: Counting objects: 47% (510/1083) remote: Counting objects: 48% (520/1083) remote: Counting objects: 49% (531/1083) remote: Counting objects: 50% (542/1083) remote: Counting objects: 51% (553/1083) remote: Counting objects: 52% (564/1083) remote: Counting objects: 53% (574/1083) remote: Counting objects: 54% (585/1083) remote: Counting objects: 55% (596/1083) remote: Counting objects: 56% (607/1083) remote: Counting objects: 57% (618/1083) remote: Counting objects: 58% (629/1083) remote: Counting objects: 59% (639/1083) remote: Counting objects: 60% (650/1083) remote: Counting objects: 61% (661/1083) remote: Counting objects: 62% (672/1083) remote: Counting objects: 63% (683/1083) remote: Counting objects: 64% (694/1083) remote: Counting objects: 65% (704/1083) remote: Counting objects: 66% (715/1083) remote: Counting objects: 67% (726/1083) remote: Counting objects: 68% (737/1083) remote: Counting objects: 69% (748/1083) remote: Counting objects: 70% (759/1083) remote: Counting objects: 71% (769/1083) remote: Counting objects: 72% (780/1083) remote: Counting objects: 73% (791/1083) remote: Counting objects: 74% (802/1083) remote: Counting objects: 75% (813/1083) remote: Counting objects: 76% (824/1083) remote: Counting objects: 77% (834/1083) remote: Counting objects: 78% (845/1083) remote: Counting objects: 79% (856/1083) remote: Counting objects: 80% (867/1083) remote: Counting objects: 81% (878/1083) remote: Counting objects: 82% (889/1083) remote: Counting objects: 83% (899/1083) remote: Counting objects: 84% (910/1083) remote: Counting objects: 85% (921/1083) remote: Counting objects: 86% (932/1083) remote: Counting objects: 87% (943/1083) remote: Counting objects: 88% (954/1083) remote: Counting objects: 89% (964/1083) remote: Counting objects: 90% (975/1083) remote: Counting objects: 91% (986/1083) remote: Counting objects: 92% (997/1083) remote: Counting objects: 93% (1008/1083) remote: Counting objects: 94% (1019/1083) remote: Counting objects: 95% (1029/1083) remote: Counting objects: 96% (1040/1083) remote: Counting objects: 97% (1051/1083) remote: Counting objects: 98% (1062/1083) remote: Counting objects: 99% (1073/1083) remote: Counting objects: 100% (1083/1083) remote: Counting objects: 100% (1083/1083), done. remote: Compressing objects: 0% (1/485) remote: Compressing objects: 1% (5/485) remote: Compressing objects: 2% (10/485) remote: Compressing objects: 3% (15/485) remote: Compressing objects: 4% (20/485) remote: Compressing objects: 5% (25/485) remote: Compressing objects: 6% (30/485) remote: Compressing objects: 7% (34/485) remote: Compressing objects: 8% (39/485) remote: Compressing objects: 9% (44/485) remote: Compressing objects: 10% (49/485) remote: Compressing objects: 11% (54/485) remote: Compressing objects: 12% (59/485) remote: Compressing objects: 13% (64/485) remote: Compressing objects: 14% (68/485) remote: Compressing objects: 15% (73/485) remote: Compressing objects: 16% (78/485) remote: Compressing objects: 17% (83/485) remote: Compressing objects: 18% (88/485) remote: Compressing objects: 19% (93/485) remote: Compressing objects: 20% (97/485) remote: Compressing objects: 21% (102/485) remote: Compressing objects: 22% (107/485) remote: Compressing objects: 23% (112/485) remote: Compressing objects: 24% (117/485) remote: Compressing objects: 25% (122/485) remote: Compressing objects: 26% (127/485) remote: Compressing objects: 27% (131/485) remote: Compressing objects: 28% (136/485) remote: Compressing objects: 29% (141/485) remote: Compressing objects: 30% (146/485) remote: Compressing objects: 31% (151/485) remote: Compressing objects: 32% (156/485) remote: Compressing objects: 33% (161/485) remote: Compressing objects: 34% (165/485) remote: Compressing objects: 35% (170/485) remote: Compressing objects: 36% (175/485) remote: Compressing objects: 37% (180/485) remote: Compressing objects: 38% (185/485) remote: Compressing objects: 39% (190/485) remote: Compressing objects: 40% (194/485) remote: Compressing objects: 41% (199/485) remote: Compressing objects: 42% (204/485) remote: Compressing objects: 43% (209/485) remote: Compressing objects: 44% (214/485) remote: Compressing objects: 45% (219/485) remote: Compressing objects: 46% (224/485) remote: Compressing objects: 47% (228/485) remote: Compressing objects: 48% (233/485) remote: Compressing objects: 49% (238/485) remote: Compressing objects: 50% (243/485) remote: Compressing objects: 51% (248/485) remote: Compressing objects: 52% (253/485) remote: Compressing objects: 53% (258/485) remote: Compressing objects: 54% (262/485) remote: Compressing objects: 55% (267/485) remote: Compressing objects: 56% (272/485) remote: Compressing objects: 57% (277/485) remote: Compressing objects: 58% (282/485) remote: Compressing objects: 59% (287/485) remote: Compressing objects: 60% (291/485) remote: Compressing objects: 61% (296/485) remote: Compressing objects: 62% (301/485) remote: Compressing objects: 63% (306/485) remote: Compressing objects: 64% (311/485) remote: Compressing objects: 65% (316/485) remote: Compressing objects: 66% (321/485) remote: Compressing objects: 67% (325/485) remote: Compressing objects: 68% (330/485) remote: Compressing objects: 69% (335/485) remote: Compressing objects: 70% (340/485) remote: Compressing objects: 71% (345/485) remote: Compressing objects: 72% (350/485) remote: Compressing objects: 73% (355/485) remote: Compressing objects: 74% (359/485) remote: Compressing objects: 75% (364/485) remote: Compressing objects: 76% (369/485) remote: Compressing objects: 77% (374/485) remote: Compressing objects: 78% (379/485) remote: Compressing objects: 79% (384/485) remote: Compressing objects: 80% (388/485) remote: Compressing objects: 81% (393/485) remote: Compressing objects: 82% (398/485) remote: Compressing objects: 83% (403/485) remote: Compressing objects: 84% (408/485) remote: Compressing objects: 85% (413/485) remote: Compressing objects: 86% (418/485) remote: Compressing objects: 87% (422/485) remote: Compressing objects: 88% (427/485) remote: Compressing objects: 89% (432/485) remote: Compressing objects: 90% (437/485) remote: Compressing objects: 91% (442/485) remote: Compressing objects: 92% (447/485) remote: Compressing objects: 93% (452/485) remote: Compressing objects: 94% (456/485) remote: Compressing objects: 95% (461/485) remote: Compressing objects: 96% (466/485) remote: Compressing objects: 97% (471/485) remote: Compressing objects: 98% (476/485) remote: Compressing objects: 99% (481/485) remote: Compressing objects: 100% (485/485) remote: Compressing objects: 100% (485/485), done. Receiving objects: 0% (1/4783) Receiving objects: 1% (48/4783) Receiving objects: 2% (96/4783) Receiving objects: 3% (144/4783) Receiving objects: 4% (192/4783) Receiving objects: 5% (240/4783) Receiving objects: 6% (287/4783) Receiving objects: 7% (335/4783) Receiving objects: 8% (383/4783) Receiving objects: 9% (431/4783) Receiving objects: 10% (479/4783) Receiving objects: 11% (527/4783) Receiving objects: 12% (574/4783) Receiving objects: 13% (622/4783) Receiving objects: 14% (670/4783) Receiving objects: 15% (718/4783) Receiving objects: 16% (766/4783) Receiving objects: 17% (814/4783) Receiving objects: 18% (861/4783) Receiving objects: 19% (909/4783) Receiving objects: 20% (957/4783) Receiving objects: 21% (1005/4783) Receiving objects: 22% (1053/4783) Receiving objects: 23% (1101/4783) Receiving objects: 24% (1148/4783) Receiving objects: 25% (1196/4783) Receiving objects: 26% (1244/4783) Receiving objects: 27% (1292/4783) Receiving objects: 28% (1340/4783) Receiving objects: 29% (1388/4783) Receiving objects: 30% (1435/4783) Receiving objects: 31% (1483/4783) Receiving objects: 32% (1531/4783) Receiving objects: 33% (1579/4783) Receiving objects: 34% (1627/4783) Receiving objects: 35% (1675/4783) Receiving objects: 36% (1722/4783) Receiving objects: 37% (1770/4783) Receiving objects: 38% (1818/4783) Receiving objects: 39% (1866/4783) Receiving objects: 40% (1914/4783) Receiving objects: 41% (1962/4783) Receiving objects: 42% (2009/4783) Receiving objects: 43% (2057/4783) Receiving objects: 44% (2105/4783) Receiving objects: 45% (2153/4783) Receiving objects: 46% (2201/4783) Receiving objects: 47% (2249/4783) Receiving objects: 48% (2296/4783) Receiving objects: 49% (2344/4783) Receiving objects: 50% (2392/4783) Receiving objects: 51% (2440/4783) Receiving objects: 52% (2488/4783) Receiving objects: 53% (2535/4783) Receiving objects: 54% (2583/4783) Receiving objects: 55% (2631/4783) Receiving objects: 56% (2679/4783) Receiving objects: 57% (2727/4783) Receiving objects: 58% (2775/4783) Receiving objects: 59% (2822/4783) Receiving objects: 60% (2870/4783) Receiving objects: 61% (2918/4783) Receiving objects: 62% (2966/4783) Receiving objects: 63% (3014/4783) Receiving objects: 64% (3062/4783) Receiving objects: 65% (3109/4783) Receiving objects: 66% (3157/4783) Receiving objects: 67% (3205/4783) Receiving objects: 68% (3253/4783) Receiving objects: 69% (3301/4783) Receiving objects: 70% (3349/4783) Receiving objects: 71% (3396/4783) Receiving objects: 72% (3444/4783) Receiving objects: 73% (3492/4783) Receiving objects: 74% (3540/4783) Receiving objects: 75% (3588/4783) Receiving objects: 76% (3636/4783) Receiving objects: 77% (3683/4783) Receiving objects: 78% (3731/4783) Receiving objects: 79% (3779/4783) Receiving objects: 80% (3827/4783) Receiving objects: 81% (3875/4783) Receiving objects: 82% (3923/4783) Receiving objects: 83% (3970/4783) Receiving objects: 84% (4018/4783) Receiving objects: 85% (4066/4783) Receiving objects: 86% (4114/4783) Receiving objects: 87% (4162/4783) Receiving objects: 88% (4210/4783) Receiving objects: 89% (4257/4783) Receiving objects: 90% (4305/4783) Receiving objects: 91% (4353/4783) Receiving objects: 92% (4401/4783) Receiving objects: 93% (4449/4783) Receiving objects: 94% (4497/4783) Receiving objects: 95% (4544/4783) Receiving objects: 96% (4592/4783) Receiving objects: 97% (4640/4783) Receiving objects: 98% (4688/4783) Receiving objects: 99% (4736/4783) remote: Total 4783 (delta 719), reused 602 (delta 586), pack-reused 3700 (from 4) Receiving objects: 100% (4783/4783) Receiving objects: 100% (4783/4783), 1.10 MiB | 2.33 MiB/s, done. Resolving deltas: 0% (0/2775) Resolving deltas: 1% (28/2775) Resolving deltas: 2% (56/2775) Resolving deltas: 3% (84/2775) Resolving deltas: 4% (111/2775) Resolving deltas: 5% (139/2775) Resolving deltas: 6% (167/2775) Resolving deltas: 7% (195/2775) Resolving deltas: 8% (222/2775) Resolving deltas: 9% (250/2775) Resolving deltas: 10% (279/2775) Resolving deltas: 11% (306/2775) Resolving deltas: 12% (333/2775) Resolving deltas: 13% (361/2775) Resolving deltas: 14% (389/2775) Resolving deltas: 15% (417/2775) Resolving deltas: 16% (444/2775) Resolving deltas: 17% (472/2775) Resolving deltas: 18% (500/2775) Resolving deltas: 19% (529/2775) Resolving deltas: 20% (556/2775) Resolving deltas: 21% (583/2775) Resolving deltas: 22% (611/2775) Resolving deltas: 23% (639/2775) Resolving deltas: 24% (666/2775) Resolving deltas: 25% (695/2775) Resolving deltas: 26% (723/2775) Resolving deltas: 27% (750/2775) Resolving deltas: 28% (777/2775) Resolving deltas: 29% (806/2775) Resolving deltas: 30% (833/2775) Resolving deltas: 31% (861/2775) Resolving deltas: 32% (888/2775) Resolving deltas: 33% (917/2775) Resolving deltas: 34% (944/2775) Resolving deltas: 35% (972/2775) Resolving deltas: 36% (1001/2775) Resolving deltas: 37% (1027/2775) Resolving deltas: 38% (1055/2775) Resolving deltas: 39% (1083/2775) Resolving deltas: 40% (1110/2775) Resolving deltas: 41% (1138/2775) Resolving deltas: 42% (1166/2775) Resolving deltas: 43% (1194/2775) Resolving deltas: 44% (1222/2775) Resolving deltas: 45% (1249/2775) Resolving deltas: 46% (1277/2775) Resolving deltas: 47% (1305/2775) Resolving deltas: 48% (1332/2775) Resolving deltas: 49% (1360/2775) Resolving deltas: 50% (1388/2775) Resolving deltas: 51% (1416/2775) Resolving deltas: 52% (1444/2775) Resolving deltas: 53% (1471/2775) Resolving deltas: 54% (1499/2775) Resolving deltas: 55% (1528/2775) Resolving deltas: 56% (1554/2775) Resolving deltas: 57% (1582/2775) Resolving deltas: 58% (1610/2775) Resolving deltas: 59% (1638/2775) Resolving deltas: 60% (1665/2775) Resolving deltas: 61% (1693/2775) Resolving deltas: 62% (1721/2775) Resolving deltas: 63% (1749/2775) Resolving deltas: 64% (1776/2775) Resolving deltas: 65% (1804/2775) Resolving deltas: 66% (1832/2775) Resolving deltas: 67% (1860/2775) Resolving deltas: 68% (1887/2775) Resolving deltas: 69% (1915/2775) Resolving deltas: 70% (1944/2775) Resolving deltas: 71% (1971/2775) Resolving deltas: 72% (1998/2775) Resolving deltas: 73% (2026/2775) Resolving deltas: 74% (2054/2775) Resolving deltas: 75% (2082/2775) Resolving deltas: 76% (2109/2775) Resolving deltas: 77% (2137/2775) Resolving deltas: 78% (2165/2775) Resolving deltas: 79% (2193/2775) Resolving deltas: 80% (2220/2775) Resolving deltas: 81% (2248/2775) Resolving deltas: 82% (2276/2775) Resolving deltas: 83% (2304/2775) Resolving deltas: 84% (2331/2775) Resolving deltas: 85% (2359/2775) Resolving deltas: 86% (2387/2775) Resolving deltas: 87% (2415/2775) Resolving deltas: 88% (2442/2775) Resolving deltas: 89% (2470/2775) Resolving deltas: 90% (2498/2775) Resolving deltas: 91% (2526/2775) Resolving deltas: 92% (2553/2775) Resolving deltas: 93% (2581/2775) Resolving deltas: 94% (2609/2775) Resolving deltas: 95% (2637/2775) Resolving deltas: 96% (2664/2775) Resolving deltas: 97% (2693/2775) Resolving deltas: 98% (2720/2775) Resolving deltas: 99% (2748/2775) Resolving deltas: 100% (2775/2775) Resolving deltas: 100% (2775/2775), done. ==> Validating source files with b2sums... validate-pyproject ... Passed Note: in a future version of systemd-nspawn the default set of permitted socket address families will be restricted to AF_INET, AF_INET6 and AF_UNIX. Use --restrict-address-families= to configure the set of permitted socket address families, or set RestrictAddressFamilies= in a .nspawn file. ==> Making package: python-validate-pyproject 0.26-1 (Mon Aug 24 19:56:01 2026) ==> Checking runtime dependencies... ==> Installing missing dependencies... [?25lresolving dependencies... looking for conflicting packages... Package (3) New Version Net Change extra/python-fastjsonschema 2.21.2-2 0.28 MiB extra/python-packaging 26.3-1 1.58 MiB extra/python-trove-classifiers 2026.6.1.19-1 0.16 MiB Total Installed Size: 2.02 MiB :: Proceed with installation? [Y/n] checking keyring... checking package integrity... loading package files... checking for file conflicts... :: Processing package changes... installing python-fastjsonschema... installing python-packaging... installing python-trove-classifiers... :: Running post-transaction hooks... (1/1) Arming ConditionNeedsUpdate... [?25h==> Checking buildtime dependencies... ==> Installing missing dependencies... [?25lresolving dependencies... looking for conflicting packages... Package (25) New Version Net Change Download Size extra/perl-error 0.17030-3 0.04 MiB extra/perl-mailtools 2.22-3 0.10 MiB extra/perl-timedate 2.35-1 0.15 MiB extra/python-autocommand 2.2.2-9 0.08 MiB extra/python-iniconfig 2.3.0-1 0.07 MiB extra/python-jaraco.collections 5.1.0-3 0.11 MiB extra/python-jaraco.context 6.1.2-1 0.06 MiB extra/python-jaraco.functools 4.1.0-3 0.07 MiB extra/python-jaraco.text 4.0.0-4 0.08 MiB extra/python-more-itertools 11.1.0-1 0.77 MiB extra/python-pkg_resources 81.0.0-1 0.50 MiB extra/python-platformdirs 4.11.3-1 0.46 MiB extra/python-pluggy 1.6.0-3.1 0.23 MiB extra/python-pygments 2.20.0-1 15.36 MiB extra/python-pyproject-hooks 1.2.0-6 0.11 MiB extra/python-setuptools 1:82.0.1-1 7.35 MiB extra/python-typing_extensions 4.16.0-1 0.53 MiB extra/python-vcs-versioning 2.3.1-1 1.18 MiB 0.21 MiB extra/zlib-ng 2.3.3-1 0.23 MiB extra/git 2.55.0-1 29.92 MiB extra/python-build 1.4.3-1 0.26 MiB extra/python-installer 1.0.0-1 0.20 MiB extra/python-pytest 1:8.4.2-3 4.69 MiB extra/python-setuptools-scm 10.0.5-1 0.15 MiB extra/python-wheel 0.46.3-1 0.31 MiB Total Download Size: 0.21 MiB Total Installed Size: 63.01 MiB :: Proceed with installation? [Y/n] :: Retrieving packages... python-vcs-versioning-2.3.1-1-any downloading... checking keyring... checking package integrity... loading package files... checking for file conflicts... :: Processing package changes... installing perl-error... installing perl-timedate... installing perl-mailtools... installing zlib-ng... installing git... Optional dependencies for git git-zsh-completion: upstream zsh completion tk: gitk and git gui openssh: ssh transport and crypto man: show help with `git command --help` perl-libwww: git svn perl-term-readkey: git svn and interactive.singlekey setting perl-io-socket-ssl: git send-email TLS support perl-authen-sasl: git send-email TLS support perl-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-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-typing_extensions... installing python-pkg_resources... installing python-setuptools... installing python-vcs-versioning... Optional dependencies for python-vcs-versioning python-rich: formatting of log messages installing python-setuptools-scm... Optional dependencies for python-setuptools-scm python-rich: use rich as console log handler installing python-iniconfig... installing python-pluggy... installing python-pygments... installing python-pytest... :: Running post-transaction hooks... (1/4) Creating system user accounts... Creating group 'git' with GID 968. Creating user 'git' (git daemon user) with UID 968 and GID 968. (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... ==> WARNING: Skipping all source file integrity checks. ==> Extracting sources...  -> Creating working copy of validate-pyproject git repo... Cloning into 'validate-pyproject'... done. Switched to a new branch 'makepkg' ==> Starting build()... * Getting build dependencies for wheel... /usr/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated !! ******************************************************************************** Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0). By 2027-Feb-18, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! corresp(dist, value, root_dir) running egg_info creating src/validate_pyproject.egg-info writing src/validate_pyproject.egg-info/PKG-INFO writing dependency_links to src/validate_pyproject.egg-info/dependency_links.txt writing entry points to src/validate_pyproject.egg-info/entry_points.txt writing requirements to src/validate_pyproject.egg-info/requires.txt writing top-level names to src/validate_pyproject.egg-info/top_level.txt writing manifest file 'src/validate_pyproject.egg-info/SOURCES.txt' adding license file 'LICENSE.txt' adding license file 'NOTICE.txt' adding license file 'AUTHORS.rst' writing manifest file 'src/validate_pyproject.egg-info/SOURCES.txt' * Building wheel... /usr/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated !! ******************************************************************************** Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0). By 2027-Feb-18, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! corresp(dist, value, root_dir) running bdist_wheel running build running build_py creating build/lib/validate_pyproject copying src/validate_pyproject/formats.py -> build/lib/validate_pyproject copying src/validate_pyproject/errors.py -> build/lib/validate_pyproject copying src/validate_pyproject/types.py -> build/lib/validate_pyproject copying src/validate_pyproject/caching.py -> build/lib/validate_pyproject copying src/validate_pyproject/http.py -> build/lib/validate_pyproject copying src/validate_pyproject/__init__.py -> build/lib/validate_pyproject copying src/validate_pyproject/api.py -> build/lib/validate_pyproject copying src/validate_pyproject/repo_review.py -> build/lib/validate_pyproject copying src/validate_pyproject/__main__.py -> build/lib/validate_pyproject copying src/validate_pyproject/_resources.py -> build/lib/validate_pyproject copying src/validate_pyproject/_tomllib.py -> build/lib/validate_pyproject copying src/validate_pyproject/cli.py -> build/lib/validate_pyproject copying src/validate_pyproject/remote.py -> build/lib/validate_pyproject copying src/validate_pyproject/error_reporting.py -> build/lib/validate_pyproject copying src/validate_pyproject/extra_validations.py -> build/lib/validate_pyproject creating build/lib/validate_pyproject/vendoring copying src/validate_pyproject/vendoring/__init__.py -> build/lib/validate_pyproject/vendoring copying src/validate_pyproject/vendoring/__main__.py -> build/lib/validate_pyproject/vendoring copying src/validate_pyproject/vendoring/cli.py -> build/lib/validate_pyproject/vendoring creating build/lib/validate_pyproject/plugins copying src/validate_pyproject/plugins/__init__.py -> build/lib/validate_pyproject/plugins creating build/lib/validate_pyproject/pre_compile copying src/validate_pyproject/pre_compile/__init__.py -> build/lib/validate_pyproject/pre_compile copying src/validate_pyproject/pre_compile/__main__.py -> build/lib/validate_pyproject/pre_compile copying src/validate_pyproject/pre_compile/cli.py -> build/lib/validate_pyproject/pre_compile running egg_info writing src/validate_pyproject.egg-info/PKG-INFO writing dependency_links to src/validate_pyproject.egg-info/dependency_links.txt writing entry points to src/validate_pyproject.egg-info/entry_points.txt writing requirements to src/validate_pyproject.egg-info/requires.txt writing top-level names to src/validate_pyproject.egg-info/top_level.txt adding license file 'LICENSE.txt' adding license file 'NOTICE.txt' adding license file 'AUTHORS.rst' writing manifest file 'src/validate_pyproject.egg-info/SOURCES.txt' copying src/validate_pyproject/project_metadata.schema.json -> build/lib/validate_pyproject copying src/validate_pyproject/py.typed -> build/lib/validate_pyproject copying src/validate_pyproject/pyproject_toml.schema.json -> build/lib/validate_pyproject copying src/validate_pyproject/plugins/distutils.schema.json -> build/lib/validate_pyproject/plugins copying src/validate_pyproject/plugins/setuptools.schema.json -> build/lib/validate_pyproject/plugins copying src/validate_pyproject/pre_compile/NOTICE.template -> build/lib/validate_pyproject/pre_compile copying src/validate_pyproject/pre_compile/api-notice.template -> build/lib/validate_pyproject/pre_compile copying src/validate_pyproject/pre_compile/cli-notice.template -> build/lib/validate_pyproject/pre_compile copying src/validate_pyproject/pre_compile/main_file.template -> build/lib/validate_pyproject/pre_compile installing to build/bdist.linux-riscv64/wheel running install running install_lib creating build/bdist.linux-riscv64/wheel creating build/bdist.linux-riscv64/wheel/validate_pyproject creating build/bdist.linux-riscv64/wheel/validate_pyproject/vendoring copying build/lib/validate_pyproject/vendoring/__init__.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject/vendoring copying build/lib/validate_pyproject/vendoring/__main__.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject/vendoring copying build/lib/validate_pyproject/vendoring/cli.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject/vendoring copying build/lib/validate_pyproject/formats.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject copying build/lib/validate_pyproject/errors.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject copying build/lib/validate_pyproject/types.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject copying build/lib/validate_pyproject/caching.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject copying build/lib/validate_pyproject/project_metadata.schema.json -> build/bdist.linux-riscv64/wheel/./validate_pyproject creating build/bdist.linux-riscv64/wheel/validate_pyproject/plugins copying build/lib/validate_pyproject/plugins/setuptools.schema.json -> build/bdist.linux-riscv64/wheel/./validate_pyproject/plugins copying build/lib/validate_pyproject/plugins/__init__.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject/plugins copying build/lib/validate_pyproject/plugins/distutils.schema.json -> build/bdist.linux-riscv64/wheel/./validate_pyproject/plugins copying build/lib/validate_pyproject/http.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject copying build/lib/validate_pyproject/__init__.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject copying build/lib/validate_pyproject/api.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject copying build/lib/validate_pyproject/repo_review.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject copying build/lib/validate_pyproject/__main__.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject copying build/lib/validate_pyproject/_resources.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject copying build/lib/validate_pyproject/_tomllib.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject creating build/bdist.linux-riscv64/wheel/validate_pyproject/pre_compile copying build/lib/validate_pyproject/pre_compile/cli-notice.template -> build/bdist.linux-riscv64/wheel/./validate_pyproject/pre_compile copying build/lib/validate_pyproject/pre_compile/__init__.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject/pre_compile copying build/lib/validate_pyproject/pre_compile/__main__.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject/pre_compile copying build/lib/validate_pyproject/pre_compile/api-notice.template -> build/bdist.linux-riscv64/wheel/./validate_pyproject/pre_compile copying build/lib/validate_pyproject/pre_compile/NOTICE.template -> build/bdist.linux-riscv64/wheel/./validate_pyproject/pre_compile copying build/lib/validate_pyproject/pre_compile/cli.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject/pre_compile copying build/lib/validate_pyproject/pre_compile/main_file.template -> build/bdist.linux-riscv64/wheel/./validate_pyproject/pre_compile copying build/lib/validate_pyproject/py.typed -> build/bdist.linux-riscv64/wheel/./validate_pyproject copying build/lib/validate_pyproject/cli.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject copying build/lib/validate_pyproject/pyproject_toml.schema.json -> build/bdist.linux-riscv64/wheel/./validate_pyproject copying build/lib/validate_pyproject/remote.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject copying build/lib/validate_pyproject/error_reporting.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject copying build/lib/validate_pyproject/extra_validations.py -> build/bdist.linux-riscv64/wheel/./validate_pyproject running install_egg_info Copying src/validate_pyproject.egg-info to build/bdist.linux-riscv64/wheel/./validate_pyproject-0.26-py3.14.egg-info running install_scripts creating build/bdist.linux-riscv64/wheel/validate_pyproject-0.26.dist-info/WHEEL creating '/build/python-validate-pyproject/src/validate-pyproject/dist/.tmp-t_2lhzl2/validate_pyproject-0.26-py3-none-any.whl' and adding 'build/bdist.linux-riscv64/wheel' to it adding 'validate_pyproject/__init__.py' adding 'validate_pyproject/__main__.py' adding 'validate_pyproject/_resources.py' adding 'validate_pyproject/_tomllib.py' adding 'validate_pyproject/api.py' adding 'validate_pyproject/caching.py' adding 'validate_pyproject/cli.py' adding 'validate_pyproject/error_reporting.py' adding 'validate_pyproject/errors.py' adding 'validate_pyproject/extra_validations.py' adding 'validate_pyproject/formats.py' adding 'validate_pyproject/http.py' adding 'validate_pyproject/project_metadata.schema.json' adding 'validate_pyproject/py.typed' adding 'validate_pyproject/pyproject_toml.schema.json' adding 'validate_pyproject/remote.py' adding 'validate_pyproject/repo_review.py' adding 'validate_pyproject/types.py' adding 'validate_pyproject/plugins/__init__.py' adding 'validate_pyproject/plugins/distutils.schema.json' adding 'validate_pyproject/plugins/setuptools.schema.json' adding 'validate_pyproject/pre_compile/NOTICE.template' adding 'validate_pyproject/pre_compile/__init__.py' adding 'validate_pyproject/pre_compile/__main__.py' adding 'validate_pyproject/pre_compile/api-notice.template' adding 'validate_pyproject/pre_compile/cli-notice.template' adding 'validate_pyproject/pre_compile/cli.py' adding 'validate_pyproject/pre_compile/main_file.template' adding 'validate_pyproject/vendoring/__init__.py' adding 'validate_pyproject/vendoring/__main__.py' adding 'validate_pyproject/vendoring/cli.py' adding 'validate_pyproject-0.26.dist-info/licenses/AUTHORS.rst' adding 'validate_pyproject-0.26.dist-info/licenses/LICENSE.txt' adding 'validate_pyproject-0.26.dist-info/licenses/NOTICE.txt' adding 'validate_pyproject-0.26.dist-info/METADATA' adding 'validate_pyproject-0.26.dist-info/WHEEL' adding 'validate_pyproject-0.26.dist-info/entry_points.txt' adding 'validate_pyproject-0.26.dist-info/top_level.txt' adding 'validate_pyproject-0.26.dist-info/RECORD' removing build/bdist.linux-riscv64/wheel Successfully built validate_pyproject-0.26-py3-none-any.whl ==> Starting check()... ============================= test session starts ============================== platform linux -- Python 3.14.7, pytest-8.4.2, pluggy-1.6.0 rootdir: /build/python-validate-pyproject/src/validate-pyproject configfile: pyproject.toml testpaths: src, tests collected 626 items tests/pre_compile/test_cli.py .. [ 0%] tests/test_api.py ............... [ 2%] tests/test_caching.py .... [ 3%] tests/test_cli.py ..................... [ 6%] tests/test_error_reporting.py ........ [ 7%] tests/test_examples.py ................................................. [ 15%] ...........................................FFFFF........................ [ 27%] ................................................... [ 35%] tests/test_formats.py .................................................. [ 43%] ........................................................................ [ 54%] ........................................................................ [ 66%] . [ 66%] tests/test_json_schema_summary.py ........... [ 68%] tests/test_plugins.py ............ [ 70%] tests/test_pre_compile.py .............................................. [ 77%] ........................................................................ [ 89%] ........................................................ [ 98%] tests/test_repo_review.py ......... [ 99%] tests/test_vendoring.py ... [100%] =================================== FAILURES =================================== ______________ test_invalid_examples_api[store/ruff-badcode.toml] ______________ self = http_class = req = http_conn_args = {'context': } host = 'www.schemastore.org' h = headers = {'Connection': 'close', 'Host': 'www.schemastore.org', 'User-Agent': 'Python-urllib/3.14'} def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update(req.headers) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib/python3.14/urllib/request.py:1320: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.14/http/client.py:1386: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib/python3.14/http/client.py:1432: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib/python3.14/http/client.py:1381: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib/python3.14/http/client.py:1141: in _send_output self.send(msg) /usr/lib/python3.14/http/client.py:1085: in send self.connect() /usr/lib/python3.14/http/client.py:1520: in connect super().connect() /usr/lib/python3.14/http/client.py:1051: in connect self.sock = self._create_connection( /usr/lib/python3.14/socket.py:850: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'www.schemastore.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E socket.gaierror: [Errno -5] No address associated with hostname /usr/lib/python3.14/socket.py:989: gaierror During handling of the above exception, another exception occurred: invalid_example = PosixPath('/build/python-validate-pyproject/src/validate-pyproject/tests/invalid-examples/store/ruff-badcode.toml') def test_invalid_examples_api(invalid_example: Path) -> None: > load_tools = get_tools(invalid_example) ^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_examples.py:31: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/helpers.py:36: in get_tools load_tools.extend(load_store(store)) test-env/lib/python3.14/site-packages/validate_pyproject/remote.py:92: in load_store yield RemotePlugin.from_url("", absolute_url) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ test-env/lib/python3.14/site-packages/validate_pyproject/remote.py:53: in from_url fragment, schema = load_from_uri(url) ^^^^^^^^^^^^^^^^^^ test-env/lib/python3.14/site-packages/validate_pyproject/remote.py:34: in load_from_uri download = caching.as_file(http.open_url, url, cache_dir) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ test-env/lib/python3.14/site-packages/validate_pyproject/caching.py:31: in as_file return fn(arg) ^^^^^^^ test-env/lib/python3.14/site-packages/validate_pyproject/http.py:17: in open_url with urlopen(url, timeout=_TIMEOUT) as response: # noqa: S310 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:187: in urlopen return opener.open(url, data, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:493: in open response = meth(req, response) ^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:602: in http_response response = self.parent.error( /usr/lib/python3.14/urllib/request.py:525: in error result = self._call_chain(*args) ^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:464: in _call_chain result = func(*args) ^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:718: in http_error_302 return self.parent.open(new, timeout=req.timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:487: in open response = self._open(req, data) ^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:504: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib/python3.14/urllib/request.py:464: in _call_chain result = func(*args) ^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:1368: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'context': } host = 'www.schemastore.org' h = headers = {'Connection': 'close', 'Host': 'www.schemastore.org', 'User-Agent': 'Python-urllib/3.14'} def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update(req.headers) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib/python3.14/urllib/request.py:1323: URLError ------------------------------ Captured log call ------------------------------- INFO validate_pyproject.remote:remote.py:81 Loading black from store: https://json.schemastore.org/pyproject.json INFO validate_pyproject.remote:remote.py:81 Loading cibuildwheel from store: https://json.schemastore.org/pyproject.json INFO validate_pyproject.remote:remote.py:81 Loading fastapi from store: https://json.schemastore.org/pyproject.json INFO validate_pyproject.remote:remote.py:81 Loading scheduled from store: https://json.schemastore.org/pyproject.json INFO validate_pyproject.remote:remote.py:81 Loading mypy from store: https://json.schemastore.org/pyproject.json INFO validate_pyproject.remote:remote.py:81 Loading ruff from store: https://json.schemastore.org/pyproject.json INFO validate_pyproject.remote:remote.py:81 Loading ty from store: https://json.schemastore.org/pyproject.json INFO validate_pyproject.remote:remote.py:81 Loading hatch from store: https://json.schemastore.org/pyproject.json INFO validate_pyproject.remote:remote.py:81 Loading maturin from store: https://json.schemastore.org/pyproject.json INFO validate_pyproject.remote:remote.py:81 Loading scikit-build from store: https://json.schemastore.org/pyproject.json INFO validate_pyproject.remote:remote.py:81 Loading setuptools_scm from store: https://json.schemastore.org/pyproject.json INFO validate_pyproject.remote:remote.py:81 Loading pixi from store: https://json.schemastore.org/pyproject.json INFO validate_pyproject.remote:remote.py:81 Loading poe from store: https://json.schemastore.org/pyproject.json INFO validate_pyproject.remote:remote.py:81 Loading poetry from store: https://json.schemastore.org/pyproject.json INFO validate_pyproject.remote:remote.py:81 Loading pdm from store: https://json.schemastore.org/pyproject.json INFO validate_pyproject.remote:remote.py:81 Loading pyright from store: https://json.schemastore.org/pyproject.json ________ test_invalid_examples_api[store/cibw-overrides-noaction.toml] _________ self = http_class = req = http_conn_args = {'context': } host = 'json.schemastore.org' h = headers = {'Connection': 'close', 'Host': 'json.schemastore.org', 'User-Agent': 'Python-urllib/3.14'} def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update(req.headers) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib/python3.14/urllib/request.py:1320: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.14/http/client.py:1386: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib/python3.14/http/client.py:1432: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib/python3.14/http/client.py:1381: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib/python3.14/http/client.py:1141: in _send_output self.send(msg) /usr/lib/python3.14/http/client.py:1085: in send self.connect() /usr/lib/python3.14/http/client.py:1520: in connect super().connect() /usr/lib/python3.14/http/client.py:1051: in connect self.sock = self._create_connection( /usr/lib/python3.14/socket.py:850: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json.schemastore.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E socket.gaierror: [Errno -5] No address associated with hostname /usr/lib/python3.14/socket.py:989: gaierror During handling of the above exception, another exception occurred: invalid_example = PosixPath('/build/python-validate-pyproject/src/validate-pyproject/tests/invalid-examples/store/cibw-overrides-noaction.toml') def test_invalid_examples_api(invalid_example: Path) -> None: > load_tools = get_tools(invalid_example) ^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_examples.py:31: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/helpers.py:36: in get_tools load_tools.extend(load_store(store)) test-env/lib/python3.14/site-packages/validate_pyproject/remote.py:71: in load_store fragment, contents = load_from_uri(pyproject_url) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ test-env/lib/python3.14/site-packages/validate_pyproject/remote.py:34: in load_from_uri download = caching.as_file(http.open_url, url, cache_dir) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ test-env/lib/python3.14/site-packages/validate_pyproject/caching.py:31: in as_file return fn(arg) ^^^^^^^ test-env/lib/python3.14/site-packages/validate_pyproject/http.py:17: in open_url with urlopen(url, timeout=_TIMEOUT) as response: # noqa: S310 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:187: in urlopen return opener.open(url, data, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:487: in open response = self._open(req, data) ^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:504: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib/python3.14/urllib/request.py:464: in _call_chain result = func(*args) ^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:1368: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'context': } host = 'json.schemastore.org' h = headers = {'Connection': 'close', 'Host': 'json.schemastore.org', 'User-Agent': 'Python-urllib/3.14'} def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update(req.headers) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib/python3.14/urllib/request.py:1323: URLError ______________ test_invalid_examples_api[store/ruff-unknown.toml] ______________ self = http_class = req = http_conn_args = {'context': } host = 'json.schemastore.org' h = headers = {'Connection': 'close', 'Host': 'json.schemastore.org', 'User-Agent': 'Python-urllib/3.14'} def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update(req.headers) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib/python3.14/urllib/request.py:1320: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.14/http/client.py:1386: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib/python3.14/http/client.py:1432: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib/python3.14/http/client.py:1381: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib/python3.14/http/client.py:1141: in _send_output self.send(msg) /usr/lib/python3.14/http/client.py:1085: in send self.connect() /usr/lib/python3.14/http/client.py:1520: in connect super().connect() /usr/lib/python3.14/http/client.py:1051: in connect self.sock = self._create_connection( /usr/lib/python3.14/socket.py:850: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json.schemastore.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E socket.gaierror: [Errno -5] No address associated with hostname /usr/lib/python3.14/socket.py:989: gaierror During handling of the above exception, another exception occurred: invalid_example = PosixPath('/build/python-validate-pyproject/src/validate-pyproject/tests/invalid-examples/store/ruff-unknown.toml') def test_invalid_examples_api(invalid_example: Path) -> None: > load_tools = get_tools(invalid_example) ^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_examples.py:31: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/helpers.py:36: in get_tools load_tools.extend(load_store(store)) test-env/lib/python3.14/site-packages/validate_pyproject/remote.py:71: in load_store fragment, contents = load_from_uri(pyproject_url) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ test-env/lib/python3.14/site-packages/validate_pyproject/remote.py:34: in load_from_uri download = caching.as_file(http.open_url, url, cache_dir) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ test-env/lib/python3.14/site-packages/validate_pyproject/caching.py:31: in as_file return fn(arg) ^^^^^^^ test-env/lib/python3.14/site-packages/validate_pyproject/http.py:17: in open_url with urlopen(url, timeout=_TIMEOUT) as response: # noqa: S310 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:187: in urlopen return opener.open(url, data, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:487: in open response = self._open(req, data) ^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:504: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib/python3.14/urllib/request.py:464: in _call_chain result = func(*args) ^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:1368: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'context': } host = 'json.schemastore.org' h = headers = {'Connection': 'close', 'Host': 'json.schemastore.org', 'User-Agent': 'Python-urllib/3.14'} def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update(req.headers) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib/python3.14/urllib/request.py:1323: URLError _________________ test_invalid_examples_api[ruff/unknown.toml] _________________ self = http_class = req = http_conn_args = {'context': } host = 'json.schemastore.org' h = headers = {'Connection': 'close', 'Host': 'json.schemastore.org', 'User-Agent': 'Python-urllib/3.14'} def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update(req.headers) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib/python3.14/urllib/request.py:1320: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.14/http/client.py:1386: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib/python3.14/http/client.py:1432: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib/python3.14/http/client.py:1381: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib/python3.14/http/client.py:1141: in _send_output self.send(msg) /usr/lib/python3.14/http/client.py:1085: in send self.connect() /usr/lib/python3.14/http/client.py:1520: in connect super().connect() /usr/lib/python3.14/http/client.py:1051: in connect self.sock = self._create_connection( /usr/lib/python3.14/socket.py:850: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json.schemastore.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E socket.gaierror: [Errno -5] No address associated with hostname /usr/lib/python3.14/socket.py:989: gaierror During handling of the above exception, another exception occurred: invalid_example = PosixPath('/build/python-validate-pyproject/src/validate-pyproject/tests/invalid-examples/ruff/unknown.toml') def test_invalid_examples_api(invalid_example: Path) -> None: > load_tools = get_tools(invalid_example) ^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_examples.py:31: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/helpers.py:33: in get_tools load_tools = [RemotePlugin.from_url(k, v) for k, v in tools.items()] ^^^^^^^^^^^^^^^^^^^^^^^^^^^ test-env/lib/python3.14/site-packages/validate_pyproject/remote.py:53: in from_url fragment, schema = load_from_uri(url) ^^^^^^^^^^^^^^^^^^ test-env/lib/python3.14/site-packages/validate_pyproject/remote.py:34: in load_from_uri download = caching.as_file(http.open_url, url, cache_dir) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ test-env/lib/python3.14/site-packages/validate_pyproject/caching.py:31: in as_file return fn(arg) ^^^^^^^ test-env/lib/python3.14/site-packages/validate_pyproject/http.py:17: in open_url with urlopen(url, timeout=_TIMEOUT) as response: # noqa: S310 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:187: in urlopen return opener.open(url, data, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:487: in open response = self._open(req, data) ^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:504: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib/python3.14/urllib/request.py:464: in _call_chain result = func(*args) ^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:1368: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'context': } host = 'json.schemastore.org' h = headers = {'Connection': 'close', 'Host': 'json.schemastore.org', 'User-Agent': 'Python-urllib/3.14'} def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update(req.headers) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib/python3.14/urllib/request.py:1323: URLError _________________ test_invalid_examples_api[ruff/badcode.toml] _________________ self = http_class = req = http_conn_args = {'context': } host = 'json.schemastore.org' h = headers = {'Connection': 'close', 'Host': 'json.schemastore.org', 'User-Agent': 'Python-urllib/3.14'} def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update(req.headers) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib/python3.14/urllib/request.py:1320: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.14/http/client.py:1386: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib/python3.14/http/client.py:1432: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib/python3.14/http/client.py:1381: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib/python3.14/http/client.py:1141: in _send_output self.send(msg) /usr/lib/python3.14/http/client.py:1085: in send self.connect() /usr/lib/python3.14/http/client.py:1520: in connect super().connect() /usr/lib/python3.14/http/client.py:1051: in connect self.sock = self._create_connection( /usr/lib/python3.14/socket.py:850: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json.schemastore.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E socket.gaierror: [Errno -5] No address associated with hostname /usr/lib/python3.14/socket.py:989: gaierror During handling of the above exception, another exception occurred: invalid_example = PosixPath('/build/python-validate-pyproject/src/validate-pyproject/tests/invalid-examples/ruff/badcode.toml') def test_invalid_examples_api(invalid_example: Path) -> None: > load_tools = get_tools(invalid_example) ^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_examples.py:31: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/helpers.py:33: in get_tools load_tools = [RemotePlugin.from_url(k, v) for k, v in tools.items()] ^^^^^^^^^^^^^^^^^^^^^^^^^^^ test-env/lib/python3.14/site-packages/validate_pyproject/remote.py:53: in from_url fragment, schema = load_from_uri(url) ^^^^^^^^^^^^^^^^^^ test-env/lib/python3.14/site-packages/validate_pyproject/remote.py:34: in load_from_uri download = caching.as_file(http.open_url, url, cache_dir) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ test-env/lib/python3.14/site-packages/validate_pyproject/caching.py:31: in as_file return fn(arg) ^^^^^^^ test-env/lib/python3.14/site-packages/validate_pyproject/http.py:17: in open_url with urlopen(url, timeout=_TIMEOUT) as response: # noqa: S310 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:187: in urlopen return opener.open(url, data, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:487: in open response = self._open(req, data) ^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:504: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib/python3.14/urllib/request.py:464: in _call_chain result = func(*args) ^^^^^^^^^^^ /usr/lib/python3.14/urllib/request.py:1368: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'context': } host = 'json.schemastore.org' h = headers = {'Connection': 'close', 'Host': 'json.schemastore.org', 'User-Agent': 'Python-urllib/3.14'} def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update(req.headers) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib/python3.14/urllib/request.py:1323: URLError =============================== warnings summary =============================== test-env/lib/python3.14/site-packages/validate_pyproject/cli.py:55 /build/python-validate-pyproject/src/validate-pyproject/test-env/lib/python3.14/site-packages/validate_pyproject/cli.py:55: PendingDeprecationWarning: FileType is deprecated. Simply open files after parsing arguments. _STDIN = argparse.FileType("r", encoding="utf-8")("-") test-env/lib/python3.14/site-packages/validate_pyproject/cli.py:67 /build/python-validate-pyproject/src/validate-pyproject/test-env/lib/python3.14/site-packages/validate_pyproject/cli.py:67: PendingDeprecationWarning: FileType is deprecated. Simply open files after parsing arguments. type=argparse.FileType("r", encoding="utf-8"), -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED tests/test_examples.py::test_invalid_examples_api[store/ruff-badcode.toml] FAILED tests/test_examples.py::test_invalid_examples_api[store/cibw-overrides-noaction.toml] FAILED tests/test_examples.py::test_invalid_examples_api[store/ruff-unknown.toml] FAILED tests/test_examples.py::test_invalid_examples_api[ruff/unknown.toml] FAILED tests/test_examples.py::test_invalid_examples_api[ruff/badcode.toml] ============ 5 failed, 621 passed, 2 warnings in 5210.11s (1:26:50) ============ ==> ERROR: A failure occurred in check().  Aborting... ==> ERROR: Build failed, check /var/lib/archbuild/extra-riscv64/felix-4/build receiving incremental file list python-validate-pyproject-0.26-1-riscv64-build.log python-validate-pyproject-0.26-1-riscv64-check.log sent 62 bytes received 5,656 bytes 3,812.00 bytes/sec total size is 63,632 speedup is 11.13