From 029a555bbf7bab2df93de97475edf64cb605ac8e Mon Sep 17 00:00:00 2001 From: Ahmed TAHRI Date: Thu, 12 Sep 2024 20:22:06 +0200 Subject: [PATCH] feat: Support OS truststore for the TLS certificate verification This commit add support for loading the OS truststore root certificates in addition to the "legacy" certifi bundle. It will come in handy for every user behind a company proxy or just using a private PyPI warehouse. Close https://github.com/python-poetry/poetry/issues/9249 --- docs/repositories.md | 5 + poetry.lock | 269 ++++++++++++++++++++---------- pyproject.toml | 9 +- src/poetry/publishing/uploader.py | 4 + src/poetry/utils/authenticator.py | 4 +- src/poetry/utils/truststore.py | 70 ++++++++ src/poetry/vcs/git/backend.py | 17 ++ 7 files changed, 284 insertions(+), 94 deletions(-) create mode 100644 src/poetry/utils/truststore.py diff --git a/docs/repositories.md b/docs/repositories.md index 983628dd670..133d338efa1 100644 --- a/docs/repositories.md +++ b/docs/repositories.md @@ -569,6 +569,11 @@ poetry config -- http-basic.pypi myUsername -myPasswordStartingWithDash ## Certificates +### OS Truststore + +Poetry access the system truststore by default and retrieve the root certificates appropriately on Linux, Windows, and MacOS. +In addition to your OS root certificates, we still load the authorities provided by `certifi` as before. + ### Custom certificate authority and mutual TLS authentication Poetry supports repositories that are secured by a custom certificate authority as well as those that require diff --git a/poetry.lock b/poetry.lock index 1b43ad8b9ec..14b6ec951e8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -17,13 +17,13 @@ testing = ["jaraco.test", "pytest (!=8.0.*)", "pytest (>=6,!=8.1.*)", "pytest-ch [[package]] name = "build" -version = "1.2.1" +version = "1.2.2" description = "A simple, correct Python build frontend" optional = false -python-versions = ">= 3.8" +python-versions = ">=3.8" files = [ - {file = "build-1.2.1-py3-none-any.whl", hash = "sha256:75e10f767a433d9a86e50d83f418e83efc18ede923ee5ff7df93b6cb0306c5d4"}, - {file = "build-1.2.1.tar.gz", hash = "sha256:526263f4870c26f26c433545579475377b2b7588b6f1eac76a001e873ae3e19d"}, + {file = "build-1.2.2-py3-none-any.whl", hash = "sha256:277ccc71619d98afdd841a0e96ac9fe1593b823af481d3b0cea748e8894e0613"}, + {file = "build-1.2.2.tar.gz", hash = "sha256:119b2fb462adef986483438377a13b2f42064a2a3a4161f24a0cca698a07ac8c"}, ] [package.dependencies] @@ -74,63 +74,78 @@ files = [ [[package]] name = "cffi" -version = "1.16.0" +version = "1.17.0" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" files = [ - {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, - {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, - {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, - {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, - {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, - {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, - {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, - {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, - {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, - {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, - {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, - {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, - {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, - {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, - {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, - {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, - {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, - {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, - {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, - {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, - {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, - {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, - {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, - {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, - {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, - {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, - {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, + {file = "cffi-1.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f9338cc05451f1942d0d8203ec2c346c830f8e86469903d5126c1f0a13a2bcbb"}, + {file = "cffi-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0ce71725cacc9ebf839630772b07eeec220cbb5f03be1399e0457a1464f8e1a"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c815270206f983309915a6844fe994b2fa47e5d05c4c4cef267c3b30e34dbe42"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6bdcd415ba87846fd317bee0774e412e8792832e7805938987e4ede1d13046d"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a98748ed1a1df4ee1d6f927e151ed6c1a09d5ec21684de879c7ea6aa96f58f2"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0a048d4f6630113e54bb4b77e315e1ba32a5a31512c31a273807d0027a7e69ab"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24aa705a5f5bd3a8bcfa4d123f03413de5d86e497435693b638cbffb7d5d8a1b"}, + {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:856bf0924d24e7f93b8aee12a3a1095c34085600aa805693fb7f5d1962393206"}, + {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:4304d4416ff032ed50ad6bb87416d802e67139e31c0bde4628f36a47a3164bfa"}, + {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:331ad15c39c9fe9186ceaf87203a9ecf5ae0ba2538c9e898e3a6967e8ad3db6f"}, + {file = "cffi-1.17.0-cp310-cp310-win32.whl", hash = "sha256:669b29a9eca6146465cc574659058ed949748f0809a2582d1f1a324eb91054dc"}, + {file = "cffi-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:48b389b1fd5144603d61d752afd7167dfd205973a43151ae5045b35793232aa2"}, + {file = "cffi-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5d97162c196ce54af6700949ddf9409e9833ef1003b4741c2b39ef46f1d9720"}, + {file = "cffi-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ba5c243f4004c750836f81606a9fcb7841f8874ad8f3bf204ff5e56332b72b9"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bb9333f58fc3a2296fb1d54576138d4cf5d496a2cc118422bd77835e6ae0b9cb"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:435a22d00ec7d7ea533db494da8581b05977f9c37338c80bc86314bec2619424"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1df34588123fcc88c872f5acb6f74ae59e9d182a2707097f9e28275ec26a12d"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df8bb0010fdd0a743b7542589223a2816bdde4d94bb5ad67884348fa2c1c67e8"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8b5b9712783415695663bd463990e2f00c6750562e6ad1d28e072a611c5f2a6"}, + {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ffef8fd58a36fb5f1196919638f73dd3ae0db1a878982b27a9a5a176ede4ba91"}, + {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e67d26532bfd8b7f7c05d5a766d6f437b362c1bf203a3a5ce3593a645e870b8"}, + {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45f7cd36186db767d803b1473b3c659d57a23b5fa491ad83c6d40f2af58e4dbb"}, + {file = "cffi-1.17.0-cp311-cp311-win32.whl", hash = "sha256:a9015f5b8af1bb6837a3fcb0cdf3b874fe3385ff6274e8b7925d81ccaec3c5c9"}, + {file = "cffi-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:b50aaac7d05c2c26dfd50c3321199f019ba76bb650e346a6ef3616306eed67b0"}, + {file = "cffi-1.17.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aec510255ce690d240f7cb23d7114f6b351c733a74c279a84def763660a2c3bc"}, + {file = "cffi-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2770bb0d5e3cc0e31e7318db06efcbcdb7b31bcb1a70086d3177692a02256f59"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db9a30ec064129d605d0f1aedc93e00894b9334ec74ba9c6bdd08147434b33eb"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a47eef975d2b8b721775a0fa286f50eab535b9d56c70a6e62842134cf7841195"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f3e0992f23bbb0be00a921eae5363329253c3b86287db27092461c887b791e5e"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6107e445faf057c118d5050560695e46d272e5301feffda3c41849641222a828"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb862356ee9391dc5a0b3cbc00f416b48c1b9a52d252d898e5b7696a5f9fe150"}, + {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c1c13185b90bbd3f8b5963cd8ce7ad4ff441924c31e23c975cb150e27c2bf67a"}, + {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:17c6d6d3260c7f2d94f657e6872591fe8733872a86ed1345bda872cfc8c74885"}, + {file = "cffi-1.17.0-cp312-cp312-win32.whl", hash = "sha256:c3b8bd3133cd50f6b637bb4322822c94c5ce4bf0d724ed5ae70afce62187c492"}, + {file = "cffi-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:dca802c8db0720ce1c49cce1149ff7b06e91ba15fa84b1d59144fef1a1bc7ac2"}, + {file = "cffi-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ce01337d23884b21c03869d2f68c5523d43174d4fc405490eb0091057943118"}, + {file = "cffi-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cab2eba3830bf4f6d91e2d6718e0e1c14a2f5ad1af68a89d24ace0c6b17cced7"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14b9cbc8f7ac98a739558eb86fabc283d4d564dafed50216e7f7ee62d0d25377"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b00e7bcd71caa0282cbe3c90966f738e2db91e64092a877c3ff7f19a1628fdcb"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:41f4915e09218744d8bae14759f983e466ab69b178de38066f7579892ff2a555"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4760a68cab57bfaa628938e9c2971137e05ce48e762a9cb53b76c9b569f1204"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:011aff3524d578a9412c8b3cfaa50f2c0bd78e03eb7af7aa5e0df59b158efb2f"}, + {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:a003ac9edc22d99ae1286b0875c460351f4e101f8c9d9d2576e78d7e048f64e0"}, + {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ef9528915df81b8f4c7612b19b8628214c65c9b7f74db2e34a646a0a2a0da2d4"}, + {file = "cffi-1.17.0-cp313-cp313-win32.whl", hash = "sha256:70d2aa9fb00cf52034feac4b913181a6e10356019b18ef89bc7c12a283bf5f5a"}, + {file = "cffi-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:b7b6ea9e36d32582cda3465f54c4b454f62f23cb083ebc7a94e2ca6ef011c3a7"}, + {file = "cffi-1.17.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:964823b2fc77b55355999ade496c54dde161c621cb1f6eac61dc30ed1b63cd4c"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:516a405f174fd3b88829eabfe4bb296ac602d6a0f68e0d64d5ac9456194a5b7e"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dec6b307ce928e8e112a6bb9921a1cb00a0e14979bf28b98e084a4b8a742bd9b"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4094c7b464cf0a858e75cd14b03509e84789abf7b79f8537e6a72152109c76e"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2404f3de742f47cb62d023f0ba7c5a916c9c653d5b368cc966382ae4e57da401"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aa9d43b02a0c681f0bfbc12d476d47b2b2b6a3f9287f11ee42989a268a1833c"}, + {file = "cffi-1.17.0-cp38-cp38-win32.whl", hash = "sha256:0bb15e7acf8ab35ca8b24b90af52c8b391690ef5c4aec3d31f38f0d37d2cc499"}, + {file = "cffi-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:93a7350f6706b31f457c1457d3a3259ff9071a66f312ae64dc024f049055f72c"}, + {file = "cffi-1.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a2ddbac59dc3716bc79f27906c010406155031a1c801410f1bafff17ea304d2"}, + {file = "cffi-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6327b572f5770293fc062a7ec04160e89741e8552bf1c358d1a23eba68166759"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbc183e7bef690c9abe5ea67b7b60fdbca81aa8da43468287dae7b5c046107d4"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bdc0f1f610d067c70aa3737ed06e2726fd9d6f7bfee4a351f4c40b6831f4e82"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d872186c1617d143969defeadac5a904e6e374183e07977eedef9c07c8953bf"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d46ee4764b88b91f16661a8befc6bfb24806d885e27436fdc292ed7e6f6d058"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f76a90c345796c01d85e6332e81cab6d70de83b829cf1d9762d0a3da59c7932"}, + {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0e60821d312f99d3e1569202518dddf10ae547e799d75aef3bca3a2d9e8ee693"}, + {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:eb09b82377233b902d4c3fbeeb7ad731cdab579c6c6fda1f763cd779139e47c3"}, + {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:24658baf6224d8f280e827f0a50c46ad819ec8ba380a42448e24459daf809cf4"}, + {file = "cffi-1.17.0-cp39-cp39-win32.whl", hash = "sha256:0fdacad9e0d9fc23e519efd5ea24a70348305e8d7d85ecbb1a5fa66dc834e7fb"}, + {file = "cffi-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:7cbc78dc018596315d4e7841c8c3a7ae31cc4d638c9b627f87d52e8abaaf2d29"}, + {file = "cffi-1.17.0.tar.gz", hash = "sha256:f3157624b7558b914cb039fd1af735e5e8049a87c817cc215109ad1c8779df76"}, ] [package.dependencies] @@ -717,13 +732,13 @@ trio = ["async_generator", "trio"] [[package]] name = "keyring" -version = "25.3.0" +version = "25.4.1" description = "Store and access your passwords safely." optional = false python-versions = ">=3.8" files = [ - {file = "keyring-25.3.0-py3-none-any.whl", hash = "sha256:8d963da00ccdf06e356acd9bf3b743208878751032d8599c6cc89eb51310ffae"}, - {file = "keyring-25.3.0.tar.gz", hash = "sha256:8d85a1ea5d6db8515b59e1c5d1d1678b03cf7fc8b8dcfb1651e8c4a524eb42ef"}, + {file = "keyring-25.4.1-py3-none-any.whl", hash = "sha256:5426f817cf7f6f007ba5ec722b1bcad95a75b27d780343772ad76b17cb47b0bf"}, + {file = "keyring-25.4.1.tar.gz", hash = "sha256:b07ebc55f3e8ed86ac81dd31ef14e81ace9dd9c3d4b5d77a6e9a2016d0d71a1b"}, ] [package.dependencies] @@ -737,9 +752,13 @@ pywin32-ctypes = {version = ">=0.2.0", markers = "sys_platform == \"win32\""} SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""} [package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] completion = ["shtab (>=1.1.0)"] +cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -test = ["pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["pyfakefs", "pytest (>=6,!=8.1.*)"] +type = ["pygobject-stubs", "pytest-mypy", "shtab", "types-pywin32"] [[package]] name = "more-itertools" @@ -880,7 +899,7 @@ name = "nodeenv" version = "1.9.1" description = "Node.js virtual environment builder" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, @@ -972,29 +991,18 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "poetry-core" -version = "1.9.0" +version = "2.0.0.dev0" description = "Poetry PEP 517 Build Backend" optional = false -python-versions = ">=3.8,<4.0" -files = [ - {file = "poetry_core-1.9.0-py3-none-any.whl", hash = "sha256:4e0c9c6ad8cf89956f03b308736d84ea6ddb44089d16f2adc94050108ec1f5a1"}, - {file = "poetry_core-1.9.0.tar.gz", hash = "sha256:fa7a4001eae8aa572ee84f35feb510b321bd652e5cf9293249d62853e1f935a2"}, -] - -[[package]] -name = "poetry-plugin-export" -version = "1.8.0" -description = "Poetry plugin to export the dependencies to various formats" -optional = false -python-versions = ">=3.8,<4.0" -files = [ - {file = "poetry_plugin_export-1.8.0-py3-none-any.whl", hash = "sha256:adbe232cfa0cc04991ea3680c865cf748bff27593b9abcb1f35fb50ed7ba2c22"}, - {file = "poetry_plugin_export-1.8.0.tar.gz", hash = "sha256:1fa6168a85d59395d835ca564bc19862a7c76061e60c3e7dfaec70d50937fc61"}, -] +python-versions = "^3.8" +files = [] +develop = false -[package.dependencies] -poetry = ">=1.8.0,<3.0.0" -poetry-core = ">=1.7.0,<3.0.0" +[package.source] +type = "git" +url = "https://github.com/python-poetry/poetry-core.git" +reference = "main" +resolved_reference = "beb93b1aba6ad47667c05721a74c8f3961402046" [[package]] name = "pre-commit" @@ -1019,7 +1027,7 @@ name = "psutil" version = "6.0.0" description = "Cross-platform lib for process and system monitoring in Python." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ {file = "psutil-6.0.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a021da3e881cd935e64a3d0a20983bda0bb4cf80e4f74fa9bfcb1bc5785360c6"}, {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:1287c2b95f1c0a364d23bc6f2ea2365a8d4d9b726a3be7294296ff7ba97c17f0"}, @@ -1513,13 +1521,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.26.3" +version = "20.26.6" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.26.3-py3-none-any.whl", hash = "sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589"}, - {file = "virtualenv-20.26.3.tar.gz", hash = "sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a"}, + {file = "virtualenv-20.26.6-py3-none-any.whl", hash = "sha256:7345cc5b25405607a624d8418154577459c3e0277f5466dd79c49d5e492995f2"}, + {file = "virtualenv-20.26.6.tar.gz", hash = "sha256:280aede09a2a5c317e409a00102e7077c6432c5a38f0ef938e643805a7ad2c48"}, ] [package.dependencies] @@ -1531,6 +1539,93 @@ platformdirs = ">=3.9.1,<5" docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] +[[package]] +name = "wassima" +version = "1.1.3" +description = "Access your OS root certificates with utmost ease" +optional = false +python-versions = ">=3.7" +files = [ + {file = "wassima-1.1.3-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:62ddc12837580eed53150ad8b76f8b63dc1b6c56b151620b223a96657979e45e"}, + {file = "wassima-1.1.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:86d8d9326e504ff8152a461348d2c99280b98deb2d559dcc3ef36089c8001285"}, + {file = "wassima-1.1.3-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:ebb31f4ae75d6ac3a30f93fbbad8dd9b78fe0d2b1bf8280d10a04dc98e760e90"}, + {file = "wassima-1.1.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bafb535c25a975df85f1f4a71434d92799af35247438ae00fff38aa939c69c3f"}, + {file = "wassima-1.1.3-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c1df9cc18d0b85e8b651daedc8ec95cea83ae01f3d96ac5390c237d1b5a5acdc"}, + {file = "wassima-1.1.3-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:a9b739509bed40411959b90273f48e714657792171fb72a422dfa6c8b28fb180"}, + {file = "wassima-1.1.3-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03dd40e457b7b4bcd528507368160ea822a1b165775572adb71d08dc892188d9"}, + {file = "wassima-1.1.3-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7af4f8a3b03b51319ac46608cbc98cf1ccad908009e00f38e16c9125e7d91fd"}, + {file = "wassima-1.1.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d974653406624f1d306300eb5fb4b1ba03a9615257580704392f2a35cd9896f"}, + {file = "wassima-1.1.3-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:082f74bcb3334b3a716492ba8dd6225717d1c74c8de1bf9af3a80faec756c87f"}, + {file = "wassima-1.1.3-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7018ad5dad438f3d87cd0db3ba04b47ae9a3dd14b5ec44ba87e6f93614b12448"}, + {file = "wassima-1.1.3-cp37-abi3-musllinux_1_1_armv7l.whl", hash = "sha256:bade59c87d191ebd45e8dd51a99b795842fa9e865f2d451a38e7ee523880fce0"}, + {file = "wassima-1.1.3-cp37-abi3-musllinux_1_1_i686.whl", hash = "sha256:b0a9e5ac0787528485cf6d1634c43bdf758b0b9f492ef54c362a5b4672b333e3"}, + {file = "wassima-1.1.3-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:77fbf6e4f600256ab81ab6ad28ecc6273cc27c781d8411035735baf1305068bb"}, + {file = "wassima-1.1.3-cp37-abi3-win_amd64.whl", hash = "sha256:f9a17b03fc3e3833b7371dd653b517abc8000500bd2d8e86250c73ca74b80fa2"}, + {file = "wassima-1.1.3-cp37-abi3-win_arm64.whl", hash = "sha256:0bb82b48c1ff208f096d669dd226cde6ee9e2268cda2319817d368e628d83602"}, + {file = "wassima-1.1.3-pp310-pypy310_pp73-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:23b04a2add627dd81a8958bce78263a11c41e180ed99b1ed8f373c8456805a56"}, + {file = "wassima-1.1.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:52a14d161f93dc01d09d09c43caea8d38d3f43f202550ab682ca61262d655ccb"}, + {file = "wassima-1.1.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d1e936495475ee755e029d517d71d1cd9e46a3db11f2b3f82e5b3e0497bcffb0"}, + {file = "wassima-1.1.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a684c4382d590087bff1ab890201a81ea177057745132df4cdd754e00b87a499"}, + {file = "wassima-1.1.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3ab2b102501640a7db6bc2ad3360abb1ba44f53b6e790c4bd84ba76bcdba3577"}, + {file = "wassima-1.1.3-pp310-pypy310_pp73-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:02df9bce5659095944047c58b670c9046008e7d6e5413db68bfd8deeb9863ddc"}, + {file = "wassima-1.1.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9de6fff707658b74483060cc5d31be49d7867172ef964cfe87894b54e9f04216"}, + {file = "wassima-1.1.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:954e7b61d3b6cd5108fa6778f1e354627d980f83fc0d936b0a80de33f850f600"}, + {file = "wassima-1.1.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63e867f030d83827c6781188c36ed48cec49f2352ddc763f7f524ca9bfe49a87"}, + {file = "wassima-1.1.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:55e76ea1d29a1a1e202e5022fa1b336c391b506a18aad9c3eb237acc23f3b6f5"}, + {file = "wassima-1.1.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:847de7e6a7fc4e4dcf473e86b01413bb5f66d6f6057487b7d14fc98952621f8b"}, + {file = "wassima-1.1.3-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:384bf78164bb75ba23a6533f5bc06f41391ff9f094dda2e7fc398dec6e55eca8"}, + {file = "wassima-1.1.3-pp310-pypy310_pp73-musllinux_1_1_i686.whl", hash = "sha256:7f2981ca7761d982e108ca34f368977b688e3ee04c56d050ea7e1a30f6319ff6"}, + {file = "wassima-1.1.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:9317aa10c6f7ec6ffd1c60b4be4f0e1c45e109c1b2ddc28bce4348d061c8791b"}, + {file = "wassima-1.1.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bb22a45baa4e3f587e1ad457a514a0915f2612b84b142c9d0d6ce78eab83a8fd"}, + {file = "wassima-1.1.3-pp37-pypy37_pp73-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:82c361e3cd63d7ed48cd80938f3664ba038a2fe4ce78b42ccb65bb5b37da100e"}, + {file = "wassima-1.1.3-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6cb790b0c748a3dbf2f7b34667e9d4bf4412dd62ba5cca4e96b79abc0a6033a0"}, + {file = "wassima-1.1.3-pp37-pypy37_pp73-macosx_11_0_arm64.whl", hash = "sha256:30f51fb384bfdec5717de7f9615edf22c9f1dc4a56f321bce0a7a55001395fe9"}, + {file = "wassima-1.1.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb625e72bdf1dc65c56f3b7c1ef3b32b7b6dcad0ac10039c20ff3fe9f82cc488"}, + {file = "wassima-1.1.3-pp37-pypy37_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:93770da0dd64b1d096715f3bfe9f95323c8acc5bb9dac0f4e0c36c561b752ce0"}, + {file = "wassima-1.1.3-pp37-pypy37_pp73-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:fc31e9ef7d04c86f652f48726d278ba58270de03fc1295d1a9bd6a8d2e86d4ae"}, + {file = "wassima-1.1.3-pp37-pypy37_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cfd0705a050dd94691a9a705c1b61f75097158ee28d385807a7ecc7296047d94"}, + {file = "wassima-1.1.3-pp37-pypy37_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40ab99d5d5bfc18c459c733b0d8a798612321de20f55b7a0925fb9c17c66f2b6"}, + {file = "wassima-1.1.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1ba40879497a8ce21f4be2dfec91169bce7473db6c8c580d5db57c2f78325c8"}, + {file = "wassima-1.1.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ad401f43f6de9b9f057d6ff1300ed5c2eb69176f91deb5908cf4251f0d769d5"}, + {file = "wassima-1.1.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:8ebb47f3885a7e683d78a23ce961f9f67ee4a56309619154e25de3235ec1e888"}, + {file = "wassima-1.1.3-pp37-pypy37_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:31c69f6f78e2b7844e1b135ca2b1292071c3bbbbb9912357b6157b7467bc101a"}, + {file = "wassima-1.1.3-pp37-pypy37_pp73-musllinux_1_1_i686.whl", hash = "sha256:73f4e98a4ae3367d2282b69ba779540004217c80430e873dde04d757f2d290ac"}, + {file = "wassima-1.1.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:a06961bcc8ccb5d5ea04809fd5b9164355c9087f1c972f241e94c793b53dde31"}, + {file = "wassima-1.1.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:40941a837dad0ba4a3c2b240a9d2c6dfbe0a045a22c1040bfc069d40624eab58"}, + {file = "wassima-1.1.3-pp38-pypy38_pp73-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:e9203c4ee3bd61fee8c4e039ecff4d53805b8b63abb76e9f0d57857d78a3ed55"}, + {file = "wassima-1.1.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bca6e510ea8da0cf1b035436b13c066860dba8fc3c1a6821c5a10db739d4e842"}, + {file = "wassima-1.1.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:f39157564ff4b483283032e373142bd0cefd79ad030a616c0745dfeb8b3e1110"}, + {file = "wassima-1.1.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6aa6df8ce962d1886d675020d11a68f8644693f8292cc687496f85ddac7ca27d"}, + {file = "wassima-1.1.3-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2823dfd4ee9f2f526ceba0ad19cbd3cf088ed952096969510ec875fbbfa84524"}, + {file = "wassima-1.1.3-pp38-pypy38_pp73-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:953f34900c1f0fdb3aeb393a258c3f11c65c8fc9f7b7f204318845f1f236f7ce"}, + {file = "wassima-1.1.3-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6e38f3b45be3afcbd0499a7abf3e20fe8e302595e03abb8889251d41f1b29ad5"}, + {file = "wassima-1.1.3-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3342435067d32a2df3fdfbfd360386e3aea027ec5ed89833b344eeead0936e8b"}, + {file = "wassima-1.1.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44eee2730b718d100c6dad41679042fc50f6ca8aa546d747443b4c4073546cac"}, + {file = "wassima-1.1.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0c073b2d72d477b10297c6e3d8464f14606dd00cc450c0a2168114863ad5c283"}, + {file = "wassima-1.1.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:77660b3c6bc8a30c9bbff3cba37e420bccac49b533ec00fcdc854c2e9d94be52"}, + {file = "wassima-1.1.3-pp38-pypy38_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:eb57f61f00a734bd4ad437b3c6f45257f28db520176f9af317ea87e35d66f7cc"}, + {file = "wassima-1.1.3-pp38-pypy38_pp73-musllinux_1_1_i686.whl", hash = "sha256:6c9eee00721b7cb79670546b8d672174326c604c970e18564b18b9fd762f0191"}, + {file = "wassima-1.1.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b13e132c4f6971780c7e753773ca7de8a3132accb7c650e81a1c36616b6c96eb"}, + {file = "wassima-1.1.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a66ccbefe8bdacf588d3e9fd1f696520e1815c5024682633ea8bec5980779c5f"}, + {file = "wassima-1.1.3-pp39-pypy39_pp73-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:562efdc038b77d9ee0f105b95732baf1bd8837a5a4669bade73dbdd79100b277"}, + {file = "wassima-1.1.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a1e538ed4a8ea50da8e8580470fbe0f2fbfc0b6977a08f2ee201b398c6bddef7"}, + {file = "wassima-1.1.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b1181d6a2712dfcad15fb4ad5381d42db8be2a1cd4df4a178119902a2bf504a3"}, + {file = "wassima-1.1.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:661700b19b68cdd80f7b006f9d87c285aa0d2e2b3fd2fb9f11e857d2729f076f"}, + {file = "wassima-1.1.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:885680ea24cebe1171ec964e3749af5bf154042ba1d67f36bd4aa8491cb8194e"}, + {file = "wassima-1.1.3-pp39-pypy39_pp73-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c7ca111f800613e4c87ef9711b80936aed2a74f3fc6cb4d876ea6817be48a138"}, + {file = "wassima-1.1.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:641a9e61a4b4bf201ad867322c6b4200bedc9e903347bc40283f1bcfb8889f7b"}, + {file = "wassima-1.1.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2b77fa90d22c1cd5e9343821c254e35063e0897a8d189386898bd4868dd0e61"}, + {file = "wassima-1.1.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:942e87de0480ff566c5859bd81f7cc08f3359a16b0c7d28322743ada9e917229"}, + {file = "wassima-1.1.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f814505731408941d56349b8b68899bcac79266c6077c32d3c4ecc6b6fac4944"}, + {file = "wassima-1.1.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c9e9e8a62ed40db6867f8007577c43e13086c0e808df8aae090c0e3d6d8723e3"}, + {file = "wassima-1.1.3-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:117fec6e6c4024d230de5510cee604859a26907205795f180b57849cce268de4"}, + {file = "wassima-1.1.3-pp39-pypy39_pp73-musllinux_1_1_i686.whl", hash = "sha256:51c86dba3e78102fe1f602f31116fbd2a4776a4b65ebb56f531a2dc758178f26"}, + {file = "wassima-1.1.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f84e1c5383164e8fb35073034fdb593b806507e8266f9cb265f907ac96db8f04"}, + {file = "wassima-1.1.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f1f19dce011e21b653e503d9194edaa96fbea6377389356f33a756651d7256a8"}, + {file = "wassima-1.1.3-py3-none-any.whl", hash = "sha256:22ea5f1c39cd749c6ed5d24bd440abb523ed80ef34254b667a3801a1ce67a8e8"}, + {file = "wassima-1.1.3.tar.gz", hash = "sha256:a2775f387b669f3d39a2088edcc1a04ac3629a201d4e1ab95cb8f2dde12a19e1"}, +] + [[package]] name = "xattr" version = "1.1.0" @@ -1622,4 +1717,4 @@ test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "8e40cd7dad5d45e8b7038be044dfdce858d38cdbc62727fabcc70f5ce9ccdd04" +content-hash = "d642726699d598fef0292141eea53bac126356db4f657c4830f52db1f3f809d2" diff --git a/pyproject.toml b/pyproject.toml index f27b526d089..a525fc81532 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "poetry" -version = "1.9.0.dev0" +version = "2.0.0.dev0" description = "Python dependency management and packaging made easy." authors = ["Sébastien Eustace "] maintainers = [ @@ -31,8 +31,7 @@ Changelog = "https://python-poetry.org/history/" [tool.poetry.dependencies] python = "^3.8" -poetry-core = "1.9.0" -poetry-plugin-export = "^1.8.0" +poetry-core = { git = "https://github.com/python-poetry/poetry-core.git", branch = "main" } build = "^1.2.1" cachecontrol = { version = "^0.14.0", extras = ["filecache"] } cleo = "^2.1.0" @@ -54,8 +53,9 @@ tomli = { version = "^2.0.1", python = "<3.11" } tomlkit = ">=0.11.4,<1.0.0" # trove-classifiers uses calver, so version is unclamped trove-classifiers = ">=2022.5.19" -virtualenv = "^20.23.0" +virtualenv = "^20.26.6" xattr = { version = "^1.0.0", markers = "sys_platform == 'darwin'" } +wassima = "^1.1.3" [tool.poetry.group.dev.dependencies] pre-commit = ">=2.10" @@ -126,7 +126,6 @@ extend-select = [ ignore = [ "B904", # use 'raise ... from err' "B905", # use explicit 'strict=' parameter with 'zip()' - "N818", # Exception name should be named with an Error suffix ] extend-safe-fixes = [ "TCH", # move import from and to TYPE_CHECKING blocks diff --git a/src/poetry/publishing/uploader.py b/src/poetry/publishing/uploader.py index c76ed052520..068e5d4522b 100644 --- a/src/poetry/publishing/uploader.py +++ b/src/poetry/publishing/uploader.py @@ -18,6 +18,7 @@ from poetry.publishing.hash_manager import HashManager from poetry.utils.constants import REQUESTS_TIMEOUT from poetry.utils.patterns import wheel_file_re +from poetry.utils.truststore import WithTrustStoreAdapter if TYPE_CHECKING: @@ -88,6 +89,9 @@ def auth(self, username: str | None, password: str | None) -> None: def make_session(self) -> requests.Session: session = requests.Session() + adapter = WithTrustStoreAdapter() + session.mount("http://", adapter) + session.mount("https://", adapter) auth = self.get_auth() if auth is not None: session.auth = auth diff --git a/src/poetry/utils/authenticator.py b/src/poetry/utils/authenticator.py index 08185a362d2..73ccba6c814 100644 --- a/src/poetry/utils/authenticator.py +++ b/src/poetry/utils/authenticator.py @@ -16,7 +16,6 @@ import requests.auth import requests.exceptions -from cachecontrol import CacheControlAdapter from cachecontrol.caches import FileCache from requests_toolbelt import user_agent @@ -28,6 +27,7 @@ from poetry.utils.constants import STATUS_FORCELIST from poetry.utils.password_manager import HTTPAuthCredential from poetry.utils.password_manager import PasswordManager +from poetry.utils.truststore import CacheControlWithTrustStoreAdapter if TYPE_CHECKING: @@ -137,7 +137,7 @@ def create_session(self) -> requests.Session: if self._cache_control is None: return session - adapter = CacheControlAdapter( + adapter = CacheControlWithTrustStoreAdapter( cache=self._cache_control, pool_maxsize=self._pool_size, ) diff --git a/src/poetry/utils/truststore.py b/src/poetry/utils/truststore.py new file mode 100644 index 00000000000..06bfeb6a723 --- /dev/null +++ b/src/poetry/utils/truststore.py @@ -0,0 +1,70 @@ +from __future__ import annotations + +import typing + +from cachecontrol import CacheControlAdapter +from requests.adapters import HTTPAdapter +from wassima import RUSTLS_LOADED +from wassima import generate_ca_bundle + + +if typing.TYPE_CHECKING: + from urllib3 import HTTPConnectionPool + + +DEFAULT_CA_BUNDLE: str = generate_ca_bundle() + + +class WithTrustStoreAdapter(HTTPAdapter): + """ + Inject the OS truststore in Requests. + Certifi is still loaded in addition to the OS truststore for (strict) backward compatibility purposes. + See https://github.com/jawah/wassima for more details. + """ + + def cert_verify( + self, + conn: HTTPConnectionPool, + url: str, + verify: bool | str, + cert: str | tuple[str, str] | None, + ) -> None: + #: only apply truststore cert if "verify" is set with default value "True". + #: RUSTLS_LOADED means that "wassima" is not the py3 none wheel and does not fallback on "certifi" + #: if "RUSTLS_LOADED" is False then "wassima" just return "certifi" bundle instead. + if ( + RUSTLS_LOADED + and url.lower().startswith("https") + and verify is True + and hasattr(conn, "ca_cert_data") + ): + # url starting with https already mean that conn is a HTTPSConnectionPool + # the hasattr is to make mypy happy. + conn.ca_cert_data = DEFAULT_CA_BUNDLE + + # still apply upstream logic as before + super().cert_verify(conn, url, verify, cert) # type: ignore[no-untyped-call] + + +class CacheControlWithTrustStoreAdapter(CacheControlAdapter): + """ + Same as WithTrustStoreAdapter but with CacheControlAdapter as its parent + class. + """ + + def cert_verify( + self, + conn: HTTPConnectionPool, + url: str, + verify: bool | str, + cert: str | tuple[str, str] | None, + ) -> None: + if ( + RUSTLS_LOADED + and url.lower().startswith("https") + and verify is True + and hasattr(conn, "ca_cert_data") + ): + conn.ca_cert_data = DEFAULT_CA_BUNDLE + + super().cert_verify(conn, url, verify, cert) # type: ignore[no-untyped-call] diff --git a/src/poetry/vcs/git/backend.py b/src/poetry/vcs/git/backend.py index 0fc00f0b266..bd0ed643695 100644 --- a/src/poetry/vcs/git/backend.py +++ b/src/poetry/vcs/git/backend.py @@ -11,8 +11,12 @@ from urllib.parse import urlparse from urllib.parse import urlunparse +import certifi +import wassima + from dulwich import porcelain from dulwich.client import HTTPUnauthorized +from dulwich.client import default_urllib3_manager from dulwich.client import get_transport_and_path from dulwich.config import ConfigFile from dulwich.config import parse_submodules @@ -204,6 +208,19 @@ def _fetch_remote_refs(cls, url: str, local: Repo) -> FetchPackResult: kwargs["password"] = credentials.password config = local.get_config_stack() + + # we want to inject the system root CA if the transport is urllib3 (aka. http) + # so that our users won't need the "system" git. + # we combine the system trust store with the certifi bundle. + pool_manager = default_urllib3_manager( + config, + ca_certs=certifi.where(), + ca_cert_data=wassima.generate_ca_bundle() + if wassima.RUSTLS_LOADED + else None, + ) + kwargs["pool_manager"] = pool_manager + client, path = get_transport_and_path(url, config=config, **kwargs) with local: