==> Building on articuno ==> Checking for remote environment... ==> Syncing package to remote host... sending incremental file list created directory packages/yt-dlp ./ .SRCINFO 1,649 100% 0.00kB/s 0:00:00 1,649 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=3/5) .nvchecker.toml 71 100% 69.34kB/s 0:00:00 71 100% 69.34kB/s 0:00:00 (xfr#2, to-chk=2/5) PKGBUILD 1,961 100% 1.87MB/s 0:00:00 1,961 100% 1.87MB/s 0:00:00 (xfr#3, to-chk=1/5) yt-dlp-2024.04.09-2.log 488 100% 476.56kB/s 0:00:00 488 100% 476.56kB/s 0:00:00 (xfr#4, to-chk=0/5) sent 2,207 bytes received 133 bytes 4,680.00 bytes/sec total size is 3,846 speedup is 1.64 ==> Running extra-riscv64-build -- -d /home/felix/packages/riscv64-pkg-cache:/var/cache/pacman/pkg -l root10 on remote host... ==> Locking clean chroot...done [?25l:: Synchronizing package databases... core downloading... extra downloading... :: Starting full system upgrade... there is nothing to do [?25h==> Building in chroot for [extra] (riscv64)... ==> Locking chroot copy [root10]...done ==> Locking clean chroot [/var/lib/archbuild/extra-riscv64/root]...done ==> Synchronizing chroot copy [/var/lib/archbuild/extra-riscv64/root] -> [root10]...done ==> Making package: yt-dlp 2024.04.09-2 (Thu May 23 08:41:03 2024) ==> Retrieving sources...  -> Downloading yt-dlp-2024.04.09.tar.gz... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 5458k 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0 38 5458k 38 2108k 0 0 891k 0 0:00:06 0:00:02 0:00:04 3603k 100 5458k 100 5458k 0 0 2158k 0 0:00:02 0:00:02 --:--:-- 7288k ==> Validating source files with sha256sums... yt-dlp-2024.04.09.tar.gz ... Passed ==> Making package: yt-dlp 2024.04.09-2 (Thu May 23 08:41:27 2024) ==> Checking runtime dependencies... ==> Installing missing dependencies... [?25lresolving dependencies... looking for conflicting packages... Package (8) New Version Net Change core/expat 2.6.2-1 0.38 MiB extra/mpdecimal 4.0.0-2 0.29 MiB extra/python-charset-normalizer 3.3.2-2 0.43 MiB extra/python-idna 3.6-2 0.70 MiB core/python 3.12.3-1 105.93 MiB extra/python-certifi 2024.02.02-2 0.02 MiB extra/python-requests 2.32.2-1 0.59 MiB extra/python-urllib3 1.26.18-3 1.26 MiB Total Installed Size: 109.59 MiB :: Proceed with installation? [Y/n] checking keyring... checking package integrity... loading package files... checking for file conflicts... :: Processing package changes... installing expat... 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-certifi... installing python-charset-normalizer... installing python-idna... installing python-urllib3... Optional dependencies for python-urllib3 python-brotli: Brotli support python-certifi: security support [installed] python-cryptography: security support python-idna: security support [installed] python-pyopenssl: security support python-pysocks: SOCKS support installing python-requests... Optional dependencies for python-requests python-chardet: alternative character encoding library python-pysocks: SOCKS proxy support [?25h==> Checking buildtime dependencies... ==> Installing missing dependencies... [?25lresolving dependencies... looking for conflicting packages... Package (240) New Version Net Change Download Size extra/ghc-libs 9.2.8-1.1 159.52 MiB extra/haskell-aeson 2.1.2.1-44 11.33 MiB extra/haskell-aeson-pretty 0.8.10-4 0.18 MiB extra/haskell-ansi-terminal 0.11.4-66.1 0.93 MiB extra/haskell-ansi-wl-pprint 0.6.9-418.1 0.33 MiB extra/haskell-appar 0.1.8-14 0.13 MiB extra/haskell-asn1-encoding 0.9.6-230 0.53 MiB extra/haskell-asn1-parse 0.9.5-230 0.08 MiB extra/haskell-asn1-types 0.3.4-209 0.55 MiB extra/haskell-assoc 1.0.2-260.1 0.07 MiB extra/haskell-async 2.2.5-27.1 0.44 MiB extra/haskell-attoparsec 0.14.4-74 2.97 MiB extra/haskell-attoparsec-aeson 2.1.0.0-28 0.00 MiB extra/haskell-attoparsec-iso8601 1.1.0.0-50 0.19 MiB extra/haskell-auto-update 0.1.6-337 0.14 MiB extra/haskell-base-compat 0.12.2-2 0.33 MiB extra/haskell-base-compat-batteries 0.12.2-83.1 0.34 MiB extra/haskell-base-orphans 0.8.8.2-13.1 0.07 MiB extra/haskell-base-unicode-symbols 0.2.4.2-14 0.09 MiB extra/haskell-base16-bytestring 1.0.2.0-80 0.09 MiB extra/haskell-base64 0.4.2.4-69 3.27 MiB extra/haskell-base64-bytestring 1.2.1.0-104 0.18 MiB extra/haskell-basement 0.0.16-2 6.39 MiB extra/haskell-bifunctors 5.6-71.1 3.39 MiB extra/haskell-bitvec 1.1.3.0-91 1.85 MiB extra/haskell-blaze-builder 0.4.2.3-2 0.59 MiB extra/haskell-blaze-html 0.9.1.2-226 4.19 MiB extra/haskell-blaze-markup 0.8.3.0-10 0.79 MiB extra/haskell-boring 0.2.1-3 0.08 MiB extra/haskell-bsb-http-chunked 0.0.0.4-381 0.03 MiB extra/haskell-byteorder 1.0.4-25 0.07 MiB extra/haskell-call-stack 0.4.0-184.1 0.07 MiB extra/haskell-case-insensitive 1.2.1.0-203 0.17 MiB extra/haskell-cassava 0.5.3.1-1 2.26 MiB extra/haskell-cereal 0.5.8.3-2 1.39 MiB extra/haskell-citeproc 0.8.1-102 9.22 MiB extra/haskell-cmdargs 0.10.22-2 2.54 MiB extra/haskell-colour 2.3.6-210.1 0.99 MiB extra/haskell-commonmark 0.2.4-3.1 11.42 MiB extra/haskell-commonmark-extensions 0.2.3.6-1 2.63 MiB extra/haskell-commonmark-pandoc 0.2.1.3-78 0.26 MiB extra/haskell-comonad 5.0.8-255.1 0.67 MiB extra/haskell-conduit 1.3.5-49 2.58 MiB extra/haskell-conduit-extra 1.3.6-130 0.98 MiB extra/haskell-constraints 0.13.4-49 1.81 MiB extra/haskell-contravariant 1.5.5-4 0.48 MiB extra/haskell-cookie 0.4.6-2 0.16 MiB extra/haskell-crypton 0.34-11 12.30 MiB extra/haskell-crypton-connection 0.3.2-7 0.34 MiB extra/haskell-crypton-x509 1.7.6-28 1.94 MiB extra/haskell-crypton-x509-store 1.6.9-28 0.17 MiB extra/haskell-crypton-x509-system 1.6.7-28 0.07 MiB extra/haskell-crypton-x509-validation 1.6.12-28 0.38 MiB extra/haskell-data-array-byte 0.1.0.1-55.1 0.14 MiB extra/haskell-data-default 0.7.1.1-306 0.01 MiB extra/haskell-data-default-class 0.1.2.0-25 0.06 MiB extra/haskell-data-default-instances-containers 0.0.1-37 0.02 MiB extra/haskell-data-default-instances-dlist 0.0.1-319 0.01 MiB extra/haskell-data-default-instances-old-locale 0.0.1-37 0.01 MiB extra/haskell-data-fix 0.3.2-102 0.22 MiB extra/haskell-dec 0.0.5-5 0.06 MiB extra/haskell-digest 0.0.1.7-2 0.05 MiB extra/haskell-digits 0.3.1-21 0.04 MiB extra/haskell-distributive 0.6.2.1-209 0.28 MiB extra/haskell-dlist 1.0-241 0.30 MiB extra/haskell-doclayout 0.4.0.1-29 1.90 MiB extra/haskell-doctemplates 0.11-68 2.02 MiB extra/haskell-easy-file 0.2.5-21 0.18 MiB extra/haskell-emojis 0.1.3-10 6.96 MiB extra/haskell-erf 2.0.0.0-25 0.06 MiB extra/haskell-fast-logger 3.1.2-70 0.47 MiB extra/haskell-file-embed 0.0.15.0-2 0.17 MiB extra/haskell-foldable1-classes-compat 0.1-71.1 0.64 MiB extra/haskell-generically 0.1.1-2 0.11 MiB extra/haskell-ghc-bignum-orphans 0.1.1-2 0.01 MiB extra/haskell-glob 0.10.2-90 0.51 MiB extra/haskell-gridtables 0.1.0.0-48 0.65 MiB extra/haskell-haddock-library 1.11.0-15 1.85 MiB 0.32 MiB extra/haskell-hashable 1.4.3.0-46.1 0.68 MiB extra/haskell-hourglass 0.2.12-246 2.08 MiB extra/haskell-hslua 2.3.0-47 0.06 MiB extra/haskell-hslua-aeson 2.3.0.1-29 0.09 MiB extra/haskell-hslua-classes 2.3.0-48 0.30 MiB extra/haskell-hslua-core 2.3.1-42 0.86 MiB extra/haskell-hslua-list 1.1.1-55 0.03 MiB extra/haskell-hslua-marshalling 2.3.0-43 0.46 MiB extra/haskell-hslua-module-doclayout 1.1.0-53 0.55 MiB extra/haskell-hslua-module-path 1.1.0-48 0.24 MiB extra/haskell-hslua-module-system 1.1.0.1-22 0.37 MiB extra/haskell-hslua-module-text 1.1.0.1-22 0.14 MiB extra/haskell-hslua-module-version 1.1.0-48 0.11 MiB extra/haskell-hslua-module-zip 1.1.1-17 0.21 MiB extra/haskell-hslua-objectorientation 2.3.0-44 0.41 MiB extra/haskell-hslua-packaging 2.3.1-9 0.59 MiB extra/haskell-hslua-repl 0.1.2-8 0.07 MiB extra/haskell-hslua-typing 0.1.1-2 0.29 MiB extra/haskell-http-api-data 0.5.1-51 1.62 MiB extra/haskell-http-client 0.7.15-20 2.38 MiB extra/haskell-http-client-tls 0.3.6.3-54 0.26 MiB extra/haskell-http-date 0.0.11-136 0.20 MiB extra/haskell-http-media 0.8.1.1-14 0.61 MiB extra/haskell-http-types 0.12.4-3 0.93 MiB extra/haskell-http2 4.1.0-17 3.72 MiB extra/haskell-hunit 1.6.2.0-227.1 0.44 MiB extra/haskell-indexed-traversable 0.1.3-63.1 0.88 MiB extra/haskell-indexed-traversable-instances 0.1.1.2-41 0.10 MiB extra/haskell-integer-logarithms 1.0.3.1-7 0.15 MiB extra/haskell-iproute 1.7.12-82 1.26 MiB extra/haskell-ipynb 0.2-136 0.78 MiB extra/haskell-isocline 1.0.9-2 0.53 MiB extra/haskell-jira-wiki-markup 1.5.1-22 1.94 MiB extra/haskell-juicypixels 3.3.8-31 10.48 MiB extra/haskell-lexer 1.1.1-2 1.55 MiB extra/haskell-libyaml 0.1.2-346 0.77 MiB extra/haskell-lpeg 1.0.4-26 0.02 MiB extra/haskell-lua 2.3.2-6 0.52 MiB extra/haskell-memory 0.18.0-8 1.39 MiB extra/haskell-mime-types 0.1.2.0-2 2.16 MiB extra/haskell-mmorph 1.2.0-6 0.21 MiB extra/haskell-monad-control 1.0.3.1-102 0.20 MiB extra/haskell-mono-traversable 1.0.17.0-4 4.89 MiB extra/haskell-network 3.1.4.0-20 1.91 MiB extra/haskell-network-byte-order 0.1.7-2 0.20 MiB extra/haskell-network-uri 2.6.4.2-31 1.04 MiB extra/haskell-old-locale 1.0.0.7-31 0.14 MiB extra/haskell-old-time 1.1.0.4-2 0.52 MiB extra/haskell-onetuple 0.3.1-75 0.02 MiB extra/haskell-only 0.1-23 0.09 MiB extra/haskell-optparse-applicative 0.17.1.0-29.2 1.75 MiB extra/haskell-ordered-containers 0.2.3-2 0.80 MiB extra/haskell-pandoc 3.1.8-28.1 80.09 MiB 11.34 MiB extra/haskell-pandoc-lua-engine 0.2.1.2-16 3.97 MiB extra/haskell-pandoc-lua-marshal 0.2.3-4 2.32 MiB extra/haskell-pandoc-server 0.1.0.5-31 0.59 MiB extra/haskell-pandoc-types 1.23.1-18 5.71 MiB extra/haskell-pem 0.2.4-286 0.09 MiB extra/haskell-pretty-show 1.10-15 0.80 MiB extra/haskell-prettyprinter 1.7.1-162 1.58 MiB extra/haskell-primitive 0.7.4.0-111.1 2.02 MiB extra/haskell-psqueues 0.2.8.0-10 0.99 MiB extra/haskell-quickcheck 2.14.3-64.1 3.96 MiB extra/haskell-random 1.2.1.2-8.1 2.05 MiB extra/haskell-recv 0.1.0-30 0.07 MiB extra/haskell-regex-base 0.94.0.2-3 0.44 MiB extra/haskell-regex-tdfa 1.3.2.2-41 3.91 MiB extra/haskell-resourcet 1.2.6-51 0.51 MiB extra/haskell-safe 0.3.21-5 0.40 MiB extra/haskell-safe-exceptions 0.1.7.4-21 0.18 MiB extra/haskell-scientific 0.3.7.0-113 0.66 MiB extra/haskell-semialign 1.2.0.1-157 0.87 MiB extra/haskell-semigroupoids 5.3.7-139 3.04 MiB extra/haskell-servant 0.20.1-9 1.56 MiB extra/haskell-servant-server 0.20-17 1.62 MiB extra/haskell-sha 1.6.4.4-20 0.51 MiB extra/haskell-simple-sendfile 0.2.32-32 0.08 MiB extra/haskell-singleton-bool 0.1.7-3 0.08 MiB extra/haskell-skylighting 0.14-12 16.94 MiB extra/haskell-skylighting-core 0.14-10 5.91 MiB extra/haskell-skylighting-format-ansi 0.1-117 0.56 MiB extra/haskell-skylighting-format-blaze-html 0.1.1.2-4 0.17 MiB extra/haskell-skylighting-format-context 0.1.0.2-82 0.11 MiB extra/haskell-skylighting-format-latex 0.1-117 0.12 MiB extra/haskell-socks 0.6.1-237 1.03 MiB extra/haskell-some 1.0.5-2 0.47 MiB extra/haskell-sop-core 0.5.0.2-2 1.50 MiB extra/haskell-split 0.2.5-6 0.19 MiB extra/haskell-splitmix 0.1.0.5-22.1 0.20 MiB extra/haskell-statevar 1.2.2-3 0.09 MiB extra/haskell-streaming-commons 0.2.2.6-26 1.10 MiB extra/haskell-strict 0.4.0.1-234.1 1.20 MiB extra/haskell-string-conversions 0.4.0.1-171 0.08 MiB extra/haskell-syb 0.7.2.4-8.1 0.58 MiB extra/haskell-tagged 0.8.8-2 0.35 MiB extra/haskell-tagsoup 0.14.8-226 5.84 MiB extra/haskell-temporary 1.3-585.1 0.07 MiB extra/haskell-texmath 0.12.8.4-12 28.85 MiB extra/haskell-text-conversions 0.3.1.1-63 0.13 MiB extra/haskell-text-icu 0.8.0.5-2 5.07 MiB extra/haskell-text-short 0.1.5-79 0.38 MiB extra/haskell-th-abstraction 0.4.5.0-2 1.10 MiB extra/haskell-th-compat 0.1.5-2 0.13 MiB extra/haskell-th-lift 0.8.4-2 0.23 MiB extra/haskell-th-lift-instances 0.1.20-47 0.26 MiB extra/haskell-these 1.1.1.1-261.1 0.66 MiB extra/haskell-time-compat 1.9.6.1-97 0.33 MiB extra/haskell-time-manager 0.0.1-33 0.08 MiB extra/haskell-tls 1.8.0-28 7.81 MiB extra/haskell-toml-parser 1.3.1.3-15 2.27 MiB extra/haskell-transformers-base 0.4.6-102 0.16 MiB extra/haskell-transformers-compat 0.7.2-2 0.89 MiB extra/haskell-type-equality 1-13 0.01 MiB extra/haskell-typed-process 0.2.11.1-15 0.44 MiB extra/haskell-typst 0.3.2.1-27 16.14 MiB extra/haskell-typst-symbols 0.1.4-2 5.60 MiB extra/haskell-unicode-collation 0.1.3.6-12.1 10.60 MiB extra/haskell-unicode-data 0.4.0.1-33 18.59 MiB extra/haskell-unicode-transforms 0.4.0.1-74.1 2.40 MiB extra/haskell-uniplate 1.6.13-220 2.00 MiB extra/haskell-unix-compat 0.7.1-13 0.04 MiB extra/haskell-unix-time 0.4.12-5 0.21 MiB extra/haskell-unliftio 0.2.25.0-10 1.42 MiB extra/haskell-unliftio-core 0.2.1.0-2 0.09 MiB extra/haskell-unordered-containers 0.2.20-15 1.82 MiB extra/haskell-utf8-string 1.0.2-150 0.50 MiB extra/haskell-uuid-types 1.0.5.1-16 0.37 MiB extra/haskell-vault 0.3.1.5-182 0.23 MiB extra/haskell-vector 0.13.1.0-31.2 10.53 MiB extra/haskell-vector-algorithms 0.9.0.1-91 4.04 MiB extra/haskell-vector-stream 0.1.0.1-2 0.57 MiB extra/haskell-wai 3.2.4-16 0.15 MiB extra/haskell-wai-app-static 3.1.9-8 0.62 MiB extra/haskell-wai-cors 0.2.7-352 0.25 MiB extra/haskell-wai-extra 3.1.14-36.1 1.75 MiB extra/haskell-wai-logger 2.4.0-429.1 0.17 MiB extra/haskell-warp 3.3.30-53 1.65 MiB extra/haskell-witherable 0.4.2-98 0.98 MiB extra/haskell-word8 0.1.3-23 0.11 MiB extra/haskell-xml 1.3.14-31 0.89 MiB extra/haskell-xml-conduit 1.9.1.3-49 2.63 MiB extra/haskell-xml-types 0.3.8-9 1.22 MiB extra/haskell-yaml 0.11.11.2-44 1.12 MiB extra/haskell-zip-archive 0.4.3.2-2 0.73 MiB extra/haskell-zlib 0.6.3.0-60 0.92 MiB extra/hslua-cli 1.4.1-44 0.15 MiB extra/libyaml 0.2.5-2 0.15 MiB extra/lua 5.4.6-3 1.33 MiB extra/lua-lpeg 1.1.0-2 0.05 MiB extra/numactl 2.0.18-1 0.19 MiB extra/python-editables 0.5-3 0.03 MiB extra/python-iniconfig 2.0.0-5 0.04 MiB extra/python-packaging 24.0-1 0.50 MiB extra/python-pathspec 0.12.1-2 0.23 MiB extra/python-pluggy 1.5.0-1 0.20 MiB extra/python-pyproject-hooks 1.1.0-1 0.10 MiB extra/python-trove-classifiers 2024.5.17-1 0.12 MiB extra/pandoc-cli 0.1.1.1-104 0.10 MiB extra/python-build 1.2.1-3 0.19 MiB extra/python-hatchling 1.24.2-1 1.05 MiB extra/python-installer 0.7.0-8 0.18 MiB extra/python-pytest 1:8.1.2-1 3.89 MiB Total Download Size: 11.66 MiB Total Installed Size: 620.96 MiB :: Proceed with installation? [Y/n] :: Retrieving packages... haskell-pandoc-3.1.8-28.1-riscv64 downloading... haskell-haddock-library-1.11.0-15-riscv64 downloading... checking keyring... checking package integrity... loading package files... checking for file conflicts... :: Processing package changes... installing numactl... installing ghc-libs... installing lua... installing haskell-lua... installing haskell-hslua-core... installing haskell-hslua-marshalling... installing haskell-isocline... installing haskell-hslua-repl... installing hslua-cli... installing haskell-dlist... installing haskell-transformers-compat... installing haskell-glob... installing haskell-primitive... installing haskell-vector-stream... installing haskell-vector... installing haskell-zlib... installing haskell-juicypixels... installing haskell-sha... installing haskell-base-orphans... installing haskell-onetuple... installing haskell-erf... installing haskell-splitmix... installing haskell-random... installing haskell-quickcheck... installing haskell-data-array-byte... installing haskell-ghc-bignum-orphans... installing haskell-hashable... installing haskell-integer-logarithms... installing haskell-scientific... installing haskell-attoparsec... installing haskell-base-compat... installing haskell-base-compat-batteries... installing haskell-data-fix... installing haskell-generically... installing haskell-tagged... installing haskell-foldable1-classes-compat... installing haskell-indexed-traversable... installing haskell-unordered-containers... installing haskell-indexed-traversable-instances... installing haskell-distributive... installing haskell-comonad... installing haskell-th-abstraction... installing haskell-bifunctors... installing haskell-statevar... installing haskell-contravariant... installing haskell-semigroupoids... installing haskell-assoc... installing haskell-these... installing haskell-semialign... installing haskell-strict... installing haskell-text-short... installing haskell-time-compat... installing haskell-uuid-types... installing haskell-witherable... installing haskell-aeson... installing haskell-attoparsec-aeson... installing haskell-cmdargs... installing haskell-aeson-pretty... installing haskell-base64... installing haskell-blaze-builder... installing haskell-blaze-markup... installing haskell-blaze-html... installing haskell-case-insensitive... installing haskell-data-default-class... installing haskell-data-default-instances-containers... installing haskell-data-default-instances-dlist... installing haskell-old-locale... installing haskell-data-default-instances-old-locale... installing haskell-data-default... installing haskell-file-embed... installing haskell-syb... installing haskell-pandoc-types... installing haskell-safe... installing haskell-text-icu... installing haskell-th-lift... installing haskell-th-lift-instances... installing haskell-unicode-collation... installing haskell-uniplate... installing haskell-split... installing haskell-bitvec... installing haskell-vector-algorithms... installing haskell-mono-traversable... installing haskell-unliftio-core... installing haskell-resourcet... installing haskell-conduit... installing haskell-async... installing haskell-network... installing haskell-streaming-commons... installing haskell-typed-process... installing haskell-conduit-extra... installing haskell-xml-types... installing haskell-xml-conduit... installing haskell-citeproc... installing haskell-unicode-data... installing haskell-unicode-transforms... installing haskell-commonmark... installing haskell-emojis... installing haskell-th-compat... installing haskell-network-uri... installing haskell-commonmark-extensions... installing haskell-commonmark-pandoc... installing haskell-basement... installing haskell-hourglass... installing haskell-memory... installing haskell-asn1-types... installing haskell-asn1-encoding... installing haskell-asn1-parse... installing haskell-crypton... installing haskell-pem... installing haskell-crypton-x509... installing haskell-crypton-x509-store... installing haskell-crypton-x509-system... installing haskell-crypton-x509-validation... installing haskell-cereal... installing haskell-socks... installing haskell-old-time... installing haskell-unix-time... installing haskell-tls... installing haskell-crypton-connection... installing haskell-doclayout... installing haskell-base16-bytestring... installing haskell-base64-bytestring... installing haskell-text-conversions... installing haskell-doctemplates... installing haskell-gridtables... installing haskell-haddock-library... installing haskell-cookie... installing haskell-http-types... installing haskell-appar... installing haskell-byteorder... installing haskell-iproute... installing haskell-mime-types... installing haskell-http-client... installing haskell-http-client-tls... installing haskell-ipynb... installing haskell-jira-wiki-markup... installing haskell-lexer... installing haskell-pretty-show... installing haskell-colour... installing haskell-utf8-string... installing haskell-skylighting-core... installing haskell-ansi-terminal... installing haskell-skylighting-format-ansi... installing haskell-skylighting-format-blaze-html... installing haskell-skylighting-format-context... installing haskell-skylighting-format-latex... installing haskell-skylighting... installing haskell-tagsoup... installing haskell-temporary... installing haskell-typst-symbols... installing haskell-xml... installing haskell-texmath... installing haskell-only... installing haskell-cassava... installing haskell-digits... installing haskell-ordered-containers... installing haskell-regex-base... installing haskell-regex-tdfa... installing haskell-prettyprinter... installing haskell-toml-parser... installing libyaml... installing haskell-libyaml... installing haskell-ansi-wl-pprint... installing haskell-optparse-applicative... installing haskell-yaml... installing haskell-typst... installing haskell-digest... installing haskell-zip-archive... installing haskell-pandoc... Optional dependencies for haskell-pandoc pandoc-crossref: for numbering figures, equations, tables and cross-references to them with pandoc-crossref filter texlive-context: for pdf output using context engine groff: for pdf output using pdfroff engine [installed] python-weasyprint: for pdf output using weasyprint engine typst: for pdf output using typst engine tectonic: for pdf output using tectonic engine texlive-fontsrecommended: for pdf output using latex or xelatex engines texlive-latex: for pdf output using pdflatex engine texlive-xetex: for pdf output using xelatex engine installing haskell-hslua-aeson... installing haskell-hslua-classes... installing haskell-hslua-typing... installing haskell-hslua-objectorientation... installing haskell-hslua-packaging... installing haskell-hslua... installing haskell-hslua-module-doclayout... installing haskell-hslua-module-path... installing haskell-hslua-module-system... installing haskell-hslua-module-text... installing haskell-hslua-module-version... installing haskell-hslua-list... installing haskell-hslua-module-zip... installing lua-lpeg... installing haskell-lpeg... installing haskell-pandoc-lua-marshal... installing haskell-pandoc-lua-engine... installing haskell-type-equality... installing haskell-constraints... installing haskell-attoparsec-iso8601... installing haskell-http-api-data... installing haskell-http-media... installing haskell-transformers-base... installing haskell-monad-control... installing haskell-mmorph... installing haskell-sop-core... installing haskell-boring... installing haskell-dec... installing haskell-some... installing haskell-singleton-bool... installing haskell-string-conversions... installing haskell-vault... installing haskell-servant... installing haskell-wai... installing haskell-http-date... installing haskell-unix-compat... installing haskell-auto-update... installing haskell-easy-file... installing haskell-fast-logger... installing haskell-wai-logger... installing haskell-bsb-http-chunked... installing haskell-network-byte-order... installing haskell-psqueues... installing haskell-safe-exceptions... installing haskell-unliftio... installing haskell-time-manager... installing haskell-http2... installing haskell-recv... installing haskell-simple-sendfile... installing haskell-word8... installing haskell-warp... installing haskell-call-stack... installing haskell-hunit... installing haskell-wai-extra... installing haskell-wai-app-static... installing haskell-servant-server... installing haskell-base-unicode-symbols... installing haskell-wai-cors... installing haskell-pandoc-server... installing pandoc-cli... 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-pathspec... installing python-pluggy... installing python-editables... installing python-trove-classifiers... installing python-hatchling... installing python-installer... installing python-iniconfig... installing python-pytest... :: Running post-transaction hooks... (1/1) Registering Haskell modules... [?25h==> Retrieving sources...  -> Found yt-dlp-2024.04.09.tar.gz ==> WARNING: Skipping all source file integrity checks. ==> Extracting sources...  -> Extracting yt-dlp-2024.04.09.tar.gz with bsdtar ==> Starting build()... * Getting build dependencies for wheel... * Building wheel... Successfully built yt_dlp-2024.4.9-py3-none-any.whl ==> Starting check()... ============================= test session starts ============================== platform linux -- Python 3.12.3, pytest-8.1.2, pluggy-1.5.0 -- /usr/bin/python cachedir: .pytest_cache rootdir: /build/yt-dlp/src/yt-dlp configfile: setup.cfg collecting ... collected 6637 items / 5734 deselected / 903 selected test/test_InfoExtractor.py::TestInfoExtractor::test_download_json PASSED [ 0%] test/test_InfoExtractor.py::TestInfoExtractor::test_extract_jwplayer_data_realworld PASSED [ 0%] test/test_InfoExtractor.py::TestInfoExtractor::test_html_search_meta PASSED [ 0%] test/test_InfoExtractor.py::TestInfoExtractor::test_html_search_regex PASSED [ 0%] test/test_InfoExtractor.py::TestInfoExtractor::test_ie_key PASSED [ 0%] test/test_InfoExtractor.py::TestInfoExtractor::test_opengraph PASSED [ 0%] test/test_InfoExtractor.py::TestInfoExtractor::test_parse_f4m_formats PASSED [ 0%] test/test_InfoExtractor.py::TestInfoExtractor::test_parse_html5_media_entries PASSED [ 0%] test/test_InfoExtractor.py::TestInfoExtractor::test_parse_ism_formats PASSED [ 0%] test/test_InfoExtractor.py::TestInfoExtractor::test_parse_m3u8_formats PASSED [ 1%] test/test_InfoExtractor.py::TestInfoExtractor::test_parse_mpd_formats PASSED [ 1%] test/test_InfoExtractor.py::TestInfoExtractor::test_parse_xspf PASSED [ 1%] test/test_InfoExtractor.py::TestInfoExtractor::test_response_with_expected_status_returns_content PASSED [ 1%] test/test_InfoExtractor.py::TestInfoExtractor::test_search_json_ld_realworld PASSED [ 1%] test/test_YoutubeDL.py::TestFormatSelection::test_audio_only_extractor_format_selection PASSED [ 1%] test/test_YoutubeDL.py::TestFormatSelection::test_default_format_spec PASSED [ 1%] test/test_YoutubeDL.py::TestFormatSelection::test_format_filtering PASSED [ 1%] test/test_YoutubeDL.py::TestFormatSelection::test_format_not_available PASSED [ 1%] test/test_YoutubeDL.py::TestFormatSelection::test_format_selection PASSED [ 2%] test/test_YoutubeDL.py::TestFormatSelection::test_format_selection_audio PASSED [ 2%] test/test_YoutubeDL.py::TestFormatSelection::test_format_selection_audio_exts PASSED [ 2%] test/test_YoutubeDL.py::TestFormatSelection::test_format_selection_issue_10083 PASSED [ 2%] test/test_YoutubeDL.py::TestFormatSelection::test_format_selection_string_ops PASSED [ 2%] test/test_YoutubeDL.py::TestFormatSelection::test_format_selection_video PASSED [ 2%] test/test_YoutubeDL.py::TestFormatSelection::test_invalid_format_specs PASSED [ 2%] test/test_YoutubeDL.py::TestFormatSelection::test_prefer_free_formats PASSED [ 2%] test/test_YoutubeDL.py::TestFormatSelection::test_youtube_format_selection PASSED [ 2%] test/test_YoutubeDL.py::TestYoutubeDL::test_add_extra_info PASSED [ 3%] test/test_YoutubeDL.py::TestYoutubeDL::test_add_headers_cookie PASSED [ 3%] test/test_YoutubeDL.py::TestYoutubeDL::test_do_not_override_ie_key_in_url_transparent PASSED [ 3%] test/test_YoutubeDL.py::TestYoutubeDL::test_format_note PASSED [ 3%] test/test_YoutubeDL.py::TestYoutubeDL::test_header_cookies PASSED [ 3%] test/test_YoutubeDL.py::TestYoutubeDL::test_ignoreerrors_for_playlist_with_url_transparent_iterable_entries PASSED [ 3%] test/test_YoutubeDL.py::TestYoutubeDL::test_infojson_cookies PASSED [ 3%] test/test_YoutubeDL.py::TestYoutubeDL::test_match_filter PASSED [ 3%] test/test_YoutubeDL.py::TestYoutubeDL::test_playlist_items_selection PASSED [ 3%] test/test_YoutubeDL.py::TestYoutubeDL::test_postprocessors PASSED [ 4%] test/test_YoutubeDL.py::TestYoutubeDL::test_prepare_outtmpl_and_filename PASSED [ 4%] test/test_YoutubeDL.py::TestYoutubeDL::test_subtitles PASSED [ 4%] test/test_YoutubeDLCookieJar.py::TestYoutubeDLCookieJar::test_get_cookie_header PASSED [ 4%] test/test_YoutubeDLCookieJar.py::TestYoutubeDLCookieJar::test_get_cookies_for_url PASSED [ 4%] test/test_YoutubeDLCookieJar.py::TestYoutubeDLCookieJar::test_keep_session_cookies PASSED [ 4%] test/test_YoutubeDLCookieJar.py::TestYoutubeDLCookieJar::test_malformed_cookies PASSED [ 4%] test/test_YoutubeDLCookieJar.py::TestYoutubeDLCookieJar::test_strip_httponly_prefix PASSED [ 4%] test/test_aes.py::TestAES::test_cbc_decrypt PASSED [ 4%] test/test_aes.py::TestAES::test_cbc_encrypt PASSED [ 5%] test/test_aes.py::TestAES::test_ctr_decrypt PASSED [ 5%] test/test_aes.py::TestAES::test_ctr_encrypt PASSED [ 5%] test/test_aes.py::TestAES::test_decrypt_text PASSED [ 5%] test/test_aes.py::TestAES::test_ecb_decrypt PASSED [ 5%] test/test_aes.py::TestAES::test_ecb_encrypt PASSED [ 5%] test/test_aes.py::TestAES::test_encrypt PASSED [ 5%] test/test_aes.py::TestAES::test_gcm_decrypt PASSED [ 5%] test/test_aes.py::TestAES::test_key_expansion PASSED [ 5%] test/test_aes.py::TestAES::test_pad_block PASSED [ 6%] test/test_all_urls.py::TestAllURLsMatching::test_facebook_matching PASSED [ 6%] test/test_all_urls.py::TestAllURLsMatching::test_keywords PASSED [ 6%] test/test_all_urls.py::TestAllURLsMatching::test_no_duplicated_ie_names PASSED [ 6%] test/test_all_urls.py::TestAllURLsMatching::test_no_duplicates PASSED [ 6%] test/test_all_urls.py::TestAllURLsMatching::test_pbs PASSED [ 6%] test/test_all_urls.py::TestAllURLsMatching::test_soundcloud_not_matching_sets PASSED [ 6%] test/test_all_urls.py::TestAllURLsMatching::test_tumblr PASSED [ 6%] test/test_all_urls.py::TestAllURLsMatching::test_vimeo_matching PASSED [ 6%] test/test_all_urls.py::TestAllURLsMatching::test_youtube_channel_matching PASSED [ 7%] test/test_all_urls.py::TestAllURLsMatching::test_youtube_feeds PASSED [ 7%] test/test_all_urls.py::TestAllURLsMatching::test_youtube_matching PASSED [ 7%] test/test_all_urls.py::TestAllURLsMatching::test_youtube_playlist_matching PASSED [ 7%] test/test_all_urls.py::TestAllURLsMatching::test_youtube_search_matching PASSED [ 7%] test/test_all_urls.py::TestAllURLsMatching::test_youtube_user_matching PASSED [ 7%] test/test_cache.py::TestCache::test_cache PASSED [ 7%] test/test_compat.py::TestCompat::test_compat_etree_fromstring PASSED [ 7%] test/test_compat.py::TestCompat::test_compat_etree_fromstring_doctype PASSED [ 7%] test/test_compat.py::TestCompat::test_compat_expanduser PASSED [ 8%] test/test_compat.py::TestCompat::test_compat_passthrough PASSED [ 8%] test/test_compat.py::TestCompat::test_compat_urllib_parse_unquote PASSED [ 8%] test/test_compat.py::TestCompat::test_compat_urllib_parse_unquote_plus PASSED [ 8%] test/test_compat.py::TestCompat::test_compat_urllib_parse_urlencode PASSED [ 8%] test/test_compat.py::TestCompat::test_struct_unpack PASSED [ 8%] test/test_config.py::TestConfig::test_config__ENVIRON_DEFAULTS_sanity PASSED [ 8%] test/test_config.py::TestConfig::test_config_all_environ_values PASSED [ 8%] test/test_config.py::TestConfig::test_config_default_expected_locations PASSED [ 8%] test/test_config.py::TestConfig::test_config_default_grouping PASSED [ 9%] test/test_config.py::TestConfig::test_config_early_exit_commandline PASSED [ 9%] test/test_config.py::TestConfig::test_config_early_exit_files PASSED [ 9%] test/test_config.py::TestConfig::test_config_override_commandline PASSED [ 9%] test/test_config.py::TestConfig::test_config_override_files PASSED [ 9%] test/test_cookies.py::TestCookies::test_chrome_cookie_decryptor_linux_derive_key PASSED [ 9%] test/test_cookies.py::TestCookies::test_chrome_cookie_decryptor_linux_v10 PASSED [ 9%] test/test_cookies.py::TestCookies::test_chrome_cookie_decryptor_linux_v11 PASSED [ 9%] test/test_cookies.py::TestCookies::test_chrome_cookie_decryptor_mac_derive_key PASSED [ 9%] test/test_cookies.py::TestCookies::test_chrome_cookie_decryptor_mac_v10 PASSED [ 10%] test/test_cookies.py::TestCookies::test_chrome_cookie_decryptor_windows_v10 PASSED [ 10%] test/test_cookies.py::TestCookies::test_get_desktop_environment PASSED [ 10%] test/test_cookies.py::TestCookies::test_pbkdf2_sha1 PASSED [ 10%] test/test_cookies.py::TestCookies::test_safari_cookie_parsing PASSED [ 10%] test/test_cookies.py::TestLenientSimpleCookie::test_lenient_parsing PASSED [ 10%] test/test_cookies.py::TestLenientSimpleCookie::test_parsing PASSED [ 10%] test/test_downloader_external.py::TestHttpieFD::test_make_cmd PASSED [ 10%] test/test_downloader_external.py::TestAxelFD::test_make_cmd PASSED [ 10%] test/test_downloader_external.py::TestWgetFD::test_make_cmd PASSED [ 11%] test/test_downloader_external.py::TestCurlFD::test_make_cmd PASSED [ 11%] test/test_downloader_external.py::TestAria2cFD::test_make_cmd PASSED [ 11%] test/test_downloader_external.py::TestFFmpegFD::test_make_cmd SKIPPED [ 11%] test/test_downloader_http.py::TestHttpFD::test_chunked PASSED [ 11%] test/test_downloader_http.py::TestHttpFD::test_regular PASSED [ 11%] test/test_execution.py::TestExecution::test_cmdline_umlauts PASSED [ 11%] test/test_execution.py::TestExecution::test_import PASSED [ 11%] test/test_execution.py::TestExecution::test_lazy_extractors PASSED [ 11%] test/test_execution.py::TestExecution::test_main_exec PASSED [ 12%] test/test_execution.py::TestExecution::test_module_exec PASSED [ 12%] test/test_jsinterp.py::TestJSInterpreter::test_add PASSED [ 12%] test/test_jsinterp.py::TestJSInterpreter::test_array_access PASSED [ 12%] test/test_jsinterp.py::TestJSInterpreter::test_assignments PASSED [ 12%] test/test_jsinterp.py::TestJSInterpreter::test_basic PASSED [ 12%] test/test_jsinterp.py::TestJSInterpreter::test_bitwise_operators_overflow PASSED [ 12%] test/test_jsinterp.py::TestJSInterpreter::test_bitwise_operators_typecast PASSED [ 12%] test/test_jsinterp.py::TestJSInterpreter::test_builtins PASSED [ 12%] test/test_jsinterp.py::TestJSInterpreter::test_calc PASSED [ 13%] test/test_jsinterp.py::TestJSInterpreter::test_call PASSED [ 13%] test/test_jsinterp.py::TestJSInterpreter::test_catch PASSED [ 13%] test/test_jsinterp.py::TestJSInterpreter::test_char_code_at PASSED [ 13%] test/test_jsinterp.py::TestJSInterpreter::test_comma PASSED [ 13%] test/test_jsinterp.py::TestJSInterpreter::test_comments SKIPPED (Not implemented) [ 13%] test/test_jsinterp.py::TestJSInterpreter::test_date PASSED [ 13%] test/test_jsinterp.py::TestJSInterpreter::test_div PASSED [ 13%] test/test_jsinterp.py::TestJSInterpreter::test_empty_return PASSED [ 13%] test/test_jsinterp.py::TestJSInterpreter::test_exp PASSED [ 14%] test/test_jsinterp.py::TestJSInterpreter::test_finally PASSED [ 14%] test/test_jsinterp.py::TestJSInterpreter::test_for_loop PASSED [ 14%] test/test_jsinterp.py::TestJSInterpreter::test_for_loop_break PASSED [ 14%] test/test_jsinterp.py::TestJSInterpreter::test_for_loop_continue PASSED [ 14%] test/test_jsinterp.py::TestJSInterpreter::test_for_loop_try PASSED [ 14%] test/test_jsinterp.py::TestJSInterpreter::test_if PASSED [ 14%] test/test_jsinterp.py::TestJSInterpreter::test_literal_list PASSED [ 14%] test/test_jsinterp.py::TestJSInterpreter::test_mod PASSED [ 14%] test/test_jsinterp.py::TestJSInterpreter::test_morespace PASSED [ 15%] test/test_jsinterp.py::TestJSInterpreter::test_mul PASSED [ 15%] test/test_jsinterp.py::TestJSInterpreter::test_negative PASSED [ 15%] test/test_jsinterp.py::TestJSInterpreter::test_nested_try PASSED [ 15%] test/test_jsinterp.py::TestJSInterpreter::test_null PASSED [ 15%] test/test_jsinterp.py::TestJSInterpreter::test_object PASSED [ 15%] test/test_jsinterp.py::TestJSInterpreter::test_operators PASSED [ 15%] test/test_jsinterp.py::TestJSInterpreter::test_packed SKIPPED (Not implemented) [ 15%] test/test_jsinterp.py::TestJSInterpreter::test_parens PASSED [ 15%] test/test_jsinterp.py::TestJSInterpreter::test_precedence PASSED [ 16%] test/test_jsinterp.py::TestJSInterpreter::test_quotes PASSED [ 16%] test/test_jsinterp.py::TestJSInterpreter::test_regex PASSED [ 16%] test/test_jsinterp.py::TestJSInterpreter::test_replace SKIPPED (Not implemented) [ 16%] test/test_jsinterp.py::TestJSInterpreter::test_return_function PASSED [ 16%] test/test_jsinterp.py::TestJSInterpreter::test_strange_chars PASSED [ 16%] test/test_jsinterp.py::TestJSInterpreter::test_sub PASSED [ 16%] test/test_jsinterp.py::TestJSInterpreter::test_switch PASSED [ 16%] test/test_jsinterp.py::TestJSInterpreter::test_switch_default PASSED [ 16%] test/test_jsinterp.py::TestJSInterpreter::test_try PASSED [ 17%] test/test_jsinterp.py::TestJSInterpreter::test_undefined PASSED [ 17%] test/test_jsinterp.py::TestJSInterpreter::test_void PASSED [ 17%] test/test_netrc.py::TestNetRc::test_netrc_present PASSED [ 17%] test/test_networking.py::TestHTTPRequestHandler::test_verify_cert[Urllib] PASSED [ 17%] test/test_networking.py::TestHTTPRequestHandler::test_verify_cert[Requests] FAILED [ 17%] test/test_networking.py::TestHTTPRequestHandler::test_verify_cert[CurlCFFI] SKIPPED [ 17%] test/test_networking.py::TestHTTPRequestHandler::test_ssl_error[Urllib] PASSED [ 17%] test/test_networking.py::TestHTTPRequestHandler::test_ssl_error[Requests] PASSED [ 17%] test/test_networking.py::TestHTTPRequestHandler::test_ssl_error[CurlCFFI] SKIPPED [ 18%] test/test_networking.py::TestHTTPRequestHandler::test_percent_encode[Urllib] PASSED [ 18%] test/test_networking.py::TestHTTPRequestHandler::test_percent_encode[Requests] Exception occurred during processing of request from ('127.0.0.1', 39066) PASSED [ 18%] test/test_networking.py::TestHTTPRequestHandler::test_percent_encode[CurlCFFI] Traceback (most recent call last): File "/usr/lib/python3.12/socketserver.py", line 692, in process_request_thread self.finish_request(request, client_address) File "/usr/lib/python3.12/socketserver.py", line 362, in finish_request self.RequestHandlerClass(request, client_address, self) File "/usr/lib/python3.12/socketserver.py", line 761, in __init__ self.handle() File "/usr/lib/python3.12/http/server.py", line 438, in handle self.handle_one_request() File "/usr/lib/python3.12/http/server.py", line 404, in handle_one_request self.raw_requestline = self.rfile.readline(65537) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/socket.py", line 707, in readinto return self._sock.recv_into(b) ^^^^^^^^^^^^^^^^^^^^^^^ ConnectionResetError: [Errno 104] Connection reset by peer ---------------------------------------- SKIPPED [ 18%] test/test_networking.py::TestHTTPRequestHandler::test_remove_dot_segments[/a/b/./../../headers-Urllib] PASSED [ 18%] test/test_networking.py::TestHTTPRequestHandler::test_remove_dot_segments[/a/b/./../../headers-Requests] Traceback (most recent call last): File "/usr/lib/python3.12/socketserver.py", line 692, in process_request_thread self.finish_request(request, client_address) File "/usr/lib/python3.12/socketserver.py", line 362, in finish_request self.RequestHandlerClass(request, client_address, self) File "/usr/lib/python3.12/socketserver.py", line 761, in __init__ self.handle() File "/usr/lib/python3.12/http/server.py", line 438, in handle self.handle_one_request() File "/usr/lib/python3.12/http/server.py", line 404, in handle_one_request self.raw_requestline = self.rfile.readline(65537) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/socket.py", line 707, in readinto return self._sock.recv_into(b) ^^^^^^^^^^^^^^^^^^^^^^^ ConnectionResetError: [Errno 104] Connection reset by peer ---------------------------------------- PASSED [ 18%] test/test_networking.py::TestHTTPRequestHandler::test_remove_dot_segments[/a/b/./../../headers-CurlCFFI] SKIPPED [ 18%] test/test_networking.py::TestHTTPRequestHandler::test_remove_dot_segments[/redirect_dotsegments-Urllib] PASSED [ 18%] test/test_networking.py::TestHTTPRequestHandler::test_remove_dot_segments[/redirect_dotsegments-Requests] PASSED [ 18%] test/test_networking.py::TestHTTPRequestHandler::test_remove_dot_segments[/redirect_dotsegments-CurlCFFI] SKIPPED [ 19%] test/test_networking.py::TestHTTPRequestHandler::test_remove_dot_segments[/redirect_dotsegments_absolute-Urllib] PASSED [ 19%] test/test_networking.py::TestHTTPRequestHandler::test_remove_dot_segments[/redirect_dotsegments_absolute-Requests] PASSED [ 19%] test/test_networking.py::TestHTTPRequestHandler::test_remove_dot_segments[/redirect_dotsegments_absolute-CurlCFFI] SKIPPED [ 19%] test/test_networking.py::TestHTTPRequestHandler::test_unicode_path_redirection[Urllib] PASSED [ 19%] test/test_networking.py::TestHTTPRequestHandler::test_unicode_path_redirection[Requests] PASSED [ 19%] test/test_networking.py::TestHTTPRequestHandler::test_raise_http_error[Urllib] PASSED [ 19%] test/test_networking.py::TestHTTPRequestHandler::test_raise_http_error[Requests] PASSED [ 19%] test/test_networking.py::TestHTTPRequestHandler::test_raise_http_error[CurlCFFI] SKIPPED [ 19%] test/test_networking.py::TestHTTPRequestHandler::test_response_url[Urllib] PASSED [ 20%] test/test_networking.py::TestHTTPRequestHandler::test_response_url[Requests] Exception occurred during processing of request from ('127.0.0.1', 39290) Traceback (most recent call last): File "/usr/lib/python3.12/socketserver.py", line 692, in process_request_thread self.finish_request(request, client_address) PASSED [ 20%] File "/usr/lib/python3.12/socketserver.py", line 362, in finish_request self.RequestHandlerClass(request, client_address, self) File "/usr/lib/python3.12/socketserver.py", line 761, in __init__ self.handle() File "/usr/lib/python3.12/http/server.py", line 438, in handle self.handle_one_request() File "/usr/lib/python3.12/http/server.py", line 404, in handle_one_request self.raw_requestline = self.rfile.readline(65537) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/socket.py", line 707, in readinto return self._sock.recv_into(b) ^^^^^^^^^^^^^^^^^^^^^^^ ConnectionResetError: [Errno 104] Connection reset by peer ---------------------------------------- test/test_networking.py::TestHTTPRequestHandler::test_response_url[CurlCFFI] SKIPPED [ 20%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[303-POST-expected0-Urllib] PASSED [ 20%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[303-POST-expected0-Requests] PASSED [ 20%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[303-POST-expected0-CurlCFFI] SKIPPED [ 20%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[303-HEAD-expected1-Urllib] PASSED [ 20%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[303-HEAD-expected1-Requests] PASSED [ 20%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[303-HEAD-expected1-CurlCFFI] SKIPPED [ 20%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[301-POST-expected2-Urllib] PASSED [ 21%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[301-POST-expected2-Requests] PASSED [ 21%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[301-POST-expected2-CurlCFFI] SKIPPED [ 21%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[301-HEAD-expected3-Urllib] PASSED [ 21%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[301-HEAD-expected3-Requests] PASSED [ 21%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[301-HEAD-expected3-CurlCFFI] SKIPPED [ 21%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[302-POST-expected4-Urllib] PASSED [ 21%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[302-POST-expected4-Requests] PASSED [ 21%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[302-POST-expected4-CurlCFFI] SKIPPED [ 21%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[302-HEAD-expected5-Urllib] PASSED [ 22%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[302-HEAD-expected5-Requests] PASSED [ 22%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[302-HEAD-expected5-CurlCFFI] SKIPPED [ 22%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[307-POST-expected6-Urllib] PASSED [ 22%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[307-POST-expected6-Requests] PASSED [ 22%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[307-POST-expected6-CurlCFFI] SKIPPED [ 22%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[308-POST-expected7-Urllib] PASSED [ 22%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[308-POST-expected7-Requests] PASSED [ 22%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[308-POST-expected7-CurlCFFI] SKIPPED [ 22%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[307-HEAD-expected8-Urllib] PASSED [ 23%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[307-HEAD-expected8-Requests] PASSED [ 23%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[307-HEAD-expected8-CurlCFFI] SKIPPED [ 23%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[308-HEAD-expected9-Urllib] PASSED [ 23%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[308-HEAD-expected9-Requests] PASSED [ 23%] test/test_networking.py::TestHTTPRequestHandler::test_redirect[308-HEAD-expected9-CurlCFFI] SKIPPED [ 23%] test/test_networking.py::TestHTTPRequestHandler::test_request_cookie_header[Urllib] PASSED [ 23%] test/test_networking.py::TestHTTPRequestHandler::test_request_cookie_header[Requests] PASSED [ 23%] test/test_networking.py::TestHTTPRequestHandler::test_request_cookie_header[CurlCFFI] SKIPPED [ 23%] test/test_networking.py::TestHTTPRequestHandler::test_redirect_loop[Urllib] PASSED [ 24%] test/test_networking.py::TestHTTPRequestHandler::test_redirect_loop[Requests] PASSED [ 24%] test/test_networking.py::TestHTTPRequestHandler::test_redirect_loop[CurlCFFI] SKIPPED [ 24%] test/test_networking.py::TestHTTPRequestHandler::test_incompleteread[Urllib] PASSED [ 24%] test/test_networking.py::TestHTTPRequestHandler::test_incompleteread[Requests] PASSED [ 24%] test/test_networking.py::TestHTTPRequestHandler::test_incompleteread[CurlCFFI] SKIPPED [ 24%] test/test_networking.py::TestHTTPRequestHandler::test_cookies[Urllib] PASSED [ 24%] test/test_networking.py::TestHTTPRequestHandler::test_cookies[Requests] PASSED [ 24%] test/test_networking.py::TestHTTPRequestHandler::test_cookies[CurlCFFI] SKIPPED [ 24%] test/test_networking.py::TestHTTPRequestHandler::test_headers[Urllib] PASSED [ 25%] test/test_networking.py::TestHTTPRequestHandler::test_headers[Requests] PASSED [ 25%] test/test_networking.py::TestHTTPRequestHandler::test_headers[CurlCFFI] SKIPPED [ 25%] test/test_networking.py::TestHTTPRequestHandler::test_read_timeout[Urllib] PASSED [ 25%] test/test_networking.py::TestHTTPRequestHandler::test_read_timeout[Requests] Traceback (most recent call last): File "/usr/lib/python3.12/socketserver.py", line 692, in process_request_thread self.finish_request(request, client_address) PASSED [ 25%] File "/usr/lib/python3.12/socketserver.py", line 362, in finish_request self.RequestHandlerClass(request, client_address, self) File "/usr/lib/python3.12/socketserver.py", line 761, in __init__ self.handle() File "/usr/lib/python3.12/http/server.py", line 438, in handle self.handle_one_request() File "/usr/lib/python3.12/http/server.py", line 404, in handle_one_request self.raw_requestline = self.rfile.readline(65537) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/socket.py", line 707, in readinto return self._sock.recv_into(b) ^^^^^^^^^^^^^^^^^^^^^^^ ConnectionResetError: [Errno 104] Connection reset by peer ---------------------------------------- test/test_networking.py::TestHTTPRequestHandler::test_read_timeout[CurlCFFI] SKIPPED [ 25%] test/test_networking.py::TestHTTPRequestHandler::test_connect_timeout[Urllib] PASSED [ 25%] test/test_networking.py::TestHTTPRequestHandler::test_connect_timeout[Requests] PASSED [ 25%] test/test_networking.py::TestHTTPRequestHandler::test_connect_timeout[CurlCFFI] SKIPPED [ 25%] test/test_networking.py::TestHTTPRequestHandler::test_source_address[Urllib] Traceback (most recent call last): File "/usr/lib/python3.12/socketserver.py", line 692, in process_request_thread self.finish_request(request, client_address) File "/usr/lib/python3.12/socketserver.py", line 362, in finish_request self.RequestHandlerClass(request, client_address, self) File "/usr/lib/python3.12/socketserver.py", line 761, in __init__ self.handle() File "/usr/lib/python3.12/http/server.py", line 436, in handle self.handle_one_request() File "/usr/lib/python3.12/http/server.py", line 425, in handle_one_request self.wfile.flush() #actually send the response if not already done. ^^^^^^^^^^^^^^^^^^ ValueError: I/O operation on closed file. ---------------------------------------- PASSED [ 26%] test/test_networking.py::TestHTTPRequestHandler::test_source_address[Requests] PASSED [ 26%] test/test_networking.py::TestHTTPRequestHandler::test_source_address[CurlCFFI] SKIPPED [ 26%] test/test_networking.py::TestHTTPRequestHandler::test_gzip_trailing_garbage[Urllib] PASSED [ 26%] test/test_networking.py::TestHTTPRequestHandler::test_gzip_trailing_garbage[Requests] PASSED [ 26%] test/test_networking.py::TestHTTPRequestHandler::test_brotli[Urllib] SKIPPED [ 26%] test/test_networking.py::TestHTTPRequestHandler::test_brotli[Requests] SKIPPED [ 26%] test/test_networking.py::TestHTTPRequestHandler::test_deflate[Urllib] PASSED [ 26%] test/test_networking.py::TestHTTPRequestHandler::test_deflate[Requests] PASSED [ 26%] test/test_networking.py::TestHTTPRequestHandler::test_deflate[CurlCFFI] SKIPPED [ 27%] test/test_networking.py::TestHTTPRequestHandler::test_gzip[Urllib] PASSED [ 27%] test/test_networking.py::TestHTTPRequestHandler::test_gzip[Requests] PASSED [ 27%] test/test_networking.py::TestHTTPRequestHandler::test_gzip[CurlCFFI] SKIPPED [ 27%] test/test_networking.py::TestHTTPRequestHandler::test_multiple_encodings[Urllib] PASSED [ 27%] test/test_networking.py::TestHTTPRequestHandler::test_multiple_encodings[Requests] PASSED [ 27%] test/test_networking.py::TestHTTPRequestHandler::test_multiple_encodings[CurlCFFI] SKIPPED [ 27%] test/test_networking.py::TestHTTPRequestHandler::test_unsupported_encoding[Urllib] PASSED [ 27%] test/test_networking.py::TestHTTPRequestHandler::test_unsupported_encoding[Requests] PASSED [ 27%] test/test_networking.py::TestHTTPRequestHandler::test_read[Urllib] PASSED [ 28%] test/test_networking.py::TestHTTPRequestHandler::test_read[Requests] PASSED [ 28%] test/test_networking.py::TestHTTPRequestHandler::test_read[CurlCFFI] SKIPPED [ 28%] test/test_networking.py::TestHTTPProxy::test_http_proxy[Urllib] PASSED [ 28%] test/test_networking.py::TestHTTPProxy::test_http_proxy[Requests] PASSED [ 28%] test/test_networking.py::TestHTTPProxy::test_http_proxy[CurlCFFI] SKIPPED [ 28%] test/test_networking.py::TestHTTPProxy::test_noproxy[Urllib] PASSED [ 28%] test/test_networking.py::TestHTTPProxy::test_noproxy[Requests] PASSED [ 28%] test/test_networking.py::TestHTTPProxy::test_noproxy[CurlCFFI] SKIPPED [ 28%] test/test_networking.py::TestHTTPProxy::test_allproxy[Urllib] PASSED [ 29%] test/test_networking.py::TestHTTPProxy::test_allproxy[Requests] PASSED [ 29%] test/test_networking.py::TestHTTPProxy::test_allproxy[CurlCFFI] SKIPPED [ 29%] test/test_networking.py::TestHTTPProxy::test_http_proxy_with_idn[Urllib] PASSED [ 29%] test/test_networking.py::TestHTTPProxy::test_http_proxy_with_idn[Requests] PASSED [ 29%] test/test_networking.py::TestHTTPProxy::test_http_proxy_with_idn[CurlCFFI] SKIPPED [ 29%] test/test_networking.py::TestClientCertificate::test_certificate_combined_nopass[Urllib] PASSED [ 29%] test/test_networking.py::TestClientCertificate::test_certificate_combined_nopass[Requests] FAILED [ 29%] test/test_networking.py::TestClientCertificate::test_certificate_combined_nopass[CurlCFFI] SKIPPED [ 29%] test/test_networking.py::TestClientCertificate::test_certificate_nocombined_nopass[Urllib] PASSED [ 30%] test/test_networking.py::TestClientCertificate::test_certificate_nocombined_nopass[Requests] ---------------------------------------- Exception occurred during processing of request from ('127.0.0.1', 33960) Traceback (most recent call last): File "/usr/lib/python3.12/socketserver.py", line 692, in process_request_thread self.finish_request(request, client_address) File "/usr/lib/python3.12/socketserver.py", line 362, in finish_request self.RequestHandlerClass(request, client_address, self) File "/usr/lib/python3.12/socketserver.py", line 761, in __init__ self.handle() File "/usr/lib/python3.12/http/server.py", line 436, in handle self.handle_one_request() File "/usr/lib/python3.12/http/server.py", line 424, in handle_one_request method() File "/build/yt-dlp/src/yt-dlp/test/test_networking.py", line 268, in do_GET self._headers() File "/build/yt-dlp/src/yt-dlp/test/test_networking.py", line 93, in _headers self.wfile.write(payload) File "/usr/lib/python3.12/socketserver.py", line 840, in write self._sock.sendall(b) BrokenPipeError: [Errno 32] Broken pipe ---------------------------------------- FAILED [ 30%] test/test_networking.py::TestClientCertificate::test_certificate_nocombined_nopass[CurlCFFI] SKIPPED [ 30%] test/test_networking.py::TestClientCertificate::test_certificate_combined_pass[Urllib] PASSED [ 30%] test/test_networking.py::TestClientCertificate::test_certificate_combined_pass[Requests] FAILED [ 30%] test/test_networking.py::TestClientCertificate::test_certificate_combined_pass[CurlCFFI] SKIPPED [ 30%] test/test_networking.py::TestClientCertificate::test_certificate_nocombined_pass[Urllib] PASSED [ 30%] test/test_networking.py::TestClientCertificate::test_certificate_nocombined_pass[Requests] FAILED [ 30%] test/test_networking.py::TestClientCertificate::test_certificate_nocombined_pass[CurlCFFI] SKIPPED [ 30%] test/test_networking.py::TestHTTPImpersonateRequestHandler::test_supported_impersonate_targets[CurlCFFI] SKIPPED [ 31%] test/test_networking.py::TestRequestHandlerMisc::test_remove_logging_handler[Requests-urllib3] PASSED [ 31%] test/test_networking.py::TestRequestHandlerMisc::test_remove_logging_handler[Websockets-websockets.client] SKIPPED [ 31%] test/test_networking.py::TestRequestHandlerMisc::test_remove_logging_handler[Websockets-websockets.server] SKIPPED [ 31%] test/test_networking.py::TestUrllibRequestHandler::test_file_urls[Urllib] PASSED [ 31%] test/test_networking.py::TestUrllibRequestHandler::test_http_error_returns_content[Urllib] PASSED [ 31%] test/test_networking.py::TestUrllibRequestHandler::test_verify_cert_error_text[Urllib] PASSED [ 31%] test/test_networking.py::TestUrllibRequestHandler::test_httplib_validation_errors[req0-method can't contain control characters--Urllib] PASSED [ 31%] test/test_networking.py::TestUrllibRequestHandler::test_httplib_validation_errors[req1-URL can't contain control characters--Urllib] PASSED [ 31%] test/test_networking.py::TestUrllibRequestHandler::test_httplib_validation_errors[req2-Invalid header name-None-Urllib] PASSED [ 32%] test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[-TransportError0-Requests] PASSED [ 32%] test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[-TransportError1-Requests] PASSED [ 32%] test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[-TransportError2-Requests] PASSED [ 32%] test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[-TransportError3-Requests] PASSED [ 32%] test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[-ProxyError-Requests] PASSED [ 32%] test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[-CertificateVerifyError-Requests] PASSED [ 32%] test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[-SSLError-Requests] PASSED [ 32%] test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[-RequestError0-Requests] PASSED [ 32%] test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[-RequestError1-Requests] PASSED [ 33%] test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[-TransportError4-Requests] PASSED [ 33%] test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[-RequestError2-Requests] PASSED [ 33%] test/test_networking.py::TestRequestsRequestHandler::test_response_error_mapping[-SSLError-None-Requests] PASSED [ 33%] test/test_networking.py::TestRequestsRequestHandler::test_response_error_mapping[-TransportError-None0-Requests] PASSED [ 33%] test/test_networking.py::TestRequestsRequestHandler::test_response_error_mapping[-TransportError-None1-Requests] PASSED [ 33%] test/test_networking.py::TestRequestsRequestHandler::test_response_error_mapping[-TransportError-None2-Requests] PASSED [ 33%] test/test_networking.py::TestRequestsRequestHandler::test_response_error_mapping[-TransportError-None3-Requests] PASSED [ 33%] test/test_networking.py::TestRequestsRequestHandler::test_response_error_mapping[-TransportError-None4-Requests] PASSED [ 33%] test/test_networking.py::TestRequestsRequestHandler::test_response_error_mapping[-IncompleteRead-3 bytes read, 4 more expected-Requests] PASSED [ 33%] test/test_networking.py::TestRequestsRequestHandler::test_response_error_mapping[-IncompleteRead-3 bytes read, 5 more expected-Requests] PASSED [ 34%] test/test_networking.py::TestRequestsRequestHandler::test_close[Requests] PASSED [ 34%] test/test_networking.py::TestCurlCFFIRequestHandler::test_impersonate[params0-extensions0-CurlCFFI] SKIPPED [ 34%] test/test_networking.py::TestCurlCFFIRequestHandler::test_impersonate[params1-extensions1-CurlCFFI] SKIPPED [ 34%] test/test_networking.py::TestCurlCFFIRequestHandler::test_impersonate[params2-extensions2-CurlCFFI] SKIPPED [ 34%] test/test_networking.py::TestCurlCFFIRequestHandler::test_headers[CurlCFFI] SKIPPED [ 34%] test/test_networking.py::TestCurlCFFIRequestHandler::test_response_error_mapping[-IncompleteRead-None-CurlCFFI] SKIPPED [ 34%] test/test_networking.py::TestCurlCFFIRequestHandler::test_response_error_mapping[-TransportError-None0-CurlCFFI] SKIPPED [ 34%] test/test_networking.py::TestCurlCFFIRequestHandler::test_response_error_mapping[-TransportError-None1-CurlCFFI] SKIPPED [ 34%] test/test_networking.py::TestCurlCFFIRequestHandler::test_request_error_mapping[-TransportError-None-CurlCFFI] SKIPPED [ 35%] test/test_networking.py::TestCurlCFFIRequestHandler::test_request_error_mapping[-CertificateVerifyError-None-CurlCFFI] SKIPPED [ 35%] test/test_networking.py::TestCurlCFFIRequestHandler::test_request_error_mapping[-SSLError-None-CurlCFFI] SKIPPED [ 35%] test/test_networking.py::TestCurlCFFIRequestHandler::test_request_error_mapping[-HTTPError-None-CurlCFFI] SKIPPED [ 35%] test/test_networking.py::TestCurlCFFIRequestHandler::test_request_error_mapping[-ProxyError-None-CurlCFFI] SKIPPED [ 35%] test/test_networking.py::TestCurlCFFIRequestHandler::test_response_reader[CurlCFFI] SKIPPED [ 35%] test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[Urllib-http-False-handler_kwargs0] PASSED [ 35%] test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[Urllib-https-False-handler_kwargs1] PASSED [ 35%] test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[Urllib-data-False-handler_kwargs2] PASSED [ 35%] test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[Urllib-ftp-False-handler_kwargs3] PASSED [ 36%] test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[Urllib-file-UnsupportedRequest-handler_kwargs4] PASSED [ 36%] test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[Urllib-file-False-handler_kwargs5] PASSED [ 36%] test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[Requests-http-False-handler_kwargs6] PASSED [ 36%] test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[Requests-https-False-handler_kwargs7] PASSED [ 36%] test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[Websockets-ws-False-handler_kwargs8] SKIPPED [ 36%] test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[Websockets-wss-False-handler_kwargs9] SKIPPED [ 36%] test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[CurlCFFI-http-False-handler_kwargs10] SKIPPED [ 36%] test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[CurlCFFI-https-False-handler_kwargs11] SKIPPED [ 36%] test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[NoCheckRH-http-False-handler_kwargs12] PASSED [ 37%] test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[ValidationRH-http-UnsupportedRequest-handler_kwargs13] PASSED [ 37%] test/test_networking.py::TestRequestHandlerValidation::test_no_proxy[Urllib-False] PASSED [ 37%] test/test_networking.py::TestRequestHandlerValidation::test_no_proxy[Requests-False] PASSED [ 37%] test/test_networking.py::TestRequestHandlerValidation::test_no_proxy[CurlCFFI-False] SKIPPED [ 37%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_key[Urllib-all-False] PASSED [ 37%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_key[Urllib-unrelated-False] PASSED [ 37%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_key[Requests-all-False] PASSED [ 37%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_key[Requests-unrelated-False] PASSED [ 37%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_key[CurlCFFI-all-False] SKIPPED [ 38%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_key[CurlCFFI-unrelated-False] SKIPPED [ 38%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_key[NoCheckRH-all-False] PASSED [ 38%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_key[HTTPSupportedRH-all-UnsupportedRequest] PASSED [ 38%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_key[HTTPSupportedRH-no-UnsupportedRequest] PASSED [ 38%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Urllib-http-http-False] PASSED [ 38%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Urllib-http-https-UnsupportedRequest] PASSED [ 38%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Urllib-http-socks4-False] PASSED [ 38%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Urllib-http-socks4a-False] PASSED [ 38%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Urllib-http-socks5-False] PASSED [ 39%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Urllib-http-socks5h-False] PASSED [ 39%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Urllib-http-socks-UnsupportedRequest] PASSED [ 39%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Requests-http-http-False] PASSED [ 39%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Requests-http-https-False] PASSED [ 39%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Requests-http-socks4-False] PASSED [ 39%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Requests-http-socks4a-False] PASSED [ 39%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Requests-http-socks5-False] PASSED [ 39%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Requests-http-socks5h-False] PASSED [ 39%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[CurlCFFI-http-http-False] SKIPPED [ 40%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[CurlCFFI-http-https-False] SKIPPED [ 40%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[CurlCFFI-http-socks4-False] SKIPPED [ 40%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[CurlCFFI-http-socks4a-False] SKIPPED [ 40%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[CurlCFFI-http-socks5-False] SKIPPED [ 40%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[CurlCFFI-http-socks5h-False] SKIPPED [ 40%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[NoCheckRH-http-http-False0] PASSED [ 40%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[HTTPSupportedRH-http-http-UnsupportedRequest0] PASSED [ 40%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Websockets-ws-http-UnsupportedRequest] SKIPPED [ 40%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[NoCheckRH-http-http-False1] PASSED [ 41%] test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[HTTPSupportedRH-http-http-UnsupportedRequest1] PASSED [ 41%] test/test_networking.py::TestRequestHandlerValidation::test_empty_proxy[Urllib] PASSED [ 41%] test/test_networking.py::TestRequestHandlerValidation::test_empty_proxy[HTTPSupportedRH] PASSED [ 41%] test/test_networking.py::TestRequestHandlerValidation::test_empty_proxy[Requests] PASSED [ 41%] test/test_networking.py::TestRequestHandlerValidation::test_empty_proxy[CurlCFFI] SKIPPED [ 41%] test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[Urllib-//example.com] PASSED [ 41%] test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[Urllib-example.com] PASSED [ 41%] test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[Urllib-127.0.0.1] PASSED [ 41%] test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[Urllib-/a/b/c] PASSED [ 42%] test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[Requests-//example.com] PASSED [ 42%] test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[Requests-example.com] PASSED [ 42%] test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[Requests-127.0.0.1] PASSED [ 42%] test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[Requests-/a/b/c] PASSED [ 42%] test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[CurlCFFI-//example.com] SKIPPED [ 42%] test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[CurlCFFI-example.com] SKIPPED [ 42%] test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[CurlCFFI-127.0.0.1] SKIPPED [ 42%] test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[CurlCFFI-/a/b/c] SKIPPED [ 42%] test/test_networking.py::TestRequestHandlerValidation::test_extension[Urllib-http-extensions0-AssertionError] PASSED [ 43%] test/test_networking.py::TestRequestHandlerValidation::test_extension[Urllib-http-extensions1-False] PASSED [ 43%] test/test_networking.py::TestRequestHandlerValidation::test_extension[Urllib-http-extensions2-AssertionError] PASSED [ 43%] test/test_networking.py::TestRequestHandlerValidation::test_extension[Urllib-http-extensions3-False] PASSED [ 43%] test/test_networking.py::TestRequestHandlerValidation::test_extension[Urllib-http-extensions4-AssertionError] PASSED [ 43%] test/test_networking.py::TestRequestHandlerValidation::test_extension[Urllib-http-extensions5-UnsupportedRequest] PASSED [ 43%] test/test_networking.py::TestRequestHandlerValidation::test_extension[Requests-http-extensions6-AssertionError] PASSED [ 43%] test/test_networking.py::TestRequestHandlerValidation::test_extension[Requests-http-extensions7-False] PASSED [ 43%] test/test_networking.py::TestRequestHandlerValidation::test_extension[Requests-http-extensions8-False] PASSED [ 43%] test/test_networking.py::TestRequestHandlerValidation::test_extension[Requests-http-extensions9-AssertionError] PASSED [ 44%] test/test_networking.py::TestRequestHandlerValidation::test_extension[Requests-http-extensions10-UnsupportedRequest] PASSED [ 44%] test/test_networking.py::TestRequestHandlerValidation::test_extension[CurlCFFI-http-extensions11-AssertionError] SKIPPED [ 44%] test/test_networking.py::TestRequestHandlerValidation::test_extension[CurlCFFI-http-extensions12-False] SKIPPED [ 44%] test/test_networking.py::TestRequestHandlerValidation::test_extension[CurlCFFI-http-extensions13-False] SKIPPED [ 44%] test/test_networking.py::TestRequestHandlerValidation::test_extension[CurlCFFI-http-extensions14-AssertionError] SKIPPED [ 44%] test/test_networking.py::TestRequestHandlerValidation::test_extension[CurlCFFI-http-extensions15-UnsupportedRequest] SKIPPED [ 44%] test/test_networking.py::TestRequestHandlerValidation::test_extension[CurlCFFI-http-extensions16-UnsupportedRequest] SKIPPED [ 44%] test/test_networking.py::TestRequestHandlerValidation::test_extension[CurlCFFI-http-extensions17-AssertionError] SKIPPED [ 44%] test/test_networking.py::TestRequestHandlerValidation::test_extension[CurlCFFI-http-extensions18-False] SKIPPED [ 45%] test/test_networking.py::TestRequestHandlerValidation::test_extension[CurlCFFI-http-extensions19-False] SKIPPED [ 45%] test/test_networking.py::TestRequestHandlerValidation::test_extension[CurlCFFI-http-extensions20-False] SKIPPED [ 45%] test/test_networking.py::TestRequestHandlerValidation::test_extension[CurlCFFI-http-extensions21-AssertionError] SKIPPED [ 45%] test/test_networking.py::TestRequestHandlerValidation::test_extension[NoCheckRH-http-extensions22-False] PASSED [ 45%] test/test_networking.py::TestRequestHandlerValidation::test_extension[NoCheckRH-http-extensions23-False] PASSED [ 45%] test/test_networking.py::TestRequestHandlerValidation::test_extension[Websockets-ws-extensions24-False] SKIPPED [ 45%] test/test_networking.py::TestRequestHandlerValidation::test_extension[Websockets-ws-extensions25-False] SKIPPED [ 45%] test/test_networking.py::TestRequestHandlerValidation::test_invalid_request_type PASSED [ 45%] test/test_networking.py::TestRequestDirector::test_handler_operations PASSED [ 46%] test/test_networking.py::TestRequestDirector::test_send PASSED [ 46%] test/test_networking.py::TestRequestDirector::test_unsupported_handlers PASSED [ 46%] test/test_networking.py::TestRequestDirector::test_unexpected_error PASSED [ 46%] test/test_networking.py::TestRequestDirector::test_preference PASSED [ 46%] test/test_networking.py::TestRequestDirector::test_close PASSED [ 46%] test/test_networking.py::TestYoutubeDLNetworking::test_compat_opener PASSED [ 46%] test/test_networking.py::TestYoutubeDLNetworking::test_proxy[http://127.0.0.1:8080-expected0] PASSED [ 46%] test/test_networking.py::TestYoutubeDLNetworking::test_proxy[-expected1] PASSED [ 46%] test/test_networking.py::TestYoutubeDLNetworking::test_proxy[None-expected2] PASSED [ 47%] test/test_networking.py::TestYoutubeDLNetworking::test_compat_request PASSED [ 47%] test/test_networking.py::TestYoutubeDLNetworking::test_extract_basic_auth PASSED [ 47%] test/test_networking.py::TestYoutubeDLNetworking::test_sanitize_url PASSED [ 47%] test/test_networking.py::TestYoutubeDLNetworking::test_file_urls_error PASSED [ 47%] test/test_networking.py::TestYoutubeDLNetworking::test_websocket_unavailable_error[ws] PASSED [ 47%] test/test_networking.py::TestYoutubeDLNetworking::test_websocket_unavailable_error[wss] PASSED [ 47%] test/test_networking.py::TestYoutubeDLNetworking::test_legacy_server_connect_error PASSED [ 47%] test/test_networking.py::TestYoutubeDLNetworking::test_unsupported_impersonate_target PASSED [ 47%] test/test_networking.py::TestYoutubeDLNetworking::test_unsupported_impersonate_extension PASSED [ 48%] test/test_networking.py::TestYoutubeDLNetworking::test_raise_impersonate_error PASSED [ 48%] test/test_networking.py::TestYoutubeDLNetworking::test_pass_impersonate_param PASSED [ 48%] test/test_networking.py::TestYoutubeDLNetworking::test_get_impersonate_targets PASSED [ 48%] test/test_networking.py::TestYoutubeDLNetworking::test_clean_proxy[http-__noproxy__-None] PASSED [ 48%] test/test_networking.py::TestYoutubeDLNetworking::test_clean_proxy[no-127.0.0.1,foo.bar-127.0.0.1,foo.bar] PASSED [ 48%] test/test_networking.py::TestYoutubeDLNetworking::test_clean_proxy[https-example.com-http://example.com] PASSED [ 48%] test/test_networking.py::TestYoutubeDLNetworking::test_clean_proxy[https-//example.com-http://example.com] PASSED [ 48%] test/test_networking.py::TestYoutubeDLNetworking::test_clean_proxy[https-socks5://example.com-socks5h://example.com] PASSED [ 48%] test/test_networking.py::TestYoutubeDLNetworking::test_clean_proxy[http-socks://example.com-socks4://example.com] PASSED [ 49%] test/test_networking.py::TestYoutubeDLNetworking::test_clean_proxy[http-socks4://example.com-socks4://example.com] PASSED [ 49%] test/test_networking.py::TestYoutubeDLNetworking::test_clean_proxy[unrelated-/bad/proxy-/bad/proxy] PASSED [ 49%] test/test_networking.py::TestYoutubeDLNetworking::test_clean_proxy_header PASSED [ 49%] test/test_networking.py::TestYoutubeDLNetworking::test_clean_header PASSED [ 49%] test/test_networking.py::TestYoutubeDLNetworking::test_build_handler_params PASSED [ 49%] test/test_networking.py::TestYoutubeDLNetworking::test_client_certificate[ydl_params0] PASSED [ 49%] test/test_networking.py::TestYoutubeDLNetworking::test_client_certificate[ydl_params1] PASSED [ 49%] test/test_networking.py::TestYoutubeDLNetworking::test_client_certificate[ydl_params2] PASSED [ 49%] test/test_networking.py::TestYoutubeDLNetworking::test_client_certificate[ydl_params3] PASSED [ 50%] test/test_networking.py::TestYoutubeDLNetworking::test_urllib_file_urls PASSED [ 50%] test/test_networking.py::TestYoutubeDLNetworking::test_compat_opt_prefer_urllib PASSED [ 50%] test/test_networking.py::TestRequest::test_query PASSED [ 50%] test/test_networking.py::TestRequest::test_method PASSED [ 50%] test/test_networking.py::TestRequest::test_request_helpers PASSED [ 50%] test/test_networking.py::TestRequest::test_headers PASSED [ 50%] test/test_networking.py::TestRequest::test_data_type PASSED [ 50%] test/test_networking.py::TestRequest::test_content_length_header PASSED [ 50%] test/test_networking.py::TestRequest::test_content_type_header PASSED [ 51%] test/test_networking.py::TestRequest::test_update_req PASSED [ 51%] test/test_networking.py::TestRequest::test_proxies PASSED [ 51%] test/test_networking.py::TestRequest::test_extensions PASSED [ 51%] test/test_networking.py::TestRequest::test_copy PASSED [ 51%] test/test_networking.py::TestRequest::test_url PASSED [ 51%] test/test_networking.py::TestResponse::test_reason[custom-200-custom] PASSED [ 51%] test/test_networking.py::TestResponse::test_reason[None-404-Not Found] PASSED [ 51%] test/test_networking.py::TestResponse::test_reason[-403-Forbidden] PASSED [ 51%] test/test_networking.py::TestResponse::test_reason[None-999-None] PASSED [ 52%] test/test_networking.py::TestResponse::test_headers PASSED [ 52%] test/test_networking.py::TestResponse::test_get_header PASSED [ 52%] test/test_networking.py::TestResponse::test_compat PASSED [ 52%] test/test_networking.py::TestImpersonateTarget::test_target_from_str[abc-expected0] PASSED [ 52%] test/test_networking.py::TestImpersonateTarget::test_target_from_str[abc-120_esr-expected1] PASSED [ 52%] test/test_networking.py::TestImpersonateTarget::test_target_from_str[abc-120:xyz-expected2] PASSED [ 52%] test/test_networking.py::TestImpersonateTarget::test_target_from_str[abc-120:xyz-5.6-expected3] PASSED [ 52%] test/test_networking.py::TestImpersonateTarget::test_target_from_str[abc:xyz-expected4] PASSED [ 52%] test/test_networking.py::TestImpersonateTarget::test_target_from_str[abc:-expected5] PASSED [ 53%] test/test_networking.py::TestImpersonateTarget::test_target_from_str[abc-120:-expected6] PASSED [ 53%] test/test_networking.py::TestImpersonateTarget::test_target_from_str[:xyz-expected7] PASSED [ 53%] test/test_networking.py::TestImpersonateTarget::test_target_from_str[:xyz-6.5-expected8] PASSED [ 53%] test/test_networking.py::TestImpersonateTarget::test_target_from_str[:-expected9] PASSED [ 53%] test/test_networking.py::TestImpersonateTarget::test_target_from_str[-expected10] PASSED [ 53%] test/test_networking.py::TestImpersonateTarget::test_target_from_invalid_str[-120] PASSED [ 53%] test/test_networking.py::TestImpersonateTarget::test_target_from_invalid_str[:-12.0] PASSED [ 53%] test/test_networking.py::TestImpersonateTarget::test_target_from_invalid_str[-12:-12] PASSED [ 53%] test/test_networking.py::TestImpersonateTarget::test_target_from_invalid_str[-:-] PASSED [ 54%] test/test_networking.py::TestImpersonateTarget::test_target_from_invalid_str[::] PASSED [ 54%] test/test_networking.py::TestImpersonateTarget::test_target_from_invalid_str[a-c-d:] PASSED [ 54%] test/test_networking.py::TestImpersonateTarget::test_target_from_invalid_str[a-c-d:e-f-g] PASSED [ 54%] test/test_networking.py::TestImpersonateTarget::test_target_from_invalid_str[a:b:] PASSED [ 54%] test/test_networking.py::TestImpersonateTarget::test_str[target0-abc] PASSED [ 54%] test/test_networking.py::TestImpersonateTarget::test_str[target1-abc-120] PASSED [ 54%] test/test_networking.py::TestImpersonateTarget::test_str[target2-abc-120:xyz] PASSED [ 54%] test/test_networking.py::TestImpersonateTarget::test_str[target3-abc-120:xyz-5] PASSED [ 54%] test/test_networking.py::TestImpersonateTarget::test_str[target4-abc:xyz] PASSED [ 55%] test/test_networking.py::TestImpersonateTarget::test_str[target5-abc-120] PASSED [ 55%] test/test_networking.py::TestImpersonateTarget::test_str[target6-abc-120:xyz] PASSED [ 55%] test/test_networking.py::TestImpersonateTarget::test_str[target7-abc:xyz] PASSED [ 55%] test/test_networking.py::TestImpersonateTarget::test_str[target8-:xyz-6.5] PASSED [ 55%] test/test_networking.py::TestImpersonateTarget::test_str[target9-abc] PASSED [ 55%] test/test_networking.py::TestImpersonateTarget::test_str[target10-] PASSED [ 55%] test/test_networking.py::TestImpersonateTarget::test_invalid_impersonate_target[args0] PASSED [ 55%] test/test_networking.py::TestImpersonateTarget::test_invalid_impersonate_target[args1] PASSED [ 55%] test/test_networking.py::TestImpersonateTarget::test_invalid_impersonate_target[args2] PASSED [ 56%] test/test_networking.py::TestImpersonateTarget::test_invalid_impersonate_target[args3] PASSED [ 56%] test/test_networking.py::TestImpersonateTarget::test_invalid_impersonate_target[args4] PASSED [ 56%] test/test_networking.py::TestImpersonateTarget::test_invalid_impersonate_target[args5] PASSED [ 56%] test/test_networking.py::TestImpersonateTarget::test_impersonate_target_in[target10-target20-True-True] PASSED [ 56%] test/test_networking.py::TestImpersonateTarget::test_impersonate_target_in[target11-target21-True-False] PASSED [ 56%] test/test_networking.py::TestImpersonateTarget::test_impersonate_target_in[target12-target22-True-False] PASSED [ 56%] test/test_networking.py::TestImpersonateTarget::test_impersonate_target_in[target13-target23-False-False] PASSED [ 56%] test/test_networking.py::TestImpersonateTarget::test_impersonate_target_in[target14-target24-True-False] PASSED [ 56%] test/test_networking.py::TestImpersonateTarget::test_impersonate_target_in[target15-target25-True-False] PASSED [ 57%] test/test_networking.py::TestImpersonateTarget::test_impersonate_target_in[target16-target26-True-False] PASSED [ 57%] test/test_networking.py::TestImpersonateTarget::test_impersonate_target_in[target17-target27-True-True] PASSED [ 57%] test/test_networking_utils.py::TestNetworkingUtils::test_select_proxy PASSED [ 57%] test/test_networking_utils.py::TestNetworkingUtils::test_make_socks_proxy_opts[socks5h://example.com-expected0] PASSED [ 57%] test/test_networking_utils.py::TestNetworkingUtils::test_make_socks_proxy_opts[socks5://user:@example.com:5555-expected1] PASSED [ 57%] test/test_networking_utils.py::TestNetworkingUtils::test_make_socks_proxy_opts[socks4://u%40ser:pa%20ss@127.0.0.1:1080-expected2] PASSED [ 57%] test/test_networking_utils.py::TestNetworkingUtils::test_make_socks_proxy_opts[socks4a://:pa%20ss@127.0.0.1-expected3] PASSED [ 57%] test/test_networking_utils.py::TestNetworkingUtils::test_make_socks_proxy_unknown PASSED [ 57%] test/test_networking_utils.py::TestNetworkingUtils::test_load_certifi SKIPPED [ 58%] test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[GET-303-GET] PASSED [ 58%] test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[HEAD-303-HEAD] PASSED [ 58%] test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[PUT-303-GET] PASSED [ 58%] test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[POST-301-GET] PASSED [ 58%] test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[HEAD-301-HEAD] PASSED [ 58%] test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[POST-302-GET] PASSED [ 58%] test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[HEAD-302-HEAD] PASSED [ 58%] test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[PUT-302-PUT] PASSED [ 58%] test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[POST-308-POST] PASSED [ 59%] test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[POST-307-POST] PASSED [ 59%] test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[HEAD-308-HEAD] PASSED [ 59%] test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[HEAD-307-HEAD] PASSED [ 59%] test/test_networking_utils.py::TestNetworkingUtils::test_add_accept_encoding_header[headers0-supported_encodings0-expected0] PASSED [ 59%] test/test_networking_utils.py::TestNetworkingUtils::test_add_accept_encoding_header[headers1-supported_encodings1-expected1] PASSED [ 59%] test/test_networking_utils.py::TestNetworkingUtils::test_add_accept_encoding_header[headers2-supported_encodings2-expected2] PASSED [ 59%] test/test_networking_utils.py::TestInstanceStoreMixin::test_mixin PASSED [ 59%] test/test_networking_utils.py::TestNetworkingExceptions::test_http_error PASSED [ 59%] test/test_networking_utils.py::TestNetworkingExceptions::test_redirect_http_error PASSED [ 60%] test/test_networking_utils.py::TestNetworkingExceptions::test_incomplete_read_error PASSED [ 60%] test/test_plugins.py::TestPlugins::test_directories_containing_plugins PASSED [ 60%] test/test_plugins.py::TestPlugins::test_extractor_classes PASSED [ 60%] test/test_plugins.py::TestPlugins::test_importing_zipped_module PASSED [ 60%] test/test_plugins.py::TestPlugins::test_postprocessor_classes PASSED [ 60%] test/test_postprocessors.py::TestMetadataFromField::test_field_to_template PASSED [ 60%] test/test_postprocessors.py::TestMetadataFromField::test_format_to_regex PASSED [ 60%] test/test_postprocessors.py::TestMetadataFromField::test_metadatafromfield PASSED [ 60%] test/test_postprocessors.py::TestConvertThumbnail::test_escaping PASSED [ 61%] test/test_postprocessors.py::TestExec::test_parse_cmd PASSED [ 61%] test/test_postprocessors.py::TestModifyChaptersPP::test_make_concat_opts_CommonCase PASSED [ 61%] test/test_postprocessors.py::TestModifyChaptersPP::test_make_concat_opts_NoZeroDurationChunkAtVideoEnd PASSED [ 61%] test/test_postprocessors.py::TestModifyChaptersPP::test_make_concat_opts_NoZeroDurationChunkAtVideoStart PASSED [ 61%] test/test_postprocessors.py::TestModifyChaptersPP::test_quote_for_concat_QuotesAtEnd PASSED [ 61%] test/test_postprocessors.py::TestModifyChaptersPP::test_quote_for_concat_QuotesAtStart PASSED [ 61%] test/test_postprocessors.py::TestModifyChaptersPP::test_quote_for_concat_RunsOfQuotes PASSED [ 61%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_CanGetThroughUnaltered PASSED [ 61%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithAdjacentCuts PASSED [ 62%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithAdjacentSponsors PASSED [ 62%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithCutHidingSponsor PASSED [ 62%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithCuts PASSED [ 62%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithOverlappingCuts PASSED [ 62%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithOverlappingSponsors PASSED [ 62%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithRunsOfOverlappingCuts PASSED [ 62%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithRunsOfOverlappingSponsors PASSED [ 62%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithRunsOfOverlappingSponsorsAndCuts PASSED [ 62%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithSponsorCutInTheMiddle PASSED [ 63%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithSponsors PASSED [ 63%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithSponsorsAndCuts PASSED [ 63%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChaptersAfterLastCut PASSED [ 63%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChaptersAfterLastSponsor PASSED [ 63%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_CutCoincidesWithChapters PASSED [ 63%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_CutEndsAtChapterEnd PASSED [ 63%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_CutOverlapsMultipleChapters PASSED [ 63%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_CutStartsAtChapterStart PASSED [ 63%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_CutsAtVideoBoundaries PASSED [ 64%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_CutsOverlapChaptersAtVideoBoundaries PASSED [ 64%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_CutsWithinSomeChaptersAndOverlappingOthers PASSED [ 64%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_EverythingCut PASSED [ 64%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_EverythingSponsored PASSED [ 64%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_OverlappingSponsorsDifferentTitlesAfterCut PASSED [ 64%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SingleTinyChapterIsPreserved PASSED [ 64%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SmallestSponsorInTheOverlapGetsNamed PASSED [ 64%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorBlockChapters PASSED [ 64%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorCoincidesWithChapters PASSED [ 65%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorEndsAtChapterEnd PASSED [ 65%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorOverlapsMultipleChapters PASSED [ 65%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorStartsAtChapterStart PASSED [ 65%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorsAtVideoBoundaries PASSED [ 65%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorsNoLongerOverlapAfterCut PASSED [ 65%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorsOverlapChaptersAtVideoBoundaries PASSED [ 65%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorsStillOverlapAfterCut PASSED [ 65%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorsWithinSomeChaptersAndOverlappingOthers PASSED [ 65%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_TinyChapterAtTheStartPrependedToTheNext PASSED [ 66%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_TinyChaptersInTheOriginalArePreserved PASSED [ 66%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_TinyChaptersResultingFromCutsAreIgnored PASSED [ 66%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_TinyChaptersResultingFromSponsorOverlapAreIgnored PASSED [ 66%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_TinySponsorsAreIgnored PASSED [ 66%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_TinySponsorsOverlapsAreIgnored PASSED [ 66%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_TinySponsorsPrependedToTheNextSponsor PASSED [ 66%] test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_UniqueNamesForOverlappingSponsors PASSED [ 66%] test/test_socks.py::TestSocks4Proxy::test_socks4_no_auth[Urllib-http] PASSED [ 66%] test/test_socks.py::TestSocks4Proxy::test_socks4_no_auth[Requests-http] PASSED [ 66%] test/test_socks.py::TestSocks4Proxy::test_socks4_no_auth[Websockets-ws] SKIPPED [ 67%] test/test_socks.py::TestSocks4Proxy::test_socks4_no_auth[CurlCFFI-http] SKIPPED [ 67%] test/test_socks.py::TestSocks4Proxy::test_socks4_auth[Urllib-http] PASSED [ 67%] test/test_socks.py::TestSocks4Proxy::test_socks4_auth[Requests-http] PASSED [ 67%] test/test_socks.py::TestSocks4Proxy::test_socks4_auth[Websockets-ws] SKIPPED [ 67%] test/test_socks.py::TestSocks4Proxy::test_socks4_auth[CurlCFFI-http] SKIPPED [ 67%] test/test_socks.py::TestSocks4Proxy::test_socks4a_ipv4_target[Urllib-http] PASSED [ 67%] test/test_socks.py::TestSocks4Proxy::test_socks4a_ipv4_target[Requests-http] PASSED [ 67%] test/test_socks.py::TestSocks4Proxy::test_socks4a_ipv4_target[Websockets-ws] SKIPPED [ 67%] test/test_socks.py::TestSocks4Proxy::test_socks4a_ipv4_target[CurlCFFI-http] SKIPPED [ 68%] test/test_socks.py::TestSocks4Proxy::test_socks4a_domain_target[Urllib-http] PASSED [ 68%] test/test_socks.py::TestSocks4Proxy::test_socks4a_domain_target[Requests-http] PASSED [ 68%] test/test_socks.py::TestSocks4Proxy::test_socks4a_domain_target[Websockets-ws] SKIPPED [ 68%] test/test_socks.py::TestSocks4Proxy::test_socks4a_domain_target[CurlCFFI-http] SKIPPED [ 68%] test/test_socks.py::TestSocks4Proxy::test_ipv4_client_source_address[Urllib-http] PASSED [ 68%] test/test_socks.py::TestSocks4Proxy::test_ipv4_client_source_address[Requests-http] PASSED [ 68%] test/test_socks.py::TestSocks4Proxy::test_ipv4_client_source_address[Websockets-ws] SKIPPED [ 68%] test/test_socks.py::TestSocks4Proxy::test_ipv4_client_source_address[CurlCFFI-http] SKIPPED [ 68%] test/test_socks.py::TestSocks4Proxy::test_socks4_errors[91-Urllib-http] PASSED [ 69%] test/test_socks.py::TestSocks4Proxy::test_socks4_errors[91-Requests-http] PASSED [ 69%] test/test_socks.py::TestSocks4Proxy::test_socks4_errors[91-Websockets-ws] SKIPPED [ 69%] test/test_socks.py::TestSocks4Proxy::test_socks4_errors[91-CurlCFFI-http] SKIPPED [ 69%] test/test_socks.py::TestSocks4Proxy::test_socks4_errors[92-Urllib-http] PASSED [ 69%] test/test_socks.py::TestSocks4Proxy::test_socks4_errors[92-Requests-http] PASSED [ 69%] test/test_socks.py::TestSocks4Proxy::test_socks4_errors[92-Websockets-ws] SKIPPED [ 69%] test/test_socks.py::TestSocks4Proxy::test_socks4_errors[92-CurlCFFI-http] SKIPPED [ 69%] test/test_socks.py::TestSocks4Proxy::test_socks4_errors[93-Urllib-http] PASSED [ 69%] test/test_socks.py::TestSocks4Proxy::test_socks4_errors[93-Requests-http] PASSED [ 70%] test/test_socks.py::TestSocks4Proxy::test_socks4_errors[93-Websockets-ws] SKIPPED [ 70%] test/test_socks.py::TestSocks4Proxy::test_socks4_errors[93-CurlCFFI-http] SKIPPED [ 70%] test/test_socks.py::TestSocks4Proxy::test_ipv6_socks4_proxy[Urllib-http] PASSED [ 70%] test/test_socks.py::TestSocks4Proxy::test_ipv6_socks4_proxy[Requests-http] PASSED [ 70%] test/test_socks.py::TestSocks4Proxy::test_ipv6_socks4_proxy[Websockets-ws] SKIPPED [ 70%] test/test_socks.py::TestSocks4Proxy::test_ipv6_socks4_proxy[CurlCFFI-http] SKIPPED [ 70%] test/test_socks.py::TestSocks4Proxy::test_timeout[Urllib-http] PASSED [ 70%] test/test_socks.py::TestSocks4Proxy::test_timeout[Requests-http] PASSED [ 70%] test/test_socks.py::TestSocks4Proxy::test_timeout[Websockets-ws] SKIPPED [ 71%] test/test_socks.py::TestSocks4Proxy::test_timeout[CurlCFFI-http] SKIPPED [ 71%] test/test_socks.py::TestSocks5Proxy::test_socks5_no_auth[Urllib-http] PASSED [ 71%] test/test_socks.py::TestSocks5Proxy::test_socks5_no_auth[Requests-http] PASSED [ 71%] test/test_socks.py::TestSocks5Proxy::test_socks5_no_auth[Websockets-ws] SKIPPED [ 71%] test/test_socks.py::TestSocks5Proxy::test_socks5_no_auth[CurlCFFI-http] SKIPPED [ 71%] test/test_socks.py::TestSocks5Proxy::test_socks5_user_pass[Urllib-http] PASSED [ 71%] test/test_socks.py::TestSocks5Proxy::test_socks5_user_pass[Requests-http] PASSED [ 71%] test/test_socks.py::TestSocks5Proxy::test_socks5_user_pass[Websockets-ws] SKIPPED [ 71%] test/test_socks.py::TestSocks5Proxy::test_socks5_user_pass[CurlCFFI-http] SKIPPED [ 72%] test/test_socks.py::TestSocks5Proxy::test_socks5_ipv4_target[Urllib-http] PASSED [ 72%] test/test_socks.py::TestSocks5Proxy::test_socks5_ipv4_target[Requests-http] PASSED [ 72%] test/test_socks.py::TestSocks5Proxy::test_socks5_ipv4_target[Websockets-ws] SKIPPED [ 72%] test/test_socks.py::TestSocks5Proxy::test_socks5_ipv4_target[CurlCFFI-http] SKIPPED [ 72%] test/test_socks.py::TestSocks5Proxy::test_socks5_domain_target[Urllib-http] PASSED [ 72%] test/test_socks.py::TestSocks5Proxy::test_socks5_domain_target[Requests-http] PASSED [ 72%] test/test_socks.py::TestSocks5Proxy::test_socks5_domain_target[Websockets-ws] SKIPPED [ 72%] test/test_socks.py::TestSocks5Proxy::test_socks5_domain_target[CurlCFFI-http] SKIPPED [ 72%] test/test_socks.py::TestSocks5Proxy::test_socks5h_domain_target[Urllib-http] PASSED [ 73%] test/test_socks.py::TestSocks5Proxy::test_socks5h_domain_target[Requests-http] PASSED [ 73%] test/test_socks.py::TestSocks5Proxy::test_socks5h_domain_target[Websockets-ws] SKIPPED [ 73%] test/test_socks.py::TestSocks5Proxy::test_socks5h_domain_target[CurlCFFI-http] SKIPPED [ 73%] test/test_socks.py::TestSocks5Proxy::test_socks5h_ip_target[Urllib-http] PASSED [ 73%] test/test_socks.py::TestSocks5Proxy::test_socks5h_ip_target[Requests-http] PASSED [ 73%] test/test_socks.py::TestSocks5Proxy::test_socks5h_ip_target[Websockets-ws] SKIPPED [ 73%] test/test_socks.py::TestSocks5Proxy::test_socks5h_ip_target[CurlCFFI-http] SKIPPED [ 73%] test/test_socks.py::TestSocks5Proxy::test_socks5_ipv6_destination[Urllib-http] PASSED [ 73%] test/test_socks.py::TestSocks5Proxy::test_socks5_ipv6_destination[Requests-http] PASSED [ 74%] test/test_socks.py::TestSocks5Proxy::test_socks5_ipv6_destination[Websockets-ws] SKIPPED [ 74%] test/test_socks.py::TestSocks5Proxy::test_socks5_ipv6_destination[CurlCFFI-http] SKIPPED [ 74%] test/test_socks.py::TestSocks5Proxy::test_ipv6_socks5_proxy[Urllib-http] PASSED [ 74%] test/test_socks.py::TestSocks5Proxy::test_ipv6_socks5_proxy[Requests-http] PASSED [ 74%] test/test_socks.py::TestSocks5Proxy::test_ipv6_socks5_proxy[Websockets-ws] SKIPPED [ 74%] test/test_socks.py::TestSocks5Proxy::test_ipv6_socks5_proxy[CurlCFFI-http] SKIPPED [ 74%] test/test_socks.py::TestSocks5Proxy::test_ipv4_client_source_address[Urllib-http] PASSED [ 74%] test/test_socks.py::TestSocks5Proxy::test_ipv4_client_source_address[Requests-http] PASSED [ 74%] test/test_socks.py::TestSocks5Proxy::test_ipv4_client_source_address[Websockets-ws] SKIPPED [ 75%] test/test_socks.py::TestSocks5Proxy::test_ipv4_client_source_address[CurlCFFI-http] SKIPPED [ 75%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[1-Urllib-http] PASSED [ 75%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[1-Requests-http] PASSED [ 75%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[1-Websockets-ws] SKIPPED [ 75%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[1-CurlCFFI-http] SKIPPED [ 75%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[2-Urllib-http] PASSED [ 75%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[2-Requests-http] PASSED [ 75%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[2-Websockets-ws] SKIPPED [ 75%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[2-CurlCFFI-http] SKIPPED [ 76%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[3-Urllib-http] PASSED [ 76%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[3-Requests-http] PASSED [ 76%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[3-Websockets-ws] SKIPPED [ 76%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[3-CurlCFFI-http] SKIPPED [ 76%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[4-Urllib-http] PASSED [ 76%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[4-Requests-http] PASSED [ 76%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[4-Websockets-ws] SKIPPED [ 76%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[4-CurlCFFI-http] SKIPPED [ 76%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[5-Urllib-http] PASSED [ 77%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[5-Requests-http] PASSED [ 77%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[5-Websockets-ws] SKIPPED [ 77%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[5-CurlCFFI-http] SKIPPED [ 77%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[6-Urllib-http] PASSED [ 77%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[6-Requests-http] PASSED [ 77%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[6-Websockets-ws] SKIPPED [ 77%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[6-CurlCFFI-http] SKIPPED [ 77%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[7-Urllib-http] PASSED [ 77%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[7-Requests-http] PASSED [ 78%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[7-Websockets-ws] SKIPPED [ 78%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[7-CurlCFFI-http] SKIPPED [ 78%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[8-Urllib-http] PASSED [ 78%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[8-Requests-http] PASSED [ 78%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[8-Websockets-ws] SKIPPED [ 78%] test/test_socks.py::TestSocks5Proxy::test_socks5_errors[8-CurlCFFI-http] SKIPPED [ 78%] test/test_socks.py::TestSocks5Proxy::test_timeout[Urllib-http] PASSED [ 78%] test/test_socks.py::TestSocks5Proxy::test_timeout[Requests-http] PASSED [ 78%] test/test_socks.py::TestSocks5Proxy::test_timeout[Websockets-ws] SKIPPED [ 79%] test/test_socks.py::TestSocks5Proxy::test_timeout[CurlCFFI-http] SKIPPED [ 79%] test/test_traversal.py::TestTraversal::test_traversal_base PASSED [ 79%] test/test_traversal.py::TestTraversal::test_traversal_ellipsis PASSED [ 79%] test/test_traversal.py::TestTraversal::test_traversal_function PASSED [ 79%] test/test_traversal.py::TestTraversal::test_traversal_set PASSED [ 79%] test/test_traversal.py::TestTraversal::test_traversal_slice PASSED [ 79%] test/test_traversal.py::TestTraversal::test_traversal_alternatives PASSED [ 79%] test/test_traversal.py::TestTraversal::test_traversal_branching_nesting PASSED [ 79%] test/test_traversal.py::TestTraversal::test_traversal_dict PASSED [ 80%] test/test_traversal.py::TestTraversal::test_traversal_default PASSED [ 80%] test/test_traversal.py::TestTraversal::test_traversal_branching[path0] PASSED [ 80%] test/test_traversal.py::TestTraversal::test_traversal_branching[path1] PASSED [ 80%] test/test_traversal.py::TestTraversal::test_traversal_branching[path2] PASSED [ 80%] test/test_traversal.py::TestTraversal::test_traversal_branching[path3] PASSED [ 80%] test/test_traversal.py::TestTraversal::test_traversal_expected_type PASSED [ 80%] test/test_traversal.py::TestTraversal::test_traversal_get_all PASSED [ 80%] test/test_traversal.py::TestTraversal::test_traversal_casesense PASSED [ 80%] test/test_traversal.py::TestTraversal::test_traversal_traverse_string PASSED [ 81%] test/test_traversal.py::TestTraversal::test_traversal_re PASSED [ 81%] test/test_traversal.py::TestTraversal::test_traversal_xml_etree PASSED [ 81%] test/test_traversal.py::TestTraversal::test_traversal_unbranching PASSED [ 81%] test/test_traversal.py::TestTraversal::test_traversal_morsel PASSED [ 81%] test/test_traversal.py::TestDictGet::test_dict_get PASSED [ 81%] test/test_update.py::TestUpdate::test_query_update PASSED [ 81%] test/test_update.py::TestUpdate::test_update_spec PASSED [ 81%] test/test_utils.py::TestUtil::test_LazyList PASSED [ 81%] test/test_utils.py::TestUtil::test_LazyList_laziness PASSED [ 82%] test/test_utils.py::TestUtil::test_Popen_windows_escaping SKIPPED (Only relevant on Windows) [ 82%] test/test_utils.py::TestUtil::test_age_restricted PASSED [ 82%] test/test_utils.py::TestUtil::test_args_to_str PASSED [ 82%] test/test_utils.py::TestUtil::test_base_url PASSED [ 82%] test/test_utils.py::TestUtil::test_caesar PASSED [ 82%] test/test_utils.py::TestUtil::test_clean_html PASSED [ 82%] test/test_utils.py::TestUtil::test_clean_podcast_url PASSED [ 82%] test/test_utils.py::TestUtil::test_cli_bool_option PASSED [ 82%] test/test_utils.py::TestUtil::test_cli_option PASSED [ 83%] test/test_utils.py::TestUtil::test_cli_valueless_option PASSED [ 83%] test/test_utils.py::TestUtil::test_date_from_str PASSED [ 83%] test/test_utils.py::TestUtil::test_daterange PASSED [ 83%] test/test_utils.py::TestUtil::test_datetime_from_str PASSED [ 83%] test/test_utils.py::TestUtil::test_detect_exe_version PASSED [ 83%] test/test_utils.py::TestUtil::test_determine_ext PASSED [ 83%] test/test_utils.py::TestUtil::test_determine_file_encoding PASSED [ 83%] test/test_utils.py::TestUtil::test_dfxp2srt PASSED [ 83%] test/test_utils.py::TestUtil::test_encode_base_n PASSED [ 84%] test/test_utils.py::TestUtil::test_encode_compat_str PASSED [ 84%] test/test_utils.py::TestUtil::test_escape_rfc3986 PASSED [ 84%] test/test_utils.py::TestUtil::test_expand_path PASSED [ 84%] test/test_utils.py::TestUtil::test_extract_attributes PASSED [ 84%] test/test_utils.py::TestUtil::test_extract_basic_auth PASSED [ 84%] test/test_utils.py::TestUtil::test_find_xpath_attr PASSED [ 84%] test/test_utils.py::TestUtil::test_fix_xml_ampersands PASSED [ 84%] test/test_utils.py::TestUtil::test_float_or_none PASSED [ 84%] test/test_utils.py::TestUtil::test_format_bytes PASSED [ 85%] test/test_utils.py::TestUtil::test_get_compatible_ext PASSED [ 85%] test/test_utils.py::TestUtil::test_get_element_by_attribute PASSED [ 85%] test/test_utils.py::TestUtil::test_get_element_by_class PASSED [ 85%] test/test_utils.py::TestUtil::test_get_element_html_by_attribute PASSED [ 85%] test/test_utils.py::TestUtil::test_get_element_html_by_class PASSED [ 85%] test/test_utils.py::TestUtil::test_get_element_text_and_html_by_tag PASSED [ 85%] test/test_utils.py::TestUtil::test_get_elements_by_attribute PASSED [ 85%] test/test_utils.py::TestUtil::test_get_elements_by_class PASSED [ 85%] test/test_utils.py::TestUtil::test_get_elements_html_by_attribute PASSED [ 86%] test/test_utils.py::TestUtil::test_get_elements_html_by_class PASSED [ 86%] test/test_utils.py::TestUtil::test_get_elements_text_and_html_by_attribute PASSED [ 86%] test/test_utils.py::TestUtil::test_hide_login_info PASSED [ 86%] test/test_utils.py::TestUtil::test_http_header_dict PASSED [ 86%] test/test_utils.py::TestUtil::test_int_or_none PASSED [ 86%] test/test_utils.py::TestUtil::test_intlist_to_bytes PASSED [ 86%] test/test_utils.py::TestUtil::test_iri_to_uri PASSED [ 86%] test/test_utils.py::TestUtil::test_is_html PASSED [ 86%] test/test_utils.py::TestUtil::test_js_to_json_common_constructors PASSED [ 87%] test/test_utils.py::TestUtil::test_js_to_json_edgecases PASSED [ 87%] test/test_utils.py::TestUtil::test_js_to_json_malformed PASSED [ 87%] test/test_utils.py::TestUtil::test_js_to_json_realworld PASSED [ 87%] test/test_utils.py::TestUtil::test_js_to_json_template_literal PASSED [ 87%] test/test_utils.py::TestUtil::test_js_to_json_vars_strings PASSED [ 87%] test/test_utils.py::TestUtil::test_limit_length PASSED [ 87%] test/test_utils.py::TestUtil::test_locked_file PASSED [ 87%] test/test_utils.py::TestUtil::test_lowercase_escape PASSED [ 87%] test/test_utils.py::TestUtil::test_match_str PASSED [ 88%] test/test_utils.py::TestUtil::test_merge_dicts PASSED [ 88%] test/test_utils.py::TestUtil::test_mimetype2ext PASSED [ 88%] test/test_utils.py::TestUtil::test_month_by_name PASSED [ 88%] test/test_utils.py::TestUtil::test_multipart_encode PASSED [ 88%] test/test_utils.py::TestUtil::test_normalize_url PASSED [ 88%] test/test_utils.py::TestUtil::test_ohdave_rsa_encrypt PASSED [ 88%] test/test_utils.py::TestUtil::test_ordered_set PASSED [ 88%] test/test_utils.py::TestUtil::test_paged_list PASSED [ 88%] test/test_utils.py::TestUtil::test_parse_age_limit PASSED [ 89%] test/test_utils.py::TestUtil::test_parse_bitrate PASSED [ 89%] test/test_utils.py::TestUtil::test_parse_codecs PASSED [ 89%] test/test_utils.py::TestUtil::test_parse_count PASSED [ 89%] test/test_utils.py::TestUtil::test_parse_dfxp_time_expr PASSED [ 89%] test/test_utils.py::TestUtil::test_parse_duration PASSED [ 89%] test/test_utils.py::TestUtil::test_parse_filesize PASSED [ 89%] test/test_utils.py::TestUtil::test_parse_iso8601 PASSED [ 89%] test/test_utils.py::TestUtil::test_parse_resolution PASSED [ 89%] test/test_utils.py::TestUtil::test_pkcs1pad PASSED [ 90%] test/test_utils.py::TestUtil::test_prepend_extension PASSED [ 90%] test/test_utils.py::TestUtil::test_read_batch_urls PASSED [ 90%] test/test_utils.py::TestUtil::test_remove_dot_segments PASSED [ 90%] test/test_utils.py::TestUtil::test_remove_end PASSED [ 90%] test/test_utils.py::TestUtil::test_remove_quotes PASSED [ 90%] test/test_utils.py::TestUtil::test_remove_start PASSED [ 90%] test/test_utils.py::TestUtil::test_render_table PASSED [ 90%] test/test_utils.py::TestUtil::test_replace_extension PASSED [ 90%] test/test_utils.py::TestUtil::test_rot47 PASSED [ 91%] test/test_utils.py::TestUtil::test_sanitize_filename PASSED [ 91%] test/test_utils.py::TestUtil::test_sanitize_filename_restricted PASSED [ 91%] test/test_utils.py::TestUtil::test_sanitize_ids PASSED [ 91%] test/test_utils.py::TestUtil::test_sanitize_path PASSED [ 91%] test/test_utils.py::TestUtil::test_sanitize_url PASSED [ 91%] test/test_utils.py::TestUtil::test_shell_quote PASSED [ 91%] test/test_utils.py::TestUtil::test_smuggle_url PASSED [ 91%] test/test_utils.py::TestUtil::test_str_to_int PASSED [ 91%] test/test_utils.py::TestUtil::test_strip_jsonp PASSED [ 92%] test/test_utils.py::TestUtil::test_strip_or_none PASSED [ 92%] test/test_utils.py::TestUtil::test_subtitles_filename PASSED [ 92%] test/test_utils.py::TestUtil::test_timeconvert PASSED [ 92%] test/test_utils.py::TestUtil::test_try_call PASSED [ 92%] test/test_utils.py::TestUtil::test_unescape_html PASSED [ 92%] test/test_utils.py::TestUtil::test_unified_dates PASSED [ 92%] test/test_utils.py::TestUtil::test_unified_timestamps PASSED [ 92%] test/test_utils.py::TestUtil::test_update_url_query PASSED [ 92%] test/test_utils.py::TestUtil::test_uppercase_escape PASSED [ 93%] test/test_utils.py::TestUtil::test_url_basename PASSED [ 93%] test/test_utils.py::TestUtil::test_url_or_none PASSED [ 93%] test/test_utils.py::TestUtil::test_urlencode_postdata PASSED [ 93%] test/test_utils.py::TestUtil::test_urljoin PASSED [ 93%] test/test_utils.py::TestUtil::test_urshift PASSED [ 93%] test/test_utils.py::TestUtil::test_variadic PASSED [ 93%] test/test_utils.py::TestUtil::test_version_tuple PASSED [ 93%] test/test_utils.py::TestUtil::test_xpath_attr PASSED [ 93%] test/test_utils.py::TestUtil::test_xpath_element PASSED [ 94%] test/test_utils.py::TestUtil::test_xpath_text PASSED [ 94%] test/test_utils.py::TestUtil::test_xpath_with_ns PASSED [ 94%] test/test_verbose_output.py::TestVerboseOutput::test_private_info_arg PASSED [ 94%] test/test_verbose_output.py::TestVerboseOutput::test_private_info_eq PASSED [ 94%] test/test_verbose_output.py::TestVerboseOutput::test_private_info_shortarg PASSED [ 94%] test/test_verbose_output.py::TestVerboseOutput::test_private_info_shortarg_eq PASSED [ 94%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_basic_websockets[Websockets] SKIPPED [ 94%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_send_types[Websockets-str-1] SKIPPED [ 94%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_send_types[Websockets-bytes-2] SKIPPED [ 95%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_verify_cert[Websockets] SKIPPED [ 95%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_ssl_error[Websockets] SKIPPED [ 95%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_percent_encode[/\u4e2d\u6587-/%E4%B8%AD%E6%96%87-Websockets] SKIPPED [ 95%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_percent_encode[/%c7%9f-/%c7%9f-Websockets] SKIPPED [ 95%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_remove_dot_segments[Websockets] SKIPPED [ 95%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_raise_http_error[200-Websockets] SKIPPED [ 95%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_raise_http_error[204-Websockets] SKIPPED [ 95%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_raise_http_error[301-Websockets] SKIPPED [ 95%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_raise_http_error[302-Websockets] SKIPPED [ 96%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_raise_http_error[303-Websockets] SKIPPED [ 96%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_raise_http_error[400-Websockets] SKIPPED [ 96%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_raise_http_error[500-Websockets] SKIPPED [ 96%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_raise_http_error[511-Websockets] SKIPPED [ 96%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_timeout[params0-extensions0-Websockets] SKIPPED [ 96%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_timeout[params1-extensions1-Websockets] SKIPPED [ 96%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_cookies[Websockets] SKIPPED [ 96%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_source_address[Websockets] SKIPPED [ 96%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_response_url[Websockets] SKIPPED [ 97%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_request_headers[Websockets] SKIPPED [ 97%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_mtls[Websockets-client_cert0] SKIPPED [ 97%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_mtls[Websockets-client_cert1] SKIPPED [ 97%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_mtls[Websockets-client_cert2] SKIPPED [ 97%] test/test_websockets.py::TestWebsSocketRequestHandlerConformance::test_mtls[Websockets-client_cert3] SKIPPED [ 97%] test/test_websockets.py::TestWebsocketsRequestHandler::test_request_error_mapping[-RequestError-Websockets] SKIPPED [ 97%] test/test_websockets.py::TestWebsocketsRequestHandler::test_request_error_mapping[-TransportError0-Websockets] SKIPPED [ 97%] test/test_websockets.py::TestWebsocketsRequestHandler::test_request_error_mapping[-TransportError1-Websockets] SKIPPED [ 97%] test/test_websockets.py::TestWebsocketsRequestHandler::test_request_error_mapping[-TransportError2-Websockets] SKIPPED [ 98%] test/test_websockets.py::TestWebsocketsRequestHandler::test_request_error_mapping[-TransportError3-Websockets] SKIPPED [ 98%] test/test_websockets.py::TestWebsocketsRequestHandler::test_request_error_mapping[-TransportError4-Websockets] SKIPPED [ 98%] test/test_websockets.py::TestWebsocketsRequestHandler::test_request_error_mapping[-TransportError5-Websockets] SKIPPED [ 98%] test/test_websockets.py::TestWebsocketsRequestHandler::test_request_error_mapping[-SSLError-Websockets] SKIPPED [ 98%] test/test_websockets.py::TestWebsocketsRequestHandler::test_request_error_mapping[-CertificateVerifyError-Websockets] SKIPPED [ 98%] test/test_websockets.py::TestWebsocketsRequestHandler::test_request_error_mapping[-ProxyError-Websockets] SKIPPED [ 98%] test/test_websockets.py::TestWebsocketsRequestHandler::test_ws_send_error_mapping[-TransportError-None0-Websockets] SKIPPED [ 98%] test/test_websockets.py::TestWebsocketsRequestHandler::test_ws_send_error_mapping[-TransportError-None1-Websockets] SKIPPED [ 98%] test/test_websockets.py::TestWebsocketsRequestHandler::test_ws_send_error_mapping[-TransportError-None2-Websockets] SKIPPED [ 99%] test/test_websockets.py::TestWebsocketsRequestHandler::test_ws_send_error_mapping[-RequestError-None-Websockets] SKIPPED [ 99%] test/test_websockets.py::TestWebsocketsRequestHandler::test_ws_send_error_mapping[-ProxyError-None-Websockets] SKIPPED [ 99%] test/test_websockets.py::TestWebsocketsRequestHandler::test_ws_send_error_mapping[-TransportError-None3-Websockets] SKIPPED [ 99%] test/test_websockets.py::TestWebsocketsRequestHandler::test_ws_recv_error_mapping[-TransportError-None0-Websockets] SKIPPED [ 99%] test/test_websockets.py::TestWebsocketsRequestHandler::test_ws_recv_error_mapping[-TransportError-None1-Websockets] SKIPPED [ 99%] test/test_websockets.py::TestWebsocketsRequestHandler::test_ws_recv_error_mapping[-TransportError-None2-Websockets] SKIPPED [ 99%] test/test_websockets.py::TestWebsocketsRequestHandler::test_ws_recv_error_mapping[-ProxyError-None-Websockets] SKIPPED [ 99%] test/test_websockets.py::TestWebsocketsRequestHandler::test_ws_recv_error_mapping[-TransportError-None3-Websockets] SKIPPED [ 99%] test/test_youtube_misc.py::TestYoutubeMisc::test_youtube_extract PASSED [100%] =================================== FAILURES =================================== ______________ TestHTTPRequestHandler.test_verify_cert[Requests] _______________ self = method = 'GET', url = '/headers', body = None headers = {'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate'} retries = Retry(total=False, connect=None, read=None, redirect=0, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=20.0, read=20.0, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None response_kw = {'decode_content': False, 'preload_content': False} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/headers', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( self, method, url, body=None, headers=None, retries=None, redirect=True, assert_same_host=True, timeout=_Default, pool_timeout=None, release_conn=None, chunked=False, body_pos=None, **response_kw ): """ 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 provided by :class:`.RequestMethods`, 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. Pass ``None`` to retry until you receive a response. 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 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 ``response_kw.get('preload_content', True)``. :param 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. :param \\**response_kw: Additional parameters are passed to :meth:`urllib3.response.HTTPResponse.from_httplib` """ 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 = response_kw.get("preload_content", True) # 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 = six.ensure_str(_encode_target(url)) else: url = six.ensure_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() headers.update(self.proxy_headers) # 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 is_new_proxy_conn = self.proxy is not None and not getattr( conn, "sock", None ) if is_new_proxy_conn and http_tunnel_required: self._prepare_proxy(conn) # Make the request on the httplib connection object. > httplib_response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, ) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:715: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:404: in _make_request self._validate_conn(conn) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:1058: in _validate_conn conn.connect() /usr/lib/python3.12/site-packages/urllib3/connection.py:419: in connect self.sock = ssl_wrap_socket( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:449: in ssl_wrap_socket ssl_sock = _ssl_wrap_socket_impl( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:493: in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock, server_hostname=server_hostname) /usr/lib/python3.12/ssl.py:455: in wrap_socket return self.sslsocket_class._create( /usr/lib/python3.12/ssl.py:1042: in _create self.do_handshake() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , block = False @_sslcopydoc def do_handshake(self, block=False): self._check_connected() timeout = self.gettimeout() try: if timeout == 0.0 and block: self.settimeout(None) > self._sslobj.do_handshake() E ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) /usr/lib/python3.12/ssl.py:1320: SSLCertVerificationError During handling of the above exception, another exception occurred: self = request = , stream = True timeout = Timeout(connect=20.0, read=20.0, 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, ) /usr/lib/python3.12/site-packages/requests/adapters.py:589: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:799: in urlopen retries = retries.increment( /usr/lib/python3.12/site-packages/urllib3/util/retry.py:525: in increment raise six.reraise(type(error), error, _stacktrace) /usr/lib/python3.12/site-packages/urllib3/packages/six.py:769: in reraise raise value.with_traceback(tb) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:715: in urlopen httplib_response = self._make_request( /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:404: in _make_request self._validate_conn(conn) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:1058: in _validate_conn conn.connect() /usr/lib/python3.12/site-packages/urllib3/connection.py:419: in connect self.sock = ssl_wrap_socket( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:449: in ssl_wrap_socket ssl_sock = _ssl_wrap_socket_impl( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:493: in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock, server_hostname=server_hostname) /usr/lib/python3.12/ssl.py:455: in wrap_socket return self.sslsocket_class._create( /usr/lib/python3.12/ssl.py:1042: in _create self.do_handshake() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , block = False @_sslcopydoc def do_handshake(self, block=False): self._check_connected() timeout = self.gettimeout() try: if timeout == 0.0 and block: self.settimeout(None) > self._sslobj.do_handshake() E urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) /usr/lib/python3.12/ssl.py:1320: SSLError During handling of the above exception, another exception occurred: self = request = def _send(self, request): headers = self._merge_headers(request.headers) add_accept_encoding_header(headers, SUPPORTED_ENCODINGS) max_redirects_exceeded = False session = self._get_instance(cookiejar=self._get_cookiejar(request)) try: > requests_res = session.request( method=request.method, url=request.url, data=request.data, headers=headers, timeout=self._calculate_timeout(request), proxies=self._get_proxies(request), allow_redirects=True, stream=True ) yt_dlp/networking/_requests.py:313: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) /usr/lib/python3.12/site-packages/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = request = , stream = True timeout = Timeout(connect=20.0, read=20.0, 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) except ClosedPoolError as e: raise ConnectionError(e, request=request) except _ProxyError as e: raise ProxyError(e) except (_SSLError, _HTTPError) as e: if isinstance(e, _SSLError): # This branch is for urllib3 versions earlier than v1.22 > raise SSLError(e, request=request) E requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) /usr/lib/python3.12/site-packages/requests/adapters.py:633: SSLError The above exception was the direct cause of the following exception: self = handler = functools.partial(, logger=) @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) def test_verify_cert(self, handler): with handler() as rh: with pytest.raises(CertificateVerifyError): validate_and_send(rh, Request(f'https://127.0.0.1:{self.https_port}/headers')) with handler(verify=False) as rh: > r = validate_and_send(rh, Request(f'https://127.0.0.1:{self.https_port}/headers')) test/test_networking.py:328: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/conftest.py:26: in validate_and_send return rh.send(req) yt_dlp/networking/_helper.py:208: in wrapper return func(self, *args, **kwargs) yt_dlp/networking/common.py:335: in send return self._send(request) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = request = def _send(self, request): headers = self._merge_headers(request.headers) add_accept_encoding_header(headers, SUPPORTED_ENCODINGS) max_redirects_exceeded = False session = self._get_instance(cookiejar=self._get_cookiejar(request)) try: requests_res = session.request( method=request.method, url=request.url, data=request.data, headers=headers, timeout=self._calculate_timeout(request), proxies=self._get_proxies(request), allow_redirects=True, stream=True ) except requests.exceptions.TooManyRedirects as e: max_redirects_exceeded = True requests_res = e.response except requests.exceptions.SSLError as e: if 'CERTIFICATE_VERIFY_FAILED' in str(e): > raise CertificateVerifyError(cause=e) from e E yt_dlp.networking.exceptions.CertificateVerifyError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) yt_dlp/networking/_requests.py:330: CertificateVerifyError _______ TestClientCertificate.test_certificate_combined_nopass[Requests] _______ self = method = 'GET', url = '/video.html', body = None headers = {'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate'} retries = Retry(total=False, connect=None, read=None, redirect=0, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=20.0, read=20.0, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None response_kw = {'decode_content': False, 'preload_content': False} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/video.html', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( self, method, url, body=None, headers=None, retries=None, redirect=True, assert_same_host=True, timeout=_Default, pool_timeout=None, release_conn=None, chunked=False, body_pos=None, **response_kw ): """ 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 provided by :class:`.RequestMethods`, 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. Pass ``None`` to retry until you receive a response. 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 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 ``response_kw.get('preload_content', True)``. :param 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. :param \\**response_kw: Additional parameters are passed to :meth:`urllib3.response.HTTPResponse.from_httplib` """ 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 = response_kw.get("preload_content", True) # 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 = six.ensure_str(_encode_target(url)) else: url = six.ensure_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() headers.update(self.proxy_headers) # 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 is_new_proxy_conn = self.proxy is not None and not getattr( conn, "sock", None ) if is_new_proxy_conn and http_tunnel_required: self._prepare_proxy(conn) # Make the request on the httplib connection object. > httplib_response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, ) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:715: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:404: in _make_request self._validate_conn(conn) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:1058: in _validate_conn conn.connect() /usr/lib/python3.12/site-packages/urllib3/connection.py:419: in connect self.sock = ssl_wrap_socket( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:449: in ssl_wrap_socket ssl_sock = _ssl_wrap_socket_impl( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:493: in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock, server_hostname=server_hostname) /usr/lib/python3.12/ssl.py:455: in wrap_socket return self.sslsocket_class._create( /usr/lib/python3.12/ssl.py:1042: in _create self.do_handshake() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , block = False @_sslcopydoc def do_handshake(self, block=False): self._check_connected() timeout = self.gettimeout() try: if timeout == 0.0 and block: self.settimeout(None) > self._sslobj.do_handshake() E ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) /usr/lib/python3.12/ssl.py:1320: SSLCertVerificationError During handling of the above exception, another exception occurred: self = request = , stream = True timeout = Timeout(connect=20.0, read=20.0, 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, ) /usr/lib/python3.12/site-packages/requests/adapters.py:589: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:799: in urlopen retries = retries.increment( /usr/lib/python3.12/site-packages/urllib3/util/retry.py:525: in increment raise six.reraise(type(error), error, _stacktrace) /usr/lib/python3.12/site-packages/urllib3/packages/six.py:769: in reraise raise value.with_traceback(tb) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:715: in urlopen httplib_response = self._make_request( /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:404: in _make_request self._validate_conn(conn) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:1058: in _validate_conn conn.connect() /usr/lib/python3.12/site-packages/urllib3/connection.py:419: in connect self.sock = ssl_wrap_socket( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:449: in ssl_wrap_socket ssl_sock = _ssl_wrap_socket_impl( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:493: in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock, server_hostname=server_hostname) /usr/lib/python3.12/ssl.py:455: in wrap_socket return self.sslsocket_class._create( /usr/lib/python3.12/ssl.py:1042: in _create self.do_handshake() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , block = False @_sslcopydoc def do_handshake(self, block=False): self._check_connected() timeout = self.gettimeout() try: if timeout == 0.0 and block: self.settimeout(None) > self._sslobj.do_handshake() E urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) /usr/lib/python3.12/ssl.py:1320: SSLError During handling of the above exception, another exception occurred: self = request = def _send(self, request): headers = self._merge_headers(request.headers) add_accept_encoding_header(headers, SUPPORTED_ENCODINGS) max_redirects_exceeded = False session = self._get_instance(cookiejar=self._get_cookiejar(request)) try: > requests_res = session.request( method=request.method, url=request.url, data=request.data, headers=headers, timeout=self._calculate_timeout(request), proxies=self._get_proxies(request), allow_redirects=True, stream=True ) yt_dlp/networking/_requests.py:313: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) /usr/lib/python3.12/site-packages/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = request = , stream = True timeout = Timeout(connect=20.0, read=20.0, 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) except ClosedPoolError as e: raise ConnectionError(e, request=request) except _ProxyError as e: raise ProxyError(e) except (_SSLError, _HTTPError) as e: if isinstance(e, _SSLError): # This branch is for urllib3 versions earlier than v1.22 > raise SSLError(e, request=request) E requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) /usr/lib/python3.12/site-packages/requests/adapters.py:633: SSLError The above exception was the direct cause of the following exception: self = handler = functools.partial(, logger=) @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) def test_certificate_combined_nopass(self, handler): > self._run_test(handler, client_cert={ 'client_certificate': os.path.join(self.certdir, 'clientwithkey.crt'), }) test/test_networking.py:750: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/test_networking.py:746: in _run_test validate_and_send(rh, Request(f'https://127.0.0.1:{self.port}/video.html')).read().decode() test/conftest.py:26: in validate_and_send return rh.send(req) yt_dlp/networking/_helper.py:208: in wrapper return func(self, *args, **kwargs) yt_dlp/networking/common.py:335: in send return self._send(request) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = request = def _send(self, request): headers = self._merge_headers(request.headers) add_accept_encoding_header(headers, SUPPORTED_ENCODINGS) max_redirects_exceeded = False session = self._get_instance(cookiejar=self._get_cookiejar(request)) try: requests_res = session.request( method=request.method, url=request.url, data=request.data, headers=headers, timeout=self._calculate_timeout(request), proxies=self._get_proxies(request), allow_redirects=True, stream=True ) except requests.exceptions.TooManyRedirects as e: max_redirects_exceeded = True requests_res = e.response except requests.exceptions.SSLError as e: if 'CERTIFICATE_VERIFY_FAILED' in str(e): > raise CertificateVerifyError(cause=e) from e E yt_dlp.networking.exceptions.CertificateVerifyError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) yt_dlp/networking/_requests.py:330: CertificateVerifyError ______ TestClientCertificate.test_certificate_nocombined_nopass[Requests] ______ self = method = 'GET', url = '/video.html', body = None headers = {'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate'} retries = Retry(total=False, connect=None, read=None, redirect=0, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=20.0, read=20.0, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None response_kw = {'decode_content': False, 'preload_content': False} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/video.html', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( self, method, url, body=None, headers=None, retries=None, redirect=True, assert_same_host=True, timeout=_Default, pool_timeout=None, release_conn=None, chunked=False, body_pos=None, **response_kw ): """ 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 provided by :class:`.RequestMethods`, 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. Pass ``None`` to retry until you receive a response. 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 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 ``response_kw.get('preload_content', True)``. :param 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. :param \\**response_kw: Additional parameters are passed to :meth:`urllib3.response.HTTPResponse.from_httplib` """ 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 = response_kw.get("preload_content", True) # 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 = six.ensure_str(_encode_target(url)) else: url = six.ensure_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() headers.update(self.proxy_headers) # 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 is_new_proxy_conn = self.proxy is not None and not getattr( conn, "sock", None ) if is_new_proxy_conn and http_tunnel_required: self._prepare_proxy(conn) # Make the request on the httplib connection object. > httplib_response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, ) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:715: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:404: in _make_request self._validate_conn(conn) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:1058: in _validate_conn conn.connect() /usr/lib/python3.12/site-packages/urllib3/connection.py:419: in connect self.sock = ssl_wrap_socket( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:449: in ssl_wrap_socket ssl_sock = _ssl_wrap_socket_impl( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:493: in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock, server_hostname=server_hostname) /usr/lib/python3.12/ssl.py:455: in wrap_socket return self.sslsocket_class._create( /usr/lib/python3.12/ssl.py:1042: in _create self.do_handshake() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , block = False @_sslcopydoc def do_handshake(self, block=False): self._check_connected() timeout = self.gettimeout() try: if timeout == 0.0 and block: self.settimeout(None) > self._sslobj.do_handshake() E ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) /usr/lib/python3.12/ssl.py:1320: SSLCertVerificationError During handling of the above exception, another exception occurred: self = request = , stream = True timeout = Timeout(connect=20.0, read=20.0, 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, ) /usr/lib/python3.12/site-packages/requests/adapters.py:589: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:799: in urlopen retries = retries.increment( /usr/lib/python3.12/site-packages/urllib3/util/retry.py:525: in increment raise six.reraise(type(error), error, _stacktrace) /usr/lib/python3.12/site-packages/urllib3/packages/six.py:769: in reraise raise value.with_traceback(tb) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:715: in urlopen httplib_response = self._make_request( /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:404: in _make_request self._validate_conn(conn) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:1058: in _validate_conn conn.connect() /usr/lib/python3.12/site-packages/urllib3/connection.py:419: in connect self.sock = ssl_wrap_socket( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:449: in ssl_wrap_socket ssl_sock = _ssl_wrap_socket_impl( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:493: in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock, server_hostname=server_hostname) /usr/lib/python3.12/ssl.py:455: in wrap_socket return self.sslsocket_class._create( /usr/lib/python3.12/ssl.py:1042: in _create self.do_handshake() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , block = False @_sslcopydoc def do_handshake(self, block=False): self._check_connected() timeout = self.gettimeout() try: if timeout == 0.0 and block: self.settimeout(None) > self._sslobj.do_handshake() E urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) /usr/lib/python3.12/ssl.py:1320: SSLError During handling of the above exception, another exception occurred: self = request = def _send(self, request): headers = self._merge_headers(request.headers) add_accept_encoding_header(headers, SUPPORTED_ENCODINGS) max_redirects_exceeded = False session = self._get_instance(cookiejar=self._get_cookiejar(request)) try: > requests_res = session.request( method=request.method, url=request.url, data=request.data, headers=headers, timeout=self._calculate_timeout(request), proxies=self._get_proxies(request), allow_redirects=True, stream=True ) yt_dlp/networking/_requests.py:313: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) /usr/lib/python3.12/site-packages/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = request = , stream = True timeout = Timeout(connect=20.0, read=20.0, 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) except ClosedPoolError as e: raise ConnectionError(e, request=request) except _ProxyError as e: raise ProxyError(e) except (_SSLError, _HTTPError) as e: if isinstance(e, _SSLError): # This branch is for urllib3 versions earlier than v1.22 > raise SSLError(e, request=request) E requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) /usr/lib/python3.12/site-packages/requests/adapters.py:633: SSLError The above exception was the direct cause of the following exception: self = handler = functools.partial(, logger=) @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) def test_certificate_nocombined_nopass(self, handler): > self._run_test(handler, client_cert={ 'client_certificate': os.path.join(self.certdir, 'client.crt'), 'client_certificate_key': os.path.join(self.certdir, 'client.key'), }) test/test_networking.py:756: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/test_networking.py:746: in _run_test validate_and_send(rh, Request(f'https://127.0.0.1:{self.port}/video.html')).read().decode() test/conftest.py:26: in validate_and_send return rh.send(req) yt_dlp/networking/_helper.py:208: in wrapper return func(self, *args, **kwargs) yt_dlp/networking/common.py:335: in send return self._send(request) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = request = def _send(self, request): headers = self._merge_headers(request.headers) add_accept_encoding_header(headers, SUPPORTED_ENCODINGS) max_redirects_exceeded = False session = self._get_instance(cookiejar=self._get_cookiejar(request)) try: requests_res = session.request( method=request.method, url=request.url, data=request.data, headers=headers, timeout=self._calculate_timeout(request), proxies=self._get_proxies(request), allow_redirects=True, stream=True ) except requests.exceptions.TooManyRedirects as e: max_redirects_exceeded = True requests_res = e.response except requests.exceptions.SSLError as e: if 'CERTIFICATE_VERIFY_FAILED' in str(e): > raise CertificateVerifyError(cause=e) from e E yt_dlp.networking.exceptions.CertificateVerifyError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) yt_dlp/networking/_requests.py:330: CertificateVerifyError ________ TestClientCertificate.test_certificate_combined_pass[Requests] ________ self = method = 'GET', url = '/video.html', body = None headers = {'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate'} retries = Retry(total=False, connect=None, read=None, redirect=0, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=20.0, read=20.0, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None response_kw = {'decode_content': False, 'preload_content': False} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/video.html', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( self, method, url, body=None, headers=None, retries=None, redirect=True, assert_same_host=True, timeout=_Default, pool_timeout=None, release_conn=None, chunked=False, body_pos=None, **response_kw ): """ 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 provided by :class:`.RequestMethods`, 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. Pass ``None`` to retry until you receive a response. 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 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 ``response_kw.get('preload_content', True)``. :param 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. :param \\**response_kw: Additional parameters are passed to :meth:`urllib3.response.HTTPResponse.from_httplib` """ 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 = response_kw.get("preload_content", True) # 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 = six.ensure_str(_encode_target(url)) else: url = six.ensure_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() headers.update(self.proxy_headers) # 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 is_new_proxy_conn = self.proxy is not None and not getattr( conn, "sock", None ) if is_new_proxy_conn and http_tunnel_required: self._prepare_proxy(conn) # Make the request on the httplib connection object. > httplib_response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, ) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:715: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:404: in _make_request self._validate_conn(conn) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:1058: in _validate_conn conn.connect() /usr/lib/python3.12/site-packages/urllib3/connection.py:419: in connect self.sock = ssl_wrap_socket( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:449: in ssl_wrap_socket ssl_sock = _ssl_wrap_socket_impl( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:493: in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock, server_hostname=server_hostname) /usr/lib/python3.12/ssl.py:455: in wrap_socket return self.sslsocket_class._create( /usr/lib/python3.12/ssl.py:1042: in _create self.do_handshake() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , block = False @_sslcopydoc def do_handshake(self, block=False): self._check_connected() timeout = self.gettimeout() try: if timeout == 0.0 and block: self.settimeout(None) > self._sslobj.do_handshake() E ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) /usr/lib/python3.12/ssl.py:1320: SSLCertVerificationError During handling of the above exception, another exception occurred: self = request = , stream = True timeout = Timeout(connect=20.0, read=20.0, 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, ) /usr/lib/python3.12/site-packages/requests/adapters.py:589: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:799: in urlopen retries = retries.increment( /usr/lib/python3.12/site-packages/urllib3/util/retry.py:525: in increment raise six.reraise(type(error), error, _stacktrace) /usr/lib/python3.12/site-packages/urllib3/packages/six.py:769: in reraise raise value.with_traceback(tb) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:715: in urlopen httplib_response = self._make_request( /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:404: in _make_request self._validate_conn(conn) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:1058: in _validate_conn conn.connect() /usr/lib/python3.12/site-packages/urllib3/connection.py:419: in connect self.sock = ssl_wrap_socket( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:449: in ssl_wrap_socket ssl_sock = _ssl_wrap_socket_impl( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:493: in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock, server_hostname=server_hostname) /usr/lib/python3.12/ssl.py:455: in wrap_socket return self.sslsocket_class._create( /usr/lib/python3.12/ssl.py:1042: in _create self.do_handshake() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , block = False @_sslcopydoc def do_handshake(self, block=False): self._check_connected() timeout = self.gettimeout() try: if timeout == 0.0 and block: self.settimeout(None) > self._sslobj.do_handshake() E urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) /usr/lib/python3.12/ssl.py:1320: SSLError During handling of the above exception, another exception occurred: self = request = def _send(self, request): headers = self._merge_headers(request.headers) add_accept_encoding_header(headers, SUPPORTED_ENCODINGS) max_redirects_exceeded = False session = self._get_instance(cookiejar=self._get_cookiejar(request)) try: > requests_res = session.request( method=request.method, url=request.url, data=request.data, headers=headers, timeout=self._calculate_timeout(request), proxies=self._get_proxies(request), allow_redirects=True, stream=True ) yt_dlp/networking/_requests.py:313: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) /usr/lib/python3.12/site-packages/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = request = , stream = True timeout = Timeout(connect=20.0, read=20.0, 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) except ClosedPoolError as e: raise ConnectionError(e, request=request) except _ProxyError as e: raise ProxyError(e) except (_SSLError, _HTTPError) as e: if isinstance(e, _SSLError): # This branch is for urllib3 versions earlier than v1.22 > raise SSLError(e, request=request) E requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) /usr/lib/python3.12/site-packages/requests/adapters.py:633: SSLError The above exception was the direct cause of the following exception: self = handler = functools.partial(, logger=) @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) def test_certificate_combined_pass(self, handler): > self._run_test(handler, client_cert={ 'client_certificate': os.path.join(self.certdir, 'clientwithencryptedkey.crt'), 'client_certificate_password': 'foobar', }) test/test_networking.py:763: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/test_networking.py:746: in _run_test validate_and_send(rh, Request(f'https://127.0.0.1:{self.port}/video.html')).read().decode() test/conftest.py:26: in validate_and_send return rh.send(req) yt_dlp/networking/_helper.py:208: in wrapper return func(self, *args, **kwargs) yt_dlp/networking/common.py:335: in send return self._send(request) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = request = def _send(self, request): headers = self._merge_headers(request.headers) add_accept_encoding_header(headers, SUPPORTED_ENCODINGS) max_redirects_exceeded = False session = self._get_instance(cookiejar=self._get_cookiejar(request)) try: requests_res = session.request( method=request.method, url=request.url, data=request.data, headers=headers, timeout=self._calculate_timeout(request), proxies=self._get_proxies(request), allow_redirects=True, stream=True ) except requests.exceptions.TooManyRedirects as e: max_redirects_exceeded = True requests_res = e.response except requests.exceptions.SSLError as e: if 'CERTIFICATE_VERIFY_FAILED' in str(e): > raise CertificateVerifyError(cause=e) from e E yt_dlp.networking.exceptions.CertificateVerifyError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) yt_dlp/networking/_requests.py:330: CertificateVerifyError _______ TestClientCertificate.test_certificate_nocombined_pass[Requests] _______ self = method = 'GET', url = '/video.html', body = None headers = {'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate'} retries = Retry(total=False, connect=None, read=None, redirect=0, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=20.0, read=20.0, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None response_kw = {'decode_content': False, 'preload_content': False} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/video.html', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( self, method, url, body=None, headers=None, retries=None, redirect=True, assert_same_host=True, timeout=_Default, pool_timeout=None, release_conn=None, chunked=False, body_pos=None, **response_kw ): """ 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 provided by :class:`.RequestMethods`, 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. Pass ``None`` to retry until you receive a response. 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 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 ``response_kw.get('preload_content', True)``. :param 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. :param \\**response_kw: Additional parameters are passed to :meth:`urllib3.response.HTTPResponse.from_httplib` """ 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 = response_kw.get("preload_content", True) # 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 = six.ensure_str(_encode_target(url)) else: url = six.ensure_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() headers.update(self.proxy_headers) # 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 is_new_proxy_conn = self.proxy is not None and not getattr( conn, "sock", None ) if is_new_proxy_conn and http_tunnel_required: self._prepare_proxy(conn) # Make the request on the httplib connection object. > httplib_response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, ) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:715: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:404: in _make_request self._validate_conn(conn) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:1058: in _validate_conn conn.connect() /usr/lib/python3.12/site-packages/urllib3/connection.py:419: in connect self.sock = ssl_wrap_socket( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:449: in ssl_wrap_socket ssl_sock = _ssl_wrap_socket_impl( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:493: in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock, server_hostname=server_hostname) /usr/lib/python3.12/ssl.py:455: in wrap_socket return self.sslsocket_class._create( /usr/lib/python3.12/ssl.py:1042: in _create self.do_handshake() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , block = False @_sslcopydoc def do_handshake(self, block=False): self._check_connected() timeout = self.gettimeout() try: if timeout == 0.0 and block: self.settimeout(None) > self._sslobj.do_handshake() E ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) /usr/lib/python3.12/ssl.py:1320: SSLCertVerificationError During handling of the above exception, another exception occurred: self = request = , stream = True timeout = Timeout(connect=20.0, read=20.0, 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, ) /usr/lib/python3.12/site-packages/requests/adapters.py:589: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:799: in urlopen retries = retries.increment( /usr/lib/python3.12/site-packages/urllib3/util/retry.py:525: in increment raise six.reraise(type(error), error, _stacktrace) /usr/lib/python3.12/site-packages/urllib3/packages/six.py:769: in reraise raise value.with_traceback(tb) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:715: in urlopen httplib_response = self._make_request( /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:404: in _make_request self._validate_conn(conn) /usr/lib/python3.12/site-packages/urllib3/connectionpool.py:1058: in _validate_conn conn.connect() /usr/lib/python3.12/site-packages/urllib3/connection.py:419: in connect self.sock = ssl_wrap_socket( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:449: in ssl_wrap_socket ssl_sock = _ssl_wrap_socket_impl( /usr/lib/python3.12/site-packages/urllib3/util/ssl_.py:493: in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock, server_hostname=server_hostname) /usr/lib/python3.12/ssl.py:455: in wrap_socket return self.sslsocket_class._create( /usr/lib/python3.12/ssl.py:1042: in _create self.do_handshake() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , block = False @_sslcopydoc def do_handshake(self, block=False): self._check_connected() timeout = self.gettimeout() try: if timeout == 0.0 and block: self.settimeout(None) > self._sslobj.do_handshake() E urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) /usr/lib/python3.12/ssl.py:1320: SSLError During handling of the above exception, another exception occurred: self = request = def _send(self, request): headers = self._merge_headers(request.headers) add_accept_encoding_header(headers, SUPPORTED_ENCODINGS) max_redirects_exceeded = False session = self._get_instance(cookiejar=self._get_cookiejar(request)) try: > requests_res = session.request( method=request.method, url=request.url, data=request.data, headers=headers, timeout=self._calculate_timeout(request), proxies=self._get_proxies(request), allow_redirects=True, stream=True ) yt_dlp/networking/_requests.py:313: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) /usr/lib/python3.12/site-packages/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = request = , stream = True timeout = Timeout(connect=20.0, read=20.0, 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) except ClosedPoolError as e: raise ConnectionError(e, request=request) except _ProxyError as e: raise ProxyError(e) except (_SSLError, _HTTPError) as e: if isinstance(e, _SSLError): # This branch is for urllib3 versions earlier than v1.22 > raise SSLError(e, request=request) E requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) /usr/lib/python3.12/site-packages/requests/adapters.py:633: SSLError The above exception was the direct cause of the following exception: self = handler = functools.partial(, logger=) @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) def test_certificate_nocombined_pass(self, handler): > self._run_test(handler, client_cert={ 'client_certificate': os.path.join(self.certdir, 'client.crt'), 'client_certificate_key': os.path.join(self.certdir, 'clientencrypted.key'), 'client_certificate_password': 'foobar', }) test/test_networking.py:770: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/test_networking.py:746: in _run_test validate_and_send(rh, Request(f'https://127.0.0.1:{self.port}/video.html')).read().decode() test/conftest.py:26: in validate_and_send return rh.send(req) yt_dlp/networking/_helper.py:208: in wrapper return func(self, *args, **kwargs) yt_dlp/networking/common.py:335: in send return self._send(request) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = request = def _send(self, request): headers = self._merge_headers(request.headers) add_accept_encoding_header(headers, SUPPORTED_ENCODINGS) max_redirects_exceeded = False session = self._get_instance(cookiejar=self._get_cookiejar(request)) try: requests_res = session.request( method=request.method, url=request.url, data=request.data, headers=headers, timeout=self._calculate_timeout(request), proxies=self._get_proxies(request), allow_redirects=True, stream=True ) except requests.exceptions.TooManyRedirects as e: max_redirects_exceeded = True requests_res = e.response except requests.exceptions.SSLError as e: if 'CERTIFICATE_VERIFY_FAILED' in str(e): > raise CertificateVerifyError(cause=e) from e E yt_dlp.networking.exceptions.CertificateVerifyError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1000) yt_dlp/networking/_requests.py:330: CertificateVerifyError =========================== short test summary info ============================ SKIPPED [1] test/test_downloader_external.py:115: ffmpeg not found SKIPPED [1] test/test_jsinterp.py:111: Not implemented SKIPPED [1] test/test_jsinterp.py:373: Not implemented SKIPPED [1] test/test_jsinterp.py:335: Not implemented SKIPPED [1] test/test_networking.py:321: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:332: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:350: CurlCFFI request handler is not available SKIPPED [3] test/test_networking.py:362: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:386: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:396: CurlCFFI request handler is not available SKIPPED [10] test/test_networking.py:408: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:450: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:483: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:489: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:495: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:512: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:528: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:544: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:563: CurlCFFI request handler is not available SKIPPED [2] test/test_networking.py:581: brotli support is not installed SKIPPED [1] test/test_networking.py:592: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:602: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:612: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:634: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:667: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:693: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:703: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:711: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:748: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:754: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:761: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:768: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:779: CurlCFFI request handler is not available SKIPPED [2] test/test_networking.py:791: Websockets request handler is not available SKIPPED [3] test/test_networking.py:970: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:983: CurlCFFI request handler is not available SKIPPED [3] test/test_networking.py:1003: CurlCFFI request handler is not available SKIPPED [5] test/test_networking.py:1031: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:1070: CurlCFFI request handler is not available SKIPPED [2] test/test_networking.py:1277: Websockets request handler is not available SKIPPED [2] test/test_networking.py:1277: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:1286: CurlCFFI request handler is not available SKIPPED [2] test/test_networking.py:1291: CurlCFFI request handler is not available SKIPPED [6] test/test_networking.py:1300: CurlCFFI request handler is not available SKIPPED [1] test/test_networking.py:1300: Websockets request handler is not available SKIPPED [1] test/test_networking.py:1309: CurlCFFI request handler is not available SKIPPED [4] test/test_networking.py:1314: CurlCFFI request handler is not available SKIPPED [11] test/test_networking.py:1319: CurlCFFI request handler is not available SKIPPED [2] test/test_networking.py:1319: Websockets request handler is not available SKIPPED [1] test/test_networking_utils.py:106: System uses certifi as default. The test is not valid SKIPPED [1] test/test_socks.py:297: Websockets request handler is not available SKIPPED [1] test/test_socks.py:297: CurlCFFI request handler is not available SKIPPED [1] test/test_socks.py:304: Websockets request handler is not available SKIPPED [1] test/test_socks.py:304: CurlCFFI request handler is not available SKIPPED [1] test/test_socks.py:313: Websockets request handler is not available SKIPPED [1] test/test_socks.py:313: CurlCFFI request handler is not available SKIPPED [1] test/test_socks.py:320: Websockets request handler is not available SKIPPED [1] test/test_socks.py:320: CurlCFFI request handler is not available SKIPPED [1] test/test_socks.py:328: Websockets request handler is not available SKIPPED [1] test/test_socks.py:328: CurlCFFI request handler is not available SKIPPED [3] test/test_socks.py:338: Websockets request handler is not available SKIPPED [3] test/test_socks.py:338: CurlCFFI request handler is not available SKIPPED [1] test/test_socks.py:349: Websockets request handler is not available SKIPPED [1] test/test_socks.py:349: CurlCFFI request handler is not available SKIPPED [1] test/test_socks.py:357: Websockets request handler is not available SKIPPED [1] test/test_socks.py:357: CurlCFFI request handler is not available SKIPPED [1] test/test_socks.py:373: Websockets request handler is not available SKIPPED [1] test/test_socks.py:373: CurlCFFI request handler is not available SKIPPED [1] test/test_socks.py:380: Websockets request handler is not available SKIPPED [1] test/test_socks.py:380: CurlCFFI request handler is not available SKIPPED [1] test/test_socks.py:392: Websockets request handler is not available SKIPPED [1] test/test_socks.py:392: CurlCFFI request handler is not available SKIPPED [1] test/test_socks.py:399: Websockets request handler is not available SKIPPED [1] test/test_socks.py:399: CurlCFFI request handler is not available SKIPPED [1] test/test_socks.py:406: Websockets request handler is not available SKIPPED [1] test/test_socks.py:406: CurlCFFI request handler is not available SKIPPED [1] test/test_socks.py:414: Websockets request handler is not available SKIPPED [1] test/test_socks.py:414: CurlCFFI request handler is not available SKIPPED [1] test/test_socks.py:422: Websockets request handler is not available SKIPPED [1] test/test_socks.py:422: CurlCFFI request handler is not available SKIPPED [1] test/test_socks.py:429: Websockets request handler is not available SKIPPED [1] test/test_socks.py:429: CurlCFFI request handler is not available SKIPPED [1] test/test_socks.py:439: Websockets request handler is not available SKIPPED [1] test/test_socks.py:439: CurlCFFI request handler is not available SKIPPED [8] test/test_socks.py:448: Websockets request handler is not available SKIPPED [8] test/test_socks.py:448: CurlCFFI request handler is not available SKIPPED [1] test/test_socks.py:464: Websockets request handler is not available SKIPPED [1] test/test_socks.py:464: CurlCFFI request handler is not available SKIPPED [1] test/test_utils.py:2061: Only relevant on Windows SKIPPED [1] test/test_websockets.py:132: websockets must be installed to test websocket request handlers SKIPPED [2] test/test_websockets.py:143: websockets must be installed to test websocket request handlers SKIPPED [1] test/test_websockets.py:152: websockets must be installed to test websocket request handlers SKIPPED [1] test/test_websockets.py:163: websockets must be installed to test websocket request handlers SKIPPED [2] test/test_websockets.py:170: websockets must be installed to test websocket request handlers SKIPPED [1] test/test_websockets.py:185: websockets must be installed to test websocket request handlers SKIPPED [8] test/test_websockets.py:198: websockets must be installed to test websocket request handlers SKIPPED [2] test/test_websockets.py:206: websockets must be installed to test websocket request handlers SKIPPED [1] test/test_websockets.py:216: websockets must be installed to test websocket request handlers SKIPPED [1] test/test_websockets.py:242: websockets must be installed to test websocket request handlers SKIPPED [1] test/test_websockets.py:252: websockets must be installed to test websocket request handlers SKIPPED [1] test/test_websockets.py:260: websockets must be installed to test websocket request handlers SKIPPED [4] test/test_websockets.py:280: websockets must be installed to test websocket request handlers SKIPPED [10] test/test_websockets.py:334: Websockets request handler is not available SKIPPED [6] test/test_websockets.py:365: Websockets request handler is not available SKIPPED [5] test/test_websockets.py:382: Websockets request handler is not available FAILED test/test_networking.py::TestHTTPRequestHandler::test_verify_cert[Requests] FAILED test/test_networking.py::TestClientCertificate::test_certificate_combined_nopass[Requests] FAILED test/test_networking.py::TestClientCertificate::test_certificate_nocombined_nopass[Requests] FAILED test/test_networking.py::TestClientCertificate::test_certificate_combined_pass[Requests] FAILED test/test_networking.py::TestClientCertificate::test_certificate_nocombined_pass[Requests] === 5 failed, 701 passed, 197 skipped, 5734 deselected in 539.57s (0:08:59) ==== ==> ERROR: A failure occurred in check().  Aborting... ==> ERROR: Build failed, check /var/lib/archbuild/extra-riscv64/root10/build [?25h[?25hreceiving incremental file list yt-dlp-2024.04.09-2-riscv64-build.log yt-dlp-2024.04.09-2-riscv64-check.log sent 62 bytes received 17,463 bytes 35,050.00 bytes/sec total size is 219,911 speedup is 12.55