\w+).wav$", views.captcha_audio, name="captcha-audio"),
+ re_path(r"refresh/$", views.captcha_refresh, name="captcha-refresh"),
+]
diff --git a/lib/python3.11/site-packages/captcha/views.py b/lib/python3.11/site-packages/captcha/views.py
new file mode 100644
index 00000000..08d47210
--- /dev/null
+++ b/lib/python3.11/site-packages/captcha/views.py
@@ -0,0 +1,225 @@
+import json
+import os
+import random
+import subprocess
+import tempfile
+from io import BytesIO
+
+from PIL import Image, ImageDraw, ImageFont
+from ranged_response import RangedFileResponse
+
+from django.core.exceptions import ImproperlyConfigured
+from django.http import Http404, HttpResponse
+
+from captcha.conf import settings
+from captcha.helpers import captcha_audio_url, captcha_image_url
+from captcha.models import CaptchaStore
+
+
+# Distance of the drawn text from the top of the captcha image
+DISTANCE_FROM_TOP = 4
+
+
+def getsize(font, text):
+ if hasattr(font, "getbbox"):
+ _top, _left, _right, _bottom = font.getbbox(text)
+ return _right - _left, _bottom - _top
+ elif hasattr(font, "getoffset"):
+ return tuple([x + y for x, y in zip(font.getsize(text), font.getoffset(text))])
+ else:
+ return font.getsize(text)
+
+
+def makeimg(size):
+ if settings.CAPTCHA_BACKGROUND_COLOR == "transparent":
+ image = Image.new("RGBA", size)
+ else:
+ image = Image.new("RGB", size, settings.CAPTCHA_BACKGROUND_COLOR)
+ return image
+
+
+def captcha_image(request, key, scale=1):
+ if scale == 2 and not settings.CAPTCHA_2X_IMAGE:
+ raise Http404
+ try:
+ store = CaptchaStore.objects.get(hashkey=key)
+ except CaptchaStore.DoesNotExist:
+ # HTTP 410 Gone status so that crawlers don't index these expired urls.
+ return HttpResponse(status=410)
+
+ random.seed(key) # Do not generate different images for the same key
+
+ text = store.challenge
+
+ if isinstance(settings.CAPTCHA_FONT_PATH, str):
+ fontpath = settings.CAPTCHA_FONT_PATH
+ elif isinstance(settings.CAPTCHA_FONT_PATH, (list, tuple)):
+ fontpath = random.choice(settings.CAPTCHA_FONT_PATH)
+ else:
+ raise ImproperlyConfigured(
+ "settings.CAPTCHA_FONT_PATH needs to be a path to a font or list of paths to fonts"
+ )
+
+ if fontpath.lower().strip().endswith("ttf"):
+ font = ImageFont.truetype(fontpath, settings.CAPTCHA_FONT_SIZE * scale)
+ else:
+ font = ImageFont.load(fontpath)
+
+ if settings.CAPTCHA_IMAGE_SIZE:
+ size = settings.CAPTCHA_IMAGE_SIZE
+ else:
+ size = getsize(font, text)
+ size = (size[0] * 2, int(size[1] * 1.4))
+
+ image = makeimg(size)
+ xpos = 2
+
+ charlist = []
+ for char in text:
+ if char in settings.CAPTCHA_PUNCTUATION and len(charlist) >= 1:
+ charlist[-1] += char
+ else:
+ charlist.append(char)
+ for char in charlist:
+ fgimage = Image.new("RGB", size, settings.CAPTCHA_FOREGROUND_COLOR)
+ charimage = Image.new("L", getsize(font, " %s " % char), "#000000")
+ chardraw = ImageDraw.Draw(charimage)
+ chardraw.text((0, 0), " %s " % char, font=font, fill="#ffffff")
+ if settings.CAPTCHA_LETTER_ROTATION:
+ charimage = charimage.rotate(
+ random.randrange(*settings.CAPTCHA_LETTER_ROTATION),
+ expand=0,
+ resample=Image.BICUBIC,
+ )
+ charimage = charimage.crop(charimage.getbbox())
+ maskimage = Image.new("L", size)
+
+ maskimage.paste(
+ charimage,
+ (
+ xpos,
+ DISTANCE_FROM_TOP,
+ xpos + charimage.size[0],
+ DISTANCE_FROM_TOP + charimage.size[1],
+ ),
+ )
+ size = maskimage.size
+ image = Image.composite(fgimage, image, maskimage)
+ xpos = xpos + 2 + charimage.size[0]
+
+ if settings.CAPTCHA_IMAGE_SIZE:
+ # centering captcha on the image
+ tmpimg = makeimg(size)
+ tmpimg.paste(
+ image,
+ (
+ int((size[0] - xpos) / 2),
+ int((size[1] - charimage.size[1]) / 2 - DISTANCE_FROM_TOP),
+ ),
+ )
+ image = tmpimg.crop((0, 0, size[0], size[1]))
+ else:
+ image = image.crop((0, 0, xpos + 1, size[1]))
+ draw = ImageDraw.Draw(image)
+
+ for f in settings.noise_functions():
+ draw = f(draw, image)
+ for f in settings.filter_functions():
+ image = f(image)
+
+ out = BytesIO()
+ image.save(out, "PNG")
+ out.seek(0)
+
+ response = HttpResponse(content_type="image/png")
+ response.write(out.read())
+ response["Content-length"] = out.tell()
+
+ # At line :50 above we fixed the random seed so that we always generate the
+ # same image, see: https://github.com/mbi/django-simple-captcha/pull/194
+ # This is a problem though, because knowledge of the seed will let an attacker
+ # predict the next random (globally). We therefore reset the random here.
+ # Reported in https://github.com/mbi/django-simple-captcha/pull/221
+ random.seed()
+
+ return response
+
+
+def captcha_audio(request, key):
+ if settings.CAPTCHA_FLITE_PATH:
+ try:
+ store = CaptchaStore.objects.get(hashkey=key)
+ except CaptchaStore.DoesNotExist:
+ # HTTP 410 Gone status so that crawlers don't index these expired urls.
+ return HttpResponse(status=410)
+
+ text = store.challenge
+ if "captcha.helpers.math_challenge" == settings.CAPTCHA_CHALLENGE_FUNCT:
+ text = text.replace("*", "times").replace("-", "minus").replace("+", "plus")
+ else:
+ text = ", ".join(list(text))
+ path = str(os.path.join(tempfile.gettempdir(), "%s.wav" % key))
+ subprocess.call([settings.CAPTCHA_FLITE_PATH, "-t", text, "-o", path])
+
+ # Add arbitrary noise if sox is installed
+ if settings.CAPTCHA_SOX_PATH:
+ arbnoisepath = str(
+ os.path.join(tempfile.gettempdir(), "%s_arbitrary.wav") % key
+ )
+ mergedpath = str(os.path.join(tempfile.gettempdir(), "%s_merged.wav") % key)
+ subprocess.call(
+ [
+ settings.CAPTCHA_SOX_PATH,
+ "-r",
+ "8000",
+ "-n",
+ arbnoisepath,
+ "synth",
+ "2",
+ "brownnoise",
+ "gain",
+ "-15",
+ ]
+ )
+ subprocess.call(
+ [
+ settings.CAPTCHA_SOX_PATH,
+ "-m",
+ arbnoisepath,
+ path,
+ "-t",
+ "wavpcm",
+ "-b",
+ "16",
+ mergedpath,
+ ]
+ )
+ os.remove(arbnoisepath)
+ os.remove(path)
+ os.rename(mergedpath, path)
+
+ if os.path.isfile(path):
+ response = RangedFileResponse(
+ request, open(path, "rb"), content_type="audio/wav"
+ )
+ response["Content-Disposition"] = 'attachment; filename="{}.wav"'.format(
+ key
+ )
+ return response
+ raise Http404
+
+
+def captcha_refresh(request):
+ """Return json with new captcha for ajax refresh request"""
+ if not request.headers.get("x-requested-with") == "XMLHttpRequest":
+ raise Http404
+
+ new_key = CaptchaStore.pick()
+ to_json_response = {
+ "key": new_key,
+ "image_url": captcha_image_url(new_key),
+ "audio_url": captcha_audio_url(new_key)
+ if settings.CAPTCHA_FLITE_PATH
+ else None,
+ }
+ return HttpResponse(json.dumps(to_json_response), content_type="application/json")
diff --git a/lib/python3.11/site-packages/pip-23.2.1.dist-info/INSTALLER b/lib/python3.11/site-packages/django_ranged_response-0.2.0.dist-info/INSTALLER
similarity index 100%
rename from lib/python3.11/site-packages/pip-23.2.1.dist-info/INSTALLER
rename to lib/python3.11/site-packages/django_ranged_response-0.2.0.dist-info/INSTALLER
diff --git a/lib/python3.11/site-packages/django_ranged_response-0.2.0.dist-info/METADATA b/lib/python3.11/site-packages/django_ranged_response-0.2.0.dist-info/METADATA
new file mode 100644
index 00000000..983169c0
--- /dev/null
+++ b/lib/python3.11/site-packages/django_ranged_response-0.2.0.dist-info/METADATA
@@ -0,0 +1,10 @@
+Metadata-Version: 2.1
+Name: django-ranged-response
+Version: 0.2.0
+Summary: Modified Django FileResponse that adds Content-Range headers.
+Home-page: https://github.com/wearespindle/django-ranged-fileresponse
+Author: Spindle
+Author-email: jeroen@wearespindle.com
+License: MIT
+Requires-Dist: django
+
diff --git a/lib/python3.11/site-packages/django_ranged_response-0.2.0.dist-info/RECORD b/lib/python3.11/site-packages/django_ranged_response-0.2.0.dist-info/RECORD
new file mode 100644
index 00000000..1452bc69
--- /dev/null
+++ b/lib/python3.11/site-packages/django_ranged_response-0.2.0.dist-info/RECORD
@@ -0,0 +1,7 @@
+django_ranged_response-0.2.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
+django_ranged_response-0.2.0.dist-info/METADATA,sha256=zD0L0iFcE_b2_nSKGUFYT3eqSzdKZ6eRt1GNUuAa4ME,297
+django_ranged_response-0.2.0.dist-info/RECORD,,
+django_ranged_response-0.2.0.dist-info/WHEEL,sha256=Xo9-1PvkuimrydujYJAjF7pCkriuXBpUPEjma1nZyJ0,92
+django_ranged_response-0.2.0.dist-info/top_level.txt,sha256=1Vr01kwR92rMMkPOVv4QTsqa-gt5dxCPiRcPM0Qahak,16
+ranged_response/__init__.py,sha256=gURFm41igrS4xwZHO83i57ta6uXAxMPoJO9KgZLDpOg,5057
+ranged_response/__pycache__/__init__.cpython-311.pyc,,
diff --git a/lib/python3.11/site-packages/pip-23.2.1.dist-info/WHEEL b/lib/python3.11/site-packages/django_ranged_response-0.2.0.dist-info/WHEEL
similarity index 65%
rename from lib/python3.11/site-packages/pip-23.2.1.dist-info/WHEEL
rename to lib/python3.11/site-packages/django_ranged_response-0.2.0.dist-info/WHEEL
index 1f37c02f..ba48cbcf 100644
--- a/lib/python3.11/site-packages/pip-23.2.1.dist-info/WHEEL
+++ b/lib/python3.11/site-packages/django_ranged_response-0.2.0.dist-info/WHEEL
@@ -1,5 +1,5 @@
Wheel-Version: 1.0
-Generator: bdist_wheel (0.40.0)
+Generator: bdist_wheel (0.41.3)
Root-Is-Purelib: true
Tag: py3-none-any
diff --git a/lib/python3.11/site-packages/django_ranged_response-0.2.0.dist-info/top_level.txt b/lib/python3.11/site-packages/django_ranged_response-0.2.0.dist-info/top_level.txt
new file mode 100644
index 00000000..816e29b2
--- /dev/null
+++ b/lib/python3.11/site-packages/django_ranged_response-0.2.0.dist-info/top_level.txt
@@ -0,0 +1 @@
+ranged_response
diff --git a/lib/python3.11/site-packages/pip-23.2.1.dist-info/top_level.txt b/lib/python3.11/site-packages/django_simple_captcha-0.5.20.dist-info/INSTALLER
similarity index 100%
rename from lib/python3.11/site-packages/pip-23.2.1.dist-info/top_level.txt
rename to lib/python3.11/site-packages/django_simple_captcha-0.5.20.dist-info/INSTALLER
diff --git a/lib/python3.11/site-packages/django_simple_captcha-0.5.20.dist-info/LICENSE b/lib/python3.11/site-packages/django_simple_captcha-0.5.20.dist-info/LICENSE
new file mode 100644
index 00000000..419fc96b
--- /dev/null
+++ b/lib/python3.11/site-packages/django_simple_captcha-0.5.20.dist-info/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2008 - 2014 Marco Bonetti
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/lib/python3.11/site-packages/django_simple_captcha-0.5.20.dist-info/METADATA b/lib/python3.11/site-packages/django_simple_captcha-0.5.20.dist-info/METADATA
new file mode 100644
index 00000000..0f839dbe
--- /dev/null
+++ b/lib/python3.11/site-packages/django_simple_captcha-0.5.20.dist-info/METADATA
@@ -0,0 +1,65 @@
+Metadata-Version: 2.1
+Name: django-simple-captcha
+Version: 0.5.20
+Summary: A very simple, yet powerful, Django captcha application
+Home-page: https://github.com/mbi/django-simple-captcha
+Author: Marco Bonetti
+Author-email: mbonetti@gmail.com
+License: MIT
+Classifier: Development Status :: 4 - Beta
+Classifier: Environment :: Web Environment
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: MIT License
+Classifier: Operating System :: OS Independent
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Classifier: Topic :: Security
+Classifier: Topic :: Internet :: WWW/HTTP
+Classifier: Framework :: Django
+License-File: LICENSE
+Requires-Dist: Django >=3.2
+Requires-Dist: Pillow >=6.2.0
+Requires-Dist: django-ranged-response ==0.2.0
+Provides-Extra: test
+Requires-Dist: testfixtures ; extra == 'test'
+
+*********************
+Django Simple Captcha
+*********************
+
+.. image:: https://github.com/mbi/django-simple-captcha/actions/workflows/test.yml/badge.svg
+ :target: https://github.com/mbi/django-simple-captcha/actions/workflows/test.yml
+
+.. image:: https://img.shields.io/pypi/v/django-simple-captcha
+ :target: https://pypi.org/project/django-simple-captcha/
+
+.. image:: https://img.shields.io/pypi/l/django-simple-captcha
+ :target: https://github.com/mbi/django-simple-captcha/blob/master/LICENSE
+
+
+Django Simple Captcha is an extremely simple, yet highly customizable Django application to add captcha images to any Django form.
+
+.. image:: http://django-simple-captcha.readthedocs.io/en/latest/_images/captcha3.png
+
+Features
+++++++++
+
+* Very simple to setup and deploy, yet very configurable
+* Can use custom challenges (e.g. random chars, simple math, dictionary word, ...)
+* Custom generators, noise and filter functions alter the look of the generated image
+* Supports text-to-speech audio output of the challenge text, for improved accessibility
+* Ajax refresh
+
+Requirements
+++++++++++++
+
+* Django 3.2+, Python3.8+
+* A recent version of the Pillow compiled with FreeType support
+* Flite is required for text-to-speech (audio) output, but not mandatory
+
+Documentation
++++++++++++++
+
+Read the `documentation online `_.
diff --git a/lib/python3.11/site-packages/django_simple_captcha-0.5.20.dist-info/RECORD b/lib/python3.11/site-packages/django_simple_captcha-0.5.20.dist-info/RECORD
new file mode 100644
index 00000000..aa0859db
--- /dev/null
+++ b/lib/python3.11/site-packages/django_simple_captcha-0.5.20.dist-info/RECORD
@@ -0,0 +1,92 @@
+captcha/__init__.py,sha256=Cz2BKUx-KbJ2yLXHZ9JdfVIsLBP2ugtIoCK65Ywx79Q,140
+captcha/__pycache__/__init__.cpython-311.pyc,,
+captcha/__pycache__/fields.cpython-311.pyc,,
+captcha/__pycache__/helpers.cpython-311.pyc,,
+captcha/__pycache__/models.cpython-311.pyc,,
+captcha/__pycache__/urls.cpython-311.pyc,,
+captcha/__pycache__/views.cpython-311.pyc,,
+captcha/conf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+captcha/conf/__pycache__/__init__.cpython-311.pyc,,
+captcha/conf/__pycache__/settings.cpython-311.pyc,,
+captcha/conf/settings.py,sha256=AH5rdbUoZWqRbZO8KpI2EChKa6SKepS-KLRFPPhP9w4,3845
+captcha/fields.py,sha256=DEaPQ8CVjuhFowDVNXAoOQI7L0WN2lfh_X9NctVSOGQ,9889
+captcha/fonts/COPYRIGHT.TXT,sha256=ICRpD7nb_bF8U2uD1MYwp2Dt1ROoeK5hihPPWG-iwWw,5950
+captcha/fonts/README.TXT,sha256=J3YHBi0jkpUjqB4vMrfoQ08MAUhr-gbngH8q1SVYXc8,321
+captcha/fonts/Vera.ttf,sha256=xMRWkLNFQ1ssulLsq-J18F5Js4mzn-aK0Dr7tVEojT0,65932
+captcha/helpers.py,sha256=LWDyxeYjPGiXQCZWIlxChJR_0t8wrOuyDbon5FQhAV8,3069
+captcha/jinja2/captcha/widgets/captcha.html,sha256=UNvyLbRvQCkGp_AbOKrrfy1d6iXF1fozqxiMw8fRm9I,186
+captcha/locale/bg/LC_MESSAGES/django.mo,sha256=UAkafercICutRXyYrBeExNF0-KrzLJ-tw2OK5RNkMJo,653
+captcha/locale/bg/LC_MESSAGES/django.po,sha256=5o14ZmKzCmfdhCpiRyb-fVBkwldIc_NBNaDLVCA2AuI,1060
+captcha/locale/cs/LC_MESSAGES/django.mo,sha256=AHs5edgI79WL2VACnNTmcnSaN7GC2WCEbJBl7zp5vgo,597
+captcha/locale/cs/LC_MESSAGES/django.po,sha256=hJcBhAQZdFnZpqZwhpuDgaEzrEl-zY2ANY-kBX0tSTY,950
+captcha/locale/de/LC_MESSAGES/django.mo,sha256=5hZSrteOGmsf6UX0F-sPiL5ZLRjYmc2mWHxJ601_TJ8,634
+captcha/locale/de/LC_MESSAGES/django.po,sha256=HnWs3cwc2AFekknV2vgw-bJVWNbnKNmgS7cvjIMZYO0,1002
+captcha/locale/en/LC_MESSAGES/django.mo,sha256=oOYm0ZDZinVXRs-9KaqtbNz3opWjc6-psC9rgOwc-x4,591
+captcha/locale/en/LC_MESSAGES/django.po,sha256=FGoY9PDI0B1TsSBy6ytnA_oJoPpRjZg8L8P-W4A0fJ4,942
+captcha/locale/es/LC_MESSAGES/django.mo,sha256=qWdpPZe45meLuxcoKbDslGn0-UFoZt8hrYfIGZaJgDU,600
+captcha/locale/es/LC_MESSAGES/django.po,sha256=Gk9coJCwhogv0JQXBKxzhpGqPbS9Q8-68pl-wNWpA5U,968
+captcha/locale/fa/LC_MESSAGES/django.mo,sha256=KNb_G6fhiwjjBjWO2u5jVeUgRxJD-KX91vPIjuGKYXg,688
+captcha/locale/fa/LC_MESSAGES/django.po,sha256=A2OKIY9h8K9CE948-V8UsnfBU6wAXUzlwn_hcHylGDA,1043
+captcha/locale/fr/LC_MESSAGES/django.mo,sha256=QtmIqpiyxFQjYRBuEn53EDSLdP63jF7M8v9Hz600vLM,594
+captcha/locale/fr/LC_MESSAGES/django.po,sha256=ppkwxlKg-ATrDFHAKQUfzTbDJyw2h19pHH8YSxitTIk,945
+captcha/locale/it/LC_MESSAGES/django.mo,sha256=WTElquRQcavHoP7tsERWvCKR6XSxwI3iat8DIFD48xQ,631
+captcha/locale/it/LC_MESSAGES/django.po,sha256=wTwLs5xko7UQvXRhud143j4Q9zrQUZ29G1GscMyL_ZE,994
+captcha/locale/ja/LC_MESSAGES/django.mo,sha256=x8M-JHYPyARaiWQd8yGXXsYU86jFIbbWdeTjr_wxEeM,636
+captcha/locale/ja/LC_MESSAGES/django.po,sha256=Uqbys4Sr96GfYR_Nx6GX2-y6qePmZYrB8SKB4Q4D6QY,1007
+captcha/locale/nl/LC_MESSAGES/django.mo,sha256=A32eapFCLUVGyYWcDTTfvvYL30AUvkdCRhwAtccpuKU,630
+captcha/locale/nl/LC_MESSAGES/django.po,sha256=kuQWY1li7KIcF6AXaMZtFBMLHyjLhgpWkg6pPmXpYcA,1024
+captcha/locale/pl/LC_MESSAGES/django.mo,sha256=RY3o7PISCB5dfi3PNWl1MsJzTCDXZop3l4vfV9xnpFk,680
+captcha/locale/pl/LC_MESSAGES/django.po,sha256=sGEUv_GUFrlNyozScmtUrN_-ZH4voW8t6CaHWC0rSLo,1107
+captcha/locale/pt_BR/LC_MESSAGES/django.mo,sha256=Y0dwoL_ndMq0YlAu0IxEoSU76YsOUl0MULUOvJCcaUY,613
+captcha/locale/pt_BR/LC_MESSAGES/django.po,sha256=5xq-imJL5oNDDDRbQuEkny1bPS4RN3LY8H1GGV2unAs,1025
+captcha/locale/ru/LC_MESSAGES/django.mo,sha256=PObABAXyLMMPrOM-_J3GqvcGlLN_raQCFuOvNOWvK78,724
+captcha/locale/ru/LC_MESSAGES/django.po,sha256=7CEb3GZO1v2wh7A2pvx8bz0Pvzj0HI8Xw5reijJzTao,1053
+captcha/locale/sk/LC_MESSAGES/django.mo,sha256=gWwIkEnmh7MsK0zGVdcDEqnqoNl81D4yu0kHvLra26o,606
+captcha/locale/sk/LC_MESSAGES/django.po,sha256=1USBxP1l_jvIIHswSylarYJIrryz3F-ZqHlXLOTC-PM,994
+captcha/locale/sv/LC_MESSAGES/django.mo,sha256=kiovetWFjPSKhhu0lpQ0tNPuySJXiiiOvX0LeliaZiw,631
+captcha/locale/sv/LC_MESSAGES/django.po,sha256=GiRNXRUeFMK29rMKZW5iAwX9MJO9tJuWMRT5-AlWk_A,991
+captcha/locale/tr/LC_MESSAGES/django.mo,sha256=Mw0UkeFXwFa_DxVTbfta488L-1pSJ-BW33jx69z2pZU,605
+captcha/locale/tr/LC_MESSAGES/django.po,sha256=2dSjovuso9lnHyEMC0tFHzRlDh_Njh_VuRjWb4LdEI0,978
+captcha/locale/uk/LC_MESSAGES/django.mo,sha256=FQoQB-hoVxdAeBQYwxMy_wxD3wXlOLxpwuakWIr5YQs,715
+captcha/locale/uk/LC_MESSAGES/django.po,sha256=qGaetu4TkmMjCnHocFnN5fmYFqST5NpNgSHb3UH2TFA,1082
+captcha/locale/zh_CN/LC_MESSAGES/django.mo,sha256=1KxboU5k5qQ0mTleJz7a3iLLhLLajHPAKl5sGwWxGVs,602
+captcha/locale/zh_CN/LC_MESSAGES/django.po,sha256=jHpBPXBY5bn_IhhJAOj9EZPO8hnw3Uz_uQJvjnPQy9M,1004
+captcha/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=1KxboU5k5qQ0mTleJz7a3iLLhLLajHPAKl5sGwWxGVs,602
+captcha/locale/zh_Hans/LC_MESSAGES/django.po,sha256=jHpBPXBY5bn_IhhJAOj9EZPO8hnw3Uz_uQJvjnPQy9M,1004
+captcha/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+captcha/management/__pycache__/__init__.cpython-311.pyc,,
+captcha/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+captcha/management/commands/__pycache__/__init__.cpython-311.pyc,,
+captcha/management/commands/__pycache__/captcha_clean.cpython-311.pyc,,
+captcha/management/commands/__pycache__/captcha_create_pool.cpython-311.pyc,,
+captcha/management/commands/captcha_clean.py,sha256=w1PTkXEmdyf3xk7Q0uujqSBDaNao2poq-9b7yL751XQ,894
+captcha/management/commands/captcha_create_pool.py,sha256=tYmZeN9JmBh0HF0Fni2Bt4RNRpRm_LM6U_QMcTWZTL0,1089
+captcha/migrations/0001_initial.py,sha256=sQj9d3qSatZ0xBF8vOaWj_mCnaOvnQilwUA21XNtQFE,893
+captcha/migrations/0002_alter_captchastore_id.py,sha256=x5KnL0ZgRJkmPdqDhct2yMyBG9qydQszH4Wy0_arOUY,398
+captcha/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+captcha/migrations/__pycache__/0001_initial.cpython-311.pyc,,
+captcha/migrations/__pycache__/0002_alter_captchastore_id.cpython-311.pyc,,
+captcha/migrations/__pycache__/__init__.cpython-311.pyc,,
+captcha/models.py,sha256=a0L5W6Pc_lFSwD8vPV7pX7uhs2xodKE7LNXmealJpdo,2817
+captcha/templates/captcha/field.html,sha256=8IaHIZudDm3WP2y_AmA8AOsvXg4y6QSWqlOrbA1aGD4,40
+captcha/templates/captcha/hidden_field.html,sha256=i5aTo_jXDRNr0nhzpQ13fFC_r-n0nE9gLhDzAfuz3ow,72
+captcha/templates/captcha/image.html,sha256=HMATyrCVuw3RCONGqeY-uxeHRbxGq2E0LjoJmdq0_R0,232
+captcha/templates/captcha/text_field.html,sha256=V9GfTCtTD4ByEZbuXPMNDL7JH6E-AXgI_P_94ohWSck,131
+captcha/templates/captcha/widgets/captcha.html,sha256=RHOTJoRIdCheT2tQnf-99_eA_AXJctW9JJfhy4X04AM,314
+captcha/tests/__init__.py,sha256=PnIM4lAxWFf0dhvr9DobN1qgW7-qmuwdWUwhOoqEFlE,58
+captcha/tests/__pycache__/__init__.cpython-311.pyc,,
+captcha/tests/__pycache__/tests.cpython-311.pyc,,
+captcha/tests/__pycache__/urls.cpython-311.pyc,,
+captcha/tests/__pycache__/views.cpython-311.pyc,,
+captcha/tests/tests.py,sha256=RgOQxsnyw3__utoogJNeN2xXBT7uZ87k13AV5kh_fJ4,24079
+captcha/tests/urls.py,sha256=9YwNDZ8zw_QooLiSn2niXIrJTrJcLXsV8AYI8onXzpw,878
+captcha/tests/views.py,sha256=DA-zqplkVGd2IQn7wqP5A2aE1z_7EW6G5qeLnYjTbdw,3563
+captcha/urls.py,sha256=r3e50R7iEd7NSW4p5jxC_TiX40Y3CqVIsksDLHHEO8k,524
+captcha/views.py,sha256=zKIiAperFrkr9MXsR6Hyh7Xx6AJFHgZUGEvMZSI0188,7409
+django_simple_captcha-0.5.20.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
+django_simple_captcha-0.5.20.dist-info/LICENSE,sha256=7F9KedNcOJEE-RE8ATQT_b6ISsXIqVKoc03GdlkQzA8,1064
+django_simple_captcha-0.5.20.dist-info/METADATA,sha256=ZQaTYeyPbeX5qhQeDpoqhhzaeJaMSpyBtin8mRIOuTs,2365
+django_simple_captcha-0.5.20.dist-info/RECORD,,
+django_simple_captcha-0.5.20.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+django_simple_captcha-0.5.20.dist-info/WHEEL,sha256=iYlv5fX357PQyRT2o6tw1bN-YcKFFHKqB_LwHO5wP-g,110
+django_simple_captcha-0.5.20.dist-info/top_level.txt,sha256=krw23fzzUC0oTgsEakKehDWjBfNzFYPTtC0hVpktXyQ,8
diff --git a/lib/python3.11/site-packages/django_simple_captcha-0.5.20.dist-info/REQUESTED b/lib/python3.11/site-packages/django_simple_captcha-0.5.20.dist-info/REQUESTED
new file mode 100644
index 00000000..e69de29b
diff --git a/lib/python3.11/site-packages/django_simple_captcha-0.5.20.dist-info/WHEEL b/lib/python3.11/site-packages/django_simple_captcha-0.5.20.dist-info/WHEEL
new file mode 100644
index 00000000..c34f1162
--- /dev/null
+++ b/lib/python3.11/site-packages/django_simple_captcha-0.5.20.dist-info/WHEEL
@@ -0,0 +1,6 @@
+Wheel-Version: 1.0
+Generator: bdist_wheel (0.41.2)
+Root-Is-Purelib: true
+Tag: py2-none-any
+Tag: py3-none-any
+
diff --git a/lib/python3.11/site-packages/django_simple_captcha-0.5.20.dist-info/top_level.txt b/lib/python3.11/site-packages/django_simple_captcha-0.5.20.dist-info/top_level.txt
new file mode 100644
index 00000000..9c7c3bf4
--- /dev/null
+++ b/lib/python3.11/site-packages/django_simple_captcha-0.5.20.dist-info/top_level.txt
@@ -0,0 +1 @@
+captcha
diff --git a/lib/python3.11/site-packages/pip-23.2.1.dist-info/AUTHORS.txt b/lib/python3.11/site-packages/pip-23.3.1.dist-info/AUTHORS.txt
similarity index 98%
rename from lib/python3.11/site-packages/pip-23.2.1.dist-info/AUTHORS.txt
rename to lib/python3.11/site-packages/pip-23.3.1.dist-info/AUTHORS.txt
index 77eb39a4..49e30f69 100644
--- a/lib/python3.11/site-packages/pip-23.2.1.dist-info/AUTHORS.txt
+++ b/lib/python3.11/site-packages/pip-23.3.1.dist-info/AUTHORS.txt
@@ -20,6 +20,7 @@ Albert-Guan
albertg
Alberto Sottile
Aleks Bunin
+Ales Erjavec
Alethea Flowers
Alex Gaynor
Alex Grönholm
@@ -30,6 +31,7 @@ Alex Stachowiak
Alexander Shtyrov
Alexandre Conrad
Alexey Popravka
+Aleš Erjavec
Alli
Ami Fischman
Ananya Maiti
@@ -196,9 +198,11 @@ David Runge
David Tucker
David Wales
Davidovich
+ddelange
Deepak Sharma
Deepyaman Datta
Denise Yu
+dependabot[bot]
derwolfe
Desetude
Devesh Kumar Singh
@@ -312,6 +316,7 @@ Ilya Baryshev
Inada Naoki
Ionel Cristian Mărieș
Ionel Maries Cristian
+Itamar Turner-Trauring
Ivan Pozdeev
Jacob Kim
Jacob Walls
@@ -338,6 +343,7 @@ Jay Graves
Jean-Christophe Fillion-Robin
Jeff Barber
Jeff Dairiki
+Jeff Widman
Jelmer Vernooij
jenix21
Jeremy Stanley
@@ -367,6 +373,7 @@ Joseph Long
Josh Bronson
Josh Hansen
Josh Schneier
+Joshua
Juan Luis Cano Rodríguez
Juanjo Bazán
Judah Rand
@@ -397,6 +404,7 @@ KOLANICH
kpinc
Krishna Oza
Kumar McMillan
+Kurt McKee
Kyle Persohn
lakshmanaram
Laszlo Kiss-Kollar
@@ -413,6 +421,7 @@ lorddavidiii
Loren Carvalho
Lucas Cimon
Ludovic Gasc
+Lukas Geiger
Lukas Juhrich
Luke Macken
Luo Jiebin
@@ -529,6 +538,7 @@ Patrick Jenkins
Patrick Lawson
patricktokeeffe
Patrik Kopkan
+Paul Ganssle
Paul Kehrer
Paul Moore
Paul Nasrat
@@ -609,6 +619,7 @@ ryneeverett
Sachi King
Salvatore Rinchiera
sandeepkiran-js
+Sander Van Balen
Savio Jomton
schlamar
Scott Kitterman
@@ -621,6 +632,7 @@ SeongSoo Cho
Sergey Vasilyev
Seth Michael Larson
Seth Woodworth
+Shahar Epstein
Shantanu
shireenrao
Shivansh-007
@@ -648,6 +660,7 @@ Steve Kowalik
Steven Myint
Steven Silvester
stonebig
+studioj
Stéphane Bidoul
Stéphane Bidoul (ACSONE)
Stéphane Klein
diff --git a/lib/python3.11/site-packages/pip-23.3.1.dist-info/INSTALLER b/lib/python3.11/site-packages/pip-23.3.1.dist-info/INSTALLER
new file mode 100644
index 00000000..a1b589e3
--- /dev/null
+++ b/lib/python3.11/site-packages/pip-23.3.1.dist-info/INSTALLER
@@ -0,0 +1 @@
+pip
diff --git a/lib/python3.11/site-packages/pip-23.2.1.dist-info/LICENSE.txt b/lib/python3.11/site-packages/pip-23.3.1.dist-info/LICENSE.txt
similarity index 100%
rename from lib/python3.11/site-packages/pip-23.2.1.dist-info/LICENSE.txt
rename to lib/python3.11/site-packages/pip-23.3.1.dist-info/LICENSE.txt
diff --git a/lib/python3.11/site-packages/pip-23.2.1.dist-info/METADATA b/lib/python3.11/site-packages/pip-23.3.1.dist-info/METADATA
similarity index 79%
rename from lib/python3.11/site-packages/pip-23.2.1.dist-info/METADATA
rename to lib/python3.11/site-packages/pip-23.3.1.dist-info/METADATA
index c503b33e..f631c19e 100644
--- a/lib/python3.11/site-packages/pip-23.2.1.dist-info/METADATA
+++ b/lib/python3.11/site-packages/pip-23.3.1.dist-info/METADATA
@@ -1,90 +1,88 @@
-Metadata-Version: 2.1
-Name: pip
-Version: 23.2.1
-Summary: The PyPA recommended tool for installing Python packages.
-Home-page: https://pip.pypa.io/
-Author: The pip developers
-Author-email: distutils-sig@python.org
-License: MIT
-Project-URL: Documentation, https://pip.pypa.io
-Project-URL: Source, https://github.com/pypa/pip
-Project-URL: Changelog, https://pip.pypa.io/en/stable/news/
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: MIT License
-Classifier: Topic :: Software Development :: Build Tools
-Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3 :: Only
-Classifier: Programming Language :: Python :: 3.7
-Classifier: Programming Language :: Python :: 3.8
-Classifier: Programming Language :: Python :: 3.9
-Classifier: Programming Language :: Python :: 3.10
-Classifier: Programming Language :: Python :: 3.11
-Classifier: Programming Language :: Python :: 3.12
-Classifier: Programming Language :: Python :: Implementation :: CPython
-Classifier: Programming Language :: Python :: Implementation :: PyPy
-Requires-Python: >=3.7
-License-File: LICENSE.txt
-License-File: AUTHORS.txt
-
-pip - The Python Package Installer
-==================================
-
-.. image:: https://img.shields.io/pypi/v/pip.svg
- :target: https://pypi.org/project/pip/
-
-.. image:: https://readthedocs.org/projects/pip/badge/?version=latest
- :target: https://pip.pypa.io/en/latest
-
-pip is the `package installer`_ for Python. You can use pip to install packages from the `Python Package Index`_ and other indexes.
-
-Please take a look at our documentation for how to install and use pip:
-
-* `Installation`_
-* `Usage`_
-
-We release updates regularly, with a new version every 3 months. Find more details in our documentation:
-
-* `Release notes`_
-* `Release process`_
-
-In pip 20.3, we've `made a big improvement to the heart of pip`_; `learn more`_. We want your input, so `sign up for our user experience research studies`_ to help us do it right.
-
-**Note**: pip 21.0, in January 2021, removed Python 2 support, per pip's `Python 2 support policy`_. Please migrate to Python 3.
-
-If you find bugs, need help, or want to talk to the developers, please use our mailing lists or chat rooms:
-
-* `Issue tracking`_
-* `Discourse channel`_
-* `User IRC`_
-
-If you want to get involved head over to GitHub to get the source code, look at our development documentation and feel free to jump on the developer mailing lists and chat rooms:
-
-* `GitHub page`_
-* `Development documentation`_
-* `Development IRC`_
-
-Code of Conduct
----------------
-
-Everyone interacting in the pip project's codebases, issue trackers, chat
-rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_.
-
-.. _package installer: https://packaging.python.org/guides/tool-recommendations/
-.. _Python Package Index: https://pypi.org
-.. _Installation: https://pip.pypa.io/en/stable/installation/
-.. _Usage: https://pip.pypa.io/en/stable/
-.. _Release notes: https://pip.pypa.io/en/stable/news.html
-.. _Release process: https://pip.pypa.io/en/latest/development/release-process/
-.. _GitHub page: https://github.com/pypa/pip
-.. _Development documentation: https://pip.pypa.io/en/latest/development
-.. _made a big improvement to the heart of pip: https://pyfound.blogspot.com/2020/11/pip-20-3-new-resolver.html
-.. _learn more: https://pip.pypa.io/en/latest/user_guide/#changes-to-the-pip-dependency-resolver-in-20-3-2020
-.. _sign up for our user experience research studies: https://pyfound.blogspot.com/2020/03/new-pip-resolver-to-roll-out-this-year.html
-.. _Python 2 support policy: https://pip.pypa.io/en/latest/development/release-process/#python-2-support
-.. _Issue tracking: https://github.com/pypa/pip/issues
-.. _Discourse channel: https://discuss.python.org/c/packaging
-.. _User IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa
-.. _Development IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa-dev
-.. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md
+Metadata-Version: 2.1
+Name: pip
+Version: 23.3.1
+Summary: The PyPA recommended tool for installing Python packages.
+Home-page: https://pip.pypa.io/
+Author: The pip developers
+Author-email: distutils-sig@python.org
+License: MIT
+Project-URL: Documentation, https://pip.pypa.io
+Project-URL: Source, https://github.com/pypa/pip
+Project-URL: Changelog, https://pip.pypa.io/en/stable/news/
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: MIT License
+Classifier: Topic :: Software Development :: Build Tools
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3 :: Only
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: Implementation :: PyPy
+Requires-Python: >=3.7
+License-File: LICENSE.txt
+License-File: AUTHORS.txt
+
+pip - The Python Package Installer
+==================================
+
+.. image:: https://img.shields.io/pypi/v/pip.svg
+ :target: https://pypi.org/project/pip/
+ :alt: PyPI
+
+.. image:: https://img.shields.io/pypi/pyversions/pip
+ :target: https://pypi.org/project/pip
+ :alt: PyPI - Python Version
+
+.. image:: https://readthedocs.org/projects/pip/badge/?version=latest
+ :target: https://pip.pypa.io/en/latest
+ :alt: Documentation
+
+pip is the `package installer`_ for Python. You can use pip to install packages from the `Python Package Index`_ and other indexes.
+
+Please take a look at our documentation for how to install and use pip:
+
+* `Installation`_
+* `Usage`_
+
+We release updates regularly, with a new version every 3 months. Find more details in our documentation:
+
+* `Release notes`_
+* `Release process`_
+
+If you find bugs, need help, or want to talk to the developers, please use our mailing lists or chat rooms:
+
+* `Issue tracking`_
+* `Discourse channel`_
+* `User IRC`_
+
+If you want to get involved head over to GitHub to get the source code, look at our development documentation and feel free to jump on the developer mailing lists and chat rooms:
+
+* `GitHub page`_
+* `Development documentation`_
+* `Development IRC`_
+
+Code of Conduct
+---------------
+
+Everyone interacting in the pip project's codebases, issue trackers, chat
+rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_.
+
+.. _package installer: https://packaging.python.org/guides/tool-recommendations/
+.. _Python Package Index: https://pypi.org
+.. _Installation: https://pip.pypa.io/en/stable/installation/
+.. _Usage: https://pip.pypa.io/en/stable/
+.. _Release notes: https://pip.pypa.io/en/stable/news.html
+.. _Release process: https://pip.pypa.io/en/latest/development/release-process/
+.. _GitHub page: https://github.com/pypa/pip
+.. _Development documentation: https://pip.pypa.io/en/latest/development
+.. _Issue tracking: https://github.com/pypa/pip/issues
+.. _Discourse channel: https://discuss.python.org/c/packaging
+.. _User IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa
+.. _Development IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa-dev
+.. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md
diff --git a/lib/python3.11/site-packages/pip-23.2.1.dist-info/RECORD b/lib/python3.11/site-packages/pip-23.3.1.dist-info/RECORD
similarity index 88%
rename from lib/python3.11/site-packages/pip-23.2.1.dist-info/RECORD
rename to lib/python3.11/site-packages/pip-23.3.1.dist-info/RECORD
index 7972682d..98a002bd 100644
--- a/lib/python3.11/site-packages/pip-23.2.1.dist-info/RECORD
+++ b/lib/python3.11/site-packages/pip-23.3.1.dist-info/RECORD
@@ -1,22 +1,22 @@
../../../bin/pip,sha256=ds5Rsopet6EhB8cG6fJTBE7ur7W-W7LgqLv73ubGu70,232
../../../bin/pip3,sha256=ds5Rsopet6EhB8cG6fJTBE7ur7W-W7LgqLv73ubGu70,232
../../../bin/pip3.11,sha256=ds5Rsopet6EhB8cG6fJTBE7ur7W-W7LgqLv73ubGu70,232
-pip-23.2.1.dist-info/AUTHORS.txt,sha256=Pd_qYtjluu4WDft2A179dPtIvwYVBNtDfccCitVRMQM,10082
-pip-23.2.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
-pip-23.2.1.dist-info/LICENSE.txt,sha256=Y0MApmnUmurmWxLGxIySTFGkzfPR_whtw0VtyLyqIQQ,1093
-pip-23.2.1.dist-info/METADATA,sha256=yHPLQvsD1b6f-zdCQWMibZXbsAjs886JMSh3C0oxRhQ,4239
-pip-23.2.1.dist-info/RECORD,,
-pip-23.2.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
-pip-23.2.1.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
-pip-23.2.1.dist-info/entry_points.txt,sha256=xg35gOct0aY8S3ftLtweJ0uw3KBAIVyW4k-0Jx1rkNE,125
-pip-23.2.1.dist-info/top_level.txt,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
-pip/__init__.py,sha256=hELWH3UN2ilBntczbn1BJOIzJEoiE8w9H-gsR5TeuEk,357
+pip-23.3.1.dist-info/AUTHORS.txt,sha256=HOVK0m4Fk7uZrqt9MhiBlBTdmUbMIxXJziTWeMc_Jxc,10253
+pip-23.3.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
+pip-23.3.1.dist-info/LICENSE.txt,sha256=Y0MApmnUmurmWxLGxIySTFGkzfPR_whtw0VtyLyqIQQ,1093
+pip-23.3.1.dist-info/METADATA,sha256=ePd4oJwtCOg7e5hjeRczRRgaxHUSasxlmRPNHMtKToE,3540
+pip-23.3.1.dist-info/RECORD,,
+pip-23.3.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+pip-23.3.1.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
+pip-23.3.1.dist-info/entry_points.txt,sha256=xg35gOct0aY8S3ftLtweJ0uw3KBAIVyW4k-0Jx1rkNE,125
+pip-23.3.1.dist-info/top_level.txt,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
+pip/__init__.py,sha256=MSbZQYwV5U4mAXP2fBQh70QhM71N-1vh7T4CRREqVog,357
pip/__main__.py,sha256=WzbhHXTbSE6gBY19mNN9m4s5o_365LOvTYSgqgbdBhE,854
pip/__pip-runner__.py,sha256=EnrfKmKMzWAdqg_JicLCOP9Y95Ux7zHh4ObvqLtQcjo,1444
pip/__pycache__/__init__.cpython-311.pyc,,
pip/__pycache__/__main__.cpython-311.pyc,,
pip/__pycache__/__pip-runner__.cpython-311.pyc,,
-pip/_internal/__init__.py,sha256=nnFCuxrPMgALrIDxSoy-H6Zj4W4UY60D-uL1aJyq0pc,573
+pip/_internal/__init__.py,sha256=iqZ5-YQsQV08tkUc7L806Reop6tguLFWf70ySF6be0Y,515
pip/_internal/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/__pycache__/build_env.cpython-311.pyc,,
pip/_internal/__pycache__/cache.cpython-311.pyc,,
@@ -27,7 +27,7 @@ pip/_internal/__pycache__/pyproject.cpython-311.pyc,,
pip/_internal/__pycache__/self_outdated_check.cpython-311.pyc,,
pip/_internal/__pycache__/wheel_builder.cpython-311.pyc,,
pip/_internal/build_env.py,sha256=1ESpqw0iupS_K7phZK5zshVE5Czy9BtGLFU4W6Enva8,10243
-pip/_internal/cache.py,sha256=pMyi1n2nfdo7xzLVhmdOvIy1INt27HbqhJNj7vMcWlI,10429
+pip/_internal/cache.py,sha256=uiYD-9F0Bv1C8ZyWE85lpzDmQf7hcUkgL99GmI8I41Q,10370
pip/_internal/cli/__init__.py,sha256=FkHBgpxxb-_gd6r1FjnNhfMOzAUYyXoXKJ6abijfcFU,132
pip/_internal/cli/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/cli/__pycache__/autocompletion.cpython-311.pyc,,
@@ -41,15 +41,15 @@ pip/_internal/cli/__pycache__/progress_bars.cpython-311.pyc,,
pip/_internal/cli/__pycache__/req_command.cpython-311.pyc,,
pip/_internal/cli/__pycache__/spinners.cpython-311.pyc,,
pip/_internal/cli/__pycache__/status_codes.cpython-311.pyc,,
-pip/_internal/cli/autocompletion.py,sha256=wY2JPZY2Eji1vhR7bVo-yCBPJ9LCy6P80iOAhZD1Vi8,6676
-pip/_internal/cli/base_command.py,sha256=ACUUqWkZMU2O1pmUSpfBV3fwb36JzzTHGrbKXyb5f74,8726
-pip/_internal/cli/cmdoptions.py,sha256=0bXhKutppZLBgAL54iK3tTrj-JRVbUB5M_2pHv_wnKk,30030
+pip/_internal/cli/autocompletion.py,sha256=_br_5NgSxSuvPjMF0MLHzS5s6BpSkQAQHKrLK89VauM,6690
+pip/_internal/cli/base_command.py,sha256=iuVWGa2oTq7gBReo0er3Z0tXJ2oqBIC6QjDHcnDhKXY,8733
+pip/_internal/cli/cmdoptions.py,sha256=fAi5GzWuM9mKUesJZO56LcPCVMDtm64c2tC_YUpI1qs,30117
pip/_internal/cli/command_context.py,sha256=RHgIPwtObh5KhMrd3YZTkl8zbVG-6Okml7YbFX4Ehg0,774
pip/_internal/cli/main.py,sha256=Uzxt_YD1hIvB1AW5mxt6IVcht5G712AtMqdo51UMhmQ,2816
pip/_internal/cli/main_parser.py,sha256=laDpsuBDl6kyfywp9eMMA9s84jfH2TJJn-vmL0GG90w,4338
-pip/_internal/cli/parser.py,sha256=tWP-K1uSxnJyXu3WE0kkH3niAYRBeuUaxeydhzOdhL4,10817
+pip/_internal/cli/parser.py,sha256=o4esYgG-rvPsf6FBpF3fSLGHa4ndDvJtwxBgeckGyfI,10801
pip/_internal/cli/progress_bars.py,sha256=So4mPoSjXkXiSHiTzzquH3VVyVD_njXlHJSExYPXAow,1968
-pip/_internal/cli/req_command.py,sha256=GqS9jkeHktOy6zRzC6uhcRY7SelnAV1LZ6OfS_gNcEk,18440
+pip/_internal/cli/req_command.py,sha256=c7_XHABnXmD3_qlK9-r37KqdKBAcgmVKvQ2WcTrNLfc,18369
pip/_internal/cli/spinners.py,sha256=hIJ83GerdFgFCdobIA23Jggetegl_uC4Sp586nzFbPE,5118
pip/_internal/cli/status_codes.py,sha256=sEFHUaUJbqv8iArL3HAtcztWZmGOFX01hTesSytDEh0,116
pip/_internal/commands/__init__.py,sha256=5oRO9O3dM2vGuh0bFw4HOVletryrz5HHMmmPWwJrH9U,3882
@@ -71,19 +71,19 @@ pip/_internal/commands/__pycache__/search.cpython-311.pyc,,
pip/_internal/commands/__pycache__/show.cpython-311.pyc,,
pip/_internal/commands/__pycache__/uninstall.cpython-311.pyc,,
pip/_internal/commands/__pycache__/wheel.cpython-311.pyc,,
-pip/_internal/commands/cache.py,sha256=aDR3pKRRX9dHobQ2HzKryf02jgOZnGcnfEmX_288Vcg,7581
+pip/_internal/commands/cache.py,sha256=LfPA8wNcgZtjiI5faeFFCR2Zp-ugaj7XX--FmKxx4_4,7952
pip/_internal/commands/check.py,sha256=Rb13Q28yoLh0j1gpx5SU0jlResNct21eQCRsnaO9xKA,1782
-pip/_internal/commands/completion.py,sha256=2frgchce-GE5Gh9SjEJV-MTcpxy3G9-Es8mpe66nHts,3986
+pip/_internal/commands/completion.py,sha256=HT4lD0bgsflHq2IDgYfiEdp7IGGtE7s6MgI3xn0VQEw,4287
pip/_internal/commands/configuration.py,sha256=NB5uf8HIX8-li95YLoZO09nALIWlLCHDF5aifSKcBn8,9815
-pip/_internal/commands/debug.py,sha256=AesEID-4gPFDWTwPiPaGZuD4twdT-imaGuMR5ZfSn8s,6591
+pip/_internal/commands/debug.py,sha256=L15rfN8DwORQln-QW3ihBaVdCfV7Iba-lwlcyw1f_Vk,6854
pip/_internal/commands/download.py,sha256=e4hw088zGo26WmJaMIRvCniLlLmoOjqolGyfHjsCkCQ,5335
pip/_internal/commands/freeze.py,sha256=2qjQrH9KWi5Roav0CuR7vc7hWm4uOi_0l6tp3ESKDHM,3172
pip/_internal/commands/hash.py,sha256=EVVOuvGtoPEdFi8SNnmdqlCQrhCxV-kJsdwtdcCnXGQ,1703
pip/_internal/commands/help.py,sha256=gcc6QDkcgHMOuAn5UxaZwAStsRBrnGSn_yxjS57JIoM,1132
pip/_internal/commands/index.py,sha256=cGQVSA5dAs7caQ9sz4kllYvaI4ZpGiq1WhCgaImXNSA,4793
pip/_internal/commands/inspect.py,sha256=2wSPt9yfr3r6g-s2S5L6PvRtaHNVyb4TuodMStJ39cw,3188
-pip/_internal/commands/install.py,sha256=sdi44xeJlENfU-ziPl1TbUC3no2-ZGDpwBigmX1JuM0,28934
-pip/_internal/commands/list.py,sha256=LNL6016BPvFpAZVzNoo_DWDzvRFpfw__m9Rp5kw-yUM,12457
+pip/_internal/commands/install.py,sha256=KTHT8EASlPfbNx428tcvnGhN8D9jlfBwcRa5lxEhFsA,28920
+pip/_internal/commands/list.py,sha256=7wRUUmdyyOknl-WZYbO_LtFQxHlWod3pjOY9yYH435o,12450
pip/_internal/commands/search.py,sha256=sbBZiARRc050QquOKcCvOr2K3XLsoYebLKZGRi__iUI,5697
pip/_internal/commands/show.py,sha256=t5jia4zcYJRJZy4U_Von7zMl03hJmmcofj6oDNTnj7Y,6419
pip/_internal/commands/uninstall.py,sha256=OIqO9tqadY8kM4HwhFf1Q62fUIp7v8KDrTRo8yWMz7Y,3886
@@ -95,10 +95,10 @@ pip/_internal/distributions/__pycache__/base.cpython-311.pyc,,
pip/_internal/distributions/__pycache__/installed.cpython-311.pyc,,
pip/_internal/distributions/__pycache__/sdist.cpython-311.pyc,,
pip/_internal/distributions/__pycache__/wheel.cpython-311.pyc,,
-pip/_internal/distributions/base.py,sha256=jrF1Vi7eGyqFqMHrieh1PIOrGU7KeCxhYPZnbvtmvGY,1221
-pip/_internal/distributions/installed.py,sha256=NI2OgsgH9iBq9l5vB-56vOg5YsybOy-AU4VE5CSCO2I,729
-pip/_internal/distributions/sdist.py,sha256=SQBdkatXSigKGG_SaD0U0p1Jwdfrg26UCNcHgkXZfdA,6494
-pip/_internal/distributions/wheel.py,sha256=m-J4XO-gvFerlYsFzzSXYDvrx8tLZlJFTCgDxctn8ig,1164
+pip/_internal/distributions/base.py,sha256=oRSEvnv2ZjBnargamnv2fcJa1n6gUDKaW0g6CWSEpWs,1743
+pip/_internal/distributions/installed.py,sha256=QinHFbWAQ8oE0pbD8MFZWkwlnfU1QYTccA1vnhrlYOU,842
+pip/_internal/distributions/sdist.py,sha256=4K3V0VNMllHbBzCJibjwd_tylUKpmIdu2AQyhplvCQo,6709
+pip/_internal/distributions/wheel.py,sha256=-ma3sOtUQj0AxXCEb6_Fhmjl3nh4k3A0HC2taAb2N-4,1277
pip/_internal/exceptions.py,sha256=LyTVY2dANx-i_TEk5Yr9YcwUtiy0HOEFCAQq1F_46co,23737
pip/_internal/index/__init__.py,sha256=vpt-JeTZefh8a-FC22ZeBSXFVbuBcXSGiILhQZJaNpQ,30
pip/_internal/index/__pycache__/__init__.cpython-311.pyc,,
@@ -106,33 +106,33 @@ pip/_internal/index/__pycache__/collector.cpython-311.pyc,,
pip/_internal/index/__pycache__/package_finder.cpython-311.pyc,,
pip/_internal/index/__pycache__/sources.cpython-311.pyc,,
pip/_internal/index/collector.py,sha256=3OmYZ3tCoRPGOrELSgQWG-03M-bQHa2-VCA3R_nJAaU,16504
-pip/_internal/index/package_finder.py,sha256=rrUw4vj7QE_eMt022jw--wQiKznMaUgVBkJ1UCrVUxo,37873
+pip/_internal/index/package_finder.py,sha256=uA354-mHjHvTwxDmk9HvpAkq_7KyGvEd7_9aZFqu0HY,37889
pip/_internal/index/sources.py,sha256=7jw9XSeeQA5K-H4I5a5034Ks2gkQqm4zPXjrhwnP1S4,6556
pip/_internal/locations/__init__.py,sha256=Dh8LJWG8LRlDK4JIj9sfRF96TREzE--N_AIlx7Tqoe4,15365
pip/_internal/locations/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/locations/__pycache__/_distutils.cpython-311.pyc,,
pip/_internal/locations/__pycache__/_sysconfig.cpython-311.pyc,,
pip/_internal/locations/__pycache__/base.cpython-311.pyc,,
-pip/_internal/locations/_distutils.py,sha256=cmi6h63xYNXhQe7KEWEMaANjHFy5yQOPt_1_RCWyXMY,6100
+pip/_internal/locations/_distutils.py,sha256=DXL6H3xERLF76BjcYanV4j-4Sw-qcPdO2qeZhLN30WQ,6102
pip/_internal/locations/_sysconfig.py,sha256=jyNVtUfMIf0mtyY-Xp1m9yQ8iwECozSVVFmjkN9a2yw,7680
pip/_internal/locations/base.py,sha256=RQiPi1d4FVM2Bxk04dQhXZ2PqkeljEL2fZZ9SYqIQ78,2556
pip/_internal/main.py,sha256=r-UnUe8HLo5XFJz8inTcOOTiu_sxNhgHb6VwlGUllOI,340
-pip/_internal/metadata/__init__.py,sha256=84j1dPJaIoz5Q2ZTPi0uB1iaDAHiUNfKtYSGQCfFKpo,4280
+pip/_internal/metadata/__init__.py,sha256=9pU3W3s-6HtjFuYhWcLTYVmSaziklPv7k2x8p7X1GmA,4339
pip/_internal/metadata/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/metadata/__pycache__/_json.cpython-311.pyc,,
pip/_internal/metadata/__pycache__/base.cpython-311.pyc,,
pip/_internal/metadata/__pycache__/pkg_resources.cpython-311.pyc,,
pip/_internal/metadata/_json.py,sha256=BTkWfFDrWFwuSodImjtbAh8wCL3isecbnjTb5E6UUDI,2595
-pip/_internal/metadata/base.py,sha256=vIwIo1BtoqegehWMAXhNrpLGYBq245rcaCNkBMPnTU8,25277
-pip/_internal/metadata/importlib/__init__.py,sha256=9ZVO8BoE7NEZPmoHp5Ap_NJo0HgNIezXXg-TFTtt3Z4,107
+pip/_internal/metadata/base.py,sha256=l3Wgku4xlgr8s4p6fS-3qQ4QKOpPbWLRwi5d9omEFG4,25907
+pip/_internal/metadata/importlib/__init__.py,sha256=jUUidoxnHcfITHHaAWG1G2i5fdBYklv_uJcjo2x7VYE,135
pip/_internal/metadata/importlib/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/metadata/importlib/__pycache__/_compat.cpython-311.pyc,,
pip/_internal/metadata/importlib/__pycache__/_dists.cpython-311.pyc,,
pip/_internal/metadata/importlib/__pycache__/_envs.cpython-311.pyc,,
pip/_internal/metadata/importlib/_compat.py,sha256=GAe_prIfCE4iUylrnr_2dJRlkkBVRUbOidEoID7LPoE,1882
-pip/_internal/metadata/importlib/_dists.py,sha256=BUV8y6D0PePZrEN3vfJL-m1FDqZ6YPRgAiBeBinHhNg,8181
-pip/_internal/metadata/importlib/_envs.py,sha256=I1DHMyAgZb8jT8CYndWl2aw2dN675p-BKPCuJhvdhrY,7435
-pip/_internal/metadata/pkg_resources.py,sha256=WjwiNdRsvxqxL4MA5Tb5a_q3Q3sUhdpbZF8wGLtPMI0,9773
+pip/_internal/metadata/importlib/_dists.py,sha256=UPl1wUujFqiwiltRJ1tMF42WRINO1sSpNNlYQ2mX0mk,8297
+pip/_internal/metadata/importlib/_envs.py,sha256=XTaFIYERP2JF0QUZuPx2ETiugXbPEcZ8q8ZKeht6Lpc,7456
+pip/_internal/metadata/pkg_resources.py,sha256=opjw4IBSqHvie6sXJ_cbT42meygoPEUfNURJuWZY7sk,10035
pip/_internal/models/__init__.py,sha256=3DHUd_qxpPozfzouoqa9g9ts1Czr5qaHfFxbnxriepM,63
pip/_internal/models/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/models/__pycache__/candidate.cpython-311.pyc,,
@@ -150,12 +150,12 @@ pip/_internal/models/candidate.py,sha256=6pcABsaR7CfIHlbJbr2_kMkVJFL_yrYjTx6SVWU
pip/_internal/models/direct_url.py,sha256=EepBxI97j7wSZ3AmRETYyVTmR9NoTas15vc8popxVTg,6931
pip/_internal/models/format_control.py,sha256=DJpMYjxeYKKQdwNcML2_F0vtAh-qnKTYe-CpTxQe-4g,2520
pip/_internal/models/index.py,sha256=tYnL8oxGi4aSNWur0mG8DAP7rC6yuha_MwJO8xw0crI,1030
-pip/_internal/models/installation_report.py,sha256=ueXv1RiMLAucaTuEvXACXX5R64_Wcm8b1Ztqx4Rd5xI,2609
+pip/_internal/models/installation_report.py,sha256=zRVZoaz-2vsrezj_H3hLOhMZCK9c7TbzWgC-jOalD00,2818
pip/_internal/models/link.py,sha256=6OEk3bt41WU7QZoiyuoVPGsKOU-J_BbDDhouKbIXm0Y,20819
pip/_internal/models/scheme.py,sha256=3EFQp_ICu_shH1-TBqhl0QAusKCPDFOlgHFeN4XowWs,738
pip/_internal/models/search_scope.py,sha256=ASVyyZxiJILw7bTIVVpJx8J293M3Hk5F33ilGn0e80c,4643
pip/_internal/models/selection_prefs.py,sha256=KZdi66gsR-_RUXUr9uejssk3rmTHrQVJWeNA2sV-VSY,1907
-pip/_internal/models/target_python.py,sha256=qKpZox7J8NAaPmDs5C_aniwfPDxzvpkrCKqfwndG87k,3858
+pip/_internal/models/target_python.py,sha256=34EkorrMuRvRp-bjqHKJ-bOO71m9xdjN2b8WWFEC2HU,4272
pip/_internal/models/wheel.py,sha256=YqazoIZyma_Q1ejFa1C7NHKQRRWlvWkdK96VRKmDBeI,3600
pip/_internal/network/__init__.py,sha256=jf6Tt5nV_7zkARBrKojIXItgejvoegVJVKUbhAa5Ioc,50
pip/_internal/network/__pycache__/__init__.cpython-311.pyc,,
@@ -167,7 +167,7 @@ pip/_internal/network/__pycache__/session.cpython-311.pyc,,
pip/_internal/network/__pycache__/utils.cpython-311.pyc,,
pip/_internal/network/__pycache__/xmlrpc.cpython-311.pyc,,
pip/_internal/network/auth.py,sha256=TC-OcW2KU4W6R1hU4qPgQXvVH54adACpZz6sWq-R9NA,20541
-pip/_internal/network/cache.py,sha256=hgXftU-eau4MWxHSLquTMzepYq5BPC2zhCkhN3glBy8,2145
+pip/_internal/network/cache.py,sha256=48A971qCzKNFvkb57uGEk7-0xaqPS0HWj2711QNTxkU,3935
pip/_internal/network/download.py,sha256=HvDDq9bVqaN3jcS3DyVJHP7uTqFzbShdkf7NFSoHfkw,6096
pip/_internal/network/lazy_wheel.py,sha256=2PXVduYZPCPZkkQFe1J1GbfHJWeCU--FXonGyIfw9eU,7638
pip/_internal/network/session.py,sha256=uhovd4J7abd0Yr2g426yC4aC6Uw1VKrQfpzalsEBEMw,18607
@@ -187,22 +187,22 @@ pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-311.pyc,,
pip/_internal/operations/build/__pycache__/wheel.cpython-311.pyc,,
pip/_internal/operations/build/__pycache__/wheel_editable.cpython-311.pyc,,
pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-311.pyc,,
-pip/_internal/operations/build/build_tracker.py,sha256=vf81EwomN3xe9G8qRJED0VGqNikmRQRQoobNsxi5Xrs,4133
+pip/_internal/operations/build/build_tracker.py,sha256=z-H5DOknZdBa3dh2Vq6VBMY5qLYIKmlj2p6CGZK5Lc8,4832
pip/_internal/operations/build/metadata.py,sha256=9S0CUD8U3QqZeXp-Zyt8HxwU90lE4QrnYDgrqZDzBnc,1422
pip/_internal/operations/build/metadata_editable.py,sha256=VLL7LvntKE8qxdhUdEJhcotFzUsOSI8NNS043xULKew,1474
pip/_internal/operations/build/metadata_legacy.py,sha256=o-eU21As175hDC7dluM1fJJ_FqokTIShyWpjKaIpHZw,2198
pip/_internal/operations/build/wheel.py,sha256=sT12FBLAxDC6wyrDorh8kvcZ1jG5qInCRWzzP-UkJiQ,1075
pip/_internal/operations/build/wheel_editable.py,sha256=yOtoH6zpAkoKYEUtr8FhzrYnkNHQaQBjWQ2HYae1MQg,1417
pip/_internal/operations/build/wheel_legacy.py,sha256=C9j6rukgQI1n_JeQLoZGuDdfUwzCXShyIdPTp6edbMQ,3064
-pip/_internal/operations/check.py,sha256=LD5BisEdT9vgzS7rLYUuk01z0l4oMj2Q7SsAxVu-pEk,6806
+pip/_internal/operations/check.py,sha256=Hgz0wQJ4fGi8aAVfmdShviNc7XM_2j8oMQJUsVv6AqY,6806
pip/_internal/operations/freeze.py,sha256=uqoeTAf6HOYVMR2UgAT8N85UZoGEVEoQdan_Ao6SOfk,9816
pip/_internal/operations/install/__init__.py,sha256=mX7hyD2GNBO2mFGokDQ30r_GXv7Y_PLdtxcUv144e-s,51
pip/_internal/operations/install/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/operations/install/__pycache__/editable_legacy.cpython-311.pyc,,
pip/_internal/operations/install/__pycache__/wheel.cpython-311.pyc,,
pip/_internal/operations/install/editable_legacy.py,sha256=YeR0KadWXw_ZheC1NtAG1qVIEkOgRGHc23x-YtGW7NU,1282
-pip/_internal/operations/install/wheel.py,sha256=8lsVMt_FAuiGNsf_e7C7_cCSOEO7pHyjgVmRNx-WXrw,27475
-pip/_internal/operations/prepare.py,sha256=nxjIiGRSiUUSRFpwN-Qro7N6BE9jqV4mudJ7CIv9qwY,28868
+pip/_internal/operations/install/wheel.py,sha256=a5KnguJ9uQRo7Ikq4YJEno0fFltXYlud-0DpRj3zLr0,27457
+pip/_internal/operations/prepare.py,sha256=NWkGkNOjrnnUbHgJPTms_5usKF0M8JlaHL3nyIHABMk,28155
pip/_internal/pyproject.py,sha256=ltmrXWaMXjiJHbYyzWplTdBvPYPdKk99GjKuQVypGZU,7161
pip/_internal/req/__init__.py,sha256=TELFgZOof3lhMmaICVWL9U7PlhXo9OufokbMAJ6J2GI,2738
pip/_internal/req/__pycache__/__init__.cpython-311.pyc,,
@@ -211,11 +211,11 @@ pip/_internal/req/__pycache__/req_file.cpython-311.pyc,,
pip/_internal/req/__pycache__/req_install.cpython-311.pyc,,
pip/_internal/req/__pycache__/req_set.cpython-311.pyc,,
pip/_internal/req/__pycache__/req_uninstall.cpython-311.pyc,,
-pip/_internal/req/constructors.py,sha256=8YE-eNXMSZ1lgsJZg-HnIo8EdaGfiOM2t3EaLlLD5Og,16610
+pip/_internal/req/constructors.py,sha256=PgLoQlsZ_ErZORw5M1mgnxW5V4mKZC0-gyj_3k4hCe0,19028
pip/_internal/req/req_file.py,sha256=5PCO4GnDEnUENiFj4vD_1QmAMjHNtvN6HXbETZ9UGok,17872
-pip/_internal/req/req_install.py,sha256=hpG29Bm2PAq7G-ogTatZcNUgjwt0zpdTXtxGw4M_MtU,33084
-pip/_internal/req/req_set.py,sha256=pSCcIKURDkGb6JAKsc-cdvnvnAJlYPk-p3vvON9M3DY,4704
-pip/_internal/req/req_uninstall.py,sha256=sGwa_yZ6X2NcRSUJWzUlYkf8bDEjRySAE3aQ5OewIWA,24678
+pip/_internal/req/req_install.py,sha256=XvoTWTF7STk9EUqIphdOI0ZtQOplw44PIl9TCb-HtXw,35130
+pip/_internal/req/req_set.py,sha256=nM-CetUtESEH31fdugrOl20GV5-pCUYAvu65FwYDJeI,4704
+pip/_internal/req/req_uninstall.py,sha256=m9GlbQ3rzLORTSa6NPFFCmONmC5zTw2lY_0fLOkLYCk,24676
pip/_internal/resolution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pip/_internal/resolution/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/resolution/__pycache__/base.cpython-311.pyc,,
@@ -234,15 +234,15 @@ pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-311.pyc,,
pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-311.pyc,,
pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-311.pyc,,
pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-311.pyc,,
-pip/_internal/resolution/resolvelib/base.py,sha256=u1O4fkvCO4mhmu5i32xrDv9AX5NgUci_eYVyBDQhTIM,5220
-pip/_internal/resolution/resolvelib/candidates.py,sha256=u5mU96o2lnUy-ODRJv7Wevee0xCYI6IKIXNamSBQnso,18969
-pip/_internal/resolution/resolvelib/factory.py,sha256=y1Q2fsV1GKDKPitoapOLLEs75WNzEpd4l_RezCt927c,27845
+pip/_internal/resolution/resolvelib/base.py,sha256=jg5COmHLhmBIKOR-4spdJD3jyULYa1BdsqiBu2YJnJ4,5173
+pip/_internal/resolution/resolvelib/candidates.py,sha256=IAcXcBj-LLzJwwfBXFGyhpxir42CMBW64oCc4zEgLYo,21320
+pip/_internal/resolution/resolvelib/factory.py,sha256=FIOXvrdEGo6DMtLF9gqhUd4IQphPUkAYUe8ZIQ0ThMY,31317
pip/_internal/resolution/resolvelib/found_candidates.py,sha256=hvL3Hoa9VaYo-qEOZkBi2Iqw251UDxPz-uMHVaWmLpE,5705
pip/_internal/resolution/resolvelib/provider.py,sha256=4t23ivjruqM6hKBX1KpGiTt-M4HGhRcZnGLV0c01K7U,9824
pip/_internal/resolution/resolvelib/reporter.py,sha256=YFm9hQvz4DFCbjZeFTQ56hTz3Ac-mDBnHkeNRVvMHLY,3100
-pip/_internal/resolution/resolvelib/requirements.py,sha256=zHnERhfubmvKyM3kgdAOs0dYFiqUfzKR-DAt4y0NWOI,5454
-pip/_internal/resolution/resolvelib/resolver.py,sha256=n2Vn9EC5-7JmcRY5erIPQ4hUWnEUngG0oYS3JW3xXZo,11642
-pip/_internal/self_outdated_check.py,sha256=pnqBuKKZQ8OxKP0MaUUiDHl3AtyoMJHHG4rMQ7YcYXY,8167
+pip/_internal/resolution/resolvelib/requirements.py,sha256=SZh98hbSVbHiHBkgjrSLtdrrZB1zqRIUqFdXptS-aVY,6030
+pip/_internal/resolution/resolvelib/resolver.py,sha256=nLJOsVMEVi2gQUVJoUFKMZAeu2f7GRMjGMvNSWyz0Bc,12592
+pip/_internal/self_outdated_check.py,sha256=saxQLB8UzIFtMScquytG10TOTsYVFJQ_mkW1NY-46wE,8378
pip/_internal/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pip/_internal/utils/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/utils/__pycache__/_jaraco_text.cpython-311.pyc,,
@@ -260,7 +260,6 @@ pip/_internal/utils/__pycache__/filesystem.cpython-311.pyc,,
pip/_internal/utils/__pycache__/filetypes.cpython-311.pyc,,
pip/_internal/utils/__pycache__/glibc.cpython-311.pyc,,
pip/_internal/utils/__pycache__/hashes.cpython-311.pyc,,
-pip/_internal/utils/__pycache__/inject_securetransport.cpython-311.pyc,,
pip/_internal/utils/__pycache__/logging.cpython-311.pyc,,
pip/_internal/utils/__pycache__/misc.cpython-311.pyc,,
pip/_internal/utils/__pycache__/models.cpython-311.pyc,,
@@ -287,14 +286,13 @@ pip/_internal/utils/filesystem.py,sha256=RhMIXUaNVMGjc3rhsDahWQ4MavvEQDdqXqgq-F6
pip/_internal/utils/filetypes.py,sha256=i8XAQ0eFCog26Fw9yV0Yb1ygAqKYB1w9Cz9n0fj8gZU,716
pip/_internal/utils/glibc.py,sha256=Mesxxgg3BLxheLZx-dSf30b6gKpOgdVXw6W--uHSszQ,3113
pip/_internal/utils/hashes.py,sha256=MjOigC75z6qoRMkgHiHqot7eqxfwDZSrEflJMPm-bHE,5118
-pip/_internal/utils/inject_securetransport.py,sha256=o-QRVMGiENrTJxw3fAhA7uxpdEdw6M41TjHYtSVRrcg,795
-pip/_internal/utils/logging.py,sha256=U2q0i1n8hPS2gQh8qcocAg5dovGAa_bR24akmXMzrk4,11632
-pip/_internal/utils/misc.py,sha256=Ds3rSQU7HbdAywwmEBcPnVoLB1Tp_2gL6IbaWcpe8i0,22343
+pip/_internal/utils/logging.py,sha256=fdtuZJ-AKkqwDTANDvGcBEpssL8el7T1jnwk1CnZl3Y,11603
+pip/_internal/utils/misc.py,sha256=96DVNJQIeMi0vWrNp0C0v3xjk2r7Zcay5yDoruIm_Js,23739
pip/_internal/utils/models.py,sha256=5GoYU586SrxURMvDn_jBMJInitviJg4O5-iOU-6I0WY,1193
pip/_internal/utils/packaging.py,sha256=5Wm6_x7lKrlqVjPI5MBN_RurcRHwVYoQ7Ksrs84de7s,2108
pip/_internal/utils/setuptools_build.py,sha256=ouXpud-jeS8xPyTPsXJ-m34NPvK5os45otAzdSV_IJE,4435
-pip/_internal/utils/subprocess.py,sha256=0EMhgfPGFk8FZn6Qq7Hp9PN6YHuQNWiVby4DXcTCON4,9200
-pip/_internal/utils/temp_dir.py,sha256=aCX489gRa4Nu0dMKRFyGhV6maJr60uEynu5uCbKR4Qg,7702
+pip/_internal/utils/subprocess.py,sha256=zzdimb75jVLE1GU4WlTZ055gczhD7n1y1xTcNc7vNZQ,9207
+pip/_internal/utils/temp_dir.py,sha256=DUAw22uFruQdK43i2L2K53C-CDjRCPeAsBKJpu-rHQ4,9312
pip/_internal/utils/unpacking.py,sha256=SBb2iV1crb89MDRTEKY86R4A_UOWApTQn9VQVcMDOlE,8821
pip/_internal/utils/urls.py,sha256=AhaesUGl-9it6uvG6fsFPOr9ynFpGaTMk4t5XTX7Z_Q,1759
pip/_internal/utils/virtualenv.py,sha256=S6f7csYorRpiD6cvn3jISZYc3I8PJC43H5iMFpRAEDU,3456
@@ -307,47 +305,45 @@ pip/_internal/vcs/__pycache__/mercurial.cpython-311.pyc,,
pip/_internal/vcs/__pycache__/subversion.cpython-311.pyc,,
pip/_internal/vcs/__pycache__/versioncontrol.cpython-311.pyc,,
pip/_internal/vcs/bazaar.py,sha256=j0oin0fpGRHcCFCxEcpPCQoFEvA-DMLULKdGP8Nv76o,3519
-pip/_internal/vcs/git.py,sha256=mjhwudCx9WlLNkxZ6_kOKmueF0rLoU2i1xeASKF6yiQ,18116
-pip/_internal/vcs/mercurial.py,sha256=1FG5Zh2ltJZKryO40d2l2Q91FYNazuS16kkpoAVOh0Y,5244
+pip/_internal/vcs/git.py,sha256=CeKBGJnl6uskvvjkAUXrJVxbHJrpS_B_pyfFdjL3CRc,18121
+pip/_internal/vcs/mercurial.py,sha256=ytRnzmP5CkLM2RfdiS4mVJx4jQcmB3FjXeLOPPFEjG8,5246
pip/_internal/vcs/subversion.py,sha256=vhZs8L-TNggXqM1bbhl-FpbxE3TrIB6Tgnx8fh3S2HE,11729
pip/_internal/vcs/versioncontrol.py,sha256=KUOc-hN51em9jrqxKwUR3JnkgSE-xSOqMiiJcSaL6B8,22811
pip/_internal/wheel_builder.py,sha256=3UlHfxQi7_AAXI7ur8aPpPbmqHhecCsubmkHEl-00KU,11842
-pip/_vendor/__init__.py,sha256=fNxOSVD0auElsD8fN9tuq5psfgMQ-RFBtD4X5gjlRkg,4966
+pip/_vendor/__init__.py,sha256=U51NPwXdA-wXOiANIQncYjcMp6txgeOL5nHxksJeyas,4993
pip/_vendor/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/__pycache__/six.cpython-311.pyc,,
pip/_vendor/__pycache__/typing_extensions.cpython-311.pyc,,
-pip/_vendor/cachecontrol/__init__.py,sha256=hrxlv3q7upsfyMw8k3gQ9vagBax1pYHSGGqYlZ0Zk0M,465
+pip/_vendor/cachecontrol/__init__.py,sha256=ctHagMhQXuvQDdm4TirZrwDOT5H8oBNAJqzdKI6sovk,676
pip/_vendor/cachecontrol/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-311.pyc,,
pip/_vendor/cachecontrol/__pycache__/adapter.cpython-311.pyc,,
pip/_vendor/cachecontrol/__pycache__/cache.cpython-311.pyc,,
-pip/_vendor/cachecontrol/__pycache__/compat.cpython-311.pyc,,
pip/_vendor/cachecontrol/__pycache__/controller.cpython-311.pyc,,
pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-311.pyc,,
pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-311.pyc,,
pip/_vendor/cachecontrol/__pycache__/serialize.cpython-311.pyc,,
pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-311.pyc,,
-pip/_vendor/cachecontrol/_cmd.py,sha256=lxUXqfNTVx84zf6tcWbkLZHA6WVBRtJRpfeA9ZqhaAY,1379
-pip/_vendor/cachecontrol/adapter.py,sha256=ew9OYEQHEOjvGl06ZsuX8W3DAvHWsQKHwWAxISyGug8,5033
-pip/_vendor/cachecontrol/cache.py,sha256=Tty45fOjH40fColTGkqKQvQQmbYsMpk-nCyfLcv2vG4,1535
-pip/_vendor/cachecontrol/caches/__init__.py,sha256=h-1cUmOz6mhLsjTjOrJ8iPejpGdLCyG4lzTftfGZvLg,242
+pip/_vendor/cachecontrol/_cmd.py,sha256=iist2EpzJvDVIhMAxXq8iFnTBsiZAd6iplxfmNboNyk,1737
+pip/_vendor/cachecontrol/adapter.py,sha256=_CcWvUP9048qAZjsNqViaHbdcLs9mmFNixVfpO7oebE,6392
+pip/_vendor/cachecontrol/cache.py,sha256=OTQj72tUf8C1uEgczdl3Gc8vkldSzsTITKtDGKMx4z8,1952
+pip/_vendor/cachecontrol/caches/__init__.py,sha256=dtrrroK5BnADR1GWjCZ19aZ0tFsMfvFBtLQQU1sp_ag,303
pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-311.pyc,,
pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-311.pyc,,
-pip/_vendor/cachecontrol/caches/file_cache.py,sha256=GpexcE29LoY4MaZwPUTcUBZaDdcsjqyLxZFznk8Hbr4,5271
-pip/_vendor/cachecontrol/caches/redis_cache.py,sha256=mp-QWonP40I3xJGK3XVO-Gs9a3UjzlqqEmp9iLJH9F4,1033
-pip/_vendor/cachecontrol/compat.py,sha256=LNx7vqBndYdHU8YuJt53ab_8rzMGTXVrvMb7CZJkxG0,778
-pip/_vendor/cachecontrol/controller.py,sha256=bAYrt7x_VH4toNpI066LQxbHpYGpY1MxxmZAhspplvw,16416
-pip/_vendor/cachecontrol/filewrapper.py,sha256=X4BAQOO26GNOR7nH_fhTzAfeuct2rBQcx_15MyFBpcs,3946
-pip/_vendor/cachecontrol/heuristics.py,sha256=8kAyuZLSCyEIgQr6vbUwfhpqg9ows4mM0IV6DWazevI,4154
-pip/_vendor/cachecontrol/serialize.py,sha256=_U1NU_C-SDgFzkbAxAsPDgMTHeTWZZaHCQnZN_jh0U8,7105
-pip/_vendor/cachecontrol/wrapper.py,sha256=X3-KMZ20Ho3VtqyVaXclpeQpFzokR5NE8tZSfvKVaB8,774
-pip/_vendor/certifi/__init__.py,sha256=q5ePznlfOw-XYIOV6RTnh45yS9haN-Nb1d__4QXc3g0,94
+pip/_vendor/cachecontrol/caches/file_cache.py,sha256=3z8AWKD-vfKeiJqIzLmJyIYtR2yd6Tsh3u1TyLRQoIQ,5352
+pip/_vendor/cachecontrol/caches/redis_cache.py,sha256=9rmqwtYu_ljVkW6_oLqbC7EaX_a8YT_yLuna-eS0dgo,1386
+pip/_vendor/cachecontrol/controller.py,sha256=keCFA3ZaNVaWTwHd6F1zqWhb4vyvNx_UvZuo5iIYMfo,18384
+pip/_vendor/cachecontrol/filewrapper.py,sha256=STttGmIPBvZzt2b51dUOwoWX5crcMCpKZOisM3f5BNc,4292
+pip/_vendor/cachecontrol/heuristics.py,sha256=fdFbk9W8IeLrjteIz_fK4mj2HD_Y7COXF2Uc8TgjT1c,4828
+pip/_vendor/cachecontrol/serialize.py,sha256=0dHeMaDwysVAAnGVlhMOP4tDliohgNK0Jxk_zsOiWxw,7173
+pip/_vendor/cachecontrol/wrapper.py,sha256=hsGc7g8QGQTT-4f8tgz3AM5qwScg6FO0BSdLSRdEvpU,1417
+pip/_vendor/certifi/__init__.py,sha256=L_j-d0kYuA_MzA2_2hraF1ovf6KT6DTquRdV3paQwOk,94
pip/_vendor/certifi/__main__.py,sha256=1k3Cr95vCxxGRGDljrW3wMdpZdL3Nhf0u1n-k2qdsCY,255
pip/_vendor/certifi/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/certifi/__pycache__/__main__.cpython-311.pyc,,
pip/_vendor/certifi/__pycache__/core.cpython-311.pyc,,
-pip/_vendor/certifi/cacert.pem,sha256=swFTXcpJHZgU6ij6oyCsehnQ9dlCN5lvoKO1qTZDJRQ,278952
+pip/_vendor/certifi/cacert.pem,sha256=eU0Dn_3yd8BH4m8sfVj4Glhl2KDrcCSg-sEWT-pNJ88,281617
pip/_vendor/certifi/core.py,sha256=ZwiOsv-sD_ouU1ft8wy_xZ3LQ7UbcVzyqj2XNyrsZis,4279
pip/_vendor/chardet/__init__.py,sha256=57R-HSxj0PWmILMN0GFmUNqEMfrEVSamXyjD-W6_fbs,4797
pip/_vendor/chardet/__pycache__/__init__.cpython-311.pyc,,
@@ -910,6 +906,18 @@ pip/_vendor/tomli/__pycache__/_types.cpython-311.pyc,,
pip/_vendor/tomli/_parser.py,sha256=g9-ENaALS-B8dokYpCuzUFalWlog7T-SIYMjLZSWrtM,22633
pip/_vendor/tomli/_re.py,sha256=dbjg5ChZT23Ka9z9DHOXfdtSpPwUfdgMXnj8NOoly-w,2943
pip/_vendor/tomli/_types.py,sha256=-GTG2VUqkpxwMqzmVO4F7ybKddIbAnuAHXfmWQcTi3Q,254
+pip/_vendor/truststore/__init__.py,sha256=qzTLSH8PvAkY1fr6QQ2vV-KwE_M83wdXugtpJaP_AbM,403
+pip/_vendor/truststore/__pycache__/__init__.cpython-311.pyc,,
+pip/_vendor/truststore/__pycache__/_api.cpython-311.pyc,,
+pip/_vendor/truststore/__pycache__/_macos.cpython-311.pyc,,
+pip/_vendor/truststore/__pycache__/_openssl.cpython-311.pyc,,
+pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-311.pyc,,
+pip/_vendor/truststore/__pycache__/_windows.cpython-311.pyc,,
+pip/_vendor/truststore/_api.py,sha256=xjuEu_rlH4hcdJTROImEyOEqdw-F8t5vO2H2BToY0Ro,9893
+pip/_vendor/truststore/_macos.py,sha256=BjvAKoAjXhdIPuxpY124HJIFswDb0pq8DjynzJOVwqc,17694
+pip/_vendor/truststore/_openssl.py,sha256=LLUZ7ZGaio-i5dpKKjKCSeSufmn6T8pi9lDcFnvSyq0,2324
+pip/_vendor/truststore/_ssl_constants.py,sha256=NUD4fVKdSD02ri7-db0tnO0VqLP9aHuzmStcW7tAl08,1130
+pip/_vendor/truststore/_windows.py,sha256=1x_EhROeJ9QK1sMAjfnZC7awYI8UnBJYL-TjACUYI4A,17468
pip/_vendor/typing_extensions.py,sha256=EWpcpyQnVmc48E9fSyPGs-vXgHcAk9tQABQIxmMsCGk,111130
pip/_vendor/urllib3/__init__.py,sha256=iXLcYiJySn0GNbWOOZDDApgBL1JgP44EZ8i1760S8Mc,3333
pip/_vendor/urllib3/__pycache__/__init__.cpython-311.pyc,,
@@ -924,7 +932,7 @@ pip/_vendor/urllib3/__pycache__/poolmanager.cpython-311.pyc,,
pip/_vendor/urllib3/__pycache__/request.cpython-311.pyc,,
pip/_vendor/urllib3/__pycache__/response.cpython-311.pyc,,
pip/_vendor/urllib3/_collections.py,sha256=Rp1mVyBgc_UlAcp6M3at1skJBXR5J43NawRTvW2g_XY,10811
-pip/_vendor/urllib3/_version.py,sha256=6zoYnDykPLfe92fHqXalH8SxhWVl31yYLCP0lDri_SA,64
+pip/_vendor/urllib3/_version.py,sha256=azoM7M7BUADl2kBhMVR6PPf2GhBDI90me1fcnzTwdcw,64
pip/_vendor/urllib3/connection.py,sha256=92k9td_y4PEiTIjNufCUa1NzMB3J3w0LEdyokYgXnW8,20300
pip/_vendor/urllib3/connectionpool.py,sha256=ItVDasDnPRPP9R8bNxY7tPBlC724nJ9nlxVgXG_SLbI,39990
pip/_vendor/urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -961,7 +969,7 @@ pip/_vendor/urllib3/packages/backports/makefile.py,sha256=nbzt3i0agPVP07jqqgjhaY
pip/_vendor/urllib3/packages/backports/weakref_finalize.py,sha256=tRCal5OAhNSRyb0DhHp-38AtIlCsRP8BxF3NX-6rqIA,5343
pip/_vendor/urllib3/packages/six.py,sha256=b9LM0wBXv7E7SrbCjAm4wwN-hrH-iNxv18LgWNMMKPo,34665
pip/_vendor/urllib3/poolmanager.py,sha256=0i8cJgrqupza67IBPZ_u9jXvnSxr5UBlVEiUqdkPtYI,19752
-pip/_vendor/urllib3/request.py,sha256=ZFSIqX0C6WizixecChZ3_okyu7BEv0lZu1VT0s6h4SM,5985
+pip/_vendor/urllib3/request.py,sha256=YTWFNr7QIwh7E1W9dde9LM77v2VWTJ5V78XuTTw7D1A,6691
pip/_vendor/urllib3/response.py,sha256=fmDJAFkG71uFTn-sVSTh2Iw0WmcXQYqkbRjihvwBjU8,30641
pip/_vendor/urllib3/util/__init__.py,sha256=JEmSmmqqLyaw8P51gUImZh8Gwg9i1zSe-DoqAitn2nc,1155
pip/_vendor/urllib3/util/__pycache__/__init__.cpython-311.pyc,,
@@ -982,14 +990,14 @@ pip/_vendor/urllib3/util/proxy.py,sha256=zUvPPCJrp6dOF0N4GAVbOcl6o-4uXKSrGiTkkr5
pip/_vendor/urllib3/util/queue.py,sha256=nRgX8_eX-_VkvxoX096QWoz8Ps0QHUAExILCY_7PncM,498
pip/_vendor/urllib3/util/request.py,sha256=C0OUt2tcU6LRiQJ7YYNP9GvPrSvl7ziIBekQ-5nlBZk,3997
pip/_vendor/urllib3/util/response.py,sha256=GJpg3Egi9qaJXRwBh5wv-MNuRWan5BIu40oReoxWP28,3510
-pip/_vendor/urllib3/util/retry.py,sha256=4laWh0HpwGijLiBmdBIYtbhYekQnNzzhx2W9uys0RHA,22003
+pip/_vendor/urllib3/util/retry.py,sha256=Z6WEf518eTOXP5jr5QSQ9gqJI0DVYt3Xs3EKnYaTmus,22013
pip/_vendor/urllib3/util/ssl_.py,sha256=X4-AqW91aYPhPx6-xbf66yHFQKbqqfC_5Zt4WkLX1Hc,17177
pip/_vendor/urllib3/util/ssl_match_hostname.py,sha256=Ir4cZVEjmAk8gUAIHWSi7wtOO83UCYABY2xFD1Ql_WA,5758
pip/_vendor/urllib3/util/ssltransport.py,sha256=NA-u5rMTrDFDFC8QzRKUEKMG0561hOD4qBTr3Z4pv6E,6895
pip/_vendor/urllib3/util/timeout.py,sha256=cwq4dMk87mJHSBktK1miYJ-85G-3T3RmT20v7SFCpno,10168
pip/_vendor/urllib3/util/url.py,sha256=lCAE7M5myA8EDdW0sJuyyZhVB9K_j38ljWhHAnFaWoE,14296
pip/_vendor/urllib3/util/wait.py,sha256=fOX0_faozG2P7iVojQoE1mbydweNyTcm-hXEfFrTtLI,5403
-pip/_vendor/vendor.txt,sha256=EyWEHCgXKFKiE8Mku6LONUDLF6UwDwjX1NP2ccKLrLo,475
+pip/_vendor/vendor.txt,sha256=epuLpe-n1shCqP5BzC97iMIAIeOeDHdtNKFgcxax-9A,493
pip/_vendor/webencodings/__init__.py,sha256=qOBJIuPy_4ByYH6W_bNgJF-qYQ2DoU-dKsDu5yRWCXg,10579
pip/_vendor/webencodings/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/webencodings/__pycache__/labels.cpython-311.pyc,,
diff --git a/lib/python3.11/site-packages/pip-23.3.1.dist-info/REQUESTED b/lib/python3.11/site-packages/pip-23.3.1.dist-info/REQUESTED
new file mode 100644
index 00000000..e69de29b
diff --git a/lib/python3.11/site-packages/pip-23.3.1.dist-info/WHEEL b/lib/python3.11/site-packages/pip-23.3.1.dist-info/WHEEL
new file mode 100644
index 00000000..7e688737
--- /dev/null
+++ b/lib/python3.11/site-packages/pip-23.3.1.dist-info/WHEEL
@@ -0,0 +1,5 @@
+Wheel-Version: 1.0
+Generator: bdist_wheel (0.41.2)
+Root-Is-Purelib: true
+Tag: py3-none-any
+
diff --git a/lib/python3.11/site-packages/pip-23.2.1.dist-info/entry_points.txt b/lib/python3.11/site-packages/pip-23.3.1.dist-info/entry_points.txt
similarity index 100%
rename from lib/python3.11/site-packages/pip-23.2.1.dist-info/entry_points.txt
rename to lib/python3.11/site-packages/pip-23.3.1.dist-info/entry_points.txt
diff --git a/lib/python3.11/site-packages/pip-23.3.1.dist-info/top_level.txt b/lib/python3.11/site-packages/pip-23.3.1.dist-info/top_level.txt
new file mode 100644
index 00000000..a1b589e3
--- /dev/null
+++ b/lib/python3.11/site-packages/pip-23.3.1.dist-info/top_level.txt
@@ -0,0 +1 @@
+pip
diff --git a/lib/python3.11/site-packages/pip/__init__.py b/lib/python3.11/site-packages/pip/__init__.py
index 6633ef7e..f1263cdc 100644
--- a/lib/python3.11/site-packages/pip/__init__.py
+++ b/lib/python3.11/site-packages/pip/__init__.py
@@ -1,6 +1,6 @@
from typing import List, Optional
-__version__ = "23.2.1"
+__version__ = "23.3.1"
def main(args: Optional[List[str]] = None) -> int:
diff --git a/lib/python3.11/site-packages/pip/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/__pycache__/__init__.cpython-311.pyc
index f5bce7e6..ce60afbe 100644
Binary files a/lib/python3.11/site-packages/pip/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/__pycache__/__main__.cpython-311.pyc b/lib/python3.11/site-packages/pip/__pycache__/__main__.cpython-311.pyc
index 665cf409..1a5c1e34 100644
Binary files a/lib/python3.11/site-packages/pip/__pycache__/__main__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/__pycache__/__main__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/__pycache__/__pip-runner__.cpython-311.pyc b/lib/python3.11/site-packages/pip/__pycache__/__pip-runner__.cpython-311.pyc
index b71d7c2b..6b5bdf83 100644
Binary files a/lib/python3.11/site-packages/pip/__pycache__/__pip-runner__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/__pycache__/__pip-runner__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/__init__.py b/lib/python3.11/site-packages/pip/_internal/__init__.py
index 6afb5c62..96c6b88c 100644
--- a/lib/python3.11/site-packages/pip/_internal/__init__.py
+++ b/lib/python3.11/site-packages/pip/_internal/__init__.py
@@ -1,6 +1,5 @@
from typing import List, Optional
-import pip._internal.utils.inject_securetransport # noqa
from pip._internal.utils import _log
# init_logging() must be called before any call to logging.getLogger()
diff --git a/lib/python3.11/site-packages/pip/_internal/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/__pycache__/__init__.cpython-311.pyc
index be27c016..2fdcf98b 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/__pycache__/build_env.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/__pycache__/build_env.cpython-311.pyc
index 8e2e95b9..dad6b9df 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/__pycache__/build_env.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/__pycache__/build_env.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/__pycache__/cache.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/__pycache__/cache.cpython-311.pyc
index 39e6cbbf..7815fc46 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/__pycache__/cache.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/__pycache__/cache.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/__pycache__/configuration.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/__pycache__/configuration.cpython-311.pyc
index c3a08edf..5577194d 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/__pycache__/configuration.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/__pycache__/configuration.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/__pycache__/exceptions.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/__pycache__/exceptions.cpython-311.pyc
index 315ee90e..914312ad 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/__pycache__/exceptions.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/__pycache__/exceptions.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/__pycache__/main.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/__pycache__/main.cpython-311.pyc
index 289cd070..61e1fb30 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/__pycache__/main.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/__pycache__/main.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/__pycache__/pyproject.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/__pycache__/pyproject.cpython-311.pyc
index 0420de4c..1e8fc16d 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/__pycache__/pyproject.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/__pycache__/pyproject.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-311.pyc
index bc2f8d86..2ab6b536 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-311.pyc
index 480c4c08..396fd11c 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/cache.py b/lib/python3.11/site-packages/pip/_internal/cache.py
index 8d3a664c..f45ac23e 100644
--- a/lib/python3.11/site-packages/pip/_internal/cache.py
+++ b/lib/python3.11/site-packages/pip/_internal/cache.py
@@ -78,12 +78,10 @@ class Cache:
if can_not_cache:
return []
- candidates = []
path = self.get_path_for_link(link)
if os.path.isdir(path):
- for candidate in os.listdir(path):
- candidates.append((candidate, path))
- return candidates
+ return [(candidate, path) for candidate in os.listdir(path)]
+ return []
def get_path_for_link(self, link: Link) -> str:
"""Return a directory to store cached items in for link."""
diff --git a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-311.pyc
index 4183dc35..c6cd30c8 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-311.pyc
index 612d7d9b..08b7ec2b 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-311.pyc
index f64b09de..2b0c05c5 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-311.pyc
index 25756cd3..b6a7769b 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-311.pyc
index c69d7a68..64e33bef 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/main.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/main.cpython-311.pyc
index 9d9802e0..c85f4c27 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/main.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/main.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-311.pyc
index 44180014..8a620afa 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/parser.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/parser.cpython-311.pyc
index f2572f5d..5a184d26 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/parser.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/parser.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-311.pyc
index 0f43f214..f7a5b4da 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-311.pyc
index 689c43f2..fb47e324 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-311.pyc
index edb9e5df..c806a657 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-311.pyc
index e4522f6d..69705d00 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/cli/autocompletion.py b/lib/python3.11/site-packages/pip/_internal/cli/autocompletion.py
index 226fe84d..e5950b90 100644
--- a/lib/python3.11/site-packages/pip/_internal/cli/autocompletion.py
+++ b/lib/python3.11/site-packages/pip/_internal/cli/autocompletion.py
@@ -71,8 +71,9 @@ def autocomplete() -> None:
for opt in subcommand.parser.option_list_all:
if opt.help != optparse.SUPPRESS_HELP:
- for opt_str in opt._long_opts + opt._short_opts:
- options.append((opt_str, opt.nargs))
+ options += [
+ (opt_str, opt.nargs) for opt_str in opt._long_opts + opt._short_opts
+ ]
# filter out previously specified options from available options
prev_opts = [x.split("=")[0] for x in cwords[1 : cword - 1]]
diff --git a/lib/python3.11/site-packages/pip/_internal/cli/base_command.py b/lib/python3.11/site-packages/pip/_internal/cli/base_command.py
index 6a3b8e6c..db9d5cc6 100644
--- a/lib/python3.11/site-packages/pip/_internal/cli/base_command.py
+++ b/lib/python3.11/site-packages/pip/_internal/cli/base_command.py
@@ -181,7 +181,7 @@ class Command(CommandContextMixIn):
assert isinstance(status, int)
return status
except DiagnosticPipError as exc:
- logger.error("[present-rich] %s", exc)
+ logger.error("%s", exc, extra={"rich": True})
logger.debug("Exception information:", exc_info=True)
return ERROR
diff --git a/lib/python3.11/site-packages/pip/_internal/cli/cmdoptions.py b/lib/python3.11/site-packages/pip/_internal/cli/cmdoptions.py
index 02ba6082..8fb16dc4 100644
--- a/lib/python3.11/site-packages/pip/_internal/cli/cmdoptions.py
+++ b/lib/python3.11/site-packages/pip/_internal/cli/cmdoptions.py
@@ -92,10 +92,10 @@ def check_dist_restriction(options: Values, check_target: bool = False) -> None:
)
if check_target:
- if dist_restriction_set and not options.target_dir:
+ if not options.dry_run and dist_restriction_set and not options.target_dir:
raise CommandError(
"Can not use any platform or abi specific options unless "
- "installing via '--target'"
+ "installing via '--target' or using '--dry-run'"
)
@@ -670,7 +670,10 @@ def prefer_binary() -> Option:
dest="prefer_binary",
action="store_true",
default=False,
- help="Prefer older binary packages over newer source packages.",
+ help=(
+ "Prefer binary packages over source packages, even if the "
+ "source packages are newer."
+ ),
)
@@ -823,7 +826,7 @@ def _handle_config_settings(
) -> None:
key, sep, val = value.partition("=")
if sep != "=":
- parser.error(f"Arguments to {opt_str} must be of the form KEY=VAL") # noqa
+ parser.error(f"Arguments to {opt_str} must be of the form KEY=VAL")
dest = getattr(parser.values, option.dest)
if dest is None:
dest = {}
@@ -918,13 +921,13 @@ def _handle_merge_hash(
algo, digest = value.split(":", 1)
except ValueError:
parser.error(
- "Arguments to {} must be a hash name " # noqa
+ "Arguments to {} must be a hash name "
"followed by a value, like --hash=sha256:"
"abcde...".format(opt_str)
)
if algo not in STRONG_HASHES:
parser.error(
- "Allowed hash algorithms for {} are {}.".format( # noqa
+ "Allowed hash algorithms for {} are {}.".format(
opt_str, ", ".join(STRONG_HASHES)
)
)
diff --git a/lib/python3.11/site-packages/pip/_internal/cli/parser.py b/lib/python3.11/site-packages/pip/_internal/cli/parser.py
index c762cf27..64cf9719 100644
--- a/lib/python3.11/site-packages/pip/_internal/cli/parser.py
+++ b/lib/python3.11/site-packages/pip/_internal/cli/parser.py
@@ -229,7 +229,7 @@ class ConfigOptionParser(CustomOptionParser):
val = strtobool(val)
except ValueError:
self.error(
- "{} is not a valid value for {} option, " # noqa
+ "{} is not a valid value for {} option, "
"please specify a boolean value like yes/no, "
"true/false or 1/0 instead.".format(val, key)
)
@@ -240,7 +240,7 @@ class ConfigOptionParser(CustomOptionParser):
val = int(val)
if not isinstance(val, int) or val < 0:
self.error(
- "{} is not a valid value for {} option, " # noqa
+ "{} is not a valid value for {} option, "
"please instead specify either a non-negative integer "
"or a boolean value like yes/no or false/true "
"which is equivalent to 1/0.".format(val, key)
diff --git a/lib/python3.11/site-packages/pip/_internal/cli/req_command.py b/lib/python3.11/site-packages/pip/_internal/cli/req_command.py
index 86070f10..6f2f79c6 100644
--- a/lib/python3.11/site-packages/pip/_internal/cli/req_command.py
+++ b/lib/python3.11/site-packages/pip/_internal/cli/req_command.py
@@ -58,12 +58,9 @@ def _create_truststore_ssl_context() -> Optional["SSLContext"]:
return None
try:
- import truststore
- except ImportError:
- raise CommandError(
- "To use the truststore feature, 'truststore' must be installed into "
- "pip's current environment."
- )
+ from pip._vendor import truststore
+ except ImportError as e:
+ raise CommandError(f"The truststore feature is unavailable: {e}")
return truststore.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
@@ -123,7 +120,7 @@ class SessionCommandMixin(CommandContextMixIn):
ssl_context = None
session = PipSession(
- cache=os.path.join(cache_dir, "http") if cache_dir else None,
+ cache=os.path.join(cache_dir, "http-v2") if cache_dir else None,
retries=retries if retries is not None else options.retries,
trusted_hosts=options.trusted_hosts,
index_urls=self._get_index_urls(options),
@@ -268,7 +265,7 @@ class RequirementCommand(IndexGroupCommand):
if "legacy-resolver" in options.deprecated_features_enabled:
return "legacy"
- return "2020-resolver"
+ return "resolvelib"
@classmethod
def make_requirement_preparer(
@@ -290,7 +287,7 @@ class RequirementCommand(IndexGroupCommand):
legacy_resolver = False
resolver_variant = cls.determine_resolver_variant(options)
- if resolver_variant == "2020-resolver":
+ if resolver_variant == "resolvelib":
lazy_wheel = "fast-deps" in options.features_enabled
if lazy_wheel:
logger.warning(
@@ -352,7 +349,7 @@ class RequirementCommand(IndexGroupCommand):
# The long import name and duplicated invocation is needed to convince
# Mypy into correctly typechecking. Otherwise it would complain the
# "Resolver" class being redefined.
- if resolver_variant == "2020-resolver":
+ if resolver_variant == "resolvelib":
import pip._internal.resolution.resolvelib.resolver
return pip._internal.resolution.resolvelib.resolver.Resolver(
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-311.pyc
index 615e6172..f790c898 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/cache.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/cache.cpython-311.pyc
index 03d3f01c..0834fa87 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/cache.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/cache.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/check.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/check.cpython-311.pyc
index 90d9036e..0817050e 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/check.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/check.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/completion.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/completion.cpython-311.pyc
index db3b13b5..1eeea4a7 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/completion.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/completion.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-311.pyc
index c159da78..e4a371fa 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/debug.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/debug.cpython-311.pyc
index d0b5bc31..0071fe58 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/debug.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/debug.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/download.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/download.cpython-311.pyc
index 55531451..176692fa 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/download.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/download.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-311.pyc
index 746db1c6..ad2e632c 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/hash.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/hash.cpython-311.pyc
index 25f5ebd0..ae5495e7 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/hash.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/hash.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/help.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/help.cpython-311.pyc
index 528afa8f..c79bef8d 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/help.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/help.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/index.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/index.cpython-311.pyc
index a923cbf0..039454b2 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/index.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/index.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-311.pyc
index d22091bb..afcbb2d0 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/install.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/install.cpython-311.pyc
index c84a8c60..4a015b1a 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/install.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/install.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/list.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/list.cpython-311.pyc
index b986cb78..4de9efcc 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/list.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/list.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/search.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/search.cpython-311.pyc
index d911f271..aeb85f6a 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/search.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/search.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/show.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/show.cpython-311.pyc
index 17d385f5..fbb2cd61 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/show.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/show.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-311.pyc
index d45d601b..4f0190ee 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-311.pyc
index c6adb67b..6c8a29e1 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/cache.py b/lib/python3.11/site-packages/pip/_internal/commands/cache.py
index e96d2b49..1f3b5fe1 100644
--- a/lib/python3.11/site-packages/pip/_internal/commands/cache.py
+++ b/lib/python3.11/site-packages/pip/_internal/commands/cache.py
@@ -3,10 +3,10 @@ import textwrap
from optparse import Values
from typing import Any, List
-import pip._internal.utils.filesystem as filesystem
from pip._internal.cli.base_command import Command
from pip._internal.cli.status_codes import ERROR, SUCCESS
from pip._internal.exceptions import CommandError, PipError
+from pip._internal.utils import filesystem
from pip._internal.utils.logging import getLogger
logger = getLogger(__name__)
@@ -93,24 +93,30 @@ class CacheCommand(Command):
num_http_files = len(self._find_http_files(options))
num_packages = len(self._find_wheels(options, "*"))
- http_cache_location = self._cache_dir(options, "http")
+ http_cache_location = self._cache_dir(options, "http-v2")
+ old_http_cache_location = self._cache_dir(options, "http")
wheels_cache_location = self._cache_dir(options, "wheels")
- http_cache_size = filesystem.format_directory_size(http_cache_location)
+ http_cache_size = filesystem.format_size(
+ filesystem.directory_size(http_cache_location)
+ + filesystem.directory_size(old_http_cache_location)
+ )
wheels_cache_size = filesystem.format_directory_size(wheels_cache_location)
message = (
textwrap.dedent(
"""
- Package index page cache location: {http_cache_location}
+ Package index page cache location (pip v23.3+): {http_cache_location}
+ Package index page cache location (older pips): {old_http_cache_location}
Package index page cache size: {http_cache_size}
Number of HTTP files: {num_http_files}
Locally built wheels location: {wheels_cache_location}
Locally built wheels size: {wheels_cache_size}
Number of locally built wheels: {package_count}
- """
+ """ # noqa: E501
)
.format(
http_cache_location=http_cache_location,
+ old_http_cache_location=old_http_cache_location,
http_cache_size=http_cache_size,
num_http_files=num_http_files,
wheels_cache_location=wheels_cache_location,
@@ -151,14 +157,8 @@ class CacheCommand(Command):
logger.info("\n".join(sorted(results)))
def format_for_abspath(self, files: List[str]) -> None:
- if not files:
- return
-
- results = []
- for filename in files:
- results.append(filename)
-
- logger.info("\n".join(sorted(results)))
+ if files:
+ logger.info("\n".join(sorted(files)))
def remove_cache_items(self, options: Values, args: List[Any]) -> None:
if len(args) > 1:
@@ -195,8 +195,11 @@ class CacheCommand(Command):
return os.path.join(options.cache_dir, subdir)
def _find_http_files(self, options: Values) -> List[str]:
- http_dir = self._cache_dir(options, "http")
- return filesystem.find_files(http_dir, "*")
+ old_http_dir = self._cache_dir(options, "http")
+ new_http_dir = self._cache_dir(options, "http-v2")
+ return filesystem.find_files(old_http_dir, "*") + filesystem.find_files(
+ new_http_dir, "*"
+ )
def _find_wheels(self, options: Values, pattern: str) -> List[str]:
wheel_dir = self._cache_dir(options, "wheels")
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/completion.py b/lib/python3.11/site-packages/pip/_internal/commands/completion.py
index 30233fc7..9e89e279 100644
--- a/lib/python3.11/site-packages/pip/_internal/commands/completion.py
+++ b/lib/python3.11/site-packages/pip/_internal/commands/completion.py
@@ -23,9 +23,18 @@ COMPLETION_SCRIPTS = {
""",
"zsh": """
#compdef -P pip[0-9.]#
- compadd $( COMP_WORDS="$words[*]" \\
- COMP_CWORD=$((CURRENT-1)) \\
- PIP_AUTO_COMPLETE=1 $words[1] 2>/dev/null )
+ __pip() {{
+ compadd $( COMP_WORDS="$words[*]" \\
+ COMP_CWORD=$((CURRENT-1)) \\
+ PIP_AUTO_COMPLETE=1 $words[1] 2>/dev/null )
+ }}
+ if [[ $zsh_eval_context[-1] == loadautofunc ]]; then
+ # autoload from fpath, call function directly
+ __pip "$@"
+ else
+ # eval/source/. command, register function for later
+ compdef __pip -P 'pip[0-9.]#'
+ fi
""",
"fish": """
function __fish_complete_pip
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/debug.py b/lib/python3.11/site-packages/pip/_internal/commands/debug.py
index 2a3e7d29..5dc91bf4 100644
--- a/lib/python3.11/site-packages/pip/_internal/commands/debug.py
+++ b/lib/python3.11/site-packages/pip/_internal/commands/debug.py
@@ -46,22 +46,29 @@ def create_vendor_txt_map() -> Dict[str, str]:
return dict(line.split("==", 1) for line in lines)
-def get_module_from_module_name(module_name: str) -> ModuleType:
+def get_module_from_module_name(module_name: str) -> Optional[ModuleType]:
# Module name can be uppercase in vendor.txt for some reason...
module_name = module_name.lower().replace("-", "_")
# PATCH: setuptools is actually only pkg_resources.
if module_name == "setuptools":
module_name = "pkg_resources"
- __import__(f"pip._vendor.{module_name}", globals(), locals(), level=0)
- return getattr(pip._vendor, module_name)
+ try:
+ __import__(f"pip._vendor.{module_name}", globals(), locals(), level=0)
+ return getattr(pip._vendor, module_name)
+ except ImportError:
+ # We allow 'truststore' to fail to import due
+ # to being unavailable on Python 3.9 and earlier.
+ if module_name == "truststore" and sys.version_info < (3, 10):
+ return None
+ raise
def get_vendor_version_from_module(module_name: str) -> Optional[str]:
module = get_module_from_module_name(module_name)
version = getattr(module, "__version__", None)
- if not version:
+ if module and not version:
# Try to find version in debundled module info.
assert module.__file__ is not None
env = get_environment([os.path.dirname(module.__file__)])
@@ -105,7 +112,7 @@ def show_tags(options: Values) -> None:
tag_limit = 10
target_python = make_target_python(options)
- tags = target_python.get_tags()
+ tags = target_python.get_sorted_tags()
# Display the target options that were explicitly provided.
formatted_target = target_python.format_given()
@@ -134,10 +141,7 @@ def show_tags(options: Values) -> None:
def ca_bundle_info(config: Configuration) -> str:
- levels = set()
- for key, _ in config.items():
- levels.add(key.split(".")[0])
-
+ levels = {key.split(".", 1)[0] for key, _ in config.items()}
if not levels:
return "Not specified"
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/install.py b/lib/python3.11/site-packages/pip/_internal/commands/install.py
index f6a30080..365764fc 100644
--- a/lib/python3.11/site-packages/pip/_internal/commands/install.py
+++ b/lib/python3.11/site-packages/pip/_internal/commands/install.py
@@ -501,7 +501,7 @@ class InstallCommand(RequirementCommand):
show_traceback,
options.use_user_site,
)
- logger.error(message, exc_info=show_traceback) # noqa
+ logger.error(message, exc_info=show_traceback)
return ERROR
@@ -595,7 +595,7 @@ class InstallCommand(RequirementCommand):
"source of the following dependency conflicts."
)
else:
- assert resolver_variant == "2020-resolver"
+ assert resolver_variant == "resolvelib"
parts.append(
"pip's dependency resolver does not currently take into account "
"all the packages that are installed. This behaviour is the "
@@ -628,7 +628,7 @@ class InstallCommand(RequirementCommand):
requirement=req,
dep_name=dep_name,
dep_version=dep_version,
- you=("you" if resolver_variant == "2020-resolver" else "you'll"),
+ you=("you" if resolver_variant == "resolvelib" else "you'll"),
)
parts.append(message)
diff --git a/lib/python3.11/site-packages/pip/_internal/commands/list.py b/lib/python3.11/site-packages/pip/_internal/commands/list.py
index ac103531..e551dda9 100644
--- a/lib/python3.11/site-packages/pip/_internal/commands/list.py
+++ b/lib/python3.11/site-packages/pip/_internal/commands/list.py
@@ -297,7 +297,7 @@ class ListCommand(IndexGroupCommand):
# Create and add a separator.
if len(data) > 0:
- pkg_strings.insert(1, " ".join(map(lambda x: "-" * x, sizes)))
+ pkg_strings.insert(1, " ".join("-" * x for x in sizes))
for val in pkg_strings:
write_output(val)
diff --git a/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-311.pyc
index f26c45a4..dfdf6f93 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/base.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/base.cpython-311.pyc
index fbb6d9d2..6ef330e8 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/base.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/base.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-311.pyc
index 8f167782..071cadb9 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-311.pyc
index 87f3460f..cc1609b8 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-311.pyc
index a684a14d..89e9871d 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/distributions/base.py b/lib/python3.11/site-packages/pip/_internal/distributions/base.py
index 75ce2dc9..6fb0d7b7 100644
--- a/lib/python3.11/site-packages/pip/_internal/distributions/base.py
+++ b/lib/python3.11/site-packages/pip/_internal/distributions/base.py
@@ -1,4 +1,5 @@
import abc
+from typing import Optional
from pip._internal.index.package_finder import PackageFinder
from pip._internal.metadata.base import BaseDistribution
@@ -19,12 +20,23 @@ class AbstractDistribution(metaclass=abc.ABCMeta):
- we must be able to create a Distribution object exposing the
above metadata.
+
+ - if we need to do work in the build tracker, we must be able to generate a unique
+ string to identify the requirement in the build tracker.
"""
def __init__(self, req: InstallRequirement) -> None:
super().__init__()
self.req = req
+ @abc.abstractproperty
+ def build_tracker_id(self) -> Optional[str]:
+ """A string that uniquely identifies this requirement to the build tracker.
+
+ If None, then this dist has no work to do in the build tracker, and
+ ``.prepare_distribution_metadata()`` will not be called."""
+ raise NotImplementedError()
+
@abc.abstractmethod
def get_metadata_distribution(self) -> BaseDistribution:
raise NotImplementedError()
diff --git a/lib/python3.11/site-packages/pip/_internal/distributions/installed.py b/lib/python3.11/site-packages/pip/_internal/distributions/installed.py
index edb38aa1..ab8d53be 100644
--- a/lib/python3.11/site-packages/pip/_internal/distributions/installed.py
+++ b/lib/python3.11/site-packages/pip/_internal/distributions/installed.py
@@ -1,3 +1,5 @@
+from typing import Optional
+
from pip._internal.distributions.base import AbstractDistribution
from pip._internal.index.package_finder import PackageFinder
from pip._internal.metadata import BaseDistribution
@@ -10,6 +12,10 @@ class InstalledDistribution(AbstractDistribution):
been computed.
"""
+ @property
+ def build_tracker_id(self) -> Optional[str]:
+ return None
+
def get_metadata_distribution(self) -> BaseDistribution:
assert self.req.satisfied_by is not None, "not actually installed"
return self.req.satisfied_by
diff --git a/lib/python3.11/site-packages/pip/_internal/distributions/sdist.py b/lib/python3.11/site-packages/pip/_internal/distributions/sdist.py
index 4c256479..15ff42b7 100644
--- a/lib/python3.11/site-packages/pip/_internal/distributions/sdist.py
+++ b/lib/python3.11/site-packages/pip/_internal/distributions/sdist.py
@@ -1,5 +1,5 @@
import logging
-from typing import Iterable, Set, Tuple
+from typing import Iterable, Optional, Set, Tuple
from pip._internal.build_env import BuildEnvironment
from pip._internal.distributions.base import AbstractDistribution
@@ -18,6 +18,12 @@ class SourceDistribution(AbstractDistribution):
generated, either using PEP 517 or using the legacy `setup.py egg_info`.
"""
+ @property
+ def build_tracker_id(self) -> Optional[str]:
+ """Identify this requirement uniquely by its link."""
+ assert self.req.link
+ return self.req.link.url_without_fragment
+
def get_metadata_distribution(self) -> BaseDistribution:
return self.req.get_dist()
diff --git a/lib/python3.11/site-packages/pip/_internal/distributions/wheel.py b/lib/python3.11/site-packages/pip/_internal/distributions/wheel.py
index 03aac775..eb16e25c 100644
--- a/lib/python3.11/site-packages/pip/_internal/distributions/wheel.py
+++ b/lib/python3.11/site-packages/pip/_internal/distributions/wheel.py
@@ -1,3 +1,5 @@
+from typing import Optional
+
from pip._vendor.packaging.utils import canonicalize_name
from pip._internal.distributions.base import AbstractDistribution
@@ -15,6 +17,10 @@ class WheelDistribution(AbstractDistribution):
This does not need any preparation as wheels can be directly unpacked.
"""
+ @property
+ def build_tracker_id(self) -> Optional[str]:
+ return None
+
def get_metadata_distribution(self) -> BaseDistribution:
"""Loads the metadata from the wheel file into memory and returns a
Distribution that uses it, not relying on the wheel file or
diff --git a/lib/python3.11/site-packages/pip/_internal/index/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/index/__pycache__/__init__.cpython-311.pyc
index a32bc702..8923777d 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/index/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/index/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/index/__pycache__/collector.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/index/__pycache__/collector.cpython-311.pyc
index 5eb4beb7..fd9539d5 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/index/__pycache__/collector.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/index/__pycache__/collector.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-311.pyc
index 92dbac11..2b539371 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/index/__pycache__/sources.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/index/__pycache__/sources.cpython-311.pyc
index 5bd784bc..6de6a395 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/index/__pycache__/sources.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/index/__pycache__/sources.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/index/package_finder.py b/lib/python3.11/site-packages/pip/_internal/index/package_finder.py
index b6f8d57e..2121ca32 100644
--- a/lib/python3.11/site-packages/pip/_internal/index/package_finder.py
+++ b/lib/python3.11/site-packages/pip/_internal/index/package_finder.py
@@ -198,7 +198,7 @@ class LinkEvaluator:
reason = f"wrong project name (not {self.project_name})"
return (LinkType.different_project, reason)
- supported_tags = self._target_python.get_tags()
+ supported_tags = self._target_python.get_unsorted_tags()
if not wheel.supported(supported_tags):
# Include the wheel's tags in the reason string to
# simplify troubleshooting compatibility issues.
@@ -414,7 +414,7 @@ class CandidateEvaluator:
if specifier is None:
specifier = specifiers.SpecifierSet()
- supported_tags = target_python.get_tags()
+ supported_tags = target_python.get_sorted_tags()
return cls(
project_name=project_name,
diff --git a/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-311.pyc
index d5b7d9d4..655b261d 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-311.pyc
index e6a9b9f1..dad7d20c 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-311.pyc
index 6b4f891e..066cdbc1 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/base.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/base.cpython-311.pyc
index 459e21b9..62063788 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/base.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/base.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/locations/_distutils.py b/lib/python3.11/site-packages/pip/_internal/locations/_distutils.py
index 92bd9317..48689f5f 100644
--- a/lib/python3.11/site-packages/pip/_internal/locations/_distutils.py
+++ b/lib/python3.11/site-packages/pip/_internal/locations/_distutils.py
@@ -89,7 +89,7 @@ def distutils_scheme(
# finalize_options(); we only want to override here if the user
# has explicitly requested it hence going back to the config
if "install_lib" in d.get_option_dict("install"):
- scheme.update(dict(purelib=i.install_lib, platlib=i.install_lib))
+ scheme.update({"purelib": i.install_lib, "platlib": i.install_lib})
if running_under_virtualenv():
if home:
diff --git a/lib/python3.11/site-packages/pip/_internal/metadata/__init__.py b/lib/python3.11/site-packages/pip/_internal/metadata/__init__.py
index 9f73ca71..aa232b6c 100644
--- a/lib/python3.11/site-packages/pip/_internal/metadata/__init__.py
+++ b/lib/python3.11/site-packages/pip/_internal/metadata/__init__.py
@@ -9,7 +9,7 @@ from pip._internal.utils.misc import strtobool
from .base import BaseDistribution, BaseEnvironment, FilesystemWheel, MemoryWheel, Wheel
if TYPE_CHECKING:
- from typing import Protocol
+ from typing import Literal, Protocol
else:
Protocol = object
@@ -50,6 +50,7 @@ def _should_use_importlib_metadata() -> bool:
class Backend(Protocol):
+ NAME: 'Literal["importlib", "pkg_resources"]'
Distribution: Type[BaseDistribution]
Environment: Type[BaseEnvironment]
diff --git a/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-311.pyc
index 352086fa..b0cb307a 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-311.pyc
index 5a847b95..4c63fbd4 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/base.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/base.cpython-311.pyc
index 9164db32..151cf901 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/base.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/base.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-311.pyc
index 1f863d0a..3990da0b 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/metadata/base.py b/lib/python3.11/site-packages/pip/_internal/metadata/base.py
index cafb79fb..92491244 100644
--- a/lib/python3.11/site-packages/pip/_internal/metadata/base.py
+++ b/lib/python3.11/site-packages/pip/_internal/metadata/base.py
@@ -24,7 +24,7 @@ from typing import (
from pip._vendor.packaging.requirements import Requirement
from pip._vendor.packaging.specifiers import InvalidSpecifier, SpecifierSet
-from pip._vendor.packaging.utils import NormalizedName
+from pip._vendor.packaging.utils import NormalizedName, canonicalize_name
from pip._vendor.packaging.version import LegacyVersion, Version
from pip._internal.exceptions import NoneMetadataError
@@ -37,7 +37,6 @@ from pip._internal.models.direct_url import (
from pip._internal.utils.compat import stdlib_pkgs # TODO: Move definition here.
from pip._internal.utils.egg_link import egg_link_path_from_sys_path
from pip._internal.utils.misc import is_local, normalize_path
-from pip._internal.utils.packaging import safe_extra
from pip._internal.utils.urls import url_to_path
from ._json import msg_to_json
@@ -460,6 +459,19 @@ class BaseDistribution(Protocol):
For modern .dist-info distributions, this is the collection of
"Provides-Extra:" entries in distribution metadata.
+
+ The return value of this function is not particularly useful other than
+ display purposes due to backward compatibility issues and the extra
+ names being poorly normalized prior to PEP 685. If you want to perform
+ logic operations on extras, use :func:`is_extra_provided` instead.
+ """
+ raise NotImplementedError()
+
+ def is_extra_provided(self, extra: str) -> bool:
+ """Check whether an extra is provided by this distribution.
+
+ This is needed mostly for compatibility issues with pkg_resources not
+ following the extra normalization rules defined in PEP 685.
"""
raise NotImplementedError()
@@ -537,10 +549,11 @@ class BaseDistribution(Protocol):
"""Get extras from the egg-info directory."""
known_extras = {""}
for entry in self._iter_requires_txt_entries():
- if entry.extra in known_extras:
+ extra = canonicalize_name(entry.extra)
+ if extra in known_extras:
continue
- known_extras.add(entry.extra)
- yield entry.extra
+ known_extras.add(extra)
+ yield extra
def _iter_egg_info_dependencies(self) -> Iterable[str]:
"""Get distribution dependencies from the egg-info directory.
@@ -556,10 +569,11 @@ class BaseDistribution(Protocol):
all currently available PEP 517 backends, although not standardized.
"""
for entry in self._iter_requires_txt_entries():
- if entry.extra and entry.marker:
- marker = f'({entry.marker}) and extra == "{safe_extra(entry.extra)}"'
- elif entry.extra:
- marker = f'extra == "{safe_extra(entry.extra)}"'
+ extra = canonicalize_name(entry.extra)
+ if extra and entry.marker:
+ marker = f'({entry.marker}) and extra == "{extra}"'
+ elif extra:
+ marker = f'extra == "{extra}"'
elif entry.marker:
marker = entry.marker
else:
diff --git a/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__init__.py b/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__init__.py
index 5e7af9fe..a779138d 100644
--- a/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__init__.py
+++ b/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__init__.py
@@ -1,4 +1,6 @@
from ._dists import Distribution
from ._envs import Environment
-__all__ = ["Distribution", "Environment"]
+__all__ = ["NAME", "Distribution", "Environment"]
+
+NAME = "importlib"
diff --git a/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-311.pyc
index 5300f109..71edf911 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-311.pyc
index 384fa59c..888c021b 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-311.pyc
index de3da4d1..11c02fe6 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-311.pyc
index 3ea6bb99..0dd1c652 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_dists.py b/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_dists.py
index 65c043c8..26370fac 100644
--- a/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_dists.py
+++ b/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_dists.py
@@ -27,7 +27,6 @@ from pip._internal.metadata.base import (
Wheel,
)
from pip._internal.utils.misc import normalize_path
-from pip._internal.utils.packaging import safe_extra
from pip._internal.utils.temp_dir import TempDirectory
from pip._internal.utils.wheel import parse_wheel, read_wheel_metadata_file
@@ -208,12 +207,16 @@ class Distribution(BaseDistribution):
return cast(email.message.Message, self._dist.metadata)
def iter_provided_extras(self) -> Iterable[str]:
- return (
- safe_extra(extra) for extra in self.metadata.get_all("Provides-Extra", [])
+ return self.metadata.get_all("Provides-Extra", [])
+
+ def is_extra_provided(self, extra: str) -> bool:
+ return any(
+ canonicalize_name(provided_extra) == canonicalize_name(extra)
+ for provided_extra in self.metadata.get_all("Provides-Extra", [])
)
def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]:
- contexts: Sequence[Dict[str, str]] = [{"extra": safe_extra(e)} for e in extras]
+ contexts: Sequence[Dict[str, str]] = [{"extra": e} for e in extras]
for req_string in self.metadata.get_all("Requires-Dist", []):
req = Requirement(req_string)
if not req.marker:
diff --git a/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_envs.py b/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_envs.py
index 3850ddaf..048dc55d 100644
--- a/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_envs.py
+++ b/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_envs.py
@@ -151,7 +151,8 @@ def _emit_egg_deprecation(location: Optional[str]) -> None:
deprecated(
reason=f"Loading egg at {location} is deprecated.",
replacement="to use pip for package installation.",
- gone_in="23.3",
+ gone_in="24.3",
+ issue=12330,
)
diff --git a/lib/python3.11/site-packages/pip/_internal/metadata/pkg_resources.py b/lib/python3.11/site-packages/pip/_internal/metadata/pkg_resources.py
index f330ef12..bb11e5bd 100644
--- a/lib/python3.11/site-packages/pip/_internal/metadata/pkg_resources.py
+++ b/lib/python3.11/site-packages/pip/_internal/metadata/pkg_resources.py
@@ -24,8 +24,12 @@ from .base import (
Wheel,
)
+__all__ = ["NAME", "Distribution", "Environment"]
+
logger = logging.getLogger(__name__)
+NAME = "pkg_resources"
+
class EntryPoint(NamedTuple):
name: str
@@ -212,12 +216,16 @@ class Distribution(BaseDistribution):
def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]:
if extras: # pkg_resources raises on invalid extras, so we sanitize.
- extras = frozenset(extras).intersection(self._dist.extras)
+ extras = frozenset(pkg_resources.safe_extra(e) for e in extras)
+ extras = extras.intersection(self._dist.extras)
return self._dist.requires(extras)
def iter_provided_extras(self) -> Iterable[str]:
return self._dist.extras
+ def is_extra_provided(self, extra: str) -> bool:
+ return pkg_resources.safe_extra(extra) in self._dist.extras
+
class Environment(BaseEnvironment):
def __init__(self, ws: pkg_resources.WorkingSet) -> None:
diff --git a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/__init__.cpython-311.pyc
index 1e768f29..f8387cba 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/candidate.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/candidate.cpython-311.pyc
index 382ff9cd..ae647588 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/candidate.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/candidate.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-311.pyc
index 44eee036..fb462ce0 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/format_control.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/format_control.cpython-311.pyc
index fa711600..836d3869 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/format_control.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/format_control.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/index.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/index.cpython-311.pyc
index ad06a121..bf17825b 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/index.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/index.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-311.pyc
index ed53fa35..ceed7afb 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/link.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/link.cpython-311.pyc
index defa869f..04e99cca 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/link.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/link.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/scheme.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/scheme.cpython-311.pyc
index ec906dd5..bdf34920 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/scheme.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/scheme.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-311.pyc
index 4023952f..dd22956f 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-311.pyc
index 82e8fac9..87ee8c10 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/target_python.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/target_python.cpython-311.pyc
index 718561d9..77535573 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/target_python.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/target_python.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/wheel.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/wheel.cpython-311.pyc
index 192c260a..ab9b9d45 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/models/__pycache__/wheel.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/models/__pycache__/wheel.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/models/installation_report.py b/lib/python3.11/site-packages/pip/_internal/models/installation_report.py
index 7f001f35..b9c6330d 100644
--- a/lib/python3.11/site-packages/pip/_internal/models/installation_report.py
+++ b/lib/python3.11/site-packages/pip/_internal/models/installation_report.py
@@ -23,6 +23,9 @@ class InstallationReport:
# includes editable requirements), and false if the requirement was
# downloaded from a PEP 503 index or --find-links.
"is_direct": ireq.is_direct,
+ # is_yanked is true if the requirement was yanked from the index, but
+ # was still selected by pip to conform to PEP 592.
+ "is_yanked": ireq.link.is_yanked if ireq.link else False,
# requested is true if the requirement was specified by the user (aka
# top level requirement), and false if it was installed as a dependency of a
# requirement. https://peps.python.org/pep-0376/#requested
@@ -33,7 +36,7 @@ class InstallationReport:
}
if ireq.user_supplied and ireq.extras:
# For top level requirements, the list of requested extras, if any.
- res["requested_extras"] = list(sorted(ireq.extras))
+ res["requested_extras"] = sorted(ireq.extras)
return res
def to_dict(self) -> Dict[str, Any]:
diff --git a/lib/python3.11/site-packages/pip/_internal/models/target_python.py b/lib/python3.11/site-packages/pip/_internal/models/target_python.py
index 744bd7ef..67ea5da7 100644
--- a/lib/python3.11/site-packages/pip/_internal/models/target_python.py
+++ b/lib/python3.11/site-packages/pip/_internal/models/target_python.py
@@ -1,5 +1,5 @@
import sys
-from typing import List, Optional, Tuple
+from typing import List, Optional, Set, Tuple
from pip._vendor.packaging.tags import Tag
@@ -22,6 +22,7 @@ class TargetPython:
"py_version",
"py_version_info",
"_valid_tags",
+ "_valid_tags_set",
]
def __init__(
@@ -61,8 +62,9 @@ class TargetPython:
self.py_version = py_version
self.py_version_info = py_version_info
- # This is used to cache the return value of get_tags().
+ # This is used to cache the return value of get_(un)sorted_tags.
self._valid_tags: Optional[List[Tag]] = None
+ self._valid_tags_set: Optional[Set[Tag]] = None
def format_given(self) -> str:
"""
@@ -84,7 +86,7 @@ class TargetPython:
f"{key}={value!r}" for key, value in key_values if value is not None
)
- def get_tags(self) -> List[Tag]:
+ def get_sorted_tags(self) -> List[Tag]:
"""
Return the supported PEP 425 tags to check wheel candidates against.
@@ -108,3 +110,13 @@ class TargetPython:
self._valid_tags = tags
return self._valid_tags
+
+ def get_unsorted_tags(self) -> Set[Tag]:
+ """Exactly the same as get_sorted_tags, but returns a set.
+
+ This is important for performance.
+ """
+ if self._valid_tags_set is None:
+ self._valid_tags_set = set(self.get_sorted_tags())
+
+ return self._valid_tags_set
diff --git a/lib/python3.11/site-packages/pip/_internal/network/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/network/__pycache__/__init__.cpython-311.pyc
index 241bd0b6..72c95d11 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/network/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/network/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/network/__pycache__/auth.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/network/__pycache__/auth.cpython-311.pyc
index 3aac7bb9..d4d43fe9 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/network/__pycache__/auth.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/network/__pycache__/auth.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/network/__pycache__/cache.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/network/__pycache__/cache.cpython-311.pyc
index 6d866624..2dfd241b 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/network/__pycache__/cache.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/network/__pycache__/cache.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/network/__pycache__/download.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/network/__pycache__/download.cpython-311.pyc
index 2f9f9bfb..66fa1602 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/network/__pycache__/download.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/network/__pycache__/download.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-311.pyc
index 56ef0ed7..6fb7c77e 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/network/__pycache__/session.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/network/__pycache__/session.cpython-311.pyc
index a7d9bccf..da866506 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/network/__pycache__/session.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/network/__pycache__/session.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/network/__pycache__/utils.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/network/__pycache__/utils.cpython-311.pyc
index b2912f30..2af85334 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/network/__pycache__/utils.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/network/__pycache__/utils.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-311.pyc
index 8304cbd9..1322f10d 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/network/cache.py b/lib/python3.11/site-packages/pip/_internal/network/cache.py
index a81a2398..4d0fb545 100644
--- a/lib/python3.11/site-packages/pip/_internal/network/cache.py
+++ b/lib/python3.11/site-packages/pip/_internal/network/cache.py
@@ -3,10 +3,11 @@
import os
from contextlib import contextmanager
-from typing import Generator, Optional
+from datetime import datetime
+from typing import BinaryIO, Generator, Optional, Union
-from pip._vendor.cachecontrol.cache import BaseCache
-from pip._vendor.cachecontrol.caches import FileCache
+from pip._vendor.cachecontrol.cache import SeparateBodyBaseCache
+from pip._vendor.cachecontrol.caches import SeparateBodyFileCache
from pip._vendor.requests.models import Response
from pip._internal.utils.filesystem import adjacent_tmp_file, replace
@@ -28,10 +29,22 @@ def suppressed_cache_errors() -> Generator[None, None, None]:
pass
-class SafeFileCache(BaseCache):
+class SafeFileCache(SeparateBodyBaseCache):
"""
A file based cache which is safe to use even when the target directory may
not be accessible or writable.
+
+ There is a race condition when two processes try to write and/or read the
+ same entry at the same time, since each entry consists of two separate
+ files (https://github.com/psf/cachecontrol/issues/324). We therefore have
+ additional logic that makes sure that both files to be present before
+ returning an entry; this fixes the read side of the race condition.
+
+ For the write side, we assume that the server will only ever return the
+ same data for the same URL, which ought to be the case for files pip is
+ downloading. PyPI does not have a mechanism to swap out a wheel for
+ another wheel, for example. If this assumption is not true, the
+ CacheControl issue will need to be fixed.
"""
def __init__(self, directory: str) -> None:
@@ -43,27 +56,51 @@ class SafeFileCache(BaseCache):
# From cachecontrol.caches.file_cache.FileCache._fn, brought into our
# class for backwards-compatibility and to avoid using a non-public
# method.
- hashed = FileCache.encode(name)
+ hashed = SeparateBodyFileCache.encode(name)
parts = list(hashed[:5]) + [hashed]
return os.path.join(self.directory, *parts)
def get(self, key: str) -> Optional[bytes]:
- path = self._get_cache_path(key)
+ # The cache entry is only valid if both metadata and body exist.
+ metadata_path = self._get_cache_path(key)
+ body_path = metadata_path + ".body"
+ if not (os.path.exists(metadata_path) and os.path.exists(body_path)):
+ return None
with suppressed_cache_errors():
- with open(path, "rb") as f:
+ with open(metadata_path, "rb") as f:
return f.read()
- def set(self, key: str, value: bytes, expires: Optional[int] = None) -> None:
- path = self._get_cache_path(key)
+ def _write(self, path: str, data: bytes) -> None:
with suppressed_cache_errors():
ensure_dir(os.path.dirname(path))
with adjacent_tmp_file(path) as f:
- f.write(value)
+ f.write(data)
replace(f.name, path)
+ def set(
+ self, key: str, value: bytes, expires: Union[int, datetime, None] = None
+ ) -> None:
+ path = self._get_cache_path(key)
+ self._write(path, value)
+
def delete(self, key: str) -> None:
path = self._get_cache_path(key)
with suppressed_cache_errors():
os.remove(path)
+ with suppressed_cache_errors():
+ os.remove(path + ".body")
+
+ def get_body(self, key: str) -> Optional[BinaryIO]:
+ # The cache entry is only valid if both metadata and body exist.
+ metadata_path = self._get_cache_path(key)
+ body_path = metadata_path + ".body"
+ if not (os.path.exists(metadata_path) and os.path.exists(body_path)):
+ return None
+ with suppressed_cache_errors():
+ return open(body_path, "rb")
+
+ def set_body(self, key: str, body: bytes) -> None:
+ path = self._get_cache_path(key) + ".body"
+ self._write(path, body)
diff --git a/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-311.pyc
index 656237a3..92b32be9 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/check.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/check.cpython-311.pyc
index aaa10f9b..00fa2082 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/check.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/check.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-311.pyc
index 36c4add0..30298ff9 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-311.pyc
index 4550aa78..43df469d 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-311.pyc
index a960f61a..5c424132 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-311.pyc
index 181774b8..cce84e40 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-311.pyc
index d0c70ae0..2b542196 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-311.pyc
index 3a47e437..1504eb8f 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-311.pyc
index cfef0514..f2e0dd5b 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-311.pyc
index f30fdd86..14beb77c 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-311.pyc
index 892b1d67..589afe8e 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-311.pyc
index 0240eb59..792e6f20 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/operations/build/build_tracker.py b/lib/python3.11/site-packages/pip/_internal/operations/build/build_tracker.py
index 6621549b..37919322 100644
--- a/lib/python3.11/site-packages/pip/_internal/operations/build/build_tracker.py
+++ b/lib/python3.11/site-packages/pip/_internal/operations/build/build_tracker.py
@@ -51,10 +51,22 @@ def get_build_tracker() -> Generator["BuildTracker", None, None]:
yield tracker
+class TrackerId(str):
+ """Uniquely identifying string provided to the build tracker."""
+
+
class BuildTracker:
+ """Ensure that an sdist cannot request itself as a setup requirement.
+
+ When an sdist is prepared, it identifies its setup requirements in the
+ context of ``BuildTracker.track()``. If a requirement shows up recursively, this
+ raises an exception.
+
+ This stops fork bombs embedded in malicious packages."""
+
def __init__(self, root: str) -> None:
self._root = root
- self._entries: Set[InstallRequirement] = set()
+ self._entries: Dict[TrackerId, InstallRequirement] = {}
logger.debug("Created build tracker: %s", self._root)
def __enter__(self) -> "BuildTracker":
@@ -69,16 +81,15 @@ class BuildTracker:
) -> None:
self.cleanup()
- def _entry_path(self, link: Link) -> str:
- hashed = hashlib.sha224(link.url_without_fragment.encode()).hexdigest()
+ def _entry_path(self, key: TrackerId) -> str:
+ hashed = hashlib.sha224(key.encode()).hexdigest()
return os.path.join(self._root, hashed)
- def add(self, req: InstallRequirement) -> None:
+ def add(self, req: InstallRequirement, key: TrackerId) -> None:
"""Add an InstallRequirement to build tracking."""
- assert req.link
# Get the file to write information about this requirement.
- entry_path = self._entry_path(req.link)
+ entry_path = self._entry_path(key)
# Try reading from the file. If it exists and can be read from, a build
# is already in progress, so a LookupError is raised.
@@ -92,33 +103,37 @@ class BuildTracker:
raise LookupError(message)
# If we're here, req should really not be building already.
- assert req not in self._entries
+ assert key not in self._entries
# Start tracking this requirement.
with open(entry_path, "w", encoding="utf-8") as fp:
fp.write(str(req))
- self._entries.add(req)
+ self._entries[key] = req
logger.debug("Added %s to build tracker %r", req, self._root)
- def remove(self, req: InstallRequirement) -> None:
+ def remove(self, req: InstallRequirement, key: TrackerId) -> None:
"""Remove an InstallRequirement from build tracking."""
- assert req.link
- # Delete the created file and the corresponding entries.
- os.unlink(self._entry_path(req.link))
- self._entries.remove(req)
+ # Delete the created file and the corresponding entry.
+ os.unlink(self._entry_path(key))
+ del self._entries[key]
logger.debug("Removed %s from build tracker %r", req, self._root)
def cleanup(self) -> None:
- for req in set(self._entries):
- self.remove(req)
+ for key, req in list(self._entries.items()):
+ self.remove(req, key)
logger.debug("Removed build tracker: %r", self._root)
@contextlib.contextmanager
- def track(self, req: InstallRequirement) -> Generator[None, None, None]:
- self.add(req)
+ def track(self, req: InstallRequirement, key: str) -> Generator[None, None, None]:
+ """Ensure that `key` cannot install itself as a setup requirement.
+
+ :raises LookupError: If `key` was already provided in a parent invocation of
+ the context introduced by this method."""
+ tracker_id = TrackerId(key)
+ self.add(req, tracker_id)
yield
- self.remove(req)
+ self.remove(req, tracker_id)
diff --git a/lib/python3.11/site-packages/pip/_internal/operations/check.py b/lib/python3.11/site-packages/pip/_internal/operations/check.py
index 26104592..1b7fd7ab 100644
--- a/lib/python3.11/site-packages/pip/_internal/operations/check.py
+++ b/lib/python3.11/site-packages/pip/_internal/operations/check.py
@@ -168,7 +168,7 @@ def warn_legacy_versions_and_specifiers(package_set: PackageSet) -> None:
f"release a version with a conforming version number"
),
issue=12063,
- gone_in="23.3",
+ gone_in="24.0",
)
for dep in package_details.dependencies:
if any(isinstance(spec, LegacySpecifier) for spec in dep.specifier):
@@ -183,5 +183,5 @@ def warn_legacy_versions_and_specifiers(package_set: PackageSet) -> None:
f"release a version with a conforming dependency specifiers"
),
issue=12063,
- gone_in="23.3",
+ gone_in="24.0",
)
diff --git a/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-311.pyc
index fa843b32..918b46fc 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-311.pyc
index 7ece378f..c350a4f9 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-311.pyc
index 1da471a1..8c2ccd92 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/operations/install/wheel.py b/lib/python3.11/site-packages/pip/_internal/operations/install/wheel.py
index a8cd1330..58a77305 100644
--- a/lib/python3.11/site-packages/pip/_internal/operations/install/wheel.py
+++ b/lib/python3.11/site-packages/pip/_internal/operations/install/wheel.py
@@ -267,9 +267,9 @@ def get_csv_rows_for_installed(
path = _fs_to_record_path(f, lib_dir)
digest, length = rehash(f)
installed_rows.append((path, digest, length))
- for installed_record_path in installed.values():
- installed_rows.append((installed_record_path, "", ""))
- return installed_rows
+ return installed_rows + [
+ (installed_record_path, "", "") for installed_record_path in installed.values()
+ ]
def get_console_script_specs(console: Dict[str, str]) -> List[str]:
diff --git a/lib/python3.11/site-packages/pip/_internal/operations/prepare.py b/lib/python3.11/site-packages/pip/_internal/operations/prepare.py
index cb121bcb..488e7635 100644
--- a/lib/python3.11/site-packages/pip/_internal/operations/prepare.py
+++ b/lib/python3.11/site-packages/pip/_internal/operations/prepare.py
@@ -4,10 +4,10 @@
# The following comment should be removed at some point in the future.
# mypy: strict-optional=False
-import logging
import mimetypes
import os
import shutil
+from pathlib import Path
from typing import Dict, Iterable, List, Optional
from pip._vendor.packaging.utils import canonicalize_name
@@ -21,7 +21,6 @@ from pip._internal.exceptions import (
InstallationError,
MetadataInconsistent,
NetworkConnectionError,
- PreviousBuildDirError,
VcsHashUnsupported,
)
from pip._internal.index.package_finder import PackageFinder
@@ -37,6 +36,7 @@ from pip._internal.network.lazy_wheel import (
from pip._internal.network.session import PipSession
from pip._internal.operations.build.build_tracker import BuildTracker
from pip._internal.req.req_install import InstallRequirement
+from pip._internal.utils._log import getLogger
from pip._internal.utils.direct_url_helpers import (
direct_url_for_editable,
direct_url_from_link,
@@ -47,13 +47,13 @@ from pip._internal.utils.misc import (
display_path,
hash_file,
hide_url,
- is_installable_dir,
+ redact_auth_from_requirement,
)
from pip._internal.utils.temp_dir import TempDirectory
from pip._internal.utils.unpacking import unpack_file
from pip._internal.vcs import vcs
-logger = logging.getLogger(__name__)
+logger = getLogger(__name__)
def _get_prepared_distribution(
@@ -65,10 +65,12 @@ def _get_prepared_distribution(
) -> BaseDistribution:
"""Prepare a distribution for installation."""
abstract_dist = make_distribution_for_install_requirement(req)
- with build_tracker.track(req):
- abstract_dist.prepare_distribution_metadata(
- finder, build_isolation, check_build_deps
- )
+ tracker_id = abstract_dist.build_tracker_id
+ if tracker_id is not None:
+ with build_tracker.track(req, tracker_id):
+ abstract_dist.prepare_distribution_metadata(
+ finder, build_isolation, check_build_deps
+ )
return abstract_dist.get_metadata_distribution()
@@ -276,7 +278,7 @@ class RequirementPreparer:
information = str(display_path(req.link.file_path))
else:
message = "Collecting %s"
- information = str(req.req or req)
+ information = redact_auth_from_requirement(req.req) if req.req else str(req)
# If we used req.req, inject requirement source if available (this
# would already be included if we used req directly)
@@ -317,21 +319,7 @@ class RequirementPreparer:
autodelete=True,
parallel_builds=parallel_builds,
)
-
- # If a checkout exists, it's unwise to keep going. version
- # inconsistencies are logged later, but do not fail the
- # installation.
- # FIXME: this won't upgrade when there's an existing
- # package unpacked in `req.source_dir`
- # TODO: this check is now probably dead code
- if is_installable_dir(req.source_dir):
- raise PreviousBuildDirError(
- "pip can't proceed with requirements '{}' due to a"
- "pre-existing build directory ({}). This is likely "
- "due to a previous installation that failed . pip is "
- "being responsible and not assuming it can delete this. "
- "Please delete it and try again.".format(req, req.source_dir)
- )
+ req.ensure_pristine_source_checkout()
def _get_linked_req_hashes(self, req: InstallRequirement) -> Hashes:
# By the time this is called, the requirement's link should have
@@ -394,7 +382,7 @@ class RequirementPreparer:
if metadata_link is None:
return None
assert req.req is not None
- logger.info(
+ logger.verbose(
"Obtaining dependency information for %s from %s",
req.req,
metadata_link,
@@ -479,20 +467,19 @@ class RequirementPreparer:
for link, (filepath, _) in batch_download:
logger.debug("Downloading link %s to %s", link, filepath)
req = links_to_fully_download[link]
+ # Record the downloaded file path so wheel reqs can extract a Distribution
+ # in .get_dist().
req.local_file_path = filepath
- # TODO: This needs fixing for sdists
- # This is an emergency fix for #11847, which reports that
- # distributions get downloaded twice when metadata is loaded
- # from a PEP 658 standalone metadata file. Setting _downloaded
- # fixes this for wheels, but breaks the sdist case (tests
- # test_download_metadata). As PyPI is currently only serving
- # metadata for wheels, this is not an immediate issue.
- # Fixing the problem properly looks like it will require a
- # complete refactoring of the `prepare_linked_requirements_more`
- # logic, and I haven't a clue where to start on that, so for now
- # I have fixed the issue *just* for wheels.
- if req.is_wheel:
- self._downloaded[req.link.url] = filepath
+ # Record that the file is downloaded so we don't do it again in
+ # _prepare_linked_requirement().
+ self._downloaded[req.link.url] = filepath
+
+ # If this is an sdist, we need to unpack it after downloading, but the
+ # .source_dir won't be set up until we are in _prepare_linked_requirement().
+ # Add the downloaded archive to the install requirement to unpack after
+ # preparing the source dir.
+ if not req.is_wheel:
+ req.needs_unpacked_archive(Path(filepath))
# This step is necessary to ensure all lazy wheels are processed
# successfully by the 'download', 'wheel', and 'install' commands.
diff --git a/lib/python3.11/site-packages/pip/_internal/req/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/req/__pycache__/__init__.cpython-311.pyc
index 4ad62398..29c642fb 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/req/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/req/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/req/__pycache__/constructors.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/req/__pycache__/constructors.cpython-311.pyc
index 23c66791..2dc3e435 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/req/__pycache__/constructors.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/req/__pycache__/constructors.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_file.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_file.cpython-311.pyc
index 49433c17..2f2289b0 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_file.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_file.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_install.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_install.cpython-311.pyc
index 0ac4c48e..514a6eb4 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_install.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_install.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_set.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_set.cpython-311.pyc
index 9b606523..15341750 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_set.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_set.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-311.pyc
index 536fc217..435f4e9d 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/req/constructors.py b/lib/python3.11/site-packages/pip/_internal/req/constructors.py
index c5ca2d85..b52c9a45 100644
--- a/lib/python3.11/site-packages/pip/_internal/req/constructors.py
+++ b/lib/python3.11/site-packages/pip/_internal/req/constructors.py
@@ -8,10 +8,11 @@ These are meant to be used elsewhere within pip to create instances of
InstallRequirement.
"""
+import copy
import logging
import os
import re
-from typing import Dict, List, Optional, Set, Tuple, Union
+from typing import Collection, Dict, List, Optional, Set, Tuple, Union
from pip._vendor.packaging.markers import Marker
from pip._vendor.packaging.requirements import InvalidRequirement, Requirement
@@ -57,6 +58,31 @@ def convert_extras(extras: Optional[str]) -> Set[str]:
return get_requirement("placeholder" + extras.lower()).extras
+def _set_requirement_extras(req: Requirement, new_extras: Set[str]) -> Requirement:
+ """
+ Returns a new requirement based on the given one, with the supplied extras. If the
+ given requirement already has extras those are replaced (or dropped if no new extras
+ are given).
+ """
+ match: Optional[re.Match[str]] = re.fullmatch(
+ # see https://peps.python.org/pep-0508/#complete-grammar
+ r"([\w\t .-]+)(\[[^\]]*\])?(.*)",
+ str(req),
+ flags=re.ASCII,
+ )
+ # ireq.req is a valid requirement so the regex should always match
+ assert (
+ match is not None
+ ), f"regex match on requirement {req} failed, this should never happen"
+ pre: Optional[str] = match.group(1)
+ post: Optional[str] = match.group(3)
+ assert (
+ pre is not None and post is not None
+ ), f"regex group selection for requirement {req} failed, this should never happen"
+ extras: str = "[%s]" % ",".join(sorted(new_extras)) if new_extras else ""
+ return Requirement(f"{pre}{extras}{post}")
+
+
def parse_editable(editable_req: str) -> Tuple[Optional[str], str, Set[str]]:
"""Parses an editable requirement into:
- a requirement name
@@ -504,3 +530,47 @@ def install_req_from_link_and_ireq(
config_settings=ireq.config_settings,
user_supplied=ireq.user_supplied,
)
+
+
+def install_req_drop_extras(ireq: InstallRequirement) -> InstallRequirement:
+ """
+ Creates a new InstallationRequirement using the given template but without
+ any extras. Sets the original requirement as the new one's parent
+ (comes_from).
+ """
+ return InstallRequirement(
+ req=(
+ _set_requirement_extras(ireq.req, set()) if ireq.req is not None else None
+ ),
+ comes_from=ireq,
+ editable=ireq.editable,
+ link=ireq.link,
+ markers=ireq.markers,
+ use_pep517=ireq.use_pep517,
+ isolated=ireq.isolated,
+ global_options=ireq.global_options,
+ hash_options=ireq.hash_options,
+ constraint=ireq.constraint,
+ extras=[],
+ config_settings=ireq.config_settings,
+ user_supplied=ireq.user_supplied,
+ permit_editable_wheels=ireq.permit_editable_wheels,
+ )
+
+
+def install_req_extend_extras(
+ ireq: InstallRequirement,
+ extras: Collection[str],
+) -> InstallRequirement:
+ """
+ Returns a copy of an installation requirement with some additional extras.
+ Makes a shallow copy of the ireq object.
+ """
+ result = copy.copy(ireq)
+ result.extras = {*ireq.extras, *extras}
+ result.req = (
+ _set_requirement_extras(ireq.req, result.extras)
+ if ireq.req is not None
+ else None
+ )
+ return result
diff --git a/lib/python3.11/site-packages/pip/_internal/req/req_install.py b/lib/python3.11/site-packages/pip/_internal/req/req_install.py
index 1f479713..e556be2b 100644
--- a/lib/python3.11/site-packages/pip/_internal/req/req_install.py
+++ b/lib/python3.11/site-packages/pip/_internal/req/req_install.py
@@ -1,6 +1,3 @@
-# The following comment should be removed at some point in the future.
-# mypy: strict-optional=False
-
import functools
import logging
import os
@@ -9,6 +6,7 @@ import sys
import uuid
import zipfile
from optparse import Values
+from pathlib import Path
from typing import Any, Collection, Dict, Iterable, List, Optional, Sequence, Union
from pip._vendor.packaging.markers import Marker
@@ -20,7 +18,7 @@ from pip._vendor.packaging.version import parse as parse_version
from pip._vendor.pyproject_hooks import BuildBackendHookCaller
from pip._internal.build_env import BuildEnvironment, NoOpBuildEnvironment
-from pip._internal.exceptions import InstallationError
+from pip._internal.exceptions import InstallationError, PreviousBuildDirError
from pip._internal.locations import get_scheme
from pip._internal.metadata import (
BaseDistribution,
@@ -50,11 +48,14 @@ from pip._internal.utils.misc import (
backup_dir,
display_path,
hide_url,
+ is_installable_dir,
+ redact_auth_from_requirement,
redact_auth_from_url,
)
from pip._internal.utils.packaging import safe_extra
from pip._internal.utils.subprocess import runner_with_spinner_message
from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds
+from pip._internal.utils.unpacking import unpack_file
from pip._internal.utils.virtualenv import running_under_virtualenv
from pip._internal.vcs import vcs
@@ -128,7 +129,7 @@ class InstallRequirement:
if extras:
self.extras = extras
elif req:
- self.extras = {safe_extra(extra) for extra in req.extras}
+ self.extras = req.extras
else:
self.extras = set()
if markers is None and req:
@@ -183,9 +184,12 @@ class InstallRequirement:
# This requirement needs more preparation before it can be built
self.needs_more_preparation = False
+ # This requirement needs to be unpacked before it can be installed.
+ self._archive_source: Optional[Path] = None
+
def __str__(self) -> str:
if self.req:
- s = str(self.req)
+ s = redact_auth_from_requirement(self.req)
if self.link:
s += " from {}".format(redact_auth_from_url(self.link.url))
elif self.link:
@@ -244,6 +248,7 @@ class InstallRequirement:
@property
def specifier(self) -> SpecifierSet:
+ assert self.req is not None
return self.req.specifier
@property
@@ -257,7 +262,8 @@ class InstallRequirement:
For example, some-package==1.2 is pinned; some-package>1.2 is not.
"""
- specifiers = self.specifier
+ assert self.req is not None
+ specifiers = self.req.specifier
return len(specifiers) == 1 and next(iter(specifiers)).operator in {"==", "==="}
def match_markers(self, extras_requested: Optional[Iterable[str]] = None) -> bool:
@@ -267,7 +273,12 @@ class InstallRequirement:
extras_requested = ("",)
if self.markers is not None:
return any(
- self.markers.evaluate({"extra": extra}) for extra in extras_requested
+ self.markers.evaluate({"extra": extra})
+ # TODO: Remove these two variants when packaging is upgraded to
+ # support the marker comparison logic specified in PEP 685.
+ or self.markers.evaluate({"extra": safe_extra(extra)})
+ or self.markers.evaluate({"extra": canonicalize_name(extra)})
+ for extra in extras_requested
)
else:
return True
@@ -305,6 +316,7 @@ class InstallRequirement:
else:
link = None
if link and link.hash:
+ assert link.hash_name is not None
good_hashes.setdefault(link.hash_name, []).append(link.hash)
return Hashes(good_hashes)
@@ -314,6 +326,7 @@ class InstallRequirement:
return None
s = str(self.req)
if self.comes_from:
+ comes_from: Optional[str]
if isinstance(self.comes_from, str):
comes_from = self.comes_from
else:
@@ -345,7 +358,7 @@ class InstallRequirement:
# When parallel builds are enabled, add a UUID to the build directory
# name so multiple builds do not interfere with each other.
- dir_name: str = canonicalize_name(self.name)
+ dir_name: str = canonicalize_name(self.req.name)
if parallel_builds:
dir_name = f"{dir_name}_{uuid.uuid4().hex}"
@@ -388,6 +401,7 @@ class InstallRequirement:
)
def warn_on_mismatching_name(self) -> None:
+ assert self.req is not None
metadata_name = canonicalize_name(self.metadata["Name"])
if canonicalize_name(self.req.name) == metadata_name:
# Everything is fine.
@@ -457,6 +471,7 @@ class InstallRequirement:
# Things valid for sdists
@property
def unpacked_source_directory(self) -> str:
+ assert self.source_dir, f"No source dir for {self}"
return os.path.join(
self.source_dir, self.link and self.link.subdirectory_fragment or ""
)
@@ -500,7 +515,7 @@ class InstallRequirement:
"to use --use-pep517 or add a "
"pyproject.toml file to the project"
),
- gone_in="23.3",
+ gone_in="24.0",
)
self.use_pep517 = False
return
@@ -543,7 +558,7 @@ class InstallRequirement:
Under PEP 517 and PEP 660, call the backend hook to prepare the metadata.
Under legacy processing, call setup.py egg-info.
"""
- assert self.source_dir
+ assert self.source_dir, f"No source dir for {self}"
details = self.name or f"from {self.link}"
if self.use_pep517:
@@ -592,8 +607,10 @@ class InstallRequirement:
if self.metadata_directory:
return get_directory_distribution(self.metadata_directory)
elif self.local_file_path and self.is_wheel:
+ assert self.req is not None
return get_wheel_distribution(
- FilesystemWheel(self.local_file_path), canonicalize_name(self.name)
+ FilesystemWheel(self.local_file_path),
+ canonicalize_name(self.req.name),
)
raise AssertionError(
f"InstallRequirement {self} has no metadata directory and no wheel: "
@@ -601,9 +618,9 @@ class InstallRequirement:
)
def assert_source_matches_version(self) -> None:
- assert self.source_dir
+ assert self.source_dir, f"No source dir for {self}"
version = self.metadata["version"]
- if self.req.specifier and version not in self.req.specifier:
+ if self.req and self.req.specifier and version not in self.req.specifier:
logger.warning(
"Requested %s, but installing version %s",
self,
@@ -640,6 +657,27 @@ class InstallRequirement:
parallel_builds=parallel_builds,
)
+ def needs_unpacked_archive(self, archive_source: Path) -> None:
+ assert self._archive_source is None
+ self._archive_source = archive_source
+
+ def ensure_pristine_source_checkout(self) -> None:
+ """Ensure the source directory has not yet been built in."""
+ assert self.source_dir is not None
+ if self._archive_source is not None:
+ unpack_file(str(self._archive_source), self.source_dir)
+ elif is_installable_dir(self.source_dir):
+ # If a checkout exists, it's unwise to keep going.
+ # version inconsistencies are logged later, but do not fail
+ # the installation.
+ raise PreviousBuildDirError(
+ f"pip can't proceed with requirements '{self}' due to a "
+ f"pre-existing build directory ({self.source_dir}). This is likely "
+ "due to a previous installation that failed . pip is "
+ "being responsible and not assuming it can delete this. "
+ "Please delete it and try again."
+ )
+
# For editable installations
def update_editable(self) -> None:
if not self.link:
@@ -696,9 +734,10 @@ class InstallRequirement:
name = name.replace(os.path.sep, "/")
return name
+ assert self.req is not None
path = os.path.join(parentdir, path)
name = _clean_zip_name(path, rootdir)
- return self.name + "/" + name
+ return self.req.name + "/" + name
def archive(self, build_dir: Optional[str]) -> None:
"""Saves archive to provided build_dir.
@@ -777,8 +816,9 @@ class InstallRequirement:
use_user_site: bool = False,
pycompile: bool = True,
) -> None:
+ assert self.req is not None
scheme = get_scheme(
- self.name,
+ self.req.name,
user=use_user_site,
home=home,
root=root,
@@ -792,7 +832,7 @@ class InstallRequirement:
prefix=prefix,
home=home,
use_user_site=use_user_site,
- name=self.name,
+ name=self.req.name,
setup_py_path=self.setup_py_path,
isolated=self.isolated,
build_env=self.build_env,
@@ -805,7 +845,7 @@ class InstallRequirement:
assert self.local_file_path
install_wheel(
- self.name,
+ self.req.name,
self.local_file_path,
scheme=scheme,
req_description=str(self.req),
@@ -865,7 +905,7 @@ def check_legacy_setup_py_options(
reason="--build-option and --global-option are deprecated.",
issue=11859,
replacement="to use --config-settings",
- gone_in="23.3",
+ gone_in="24.0",
)
logger.warning(
"Implying --no-binary=:all: due to the presence of "
diff --git a/lib/python3.11/site-packages/pip/_internal/req/req_set.py b/lib/python3.11/site-packages/pip/_internal/req/req_set.py
index cff67601..1bf73d59 100644
--- a/lib/python3.11/site-packages/pip/_internal/req/req_set.py
+++ b/lib/python3.11/site-packages/pip/_internal/req/req_set.py
@@ -99,7 +99,7 @@ class RequirementSet:
"or contact the package author to fix the version number"
),
issue=12063,
- gone_in="23.3",
+ gone_in="24.0",
)
for dep in req.get_dist().iter_dependencies():
if any(isinstance(spec, LegacySpecifier) for spec in dep.specifier):
@@ -115,5 +115,5 @@ class RequirementSet:
"or contact the package author to fix the version number"
),
issue=12063,
- gone_in="23.3",
+ gone_in="24.0",
)
diff --git a/lib/python3.11/site-packages/pip/_internal/req/req_uninstall.py b/lib/python3.11/site-packages/pip/_internal/req/req_uninstall.py
index ad5178e7..861aa4f2 100644
--- a/lib/python3.11/site-packages/pip/_internal/req/req_uninstall.py
+++ b/lib/python3.11/site-packages/pip/_internal/req/req_uninstall.py
@@ -274,7 +274,7 @@ class StashedUninstallPathSet:
def commit(self) -> None:
"""Commits the uninstall by removing stashed files."""
- for _, save_dir in self._save_dirs.items():
+ for save_dir in self._save_dirs.values():
save_dir.cleanup()
self._moves = []
self._save_dirs = {}
diff --git a/lib/python3.11/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-311.pyc
index 2f55ebd5..c928cd9d 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/resolution/__pycache__/base.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/resolution/__pycache__/base.cpython-311.pyc
index c5a0532e..ed1d55ba 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/resolution/__pycache__/base.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/resolution/__pycache__/base.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-311.pyc
index 729e4bd1..a60d7038 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-311.pyc
index e3983033..24c8a45a 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-311.pyc
index 3552f281..4dc39ce3 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-311.pyc
index b3fb1837..04065568 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-311.pyc
index ca1ef8c3..05009445 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-311.pyc
index 1b252430..df47265c 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-311.pyc
index 812e5467..09057b2d 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-311.pyc
index 568c06d0..81d2a960 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-311.pyc
index 92e31f28..f43b773e 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-311.pyc
index 5a5dd68a..2c9ef818 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-311.pyc
index 400d2c69..86720f02 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/base.py b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/base.py
index b206692a..9c0ef5ca 100644
--- a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/base.py
+++ b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/base.py
@@ -1,7 +1,7 @@
from typing import FrozenSet, Iterable, Optional, Tuple, Union
from pip._vendor.packaging.specifiers import SpecifierSet
-from pip._vendor.packaging.utils import NormalizedName, canonicalize_name
+from pip._vendor.packaging.utils import NormalizedName
from pip._vendor.packaging.version import LegacyVersion, Version
from pip._internal.models.link import Link, links_equivalent
@@ -12,11 +12,11 @@ CandidateLookup = Tuple[Optional["Candidate"], Optional[InstallRequirement]]
CandidateVersion = Union[LegacyVersion, Version]
-def format_name(project: str, extras: FrozenSet[str]) -> str:
+def format_name(project: NormalizedName, extras: FrozenSet[NormalizedName]) -> str:
if not extras:
return project
- canonical_extras = sorted(canonicalize_name(e) for e in extras)
- return "{}[{}]".format(project, ",".join(canonical_extras))
+ extras_expr = ",".join(sorted(extras))
+ return f"{project}[{extras_expr}]"
class Constraint:
diff --git a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/candidates.py b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/candidates.py
index de04e1d7..97541655 100644
--- a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/candidates.py
+++ b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/candidates.py
@@ -240,7 +240,7 @@ class _InstallRequirementBackedCandidate(Candidate):
def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]:
requires = self.dist.iter_dependencies() if with_requires else ()
for r in requires:
- yield self._factory.make_requirement_from_spec(str(r), self._ireq)
+ yield from self._factory.make_requirements_from_spec(str(r), self._ireq)
yield self._factory.make_requires_python_requirement(self.dist.requires_python)
def get_install_requirement(self) -> Optional[InstallRequirement]:
@@ -392,7 +392,7 @@ class AlreadyInstalledCandidate(Candidate):
if not with_requires:
return
for r in self.dist.iter_dependencies():
- yield self._factory.make_requirement_from_spec(str(r), self._ireq)
+ yield from self._factory.make_requirements_from_spec(str(r), self._ireq)
def get_install_requirement(self) -> Optional[InstallRequirement]:
return None
@@ -427,9 +427,28 @@ class ExtrasCandidate(Candidate):
self,
base: BaseCandidate,
extras: FrozenSet[str],
+ *,
+ comes_from: Optional[InstallRequirement] = None,
) -> None:
+ """
+ :param comes_from: the InstallRequirement that led to this candidate if it
+ differs from the base's InstallRequirement. This will often be the
+ case in the sense that this candidate's requirement has the extras
+ while the base's does not. Unlike the InstallRequirement backed
+ candidates, this requirement is used solely for reporting purposes,
+ it does not do any leg work.
+ """
self.base = base
- self.extras = extras
+ self.extras = frozenset(canonicalize_name(e) for e in extras)
+ # If any extras are requested in their non-normalized forms, keep track
+ # of their raw values. This is needed when we look up dependencies
+ # since PEP 685 has not been implemented for marker-matching, and using
+ # the non-normalized extra for lookup ensures the user can select a
+ # non-normalized extra in a package with its non-normalized form.
+ # TODO: Remove this attribute when packaging is upgraded to support the
+ # marker comparison logic specified in PEP 685.
+ self._unnormalized_extras = extras.difference(self.extras)
+ self._comes_from = comes_from if comes_from is not None else self.base._ireq
def __str__(self) -> str:
name, rest = str(self.base).split(" ", 1)
@@ -480,6 +499,50 @@ class ExtrasCandidate(Candidate):
def source_link(self) -> Optional[Link]:
return self.base.source_link
+ def _warn_invalid_extras(
+ self,
+ requested: FrozenSet[str],
+ valid: FrozenSet[str],
+ ) -> None:
+ """Emit warnings for invalid extras being requested.
+
+ This emits a warning for each requested extra that is not in the
+ candidate's ``Provides-Extra`` list.
+ """
+ invalid_extras_to_warn = frozenset(
+ extra
+ for extra in requested
+ if extra not in valid
+ # If an extra is requested in an unnormalized form, skip warning
+ # about the normalized form being missing.
+ and extra in self.extras
+ )
+ if not invalid_extras_to_warn:
+ return
+ for extra in sorted(invalid_extras_to_warn):
+ logger.warning(
+ "%s %s does not provide the extra '%s'",
+ self.base.name,
+ self.version,
+ extra,
+ )
+
+ def _calculate_valid_requested_extras(self) -> FrozenSet[str]:
+ """Get a list of valid extras requested by this candidate.
+
+ The user (or upstream dependant) may have specified extras that the
+ candidate doesn't support. Any unsupported extras are dropped, and each
+ cause a warning to be logged here.
+ """
+ requested_extras = self.extras.union(self._unnormalized_extras)
+ valid_extras = frozenset(
+ extra
+ for extra in requested_extras
+ if self.base.dist.is_extra_provided(extra)
+ )
+ self._warn_invalid_extras(requested_extras, valid_extras)
+ return valid_extras
+
def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]:
factory = self.base._factory
@@ -489,24 +552,13 @@ class ExtrasCandidate(Candidate):
if not with_requires:
return
- # The user may have specified extras that the candidate doesn't
- # support. We ignore any unsupported extras here.
- valid_extras = self.extras.intersection(self.base.dist.iter_provided_extras())
- invalid_extras = self.extras.difference(self.base.dist.iter_provided_extras())
- for extra in sorted(invalid_extras):
- logger.warning(
- "%s %s does not provide the extra '%s'",
- self.base.name,
- self.version,
- extra,
- )
-
+ valid_extras = self._calculate_valid_requested_extras()
for r in self.base.dist.iter_dependencies(valid_extras):
- requirement = factory.make_requirement_from_spec(
- str(r), self.base._ireq, valid_extras
+ yield from factory.make_requirements_from_spec(
+ str(r),
+ self._comes_from,
+ valid_extras,
)
- if requirement:
- yield requirement
def get_install_requirement(self) -> Optional[InstallRequirement]:
# We don't return anything here, because we always
diff --git a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/factory.py b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/factory.py
index 0331297b..38c19944 100644
--- a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/factory.py
+++ b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/factory.py
@@ -62,6 +62,7 @@ from .requirements import (
ExplicitRequirement,
RequiresPythonRequirement,
SpecifierRequirement,
+ SpecifierWithoutExtrasRequirement,
UnsatisfiableRequirement,
)
@@ -112,7 +113,7 @@ class Factory:
self._editable_candidate_cache: Cache[EditableCandidate] = {}
self._installed_candidate_cache: Dict[str, AlreadyInstalledCandidate] = {}
self._extras_candidate_cache: Dict[
- Tuple[int, FrozenSet[str]], ExtrasCandidate
+ Tuple[int, FrozenSet[NormalizedName]], ExtrasCandidate
] = {}
if not ignore_installed:
@@ -132,19 +133,23 @@ class Factory:
if not link.is_wheel:
return
wheel = Wheel(link.filename)
- if wheel.supported(self._finder.target_python.get_tags()):
+ if wheel.supported(self._finder.target_python.get_unsorted_tags()):
return
msg = f"{link.filename} is not a supported wheel on this platform."
raise UnsupportedWheel(msg)
def _make_extras_candidate(
- self, base: BaseCandidate, extras: FrozenSet[str]
+ self,
+ base: BaseCandidate,
+ extras: FrozenSet[str],
+ *,
+ comes_from: Optional[InstallRequirement] = None,
) -> ExtrasCandidate:
- cache_key = (id(base), extras)
+ cache_key = (id(base), frozenset(canonicalize_name(e) for e in extras))
try:
candidate = self._extras_candidate_cache[cache_key]
except KeyError:
- candidate = ExtrasCandidate(base, extras)
+ candidate = ExtrasCandidate(base, extras, comes_from=comes_from)
self._extras_candidate_cache[cache_key] = candidate
return candidate
@@ -161,7 +166,7 @@ class Factory:
self._installed_candidate_cache[dist.canonical_name] = base
if not extras:
return base
- return self._make_extras_candidate(base, extras)
+ return self._make_extras_candidate(base, extras, comes_from=template)
def _make_candidate_from_link(
self,
@@ -223,7 +228,7 @@ class Factory:
if not extras:
return base
- return self._make_extras_candidate(base, extras)
+ return self._make_extras_candidate(base, extras, comes_from=template)
def _iter_found_candidates(
self,
@@ -385,16 +390,21 @@ class Factory:
if ireq is not None:
ireqs.append(ireq)
- # If the current identifier contains extras, add explicit candidates
- # from entries from extra-less identifier.
+ # If the current identifier contains extras, add requires and explicit
+ # candidates from entries from extra-less identifier.
with contextlib.suppress(InvalidRequirement):
parsed_requirement = get_requirement(identifier)
- explicit_candidates.update(
- self._iter_explicit_candidates_from_base(
- requirements.get(parsed_requirement.name, ()),
- frozenset(parsed_requirement.extras),
- ),
- )
+ if parsed_requirement.name != identifier:
+ explicit_candidates.update(
+ self._iter_explicit_candidates_from_base(
+ requirements.get(parsed_requirement.name, ()),
+ frozenset(parsed_requirement.extras),
+ ),
+ )
+ for req in requirements.get(parsed_requirement.name, []):
+ _, ireq = req.get_candidate_lookup()
+ if ireq is not None:
+ ireqs.append(ireq)
# Add explicit candidates from constraints. We only do this if there are
# known ireqs, which represent requirements not already explicit. If
@@ -437,37 +447,49 @@ class Factory:
and all(req.is_satisfied_by(c) for req in requirements[identifier])
)
- def _make_requirement_from_install_req(
+ def _make_requirements_from_install_req(
self, ireq: InstallRequirement, requested_extras: Iterable[str]
- ) -> Optional[Requirement]:
+ ) -> Iterator[Requirement]:
+ """
+ Returns requirement objects associated with the given InstallRequirement. In
+ most cases this will be a single object but the following special cases exist:
+ - the InstallRequirement has markers that do not apply -> result is empty
+ - the InstallRequirement has both a constraint and extras -> result is split
+ in two requirement objects: one with the constraint and one with the
+ extra. This allows centralized constraint handling for the base,
+ resulting in fewer candidate rejections.
+ """
if not ireq.match_markers(requested_extras):
logger.info(
"Ignoring %s: markers '%s' don't match your environment",
ireq.name,
ireq.markers,
)
- return None
- if not ireq.link:
- return SpecifierRequirement(ireq)
- self._fail_if_link_is_unsupported_wheel(ireq.link)
- cand = self._make_candidate_from_link(
- ireq.link,
- extras=frozenset(ireq.extras),
- template=ireq,
- name=canonicalize_name(ireq.name) if ireq.name else None,
- version=None,
- )
- if cand is None:
- # There's no way we can satisfy a URL requirement if the underlying
- # candidate fails to build. An unnamed URL must be user-supplied, so
- # we fail eagerly. If the URL is named, an unsatisfiable requirement
- # can make the resolver do the right thing, either backtrack (and
- # maybe find some other requirement that's buildable) or raise a
- # ResolutionImpossible eventually.
- if not ireq.name:
- raise self._build_failures[ireq.link]
- return UnsatisfiableRequirement(canonicalize_name(ireq.name))
- return self.make_requirement_from_candidate(cand)
+ elif not ireq.link:
+ if ireq.extras and ireq.req is not None and ireq.req.specifier:
+ yield SpecifierWithoutExtrasRequirement(ireq)
+ yield SpecifierRequirement(ireq)
+ else:
+ self._fail_if_link_is_unsupported_wheel(ireq.link)
+ cand = self._make_candidate_from_link(
+ ireq.link,
+ extras=frozenset(ireq.extras),
+ template=ireq,
+ name=canonicalize_name(ireq.name) if ireq.name else None,
+ version=None,
+ )
+ if cand is None:
+ # There's no way we can satisfy a URL requirement if the underlying
+ # candidate fails to build. An unnamed URL must be user-supplied, so
+ # we fail eagerly. If the URL is named, an unsatisfiable requirement
+ # can make the resolver do the right thing, either backtrack (and
+ # maybe find some other requirement that's buildable) or raise a
+ # ResolutionImpossible eventually.
+ if not ireq.name:
+ raise self._build_failures[ireq.link]
+ yield UnsatisfiableRequirement(canonicalize_name(ireq.name))
+ else:
+ yield self.make_requirement_from_candidate(cand)
def collect_root_requirements(
self, root_ireqs: List[InstallRequirement]
@@ -488,15 +510,27 @@ class Factory:
else:
collected.constraints[name] = Constraint.from_ireq(ireq)
else:
- req = self._make_requirement_from_install_req(
- ireq,
- requested_extras=(),
+ reqs = list(
+ self._make_requirements_from_install_req(
+ ireq,
+ requested_extras=(),
+ )
)
- if req is None:
+ if not reqs:
continue
- if ireq.user_supplied and req.name not in collected.user_requested:
- collected.user_requested[req.name] = i
- collected.requirements.append(req)
+ template = reqs[0]
+ if ireq.user_supplied and template.name not in collected.user_requested:
+ collected.user_requested[template.name] = i
+ collected.requirements.extend(reqs)
+ # Put requirements with extras at the end of the root requires. This does not
+ # affect resolvelib's picking preference but it does affect its initial criteria
+ # population: by putting extras at the end we enable the candidate finder to
+ # present resolvelib with a smaller set of candidates to resolvelib, already
+ # taking into account any non-transient constraints on the associated base. This
+ # means resolvelib will have fewer candidates to visit and reject.
+ # Python's list sort is stable, meaning relative order is kept for objects with
+ # the same key.
+ collected.requirements.sort(key=lambda r: r.name != r.project_name)
return collected
def make_requirement_from_candidate(
@@ -504,14 +538,23 @@ class Factory:
) -> ExplicitRequirement:
return ExplicitRequirement(candidate)
- def make_requirement_from_spec(
+ def make_requirements_from_spec(
self,
specifier: str,
comes_from: Optional[InstallRequirement],
requested_extras: Iterable[str] = (),
- ) -> Optional[Requirement]:
+ ) -> Iterator[Requirement]:
+ """
+ Returns requirement objects associated with the given specifier. In most cases
+ this will be a single object but the following special cases exist:
+ - the specifier has markers that do not apply -> result is empty
+ - the specifier has both a constraint and extras -> result is split
+ in two requirement objects: one with the constraint and one with the
+ extra. This allows centralized constraint handling for the base,
+ resulting in fewer candidate rejections.
+ """
ireq = self._make_install_req_from_spec(specifier, comes_from)
- return self._make_requirement_from_install_req(ireq, requested_extras)
+ return self._make_requirements_from_install_req(ireq, requested_extras)
def make_requires_python_requirement(
self,
@@ -603,8 +646,26 @@ class Factory:
cands = self._finder.find_all_candidates(req.project_name)
skipped_by_requires_python = self._finder.requires_python_skipped_reasons()
- versions = [str(v) for v in sorted({c.version for c in cands})]
+ versions_set: Set[CandidateVersion] = set()
+ yanked_versions_set: Set[CandidateVersion] = set()
+ for c in cands:
+ is_yanked = c.link.is_yanked if c.link else False
+ if is_yanked:
+ yanked_versions_set.add(c.version)
+ else:
+ versions_set.add(c.version)
+
+ versions = [str(v) for v in sorted(versions_set)]
+ yanked_versions = [str(v) for v in sorted(yanked_versions_set)]
+
+ if yanked_versions:
+ # Saying "version X is yanked" isn't entirely accurate.
+ # https://github.com/pypa/pip/issues/11745#issuecomment-1402805842
+ logger.critical(
+ "Ignored the following yanked versions: %s",
+ ", ".join(yanked_versions) or "none",
+ )
if skipped_by_requires_python:
logger.critical(
"Ignored the following versions that require a different python "
diff --git a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/requirements.py b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/requirements.py
index 06addc0d..7d1e7bfd 100644
--- a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/requirements.py
+++ b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/requirements.py
@@ -1,6 +1,7 @@
from pip._vendor.packaging.specifiers import SpecifierSet
from pip._vendor.packaging.utils import NormalizedName, canonicalize_name
+from pip._internal.req.constructors import install_req_drop_extras
from pip._internal.req.req_install import InstallRequirement
from .base import Candidate, CandidateLookup, Requirement, format_name
@@ -43,7 +44,7 @@ class SpecifierRequirement(Requirement):
def __init__(self, ireq: InstallRequirement) -> None:
assert ireq.link is None, "This is a link, not a specifier"
self._ireq = ireq
- self._extras = frozenset(ireq.extras)
+ self._extras = frozenset(canonicalize_name(e) for e in self._ireq.extras)
def __str__(self) -> str:
return str(self._ireq.req)
@@ -92,6 +93,18 @@ class SpecifierRequirement(Requirement):
return spec.contains(candidate.version, prereleases=True)
+class SpecifierWithoutExtrasRequirement(SpecifierRequirement):
+ """
+ Requirement backed by an install requirement on a base package.
+ Trims extras from its install requirement if there are any.
+ """
+
+ def __init__(self, ireq: InstallRequirement) -> None:
+ assert ireq.link is None, "This is a link, not a specifier"
+ self._ireq = install_req_drop_extras(ireq)
+ self._extras = frozenset(canonicalize_name(e) for e in self._ireq.extras)
+
+
class RequiresPythonRequirement(Requirement):
"""A requirement representing Requires-Python metadata."""
diff --git a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/resolver.py b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/resolver.py
index d5b23860..c12beef0 100644
--- a/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/resolver.py
+++ b/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/resolver.py
@@ -1,3 +1,4 @@
+import contextlib
import functools
import logging
import os
@@ -11,6 +12,7 @@ from pip._vendor.resolvelib.structs import DirectedGraph
from pip._internal.cache import WheelCache
from pip._internal.index.package_finder import PackageFinder
from pip._internal.operations.prepare import RequirementPreparer
+from pip._internal.req.constructors import install_req_extend_extras
from pip._internal.req.req_install import InstallRequirement
from pip._internal.req.req_set import RequirementSet
from pip._internal.resolution.base import BaseResolver, InstallRequirementProvider
@@ -19,6 +21,7 @@ from pip._internal.resolution.resolvelib.reporter import (
PipDebuggingReporter,
PipReporter,
)
+from pip._internal.utils.packaging import get_requirement
from .base import Candidate, Requirement
from .factory import Factory
@@ -101,9 +104,24 @@ class Resolver(BaseResolver):
raise error from e
req_set = RequirementSet(check_supported_wheels=check_supported_wheels)
- for candidate in result.mapping.values():
+ # process candidates with extras last to ensure their base equivalent is
+ # already in the req_set if appropriate.
+ # Python's sort is stable so using a binary key function keeps relative order
+ # within both subsets.
+ for candidate in sorted(
+ result.mapping.values(), key=lambda c: c.name != c.project_name
+ ):
ireq = candidate.get_install_requirement()
if ireq is None:
+ if candidate.name != candidate.project_name:
+ # extend existing req's extras
+ with contextlib.suppress(KeyError):
+ req = req_set.get_requirement(candidate.project_name)
+ req_set.add_named_requirement(
+ install_req_extend_extras(
+ req, get_requirement(candidate.name).extras
+ )
+ )
continue
# Check if there is already an installation under the same name,
diff --git a/lib/python3.11/site-packages/pip/_internal/self_outdated_check.py b/lib/python3.11/site-packages/pip/_internal/self_outdated_check.py
index 41cc42c5..0f64ae0e 100644
--- a/lib/python3.11/site-packages/pip/_internal/self_outdated_check.py
+++ b/lib/python3.11/site-packages/pip/_internal/self_outdated_check.py
@@ -28,8 +28,7 @@ from pip._internal.utils.entrypoints import (
from pip._internal.utils.filesystem import adjacent_tmp_file, check_path_owner, replace
from pip._internal.utils.misc import ensure_dir
-_DATE_FMT = "%Y-%m-%dT%H:%M:%SZ"
-
+_WEEK = datetime.timedelta(days=7)
logger = logging.getLogger(__name__)
@@ -40,6 +39,15 @@ def _get_statefile_name(key: str) -> str:
return name
+def _convert_date(isodate: str) -> datetime.datetime:
+ """Convert an ISO format string to a date.
+
+ Handles the format 2020-01-22T14:24:01Z (trailing Z)
+ which is not supported by older versions of fromisoformat.
+ """
+ return datetime.datetime.fromisoformat(isodate.replace("Z", "+00:00"))
+
+
class SelfCheckState:
def __init__(self, cache_dir: str) -> None:
self._state: Dict[str, Any] = {}
@@ -73,12 +81,10 @@ class SelfCheckState:
if "pypi_version" not in self._state:
return None
- seven_days_in_seconds = 7 * 24 * 60 * 60
-
# Determine if we need to refresh the state
- last_check = datetime.datetime.strptime(self._state["last_check"], _DATE_FMT)
- seconds_since_last_check = (current_time - last_check).total_seconds()
- if seconds_since_last_check > seven_days_in_seconds:
+ last_check = _convert_date(self._state["last_check"])
+ time_since_last_check = current_time - last_check
+ if time_since_last_check > _WEEK:
return None
return self._state["pypi_version"]
@@ -100,7 +106,7 @@ class SelfCheckState:
# Include the key so it's easy to tell which pip wrote the
# file.
"key": self.key,
- "last_check": current_time.strftime(_DATE_FMT),
+ "last_check": current_time.isoformat(),
"pypi_version": pypi_version,
}
@@ -229,14 +235,14 @@ def pip_self_version_check(session: PipSession, options: optparse.Values) -> Non
try:
upgrade_prompt = _self_version_check_logic(
state=SelfCheckState(cache_dir=options.cache_dir),
- current_time=datetime.datetime.utcnow(),
+ current_time=datetime.datetime.now(datetime.timezone.utc),
local_version=installed_dist.version,
get_remote_version=functools.partial(
_get_current_remote_pip_version, session, options
),
)
if upgrade_prompt is not None:
- logger.warning("[present-rich] %s", upgrade_prompt)
+ logger.warning("%s", upgrade_prompt, extra={"rich": True})
except Exception:
logger.warning("There was an error checking the latest version of pip.")
logger.debug("See below for error", exc_info=True)
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-311.pyc
index 4c66fd4b..8012683f 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-311.pyc
index 86678bc2..54ff2eba 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/_log.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/_log.cpython-311.pyc
index c81b8ccf..d4576182 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/_log.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/_log.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-311.pyc
index e4cfb7c7..8a63a727 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/compat.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/compat.cpython-311.pyc
index ae65a005..10d382c8 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/compat.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/compat.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-311.pyc
index 772e1b1a..d0d82fed 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-311.pyc
index b4ef14de..b9749830 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-311.pyc
index 116cf409..e5145ae5 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-311.pyc
index 1e280ece..f89885cc 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-311.pyc
index 4f361e83..c7b5f837 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-311.pyc
index 0513f798..aa7678b4 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-311.pyc
index c26e24b3..74a855cb 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-311.pyc
index ec8c91c3..be9196b8 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-311.pyc
index 52207582..d0d7deb5 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-311.pyc
index b1a37107..4a222fce 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-311.pyc
index 7cfae89c..cba88272 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/inject_securetransport.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/inject_securetransport.cpython-311.pyc
deleted file mode 100644
index c13ce153..00000000
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/inject_securetransport.cpython-311.pyc and /dev/null differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/logging.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/logging.cpython-311.pyc
index 3256d65c..5924588e 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/logging.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/logging.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/misc.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/misc.cpython-311.pyc
index 46a21aef..a7a16866 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/misc.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/misc.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/models.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/models.cpython-311.pyc
index bfe5c8fa..7d176ffd 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/models.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/models.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-311.pyc
index 2e022005..bb631a7b 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-311.pyc
index 83fe7d77..500b5915 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-311.pyc
index 25d167f6..4de8a7bc 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-311.pyc
index 1b881716..7b47ecc2 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-311.pyc
index cb7694db..1f299772 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/urls.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/urls.cpython-311.pyc
index 271dd05b..38a63ab1 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/urls.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/urls.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-311.pyc
index 25b7955d..e59f765b 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-311.pyc
index 365d6aaf..b04d2cc7 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/inject_securetransport.py b/lib/python3.11/site-packages/pip/_internal/utils/inject_securetransport.py
deleted file mode 100644
index 276aa79b..00000000
--- a/lib/python3.11/site-packages/pip/_internal/utils/inject_securetransport.py
+++ /dev/null
@@ -1,35 +0,0 @@
-"""A helper module that injects SecureTransport, on import.
-
-The import should be done as early as possible, to ensure all requests and
-sessions (or whatever) are created after injecting SecureTransport.
-
-Note that we only do the injection on macOS, when the linked OpenSSL is too
-old to handle TLSv1.2.
-"""
-
-import sys
-
-
-def inject_securetransport() -> None:
- # Only relevant on macOS
- if sys.platform != "darwin":
- return
-
- try:
- import ssl
- except ImportError:
- return
-
- # Checks for OpenSSL 1.0.1
- if ssl.OPENSSL_VERSION_NUMBER >= 0x1000100F:
- return
-
- try:
- from pip._vendor.urllib3.contrib import securetransport
- except (ImportError, OSError):
- return
-
- securetransport.inject_into_urllib3()
-
-
-inject_securetransport()
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/logging.py b/lib/python3.11/site-packages/pip/_internal/utils/logging.py
index c10e1f4c..95982dfb 100644
--- a/lib/python3.11/site-packages/pip/_internal/utils/logging.py
+++ b/lib/python3.11/site-packages/pip/_internal/utils/logging.py
@@ -155,8 +155,8 @@ class RichPipStreamHandler(RichHandler):
# If we are given a diagnostic error to present, present it with indentation.
assert isinstance(record.args, tuple)
- if record.msg == "[present-rich] %s" and len(record.args) == 1:
- rich_renderable = record.args[0]
+ if getattr(record, "rich", False):
+ (rich_renderable,) = record.args
assert isinstance(
rich_renderable, (ConsoleRenderable, RichCast, str)
), f"{rich_renderable} is not rich-console-renderable"
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/misc.py b/lib/python3.11/site-packages/pip/_internal/utils/misc.py
index bd191c4e..78060e86 100644
--- a/lib/python3.11/site-packages/pip/_internal/utils/misc.py
+++ b/lib/python3.11/site-packages/pip/_internal/utils/misc.py
@@ -11,9 +11,11 @@ import stat
import sys
import sysconfig
import urllib.parse
+from functools import partial
from io import StringIO
from itertools import filterfalse, tee, zip_longest
-from types import TracebackType
+from pathlib import Path
+from types import FunctionType, TracebackType
from typing import (
Any,
BinaryIO,
@@ -33,6 +35,7 @@ from typing import (
cast,
)
+from pip._vendor.packaging.requirements import Requirement
from pip._vendor.pyproject_hooks import BuildBackendHookCaller
from pip._vendor.tenacity import retry, stop_after_delay, wait_fixed
@@ -66,6 +69,8 @@ T = TypeVar("T")
ExcInfo = Tuple[Type[BaseException], BaseException, TracebackType]
VersionInfo = Tuple[int, int, int]
NetlocTuple = Tuple[str, Tuple[Optional[str], Optional[str]]]
+OnExc = Callable[[FunctionType, Path, BaseException], Any]
+OnErr = Callable[[FunctionType, Path, ExcInfo], Any]
def get_pip_version() -> str:
@@ -123,33 +128,75 @@ def get_prog() -> str:
# Retry every half second for up to 3 seconds
# Tenacity raises RetryError by default, explicitly raise the original exception
@retry(reraise=True, stop=stop_after_delay(3), wait=wait_fixed(0.5))
-def rmtree(dir: str, ignore_errors: bool = False) -> None:
+def rmtree(
+ dir: str,
+ ignore_errors: bool = False,
+ onexc: Optional[OnExc] = None,
+) -> None:
+ if ignore_errors:
+ onexc = _onerror_ignore
+ if onexc is None:
+ onexc = _onerror_reraise
+ handler: OnErr = partial(
+ # `[func, path, Union[ExcInfo, BaseException]] -> Any` is equivalent to
+ # `Union[([func, path, ExcInfo] -> Any), ([func, path, BaseException] -> Any)]`.
+ cast(Union[OnExc, OnErr], rmtree_errorhandler),
+ onexc=onexc,
+ )
if sys.version_info >= (3, 12):
- shutil.rmtree(dir, ignore_errors=ignore_errors, onexc=rmtree_errorhandler)
+ # See https://docs.python.org/3.12/whatsnew/3.12.html#shutil.
+ shutil.rmtree(dir, onexc=handler)
else:
- shutil.rmtree(dir, ignore_errors=ignore_errors, onerror=rmtree_errorhandler)
+ shutil.rmtree(dir, onerror=handler)
+
+
+def _onerror_ignore(*_args: Any) -> None:
+ pass
+
+
+def _onerror_reraise(*_args: Any) -> None:
+ raise
def rmtree_errorhandler(
- func: Callable[..., Any], path: str, exc_info: Union[ExcInfo, BaseException]
+ func: FunctionType,
+ path: Path,
+ exc_info: Union[ExcInfo, BaseException],
+ *,
+ onexc: OnExc = _onerror_reraise,
) -> None:
- """On Windows, the files in .svn are read-only, so when rmtree() tries to
- remove them, an exception is thrown. We catch that here, remove the
- read-only attribute, and hopefully continue without problems."""
+ """
+ `rmtree` error handler to 'force' a file remove (i.e. like `rm -f`).
+
+ * If a file is readonly then it's write flag is set and operation is
+ retried.
+
+ * `onerror` is the original callback from `rmtree(... onerror=onerror)`
+ that is chained at the end if the "rm -f" still fails.
+ """
try:
- has_attr_readonly = not (os.stat(path).st_mode & stat.S_IWRITE)
+ st_mode = os.stat(path).st_mode
except OSError:
# it's equivalent to os.path.exists
return
- if has_attr_readonly:
+ if not st_mode & stat.S_IWRITE:
# convert to read/write
- os.chmod(path, stat.S_IWRITE)
- # use the original function to repeat the operation
- func(path)
- return
- else:
- raise
+ try:
+ os.chmod(path, st_mode | stat.S_IWRITE)
+ except OSError:
+ pass
+ else:
+ # use the original function to repeat the operation
+ try:
+ func(path)
+ return
+ except OSError:
+ pass
+
+ if not isinstance(exc_info, BaseException):
+ _, exc_info, _ = exc_info
+ onexc(func, path, exc_info)
def display_path(path: str) -> str:
@@ -532,6 +579,13 @@ def redact_auth_from_url(url: str) -> str:
return _transform_url(url, _redact_netloc)[0]
+def redact_auth_from_requirement(req: Requirement) -> str:
+ """Replace the password in a given requirement url with ****."""
+ if not req.url:
+ return str(req)
+ return str(req).replace(req.url, redact_auth_from_url(req.url))
+
+
class HiddenText:
def __init__(self, secret: str, redacted: str) -> None:
self.secret = secret
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/subprocess.py b/lib/python3.11/site-packages/pip/_internal/utils/subprocess.py
index 1e8ff50e..79580b05 100644
--- a/lib/python3.11/site-packages/pip/_internal/utils/subprocess.py
+++ b/lib/python3.11/site-packages/pip/_internal/utils/subprocess.py
@@ -209,7 +209,7 @@ def call_subprocess(
output_lines=all_output if not showing_subprocess else None,
)
if log_failed_cmd:
- subprocess_logger.error("[present-rich] %s", error)
+ subprocess_logger.error("%s", error, extra={"rich": True})
subprocess_logger.verbose(
"[bold magenta]full command[/]: [blue]%s[/]",
escape(format_command_args(cmd)),
diff --git a/lib/python3.11/site-packages/pip/_internal/utils/temp_dir.py b/lib/python3.11/site-packages/pip/_internal/utils/temp_dir.py
index 8ee8a1cb..4eec5f37 100644
--- a/lib/python3.11/site-packages/pip/_internal/utils/temp_dir.py
+++ b/lib/python3.11/site-packages/pip/_internal/utils/temp_dir.py
@@ -3,8 +3,19 @@ import itertools
import logging
import os.path
import tempfile
+import traceback
from contextlib import ExitStack, contextmanager
-from typing import Any, Dict, Generator, Optional, TypeVar, Union
+from pathlib import Path
+from typing import (
+ Any,
+ Callable,
+ Dict,
+ Generator,
+ List,
+ Optional,
+ TypeVar,
+ Union,
+)
from pip._internal.utils.misc import enum, rmtree
@@ -106,6 +117,7 @@ class TempDirectory:
delete: Union[bool, None, _Default] = _default,
kind: str = "temp",
globally_managed: bool = False,
+ ignore_cleanup_errors: bool = True,
):
super().__init__()
@@ -128,6 +140,7 @@ class TempDirectory:
self._deleted = False
self.delete = delete
self.kind = kind
+ self.ignore_cleanup_errors = ignore_cleanup_errors
if globally_managed:
assert _tempdir_manager is not None
@@ -170,7 +183,44 @@ class TempDirectory:
self._deleted = True
if not os.path.exists(self._path):
return
- rmtree(self._path)
+
+ errors: List[BaseException] = []
+
+ def onerror(
+ func: Callable[..., Any],
+ path: Path,
+ exc_val: BaseException,
+ ) -> None:
+ """Log a warning for a `rmtree` error and continue"""
+ formatted_exc = "\n".join(
+ traceback.format_exception_only(type(exc_val), exc_val)
+ )
+ formatted_exc = formatted_exc.rstrip() # remove trailing new line
+ if func in (os.unlink, os.remove, os.rmdir):
+ logger.debug(
+ "Failed to remove a temporary file '%s' due to %s.\n",
+ path,
+ formatted_exc,
+ )
+ else:
+ logger.debug("%s failed with %s.", func.__qualname__, formatted_exc)
+ errors.append(exc_val)
+
+ if self.ignore_cleanup_errors:
+ try:
+ # first try with tenacity; retrying to handle ephemeral errors
+ rmtree(self._path, ignore_errors=False)
+ except OSError:
+ # last pass ignore/log all errors
+ rmtree(self._path, onexc=onerror)
+ if errors:
+ logger.warning(
+ "Failed to remove contents in a temporary directory '%s'.\n"
+ "You can safely remove it manually.",
+ self._path,
+ )
+ else:
+ rmtree(self._path)
class AdjacentTempDirectory(TempDirectory):
diff --git a/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-311.pyc
index 2db17a03..151d676f 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-311.pyc
index c31f65ef..7aeed62f 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/git.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/git.cpython-311.pyc
index 7c67bb46..b1124400 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/git.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/git.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-311.pyc
index 4e0cfb47..c8696d3b 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-311.pyc
index 0b865cfe..c15add20 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-311.pyc b/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-311.pyc
index 2e78f29d..3303e5e0 100644
Binary files a/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_internal/vcs/git.py b/lib/python3.11/site-packages/pip/_internal/vcs/git.py
index 8d1d4993..8c242cf8 100644
--- a/lib/python3.11/site-packages/pip/_internal/vcs/git.py
+++ b/lib/python3.11/site-packages/pip/_internal/vcs/git.py
@@ -101,7 +101,7 @@ class Git(VersionControl):
if not match:
logger.warning("Can't parse git version: %s", version)
return ()
- return tuple(int(c) for c in match.groups())
+ return (int(match.group(1)), int(match.group(2)))
@classmethod
def get_current_branch(cls, location: str) -> Optional[str]:
diff --git a/lib/python3.11/site-packages/pip/_internal/vcs/mercurial.py b/lib/python3.11/site-packages/pip/_internal/vcs/mercurial.py
index 4595960b..e440c122 100644
--- a/lib/python3.11/site-packages/pip/_internal/vcs/mercurial.py
+++ b/lib/python3.11/site-packages/pip/_internal/vcs/mercurial.py
@@ -31,7 +31,7 @@ class Mercurial(VersionControl):
@staticmethod
def get_base_rev_args(rev: str) -> List[str]:
- return ["-r", rev]
+ return [f"-r={rev}"]
def fetch_new(
self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int
diff --git a/lib/python3.11/site-packages/pip/_vendor/__init__.py b/lib/python3.11/site-packages/pip/_vendor/__init__.py
index b22f7abb..c1884baf 100644
--- a/lib/python3.11/site-packages/pip/_vendor/__init__.py
+++ b/lib/python3.11/site-packages/pip/_vendor/__init__.py
@@ -117,4 +117,5 @@ if DEBUNDLED:
vendored("rich.traceback")
vendored("tenacity")
vendored("tomli")
+ vendored("truststore")
vendored("urllib3")
diff --git a/lib/python3.11/site-packages/pip/_vendor/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/__pycache__/__init__.cpython-311.pyc
index 2bfe1469..345e982f 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/__pycache__/six.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/__pycache__/six.cpython-311.pyc
index b9b157ac..1cab7872 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/__pycache__/six.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/__pycache__/six.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-311.pyc
index 7e1febd1..6a89e0d7 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__init__.py b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__init__.py
index f631ae6d..4d20bc9b 100644
--- a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__init__.py
+++ b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__init__.py
@@ -8,11 +8,21 @@ Make it easy to import from cachecontrol without long namespaces.
"""
__author__ = "Eric Larson"
__email__ = "eric@ionrock.org"
-__version__ = "0.12.11"
+__version__ = "0.13.1"
-from .wrapper import CacheControl
-from .adapter import CacheControlAdapter
-from .controller import CacheController
+from pip._vendor.cachecontrol.adapter import CacheControlAdapter
+from pip._vendor.cachecontrol.controller import CacheController
+from pip._vendor.cachecontrol.wrapper import CacheControl
+
+__all__ = [
+ "__author__",
+ "__email__",
+ "__version__",
+ "CacheControlAdapter",
+ "CacheController",
+ "CacheControl",
+]
import logging
+
logging.getLogger(__name__).addHandler(logging.NullHandler())
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-311.pyc
index a06e2f88..708e81a2 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-311.pyc
index 10974b3b..a57d058d 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-311.pyc
index 12d81bf6..8f1383d0 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-311.pyc
index 0249c37f..4caa899c 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-311.pyc
deleted file mode 100644
index d9a397ca..00000000
Binary files a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-311.pyc and /dev/null differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-311.pyc
index 50031001..74adddd6 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-311.pyc
index 1f8b7bf7..3050bbbf 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-311.pyc
index d50cdb18..8cb71e3e 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-311.pyc
index 8a2ef1d3..ff2c7d74 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-311.pyc
index d7d95fac..0e01609c 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/_cmd.py b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/_cmd.py
index 4266b5ee..2c84208a 100644
--- a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/_cmd.py
+++ b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/_cmd.py
@@ -1,8 +1,11 @@
# SPDX-FileCopyrightText: 2015 Eric Larson
#
# SPDX-License-Identifier: Apache-2.0
+from __future__ import annotations
import logging
+from argparse import ArgumentParser
+from typing import TYPE_CHECKING
from pip._vendor import requests
@@ -10,16 +13,19 @@ from pip._vendor.cachecontrol.adapter import CacheControlAdapter
from pip._vendor.cachecontrol.cache import DictCache
from pip._vendor.cachecontrol.controller import logger
-from argparse import ArgumentParser
+if TYPE_CHECKING:
+ from argparse import Namespace
+
+ from pip._vendor.cachecontrol.controller import CacheController
-def setup_logging():
+def setup_logging() -> None:
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
logger.addHandler(handler)
-def get_session():
+def get_session() -> requests.Session:
adapter = CacheControlAdapter(
DictCache(), cache_etags=True, serializer=None, heuristic=None
)
@@ -27,17 +33,17 @@ def get_session():
sess.mount("http://", adapter)
sess.mount("https://", adapter)
- sess.cache_controller = adapter.controller
+ sess.cache_controller = adapter.controller # type: ignore[attr-defined]
return sess
-def get_args():
+def get_args() -> Namespace:
parser = ArgumentParser()
parser.add_argument("url", help="The URL to try and cache")
return parser.parse_args()
-def main(args=None):
+def main() -> None:
args = get_args()
sess = get_session()
@@ -48,10 +54,13 @@ def main(args=None):
setup_logging()
# try setting the cache
- sess.cache_controller.cache_response(resp.request, resp.raw)
+ cache_controller: CacheController = (
+ sess.cache_controller # type: ignore[attr-defined]
+ )
+ cache_controller.cache_response(resp.request, resp.raw)
# Now try to get it
- if sess.cache_controller.cached_request(resp.request):
+ if cache_controller.cached_request(resp.request):
print("Cached!")
else:
print("Not cached :(")
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/adapter.py b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/adapter.py
index 94c75e1a..3e83e308 100644
--- a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/adapter.py
+++ b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/adapter.py
@@ -1,16 +1,26 @@
# SPDX-FileCopyrightText: 2015 Eric Larson
#
# SPDX-License-Identifier: Apache-2.0
+from __future__ import annotations
-import types
import functools
+import types
import zlib
+from typing import TYPE_CHECKING, Any, Collection, Mapping
from pip._vendor.requests.adapters import HTTPAdapter
-from .controller import CacheController, PERMANENT_REDIRECT_STATUSES
-from .cache import DictCache
-from .filewrapper import CallbackFileWrapper
+from pip._vendor.cachecontrol.cache import DictCache
+from pip._vendor.cachecontrol.controller import PERMANENT_REDIRECT_STATUSES, CacheController
+from pip._vendor.cachecontrol.filewrapper import CallbackFileWrapper
+
+if TYPE_CHECKING:
+ from pip._vendor.requests import PreparedRequest, Response
+ from pip._vendor.urllib3 import HTTPResponse
+
+ from pip._vendor.cachecontrol.cache import BaseCache
+ from pip._vendor.cachecontrol.heuristics import BaseHeuristic
+ from pip._vendor.cachecontrol.serialize import Serializer
class CacheControlAdapter(HTTPAdapter):
@@ -18,16 +28,16 @@ class CacheControlAdapter(HTTPAdapter):
def __init__(
self,
- cache=None,
- cache_etags=True,
- controller_class=None,
- serializer=None,
- heuristic=None,
- cacheable_methods=None,
- *args,
- **kw
- ):
- super(CacheControlAdapter, self).__init__(*args, **kw)
+ cache: BaseCache | None = None,
+ cache_etags: bool = True,
+ controller_class: type[CacheController] | None = None,
+ serializer: Serializer | None = None,
+ heuristic: BaseHeuristic | None = None,
+ cacheable_methods: Collection[str] | None = None,
+ *args: Any,
+ **kw: Any,
+ ) -> None:
+ super().__init__(*args, **kw)
self.cache = DictCache() if cache is None else cache
self.heuristic = heuristic
self.cacheable_methods = cacheable_methods or ("GET",)
@@ -37,7 +47,16 @@ class CacheControlAdapter(HTTPAdapter):
self.cache, cache_etags=cache_etags, serializer=serializer
)
- def send(self, request, cacheable_methods=None, **kw):
+ def send(
+ self,
+ request: PreparedRequest,
+ stream: bool = False,
+ timeout: None | float | tuple[float, float] | tuple[float, None] = None,
+ verify: bool | str = True,
+ cert: (None | bytes | str | tuple[bytes | str, bytes | str]) = None,
+ proxies: Mapping[str, str] | None = None,
+ cacheable_methods: Collection[str] | None = None,
+ ) -> Response:
"""
Send a request. Use the request information to see if it
exists in the cache and cache the response if we need to and can.
@@ -54,13 +73,17 @@ class CacheControlAdapter(HTTPAdapter):
# check for etags and add headers if appropriate
request.headers.update(self.controller.conditional_headers(request))
- resp = super(CacheControlAdapter, self).send(request, **kw)
+ resp = super().send(request, stream, timeout, verify, cert, proxies)
return resp
def build_response(
- self, request, response, from_cache=False, cacheable_methods=None
- ):
+ self,
+ request: PreparedRequest,
+ response: HTTPResponse,
+ from_cache: bool = False,
+ cacheable_methods: Collection[str] | None = None,
+ ) -> Response:
"""
Build a response by making a request or using the cache.
@@ -102,36 +125,37 @@ class CacheControlAdapter(HTTPAdapter):
else:
# Wrap the response file with a wrapper that will cache the
# response when the stream has been consumed.
- response._fp = CallbackFileWrapper(
- response._fp,
+ response._fp = CallbackFileWrapper( # type: ignore[attr-defined]
+ response._fp, # type: ignore[attr-defined]
functools.partial(
self.controller.cache_response, request, response
),
)
if response.chunked:
- super_update_chunk_length = response._update_chunk_length
+ super_update_chunk_length = response._update_chunk_length # type: ignore[attr-defined]
- def _update_chunk_length(self):
+ def _update_chunk_length(self: HTTPResponse) -> None:
super_update_chunk_length()
if self.chunk_left == 0:
- self._fp._close()
+ self._fp._close() # type: ignore[attr-defined]
- response._update_chunk_length = types.MethodType(
+ response._update_chunk_length = types.MethodType( # type: ignore[attr-defined]
_update_chunk_length, response
)
- resp = super(CacheControlAdapter, self).build_response(request, response)
+ resp: Response = super().build_response(request, response) # type: ignore[no-untyped-call]
# See if we should invalidate the cache.
if request.method in self.invalidating_methods and resp.ok:
+ assert request.url is not None
cache_url = self.controller.cache_url(request.url)
self.cache.delete(cache_url)
# Give the request a from_cache attr to let people use it
- resp.from_cache = from_cache
+ resp.from_cache = from_cache # type: ignore[attr-defined]
return resp
- def close(self):
+ def close(self) -> None:
self.cache.close()
- super(CacheControlAdapter, self).close()
+ super().close() # type: ignore[no-untyped-call]
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/cache.py b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/cache.py
index 2a965f59..3293b005 100644
--- a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/cache.py
+++ b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/cache.py
@@ -6,38 +6,46 @@
The cache object API for implementing caches. The default is a thread
safe in-memory dictionary.
"""
+from __future__ import annotations
+
from threading import Lock
+from typing import IO, TYPE_CHECKING, MutableMapping
+
+if TYPE_CHECKING:
+ from datetime import datetime
-class BaseCache(object):
-
- def get(self, key):
+class BaseCache:
+ def get(self, key: str) -> bytes | None:
raise NotImplementedError()
- def set(self, key, value, expires=None):
+ def set(
+ self, key: str, value: bytes, expires: int | datetime | None = None
+ ) -> None:
raise NotImplementedError()
- def delete(self, key):
+ def delete(self, key: str) -> None:
raise NotImplementedError()
- def close(self):
+ def close(self) -> None:
pass
class DictCache(BaseCache):
-
- def __init__(self, init_dict=None):
+ def __init__(self, init_dict: MutableMapping[str, bytes] | None = None) -> None:
self.lock = Lock()
self.data = init_dict or {}
- def get(self, key):
+ def get(self, key: str) -> bytes | None:
return self.data.get(key, None)
- def set(self, key, value, expires=None):
+ def set(
+ self, key: str, value: bytes, expires: int | datetime | None = None
+ ) -> None:
with self.lock:
self.data.update({key: value})
- def delete(self, key):
+ def delete(self, key: str) -> None:
with self.lock:
if key in self.data:
self.data.pop(key)
@@ -55,10 +63,11 @@ class SeparateBodyBaseCache(BaseCache):
Similarly, the body should be loaded separately via ``get_body()``.
"""
- def set_body(self, key, body):
+
+ def set_body(self, key: str, body: bytes) -> None:
raise NotImplementedError()
- def get_body(self, key):
+ def get_body(self, key: str) -> IO[bytes] | None:
"""
Return the body as file-like object.
"""
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__init__.py b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__init__.py
index 37827291..24ff469f 100644
--- a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__init__.py
+++ b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__init__.py
@@ -2,8 +2,7 @@
#
# SPDX-License-Identifier: Apache-2.0
-from .file_cache import FileCache, SeparateBodyFileCache
-from .redis_cache import RedisCache
-
+from pip._vendor.cachecontrol.caches.file_cache import FileCache, SeparateBodyFileCache
+from pip._vendor.cachecontrol.caches.redis_cache import RedisCache
__all__ = ["FileCache", "SeparateBodyFileCache", "RedisCache"]
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-311.pyc
index c0f163bb..e2379dd3 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-311.pyc
index f04d6d77..0de7c8fb 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-311.pyc
index 4c50ae7d..efbb7b30 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py
index f1ddb2eb..1fd28013 100644
--- a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py
+++ b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py
@@ -1,22 +1,23 @@
# SPDX-FileCopyrightText: 2015 Eric Larson
#
# SPDX-License-Identifier: Apache-2.0
+from __future__ import annotations
import hashlib
import os
from textwrap import dedent
+from typing import IO, TYPE_CHECKING
-from ..cache import BaseCache, SeparateBodyBaseCache
-from ..controller import CacheController
+from pip._vendor.cachecontrol.cache import BaseCache, SeparateBodyBaseCache
+from pip._vendor.cachecontrol.controller import CacheController
-try:
- FileNotFoundError
-except NameError:
- # py2.X
- FileNotFoundError = (IOError, OSError)
+if TYPE_CHECKING:
+ from datetime import datetime
+
+ from filelock import BaseFileLock
-def _secure_open_write(filename, fmode):
+def _secure_open_write(filename: str, fmode: int) -> IO[bytes]:
# We only want to write to this file, so open it in write only mode
flags = os.O_WRONLY
@@ -39,7 +40,7 @@ def _secure_open_write(filename, fmode):
# there
try:
os.remove(filename)
- except (IOError, OSError):
+ except OSError:
# The file must not exist already, so we can just skip ahead to opening
pass
@@ -62,37 +63,27 @@ class _FileCacheMixin:
def __init__(
self,
- directory,
- forever=False,
- filemode=0o0600,
- dirmode=0o0700,
- use_dir_lock=None,
- lock_class=None,
- ):
-
- if use_dir_lock is not None and lock_class is not None:
- raise ValueError("Cannot use use_dir_lock and lock_class together")
-
+ directory: str,
+ forever: bool = False,
+ filemode: int = 0o0600,
+ dirmode: int = 0o0700,
+ lock_class: type[BaseFileLock] | None = None,
+ ) -> None:
try:
- from lockfile import LockFile
- from lockfile.mkdirlockfile import MkdirLockFile
+ if lock_class is None:
+ from filelock import FileLock
+
+ lock_class = FileLock
except ImportError:
notice = dedent(
"""
NOTE: In order to use the FileCache you must have
- lockfile installed. You can install it via pip:
- pip install lockfile
+ filelock installed. You can install it via pip:
+ pip install filelock
"""
)
raise ImportError(notice)
- else:
- if use_dir_lock:
- lock_class = MkdirLockFile
-
- elif lock_class is None:
- lock_class = LockFile
-
self.directory = directory
self.forever = forever
self.filemode = filemode
@@ -100,17 +91,17 @@ class _FileCacheMixin:
self.lock_class = lock_class
@staticmethod
- def encode(x):
+ def encode(x: str) -> str:
return hashlib.sha224(x.encode()).hexdigest()
- def _fn(self, name):
+ def _fn(self, name: str) -> str:
# NOTE: This method should not change as some may depend on it.
# See: https://github.com/ionrock/cachecontrol/issues/63
hashed = self.encode(name)
parts = list(hashed[:5]) + [hashed]
return os.path.join(self.directory, *parts)
- def get(self, key):
+ def get(self, key: str) -> bytes | None:
name = self._fn(key)
try:
with open(name, "rb") as fh:
@@ -119,26 +110,28 @@ class _FileCacheMixin:
except FileNotFoundError:
return None
- def set(self, key, value, expires=None):
+ def set(
+ self, key: str, value: bytes, expires: int | datetime | None = None
+ ) -> None:
name = self._fn(key)
self._write(name, value)
- def _write(self, path, data: bytes):
+ def _write(self, path: str, data: bytes) -> None:
"""
Safely write the data to the given path.
"""
# Make sure the directory exists
try:
os.makedirs(os.path.dirname(path), self.dirmode)
- except (IOError, OSError):
+ except OSError:
pass
- with self.lock_class(path) as lock:
+ with self.lock_class(path + ".lock"):
# Write our actual file
- with _secure_open_write(lock.path, self.filemode) as fh:
+ with _secure_open_write(path, self.filemode) as fh:
fh.write(data)
- def _delete(self, key, suffix):
+ def _delete(self, key: str, suffix: str) -> None:
name = self._fn(key) + suffix
if not self.forever:
try:
@@ -153,7 +146,7 @@ class FileCache(_FileCacheMixin, BaseCache):
downloads.
"""
- def delete(self, key):
+ def delete(self, key: str) -> None:
self._delete(key, "")
@@ -163,23 +156,23 @@ class SeparateBodyFileCache(_FileCacheMixin, SeparateBodyBaseCache):
peak memory usage.
"""
- def get_body(self, key):
+ def get_body(self, key: str) -> IO[bytes] | None:
name = self._fn(key) + ".body"
try:
return open(name, "rb")
except FileNotFoundError:
return None
- def set_body(self, key, body):
+ def set_body(self, key: str, body: bytes) -> None:
name = self._fn(key) + ".body"
self._write(name, body)
- def delete(self, key):
+ def delete(self, key: str) -> None:
self._delete(key, "")
self._delete(key, ".body")
-def url_to_file_path(url, filecache):
+def url_to_file_path(url: str, filecache: FileCache) -> str:
"""Return the file cache path based on the URL.
This does not ensure the file exists!
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py
index 2cba4b07..f4f68c47 100644
--- a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py
+++ b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py
@@ -1,39 +1,48 @@
# SPDX-FileCopyrightText: 2015 Eric Larson
#
# SPDX-License-Identifier: Apache-2.0
+from __future__ import annotations
-from __future__ import division
-from datetime import datetime
+from datetime import datetime, timezone
+from typing import TYPE_CHECKING
+
from pip._vendor.cachecontrol.cache import BaseCache
+if TYPE_CHECKING:
+ from redis import Redis
+
class RedisCache(BaseCache):
-
- def __init__(self, conn):
+ def __init__(self, conn: Redis[bytes]) -> None:
self.conn = conn
- def get(self, key):
+ def get(self, key: str) -> bytes | None:
return self.conn.get(key)
- def set(self, key, value, expires=None):
+ def set(
+ self, key: str, value: bytes, expires: int | datetime | None = None
+ ) -> None:
if not expires:
self.conn.set(key, value)
elif isinstance(expires, datetime):
- expires = expires - datetime.utcnow()
- self.conn.setex(key, int(expires.total_seconds()), value)
+ now_utc = datetime.now(timezone.utc)
+ if expires.tzinfo is None:
+ now_utc = now_utc.replace(tzinfo=None)
+ delta = expires - now_utc
+ self.conn.setex(key, int(delta.total_seconds()), value)
else:
self.conn.setex(key, expires, value)
- def delete(self, key):
+ def delete(self, key: str) -> None:
self.conn.delete(key)
- def clear(self):
+ def clear(self) -> None:
"""Helper for clearing all the keys in a database. Use with
caution!"""
for key in self.conn.keys():
self.conn.delete(key)
- def close(self):
+ def close(self) -> None:
"""Redis uses connection pooling, no need to close the connection."""
pass
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/compat.py b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/compat.py
deleted file mode 100644
index ccec9379..00000000
--- a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/compat.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# SPDX-FileCopyrightText: 2015 Eric Larson
-#
-# SPDX-License-Identifier: Apache-2.0
-
-try:
- from urllib.parse import urljoin
-except ImportError:
- from urlparse import urljoin
-
-
-try:
- import cPickle as pickle
-except ImportError:
- import pickle
-
-# Handle the case where the requests module has been patched to not have
-# urllib3 bundled as part of its source.
-try:
- from pip._vendor.requests.packages.urllib3.response import HTTPResponse
-except ImportError:
- from pip._vendor.urllib3.response import HTTPResponse
-
-try:
- from pip._vendor.requests.packages.urllib3.util import is_fp_closed
-except ImportError:
- from pip._vendor.urllib3.util import is_fp_closed
-
-# Replicate some six behaviour
-try:
- text_type = unicode
-except NameError:
- text_type = str
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/controller.py b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/controller.py
index 7f23529f..586b9f97 100644
--- a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/controller.py
+++ b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/controller.py
@@ -5,17 +5,27 @@
"""
The httplib2 algorithms ported for use with requests.
"""
+from __future__ import annotations
+
+import calendar
import logging
import re
-import calendar
import time
from email.utils import parsedate_tz
+from typing import TYPE_CHECKING, Collection, Mapping
from pip._vendor.requests.structures import CaseInsensitiveDict
-from .cache import DictCache, SeparateBodyBaseCache
-from .serialize import Serializer
+from pip._vendor.cachecontrol.cache import DictCache, SeparateBodyBaseCache
+from pip._vendor.cachecontrol.serialize import Serializer
+if TYPE_CHECKING:
+ from typing import Literal
+
+ from pip._vendor.requests import PreparedRequest
+ from pip._vendor.urllib3 import HTTPResponse
+
+ from pip._vendor.cachecontrol.cache import BaseCache
logger = logging.getLogger(__name__)
@@ -24,20 +34,26 @@ URI = re.compile(r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?")
PERMANENT_REDIRECT_STATUSES = (301, 308)
-def parse_uri(uri):
+def parse_uri(uri: str) -> tuple[str, str, str, str, str]:
"""Parses a URI using the regex given in Appendix B of RFC 3986.
(scheme, authority, path, query, fragment) = parse_uri(uri)
"""
- groups = URI.match(uri).groups()
+ match = URI.match(uri)
+ assert match is not None
+ groups = match.groups()
return (groups[1], groups[3], groups[4], groups[6], groups[8])
-class CacheController(object):
+class CacheController:
"""An interface to see if request should cached or not."""
def __init__(
- self, cache=None, cache_etags=True, serializer=None, status_codes=None
+ self,
+ cache: BaseCache | None = None,
+ cache_etags: bool = True,
+ serializer: Serializer | None = None,
+ status_codes: Collection[int] | None = None,
):
self.cache = DictCache() if cache is None else cache
self.cache_etags = cache_etags
@@ -45,7 +61,7 @@ class CacheController(object):
self.cacheable_status_codes = status_codes or (200, 203, 300, 301, 308)
@classmethod
- def _urlnorm(cls, uri):
+ def _urlnorm(cls, uri: str) -> str:
"""Normalize the URL to create a safe key for the cache"""
(scheme, authority, path, query, fragment) = parse_uri(uri)
if not scheme or not authority:
@@ -65,10 +81,10 @@ class CacheController(object):
return defrag_uri
@classmethod
- def cache_url(cls, uri):
+ def cache_url(cls, uri: str) -> str:
return cls._urlnorm(uri)
- def parse_cache_control(self, headers):
+ def parse_cache_control(self, headers: Mapping[str, str]) -> dict[str, int | None]:
known_directives = {
# https://tools.ietf.org/html/rfc7234#section-5.2
"max-age": (int, True),
@@ -87,7 +103,7 @@ class CacheController(object):
cc_headers = headers.get("cache-control", headers.get("Cache-Control", ""))
- retval = {}
+ retval: dict[str, int | None] = {}
for cc_directive in cc_headers.split(","):
if not cc_directive.strip():
@@ -122,11 +138,33 @@ class CacheController(object):
return retval
- def cached_request(self, request):
+ def _load_from_cache(self, request: PreparedRequest) -> HTTPResponse | None:
+ """
+ Load a cached response, or return None if it's not available.
+ """
+ cache_url = request.url
+ assert cache_url is not None
+ cache_data = self.cache.get(cache_url)
+ if cache_data is None:
+ logger.debug("No cache entry available")
+ return None
+
+ if isinstance(self.cache, SeparateBodyBaseCache):
+ body_file = self.cache.get_body(cache_url)
+ else:
+ body_file = None
+
+ result = self.serializer.loads(request, cache_data, body_file)
+ if result is None:
+ logger.warning("Cache entry deserialization failed, entry ignored")
+ return result
+
+ def cached_request(self, request: PreparedRequest) -> HTTPResponse | Literal[False]:
"""
Return a cached response if it exists in the cache, otherwise
return False.
"""
+ assert request.url is not None
cache_url = self.cache_url(request.url)
logger.debug('Looking up "%s" in the cache', cache_url)
cc = self.parse_cache_control(request.headers)
@@ -140,21 +178,9 @@ class CacheController(object):
logger.debug('Request header has "max_age" as 0, cache bypassed')
return False
- # Request allows serving from the cache, let's see if we find something
- cache_data = self.cache.get(cache_url)
- if cache_data is None:
- logger.debug("No cache entry available")
- return False
-
- if isinstance(self.cache, SeparateBodyBaseCache):
- body_file = self.cache.get_body(cache_url)
- else:
- body_file = None
-
- # Check whether it can be deserialized
- resp = self.serializer.loads(request, cache_data, body_file)
+ # Check whether we can load the response from the cache:
+ resp = self._load_from_cache(request)
if not resp:
- logger.warning("Cache entry deserialization failed, entry ignored")
return False
# If we have a cached permanent redirect, return it immediately. We
@@ -174,7 +200,7 @@ class CacheController(object):
logger.debug(msg)
return resp
- headers = CaseInsensitiveDict(resp.headers)
+ headers: CaseInsensitiveDict[str] = CaseInsensitiveDict(resp.headers)
if not headers or "date" not in headers:
if "etag" not in headers:
# Without date or etag, the cached response can never be used
@@ -185,7 +211,9 @@ class CacheController(object):
return False
now = time.time()
- date = calendar.timegm(parsedate_tz(headers["date"]))
+ time_tuple = parsedate_tz(headers["date"])
+ assert time_tuple is not None
+ date = calendar.timegm(time_tuple[:6])
current_age = max(0, now - date)
logger.debug("Current age based on date: %i", current_age)
@@ -199,28 +227,30 @@ class CacheController(object):
freshness_lifetime = 0
# Check the max-age pragma in the cache control header
- if "max-age" in resp_cc:
- freshness_lifetime = resp_cc["max-age"]
+ max_age = resp_cc.get("max-age")
+ if max_age is not None:
+ freshness_lifetime = max_age
logger.debug("Freshness lifetime from max-age: %i", freshness_lifetime)
# If there isn't a max-age, check for an expires header
elif "expires" in headers:
expires = parsedate_tz(headers["expires"])
if expires is not None:
- expire_time = calendar.timegm(expires) - date
+ expire_time = calendar.timegm(expires[:6]) - date
freshness_lifetime = max(0, expire_time)
logger.debug("Freshness lifetime from expires: %i", freshness_lifetime)
# Determine if we are setting freshness limit in the
# request. Note, this overrides what was in the response.
- if "max-age" in cc:
- freshness_lifetime = cc["max-age"]
+ max_age = cc.get("max-age")
+ if max_age is not None:
+ freshness_lifetime = max_age
logger.debug(
"Freshness lifetime from request max-age: %i", freshness_lifetime
)
- if "min-fresh" in cc:
- min_fresh = cc["min-fresh"]
+ min_fresh = cc.get("min-fresh")
+ if min_fresh is not None:
# adjust our current age by our min fresh
current_age += min_fresh
logger.debug("Adjusted current age from min-fresh: %i", current_age)
@@ -239,13 +269,12 @@ class CacheController(object):
# return the original handler
return False
- def conditional_headers(self, request):
- cache_url = self.cache_url(request.url)
- resp = self.serializer.loads(request, self.cache.get(cache_url))
+ def conditional_headers(self, request: PreparedRequest) -> dict[str, str]:
+ resp = self._load_from_cache(request)
new_headers = {}
if resp:
- headers = CaseInsensitiveDict(resp.headers)
+ headers: CaseInsensitiveDict[str] = CaseInsensitiveDict(resp.headers)
if "etag" in headers:
new_headers["If-None-Match"] = headers["ETag"]
@@ -255,7 +284,14 @@ class CacheController(object):
return new_headers
- def _cache_set(self, cache_url, request, response, body=None, expires_time=None):
+ def _cache_set(
+ self,
+ cache_url: str,
+ request: PreparedRequest,
+ response: HTTPResponse,
+ body: bytes | None = None,
+ expires_time: int | None = None,
+ ) -> None:
"""
Store the data in the cache.
"""
@@ -267,7 +303,10 @@ class CacheController(object):
self.serializer.dumps(request, response, b""),
expires=expires_time,
)
- self.cache.set_body(cache_url, body)
+ # body is None can happen when, for example, we're only updating
+ # headers, as is the case in update_cached_response().
+ if body is not None:
+ self.cache.set_body(cache_url, body)
else:
self.cache.set(
cache_url,
@@ -275,7 +314,13 @@ class CacheController(object):
expires=expires_time,
)
- def cache_response(self, request, response, body=None, status_codes=None):
+ def cache_response(
+ self,
+ request: PreparedRequest,
+ response: HTTPResponse,
+ body: bytes | None = None,
+ status_codes: Collection[int] | None = None,
+ ) -> None:
"""
Algorithm for caching requests.
@@ -290,10 +335,14 @@ class CacheController(object):
)
return
- response_headers = CaseInsensitiveDict(response.headers)
+ response_headers: CaseInsensitiveDict[str] = CaseInsensitiveDict(
+ response.headers
+ )
if "date" in response_headers:
- date = calendar.timegm(parsedate_tz(response_headers["date"]))
+ time_tuple = parsedate_tz(response_headers["date"])
+ assert time_tuple is not None
+ date = calendar.timegm(time_tuple[:6])
else:
date = 0
@@ -312,6 +361,7 @@ class CacheController(object):
cc_req = self.parse_cache_control(request.headers)
cc = self.parse_cache_control(response_headers)
+ assert request.url is not None
cache_url = self.cache_url(request.url)
logger.debug('Updating cache with response from "%s"', cache_url)
@@ -344,11 +394,11 @@ class CacheController(object):
if response_headers.get("expires"):
expires = parsedate_tz(response_headers["expires"])
if expires is not None:
- expires_time = calendar.timegm(expires) - date
+ expires_time = calendar.timegm(expires[:6]) - date
expires_time = max(expires_time, 14 * 86400)
- logger.debug("etag object cached for {0} seconds".format(expires_time))
+ logger.debug(f"etag object cached for {expires_time} seconds")
logger.debug("Caching due to etag")
self._cache_set(cache_url, request, response, body, expires_time)
@@ -362,11 +412,14 @@ class CacheController(object):
# is no date header then we can't do anything about expiring
# the cache.
elif "date" in response_headers:
- date = calendar.timegm(parsedate_tz(response_headers["date"]))
+ time_tuple = parsedate_tz(response_headers["date"])
+ assert time_tuple is not None
+ date = calendar.timegm(time_tuple[:6])
# cache when there is a max-age > 0
- if "max-age" in cc and cc["max-age"] > 0:
+ max_age = cc.get("max-age")
+ if max_age is not None and max_age > 0:
logger.debug("Caching b/c date exists and max-age > 0")
- expires_time = cc["max-age"]
+ expires_time = max_age
self._cache_set(
cache_url,
request,
@@ -381,12 +434,12 @@ class CacheController(object):
if response_headers["expires"]:
expires = parsedate_tz(response_headers["expires"])
if expires is not None:
- expires_time = calendar.timegm(expires) - date
+ expires_time = calendar.timegm(expires[:6]) - date
else:
expires_time = None
logger.debug(
- "Caching b/c of expires header. expires in {0} seconds".format(
+ "Caching b/c of expires header. expires in {} seconds".format(
expires_time
)
)
@@ -398,16 +451,18 @@ class CacheController(object):
expires_time,
)
- def update_cached_response(self, request, response):
+ def update_cached_response(
+ self, request: PreparedRequest, response: HTTPResponse
+ ) -> HTTPResponse:
"""On a 304 we will get a new set of headers that we want to
update our cached value with, assuming we have one.
This should only ever be called when we've sent an ETag and
gotten a 304 as the response.
"""
+ assert request.url is not None
cache_url = self.cache_url(request.url)
-
- cached_response = self.serializer.loads(request, self.cache.get(cache_url))
+ cached_response = self._load_from_cache(request)
if not cached_response:
# we didn't have a cached response
@@ -423,11 +478,11 @@ class CacheController(object):
excluded_headers = ["content-length"]
cached_response.headers.update(
- dict(
- (k, v)
- for k, v in response.headers.items()
+ {
+ k: v
+ for k, v in response.headers.items() # type: ignore[no-untyped-call]
if k.lower() not in excluded_headers
- )
+ }
)
# we want a 200 b/c we have content via the cache
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/filewrapper.py b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/filewrapper.py
index f5ed5f6f..25143902 100644
--- a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/filewrapper.py
+++ b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/filewrapper.py
@@ -1,12 +1,17 @@
# SPDX-FileCopyrightText: 2015 Eric Larson
#
# SPDX-License-Identifier: Apache-2.0
+from __future__ import annotations
-from tempfile import NamedTemporaryFile
import mmap
+from tempfile import NamedTemporaryFile
+from typing import TYPE_CHECKING, Any, Callable
+
+if TYPE_CHECKING:
+ from http.client import HTTPResponse
-class CallbackFileWrapper(object):
+class CallbackFileWrapper:
"""
Small wrapper around a fp object which will tee everything read into a
buffer, and when that file is closed it will execute a callback with the
@@ -25,12 +30,14 @@ class CallbackFileWrapper(object):
performance impact.
"""
- def __init__(self, fp, callback):
+ def __init__(
+ self, fp: HTTPResponse, callback: Callable[[bytes], None] | None
+ ) -> None:
self.__buf = NamedTemporaryFile("rb+", delete=True)
self.__fp = fp
self.__callback = callback
- def __getattr__(self, name):
+ def __getattr__(self, name: str) -> Any:
# The vaguaries of garbage collection means that self.__fp is
# not always set. By using __getattribute__ and the private
# name[0] allows looking up the attribute value and raising an
@@ -42,7 +49,7 @@ class CallbackFileWrapper(object):
fp = self.__getattribute__("_CallbackFileWrapper__fp")
return getattr(fp, name)
- def __is_fp_closed(self):
+ def __is_fp_closed(self) -> bool:
try:
return self.__fp.fp is None
@@ -50,7 +57,8 @@ class CallbackFileWrapper(object):
pass
try:
- return self.__fp.closed
+ closed: bool = self.__fp.closed
+ return closed
except AttributeError:
pass
@@ -59,7 +67,7 @@ class CallbackFileWrapper(object):
# TODO: Add some logging here...
return False
- def _close(self):
+ def _close(self) -> None:
if self.__callback:
if self.__buf.tell() == 0:
# Empty file:
@@ -86,8 +94,8 @@ class CallbackFileWrapper(object):
# Important when caching big files.
self.__buf.close()
- def read(self, amt=None):
- data = self.__fp.read(amt)
+ def read(self, amt: int | None = None) -> bytes:
+ data: bytes = self.__fp.read(amt)
if data:
# We may be dealing with b'', a sign that things are over:
# it's passed e.g. after we've already closed self.__buf.
@@ -97,8 +105,8 @@ class CallbackFileWrapper(object):
return data
- def _safe_read(self, amt):
- data = self.__fp._safe_read(amt)
+ def _safe_read(self, amt: int) -> bytes:
+ data: bytes = self.__fp._safe_read(amt) # type: ignore[attr-defined]
if amt == 2 and data == b"\r\n":
# urllib executes this read to toss the CRLF at the end
# of the chunk.
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/heuristics.py b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/heuristics.py
index ebe4a96f..b9d72ca4 100644
--- a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/heuristics.py
+++ b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/heuristics.py
@@ -1,29 +1,31 @@
# SPDX-FileCopyrightText: 2015 Eric Larson
#
# SPDX-License-Identifier: Apache-2.0
+from __future__ import annotations
import calendar
import time
-
+from datetime import datetime, timedelta, timezone
from email.utils import formatdate, parsedate, parsedate_tz
+from typing import TYPE_CHECKING, Any, Mapping
-from datetime import datetime, timedelta
+if TYPE_CHECKING:
+ from pip._vendor.urllib3 import HTTPResponse
TIME_FMT = "%a, %d %b %Y %H:%M:%S GMT"
-def expire_after(delta, date=None):
- date = date or datetime.utcnow()
+def expire_after(delta: timedelta, date: datetime | None = None) -> datetime:
+ date = date or datetime.now(timezone.utc)
return date + delta
-def datetime_to_header(dt):
+def datetime_to_header(dt: datetime) -> str:
return formatdate(calendar.timegm(dt.timetuple()))
-class BaseHeuristic(object):
-
- def warning(self, response):
+class BaseHeuristic:
+ def warning(self, response: HTTPResponse) -> str | None:
"""
Return a valid 1xx warning header value describing the cache
adjustments.
@@ -34,7 +36,7 @@ class BaseHeuristic(object):
"""
return '110 - "Response is Stale"'
- def update_headers(self, response):
+ def update_headers(self, response: HTTPResponse) -> dict[str, str]:
"""Update the response headers with any new headers.
NOTE: This SHOULD always include some Warning header to
@@ -43,7 +45,7 @@ class BaseHeuristic(object):
"""
return {}
- def apply(self, response):
+ def apply(self, response: HTTPResponse) -> HTTPResponse:
updated_headers = self.update_headers(response)
if updated_headers:
@@ -61,12 +63,12 @@ class OneDayCache(BaseHeuristic):
future.
"""
- def update_headers(self, response):
+ def update_headers(self, response: HTTPResponse) -> dict[str, str]:
headers = {}
if "expires" not in response.headers:
date = parsedate(response.headers["date"])
- expires = expire_after(timedelta(days=1), date=datetime(*date[:6]))
+ expires = expire_after(timedelta(days=1), date=datetime(*date[:6], tzinfo=timezone.utc)) # type: ignore[misc]
headers["expires"] = datetime_to_header(expires)
headers["cache-control"] = "public"
return headers
@@ -77,14 +79,14 @@ class ExpiresAfter(BaseHeuristic):
Cache **all** requests for a defined time period.
"""
- def __init__(self, **kw):
+ def __init__(self, **kw: Any) -> None:
self.delta = timedelta(**kw)
- def update_headers(self, response):
+ def update_headers(self, response: HTTPResponse) -> dict[str, str]:
expires = expire_after(self.delta)
return {"expires": datetime_to_header(expires), "cache-control": "public"}
- def warning(self, response):
+ def warning(self, response: HTTPResponse) -> str | None:
tmpl = "110 - Automatically cached for %s. Response might be stale"
return tmpl % self.delta
@@ -101,12 +103,23 @@ class LastModified(BaseHeuristic):
http://lxr.mozilla.org/mozilla-release/source/netwerk/protocol/http/nsHttpResponseHead.cpp#397
Unlike mozilla we limit this to 24-hr.
"""
+
cacheable_by_default_statuses = {
- 200, 203, 204, 206, 300, 301, 404, 405, 410, 414, 501
+ 200,
+ 203,
+ 204,
+ 206,
+ 300,
+ 301,
+ 404,
+ 405,
+ 410,
+ 414,
+ 501,
}
- def update_headers(self, resp):
- headers = resp.headers
+ def update_headers(self, resp: HTTPResponse) -> dict[str, str]:
+ headers: Mapping[str, str] = resp.headers
if "expires" in headers:
return {}
@@ -120,9 +133,11 @@ class LastModified(BaseHeuristic):
if "date" not in headers or "last-modified" not in headers:
return {}
- date = calendar.timegm(parsedate_tz(headers["date"]))
+ time_tuple = parsedate_tz(headers["date"])
+ assert time_tuple is not None
+ date = calendar.timegm(time_tuple[:6])
last_modified = parsedate(headers["last-modified"])
- if date is None or last_modified is None:
+ if last_modified is None:
return {}
now = time.time()
@@ -135,5 +150,5 @@ class LastModified(BaseHeuristic):
expires = date + freshness_lifetime
return {"expires": time.strftime(TIME_FMT, time.gmtime(expires))}
- def warning(self, resp):
+ def warning(self, resp: HTTPResponse) -> str | None:
return None
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/serialize.py b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/serialize.py
index 7fe1a3e3..f9e967c3 100644
--- a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/serialize.py
+++ b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/serialize.py
@@ -1,78 +1,76 @@
# SPDX-FileCopyrightText: 2015 Eric Larson
#
# SPDX-License-Identifier: Apache-2.0
+from __future__ import annotations
-import base64
import io
-import json
-import zlib
+from typing import IO, TYPE_CHECKING, Any, Mapping, cast
from pip._vendor import msgpack
from pip._vendor.requests.structures import CaseInsensitiveDict
+from pip._vendor.urllib3 import HTTPResponse
-from .compat import HTTPResponse, pickle, text_type
+if TYPE_CHECKING:
+ from pip._vendor.requests import PreparedRequest
-def _b64_decode_bytes(b):
- return base64.b64decode(b.encode("ascii"))
+class Serializer:
+ serde_version = "4"
-
-def _b64_decode_str(s):
- return _b64_decode_bytes(s).decode("utf8")
-
-
-_default_body_read = object()
-
-
-class Serializer(object):
- def dumps(self, request, response, body=None):
- response_headers = CaseInsensitiveDict(response.headers)
+ def dumps(
+ self,
+ request: PreparedRequest,
+ response: HTTPResponse,
+ body: bytes | None = None,
+ ) -> bytes:
+ response_headers: CaseInsensitiveDict[str] = CaseInsensitiveDict(
+ response.headers
+ )
if body is None:
# When a body isn't passed in, we'll read the response. We
# also update the response with a new file handler to be
# sure it acts as though it was never read.
body = response.read(decode_content=False)
- response._fp = io.BytesIO(body)
+ response._fp = io.BytesIO(body) # type: ignore[attr-defined]
+ response.length_remaining = len(body)
- # NOTE: This is all a bit weird, but it's really important that on
- # Python 2.x these objects are unicode and not str, even when
- # they contain only ascii. The problem here is that msgpack
- # understands the difference between unicode and bytes and we
- # have it set to differentiate between them, however Python 2
- # doesn't know the difference. Forcing these to unicode will be
- # enough to have msgpack know the difference.
data = {
- u"response": {
- u"body": body, # Empty bytestring if body is stored separately
- u"headers": dict(
- (text_type(k), text_type(v)) for k, v in response.headers.items()
- ),
- u"status": response.status,
- u"version": response.version,
- u"reason": text_type(response.reason),
- u"strict": response.strict,
- u"decode_content": response.decode_content,
+ "response": {
+ "body": body, # Empty bytestring if body is stored separately
+ "headers": {str(k): str(v) for k, v in response.headers.items()}, # type: ignore[no-untyped-call]
+ "status": response.status,
+ "version": response.version,
+ "reason": str(response.reason),
+ "decode_content": response.decode_content,
}
}
# Construct our vary headers
- data[u"vary"] = {}
- if u"vary" in response_headers:
- varied_headers = response_headers[u"vary"].split(",")
+ data["vary"] = {}
+ if "vary" in response_headers:
+ varied_headers = response_headers["vary"].split(",")
for header in varied_headers:
- header = text_type(header).strip()
+ header = str(header).strip()
header_value = request.headers.get(header, None)
if header_value is not None:
- header_value = text_type(header_value)
- data[u"vary"][header] = header_value
+ header_value = str(header_value)
+ data["vary"][header] = header_value
- return b",".join([b"cc=4", msgpack.dumps(data, use_bin_type=True)])
+ return b",".join([f"cc={self.serde_version}".encode(), self.serialize(data)])
- def loads(self, request, data, body_file=None):
+ def serialize(self, data: dict[str, Any]) -> bytes:
+ return cast(bytes, msgpack.dumps(data, use_bin_type=True))
+
+ def loads(
+ self,
+ request: PreparedRequest,
+ data: bytes,
+ body_file: IO[bytes] | None = None,
+ ) -> HTTPResponse | None:
# Short circuit if we've been given an empty set of data
if not data:
- return
+ return None
# Determine what version of the serializer the data was serialized
# with
@@ -88,18 +86,23 @@ class Serializer(object):
ver = b"cc=0"
# Get the version number out of the cc=N
- ver = ver.split(b"=", 1)[-1].decode("ascii")
+ verstr = ver.split(b"=", 1)[-1].decode("ascii")
# Dispatch to the actual load method for the given version
try:
- return getattr(self, "_loads_v{}".format(ver))(request, data, body_file)
+ return getattr(self, f"_loads_v{verstr}")(request, data, body_file) # type: ignore[no-any-return]
except AttributeError:
# This is a version we don't have a loads function for, so we'll
# just treat it as a miss and return None
- return
+ return None
- def prepare_response(self, request, cached, body_file=None):
+ def prepare_response(
+ self,
+ request: PreparedRequest,
+ cached: Mapping[str, Any],
+ body_file: IO[bytes] | None = None,
+ ) -> HTTPResponse | None:
"""Verify our vary headers match and construct a real urllib3
HTTPResponse object.
"""
@@ -108,23 +111,26 @@ class Serializer(object):
# This case is also handled in the controller code when creating
# a cache entry, but is left here for backwards compatibility.
if "*" in cached.get("vary", {}):
- return
+ return None
# Ensure that the Vary headers for the cached response match our
# request
for header, value in cached.get("vary", {}).items():
if request.headers.get(header, None) != value:
- return
+ return None
body_raw = cached["response"].pop("body")
- headers = CaseInsensitiveDict(data=cached["response"]["headers"])
+ headers: CaseInsensitiveDict[str] = CaseInsensitiveDict(
+ data=cached["response"]["headers"]
+ )
if headers.get("transfer-encoding", "") == "chunked":
headers.pop("transfer-encoding")
cached["response"]["headers"] = headers
try:
+ body: IO[bytes]
if body_file is None:
body = io.BytesIO(body_raw)
else:
@@ -138,53 +144,63 @@ class Serializer(object):
# TypeError: 'str' does not support the buffer interface
body = io.BytesIO(body_raw.encode("utf8"))
+ # Discard any `strict` parameter serialized by older version of cachecontrol.
+ cached["response"].pop("strict", None)
+
return HTTPResponse(body=body, preload_content=False, **cached["response"])
- def _loads_v0(self, request, data, body_file=None):
+ def _loads_v0(
+ self,
+ request: PreparedRequest,
+ data: bytes,
+ body_file: IO[bytes] | None = None,
+ ) -> None:
# The original legacy cache data. This doesn't contain enough
# information to construct everything we need, so we'll treat this as
# a miss.
- return
+ return None
- def _loads_v1(self, request, data, body_file=None):
- try:
- cached = pickle.loads(data)
- except ValueError:
- return
+ def _loads_v1(
+ self,
+ request: PreparedRequest,
+ data: bytes,
+ body_file: IO[bytes] | None = None,
+ ) -> HTTPResponse | None:
+ # The "v1" pickled cache format. This is no longer supported
+ # for security reasons, so we treat it as a miss.
+ return None
- return self.prepare_response(request, cached, body_file)
+ def _loads_v2(
+ self,
+ request: PreparedRequest,
+ data: bytes,
+ body_file: IO[bytes] | None = None,
+ ) -> HTTPResponse | None:
+ # The "v2" compressed base64 cache format.
+ # This has been removed due to age and poor size/performance
+ # characteristics, so we treat it as a miss.
+ return None
- def _loads_v2(self, request, data, body_file=None):
- assert body_file is None
- try:
- cached = json.loads(zlib.decompress(data).decode("utf8"))
- except (ValueError, zlib.error):
- return
-
- # We need to decode the items that we've base64 encoded
- cached["response"]["body"] = _b64_decode_bytes(cached["response"]["body"])
- cached["response"]["headers"] = dict(
- (_b64_decode_str(k), _b64_decode_str(v))
- for k, v in cached["response"]["headers"].items()
- )
- cached["response"]["reason"] = _b64_decode_str(cached["response"]["reason"])
- cached["vary"] = dict(
- (_b64_decode_str(k), _b64_decode_str(v) if v is not None else v)
- for k, v in cached["vary"].items()
- )
-
- return self.prepare_response(request, cached, body_file)
-
- def _loads_v3(self, request, data, body_file):
+ def _loads_v3(
+ self,
+ request: PreparedRequest,
+ data: bytes,
+ body_file: IO[bytes] | None = None,
+ ) -> None:
# Due to Python 2 encoding issues, it's impossible to know for sure
# exactly how to load v3 entries, thus we'll treat these as a miss so
# that they get rewritten out as v4 entries.
- return
+ return None
- def _loads_v4(self, request, data, body_file=None):
+ def _loads_v4(
+ self,
+ request: PreparedRequest,
+ data: bytes,
+ body_file: IO[bytes] | None = None,
+ ) -> HTTPResponse | None:
try:
cached = msgpack.loads(data, raw=False)
except ValueError:
- return
+ return None
return self.prepare_response(request, cached, body_file)
diff --git a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/wrapper.py b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/wrapper.py
index b6ee7f20..f618bc36 100644
--- a/lib/python3.11/site-packages/pip/_vendor/cachecontrol/wrapper.py
+++ b/lib/python3.11/site-packages/pip/_vendor/cachecontrol/wrapper.py
@@ -1,22 +1,32 @@
# SPDX-FileCopyrightText: 2015 Eric Larson
#
# SPDX-License-Identifier: Apache-2.0
+from __future__ import annotations
-from .adapter import CacheControlAdapter
-from .cache import DictCache
+from typing import TYPE_CHECKING, Collection
+
+from pip._vendor.cachecontrol.adapter import CacheControlAdapter
+from pip._vendor.cachecontrol.cache import DictCache
+
+if TYPE_CHECKING:
+ from pip._vendor import requests
+
+ from pip._vendor.cachecontrol.cache import BaseCache
+ from pip._vendor.cachecontrol.controller import CacheController
+ from pip._vendor.cachecontrol.heuristics import BaseHeuristic
+ from pip._vendor.cachecontrol.serialize import Serializer
def CacheControl(
- sess,
- cache=None,
- cache_etags=True,
- serializer=None,
- heuristic=None,
- controller_class=None,
- adapter_class=None,
- cacheable_methods=None,
-):
-
+ sess: requests.Session,
+ cache: BaseCache | None = None,
+ cache_etags: bool = True,
+ serializer: Serializer | None = None,
+ heuristic: BaseHeuristic | None = None,
+ controller_class: type[CacheController] | None = None,
+ adapter_class: type[CacheControlAdapter] | None = None,
+ cacheable_methods: Collection[str] | None = None,
+) -> requests.Session:
cache = DictCache() if cache is None else cache
adapter_class = adapter_class or CacheControlAdapter
adapter = adapter_class(
diff --git a/lib/python3.11/site-packages/pip/_vendor/certifi/__init__.py b/lib/python3.11/site-packages/pip/_vendor/certifi/__init__.py
index 705f416d..8ce89cef 100644
--- a/lib/python3.11/site-packages/pip/_vendor/certifi/__init__.py
+++ b/lib/python3.11/site-packages/pip/_vendor/certifi/__init__.py
@@ -1,4 +1,4 @@
from .core import contents, where
__all__ = ["contents", "where"]
-__version__ = "2023.05.07"
+__version__ = "2023.07.22"
diff --git a/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-311.pyc
index 69033544..021ae35e 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-311.pyc
index f55412c6..efed3661 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-311.pyc
index 3a9b8ba1..0362d657 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/certifi/cacert.pem b/lib/python3.11/site-packages/pip/_vendor/certifi/cacert.pem
index 5183934b..02123695 100644
--- a/lib/python3.11/site-packages/pip/_vendor/certifi/cacert.pem
+++ b/lib/python3.11/site-packages/pip/_vendor/certifi/cacert.pem
@@ -791,34 +791,6 @@ uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2
XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
-----END CERTIFICATE-----
-# Issuer: CN=Hongkong Post Root CA 1 O=Hongkong Post
-# Subject: CN=Hongkong Post Root CA 1 O=Hongkong Post
-# Label: "Hongkong Post Root CA 1"
-# Serial: 1000
-# MD5 Fingerprint: a8:0d:6f:39:78:b9:43:6d:77:42:6d:98:5a:cc:23:ca
-# SHA1 Fingerprint: d6:da:a8:20:8d:09:d2:15:4d:24:b5:2f:cb:34:6e:b2:58:b2:8a:58
-# SHA256 Fingerprint: f9:e6:7d:33:6c:51:00:2a:c0:54:c6:32:02:2d:66:dd:a2:e7:e3:ff:f1:0a:d0:61:ed:31:d8:bb:b4:10:cf:b2
------BEGIN CERTIFICATE-----
-MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx
-FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg
-Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG
-A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr
-b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ
-jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn
-PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh
-ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9
-nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h
-q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED
-MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC
-mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3
-7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB
-oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs
-EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO
-fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi
-AmvZWg==
------END CERTIFICATE-----
-
# Issuer: CN=SecureSign RootCA11 O=Japan Certification Services, Inc.
# Subject: CN=SecureSign RootCA11 O=Japan Certification Services, Inc.
# Label: "SecureSign RootCA11"
@@ -1676,50 +1648,6 @@ HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx
SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
-----END CERTIFICATE-----
-# Issuer: CN=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi
-# Subject: CN=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi
-# Label: "E-Tugra Certification Authority"
-# Serial: 7667447206703254355
-# MD5 Fingerprint: b8:a1:03:63:b0:bd:21:71:70:8a:6f:13:3a:bb:79:49
-# SHA1 Fingerprint: 51:c6:e7:08:49:06:6e:f3:92:d4:5c:a0:0d:6d:a3:62:8f:c3:52:39
-# SHA256 Fingerprint: b0:bf:d5:2b:b0:d7:d9:bd:92:bf:5d:4d:c1:3d:a2:55:c0:2c:54:2f:37:83:65:ea:89:39:11:f5:5e:55:f2:3c
------BEGIN CERTIFICATE-----
-MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNV
-BAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBC
-aWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNV
-BAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1
-Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIz
-MDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+
-BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhp
-em1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
-ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UY
-B4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxH
-D5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSF
-Q9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEo
-q1+gElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3D
-k14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcH
-fC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsut
-dEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QOXVGUnhMM
-ti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8
-zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
-rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUX
-U8u3Zg5mTPj5dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6
-Jyr+zE7S6E5UMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5
-XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAF
-Nzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAKkEh47U6YA5n+KGCR
-HTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jOXKqY
-GwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c
-77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3
-+GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WK
-vJUawSg5TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6
-FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLl
-yb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2P
-AJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpD
-y4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8d
-NL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA==
------END CERTIFICATE-----
-
# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center
# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center
# Label: "T-TeleSec GlobalRoot Class 2"
@@ -4397,73 +4325,6 @@ ut6Dacpps6kFtZaSF4fC0urQe87YQVt8rgIwRt7qy12a7DLCZRawTDBcMPPaTnOG
BtjOiQRINzf43TNRnXCve1XYAS59BWQOhriR
-----END CERTIFICATE-----
-# Issuer: CN=E-Tugra Global Root CA RSA v3 O=E-Tugra EBG A.S. OU=E-Tugra Trust Center
-# Subject: CN=E-Tugra Global Root CA RSA v3 O=E-Tugra EBG A.S. OU=E-Tugra Trust Center
-# Label: "E-Tugra Global Root CA RSA v3"
-# Serial: 75951268308633135324246244059508261641472512052
-# MD5 Fingerprint: 22:be:10:f6:c2:f8:03:88:73:5f:33:29:47:28:47:a4
-# SHA1 Fingerprint: e9:a8:5d:22:14:52:1c:5b:aa:0a:b4:be:24:6a:23:8a:c9:ba:e2:a9
-# SHA256 Fingerprint: ef:66:b0:b1:0a:3c:db:9f:2e:36:48:c7:6b:d2:af:18:ea:d2:bf:e6:f1:17:65:5e:28:c4:06:0d:a1:a3:f4:c2
------BEGIN CERTIFICATE-----
-MIIF8zCCA9ugAwIBAgIUDU3FzRYilZYIfrgLfxUGNPt5EDQwDQYJKoZIhvcNAQEL
-BQAwgYAxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHEwZBbmthcmExGTAXBgNVBAoTEEUt
-VHVncmEgRUJHIEEuUy4xHTAbBgNVBAsTFEUtVHVncmEgVHJ1c3QgQ2VudGVyMSYw
-JAYDVQQDEx1FLVR1Z3JhIEdsb2JhbCBSb290IENBIFJTQSB2MzAeFw0yMDAzMTgw
-OTA3MTdaFw00NTAzMTIwOTA3MTdaMIGAMQswCQYDVQQGEwJUUjEPMA0GA1UEBxMG
-QW5rYXJhMRkwFwYDVQQKExBFLVR1Z3JhIEVCRyBBLlMuMR0wGwYDVQQLExRFLVR1
-Z3JhIFRydXN0IENlbnRlcjEmMCQGA1UEAxMdRS1UdWdyYSBHbG9iYWwgUm9vdCBD
-QSBSU0EgdjMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCiZvCJt3J7
-7gnJY9LTQ91ew6aEOErxjYG7FL1H6EAX8z3DeEVypi6Q3po61CBxyryfHUuXCscx
-uj7X/iWpKo429NEvx7epXTPcMHD4QGxLsqYxYdE0PD0xesevxKenhOGXpOhL9hd8
-7jwH7eKKV9y2+/hDJVDqJ4GohryPUkqWOmAalrv9c/SF/YP9f4RtNGx/ardLAQO/
-rWm31zLZ9Vdq6YaCPqVmMbMWPcLzJmAy01IesGykNz709a/r4d+ABs8qQedmCeFL
-l+d3vSFtKbZnwy1+7dZ5ZdHPOrbRsV5WYVB6Ws5OUDGAA5hH5+QYfERaxqSzO8bG
-wzrwbMOLyKSRBfP12baqBqG3q+Sx6iEUXIOk/P+2UNOMEiaZdnDpwA+mdPy70Bt4
-znKS4iicvObpCdg604nmvi533wEKb5b25Y08TVJ2Glbhc34XrD2tbKNSEhhw5oBO
-M/J+JjKsBY04pOZ2PJ8QaQ5tndLBeSBrW88zjdGUdjXnXVXHt6woq0bM5zshtQoK
-5EpZ3IE1S0SVEgpnpaH/WwAH0sDM+T/8nzPyAPiMbIedBi3x7+PmBvrFZhNb/FAH
-nnGGstpvdDDPk1Po3CLW3iAfYY2jLqN4MpBs3KwytQXk9TwzDdbgh3cXTJ2w2Amo
-DVf3RIXwyAS+XF1a4xeOVGNpf0l0ZAWMowIDAQABo2MwYTAPBgNVHRMBAf8EBTAD
-AQH/MB8GA1UdIwQYMBaAFLK0ruYt9ybVqnUtdkvAG1Mh0EjvMB0GA1UdDgQWBBSy
-tK7mLfcm1ap1LXZLwBtTIdBI7zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEL
-BQADggIBAImocn+M684uGMQQgC0QDP/7FM0E4BQ8Tpr7nym/Ip5XuYJzEmMmtcyQ
-6dIqKe6cLcwsmb5FJ+Sxce3kOJUxQfJ9emN438o2Fi+CiJ+8EUdPdk3ILY7r3y18
-Tjvarvbj2l0Upq7ohUSdBm6O++96SmotKygY/r+QLHUWnw/qln0F7psTpURs+APQ
-3SPh/QMSEgj0GDSz4DcLdxEBSL9htLX4GdnLTeqjjO/98Aa1bZL0SmFQhO3sSdPk
-vmjmLuMxC1QLGpLWgti2omU8ZgT5Vdps+9u1FGZNlIM7zR6mK7L+d0CGq+ffCsn9
-9t2HVhjYsCxVYJb6CH5SkPVLpi6HfMsg2wY+oF0Dd32iPBMbKaITVaA9FCKvb7jQ
-mhty3QUBjYZgv6Rn7rWlDdF/5horYmbDB7rnoEgcOMPpRfunf/ztAmgayncSd6YA
-VSgU7NbHEqIbZULpkejLPoeJVF3Zr52XnGnnCv8PWniLYypMfUeUP95L6VPQMPHF
-9p5J3zugkaOj/s1YzOrfr28oO6Bpm4/srK4rVJ2bBLFHIK+WEj5jlB0E5y67hscM
-moi/dkfv97ALl2bSRM9gUgfh1SxKOidhd8rXj+eHDjD/DLsE4mHDosiXYY60MGo8
-bcIHX0pzLz/5FooBZu+6kcpSV3uu1OYP3Qt6f4ueJiDPO++BcYNZ
------END CERTIFICATE-----
-
-# Issuer: CN=E-Tugra Global Root CA ECC v3 O=E-Tugra EBG A.S. OU=E-Tugra Trust Center
-# Subject: CN=E-Tugra Global Root CA ECC v3 O=E-Tugra EBG A.S. OU=E-Tugra Trust Center
-# Label: "E-Tugra Global Root CA ECC v3"
-# Serial: 218504919822255052842371958738296604628416471745
-# MD5 Fingerprint: 46:bc:81:bb:f1:b5:1e:f7:4b:96:bc:14:e2:e7:27:64
-# SHA1 Fingerprint: 8a:2f:af:57:53:b1:b0:e6:a1:04:ec:5b:6a:69:71:6d:f6:1c:e2:84
-# SHA256 Fingerprint: 87:3f:46:85:fa:7f:56:36:25:25:2e:6d:36:bc:d7:f1:6f:c2:49:51:f2:64:e4:7e:1b:95:4f:49:08:cd:ca:13
------BEGIN CERTIFICATE-----
-MIICpTCCAiqgAwIBAgIUJkYZdzHhT28oNt45UYbm1JeIIsEwCgYIKoZIzj0EAwMw
-gYAxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHEwZBbmthcmExGTAXBgNVBAoTEEUtVHVn
-cmEgRUJHIEEuUy4xHTAbBgNVBAsTFEUtVHVncmEgVHJ1c3QgQ2VudGVyMSYwJAYD
-VQQDEx1FLVR1Z3JhIEdsb2JhbCBSb290IENBIEVDQyB2MzAeFw0yMDAzMTgwOTQ2
-NThaFw00NTAzMTIwOTQ2NThaMIGAMQswCQYDVQQGEwJUUjEPMA0GA1UEBxMGQW5r
-YXJhMRkwFwYDVQQKExBFLVR1Z3JhIEVCRyBBLlMuMR0wGwYDVQQLExRFLVR1Z3Jh
-IFRydXN0IENlbnRlcjEmMCQGA1UEAxMdRS1UdWdyYSBHbG9iYWwgUm9vdCBDQSBF
-Q0MgdjMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASOmCm/xxAeJ9urA8woLNheSBkQ
-KczLWYHMjLiSF4mDKpL2w6QdTGLVn9agRtwcvHbB40fQWxPa56WzZkjnIZpKT4YK
-fWzqTTKACrJ6CZtpS5iB4i7sAnCWH/31Rs7K3IKjYzBhMA8GA1UdEwEB/wQFMAMB
-Af8wHwYDVR0jBBgwFoAU/4Ixcj75xGZsrTie0bBRiKWQzPUwHQYDVR0OBBYEFP+C
-MXI++cRmbK04ntGwUYilkMz1MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNp
-ADBmAjEA5gVYaWHlLcoNy/EZCL3W/VGSGn5jVASQkZo1kTmZ+gepZpO6yGjUij/6
-7W4WAie3AjEA3VoXK3YdZUKWpqxdinlW2Iob35reX8dQj7FbcQwm32pAAOwzkSFx
-vmjkI6TZraE3
------END CERTIFICATE-----
-
# Issuer: CN=Security Communication RootCA3 O=SECOM Trust Systems CO.,LTD.
# Subject: CN=Security Communication RootCA3 O=SECOM Trust Systems CO.,LTD.
# Label: "Security Communication RootCA3"
@@ -4587,3 +4448,188 @@ AgEGMAoGCCqGSM49BAMDA2gAMGUCMBq8W9f+qdJUDkpd0m2xQNz0Q9XSSpkZElaA
94M04TVOSG0ED1cxMDAtsaqdAzjbBgIxAMvMh1PLet8gUXOQwKhbYdDFUDn9hf7B
43j4ptZLvZuHjw/l1lOWqzzIQNph91Oj9w==
-----END CERTIFICATE-----
+
+# Issuer: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited
+# Subject: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited
+# Label: "Sectigo Public Server Authentication Root E46"
+# Serial: 88989738453351742415770396670917916916
+# MD5 Fingerprint: 28:23:f8:b2:98:5c:37:16:3b:3e:46:13:4e:b0:b3:01
+# SHA1 Fingerprint: ec:8a:39:6c:40:f0:2e:bc:42:75:d4:9f:ab:1c:1a:5b:67:be:d2:9a
+# SHA256 Fingerprint: c9:0f:26:f0:fb:1b:40:18:b2:22:27:51:9b:5c:a2:b5:3e:2c:a5:b3:be:5c:f1:8e:fe:1b:ef:47:38:0c:53:83
+-----BEGIN CERTIFICATE-----
+MIICOjCCAcGgAwIBAgIQQvLM2htpN0RfFf51KBC49DAKBggqhkjOPQQDAzBfMQsw
+CQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1T
+ZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwHhcN
+MjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEYMBYG
+A1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1YmxpYyBT
+ZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA
+IgNiAAR2+pmpbiDt+dd34wc7qNs9Xzjoq1WmVk/WSOrsfy2qw7LFeeyZYX8QeccC
+WvkEN/U0NSt3zn8gj1KjAIns1aeibVvjS5KToID1AZTc8GgHHs3u/iVStSBDHBv+
+6xnOQ6OjQjBAMB0GA1UdDgQWBBTRItpMWfFLXyY4qp3W7usNw/upYTAOBgNVHQ8B
+Af8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNnADBkAjAn7qRa
+qCG76UeXlImldCBteU/IvZNeWBj7LRoAasm4PdCkT0RHlAFWovgzJQxC36oCMB3q
+4S6ILuH5px0CMk7yn2xVdOOurvulGu7t0vzCAxHrRVxgED1cf5kDW21USAGKcw==
+-----END CERTIFICATE-----
+
+# Issuer: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited
+# Subject: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited
+# Label: "Sectigo Public Server Authentication Root R46"
+# Serial: 156256931880233212765902055439220583700
+# MD5 Fingerprint: 32:10:09:52:00:d5:7e:6c:43:df:15:c0:b1:16:93:e5
+# SHA1 Fingerprint: ad:98:f9:f3:e4:7d:75:3b:65:d4:82:b3:a4:52:17:bb:6e:f5:e4:38
+# SHA256 Fingerprint: 7b:b6:47:a6:2a:ee:ac:88:bf:25:7a:a5:22:d0:1f:fe:a3:95:e0:ab:45:c7:3f:93:f6:56:54:ec:38:f2:5a:06
+-----BEGIN CERTIFICATE-----
+MIIFijCCA3KgAwIBAgIQdY39i658BwD6qSWn4cetFDANBgkqhkiG9w0BAQwFADBf
+MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQD
+Ey1TZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYw
+HhcNMjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEY
+MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1Ymxp
+YyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB
+AQUAA4ICDwAwggIKAoICAQCTvtU2UnXYASOgHEdCSe5jtrch/cSV1UgrJnwUUxDa
+ef0rty2k1Cz66jLdScK5vQ9IPXtamFSvnl0xdE8H/FAh3aTPaE8bEmNtJZlMKpnz
+SDBh+oF8HqcIStw+KxwfGExxqjWMrfhu6DtK2eWUAtaJhBOqbchPM8xQljeSM9xf
+iOefVNlI8JhD1mb9nxc4Q8UBUQvX4yMPFF1bFOdLvt30yNoDN9HWOaEhUTCDsG3X
+ME6WW5HwcCSrv0WBZEMNvSE6Lzzpng3LILVCJ8zab5vuZDCQOc2TZYEhMbUjUDM3
+IuM47fgxMMxF/mL50V0yeUKH32rMVhlATc6qu/m1dkmU8Sf4kaWD5QazYw6A3OAS
+VYCmO2a0OYctyPDQ0RTp5A1NDvZdV3LFOxxHVp3i1fuBYYzMTYCQNFu31xR13NgE
+SJ/AwSiItOkcyqex8Va3e0lMWeUgFaiEAin6OJRpmkkGj80feRQXEgyDet4fsZfu
++Zd4KKTIRJLpfSYFplhym3kT2BFfrsU4YjRosoYwjviQYZ4ybPUHNs2iTG7sijbt
+8uaZFURww3y8nDnAtOFr94MlI1fZEoDlSfB1D++N6xybVCi0ITz8fAr/73trdf+L
+HaAZBav6+CuBQug4urv7qv094PPK306Xlynt8xhW6aWWrL3DkJiy4Pmi1KZHQ3xt
+zwIDAQABo0IwQDAdBgNVHQ4EFgQUVnNYZJX5khqwEioEYnmhQBWIIUkwDgYDVR0P
+AQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAC9c
+mTz8Bl6MlC5w6tIyMY208FHVvArzZJ8HXtXBc2hkeqK5Duj5XYUtqDdFqij0lgVQ
+YKlJfp/imTYpE0RHap1VIDzYm/EDMrraQKFz6oOht0SmDpkBm+S8f74TlH7Kph52
+gDY9hAaLMyZlbcp+nv4fjFg4exqDsQ+8FxG75gbMY/qB8oFM2gsQa6H61SilzwZA
+Fv97fRheORKkU55+MkIQpiGRqRxOF3yEvJ+M0ejf5lG5Nkc/kLnHvALcWxxPDkjB
+JYOcCj+esQMzEhonrPcibCTRAUH4WAP+JWgiH5paPHxsnnVI84HxZmduTILA7rpX
+DhjvLpr3Etiga+kFpaHpaPi8TD8SHkXoUsCjvxInebnMMTzD9joiFgOgyY9mpFui
+TdaBJQbpdqQACj7LzTWb4OE4y2BThihCQRxEV+ioratF4yUQvNs+ZUH7G6aXD+u5
+dHn5HrwdVw1Hr8Mvn4dGp+smWg9WY7ViYG4A++MnESLn/pmPNPW56MORcr3Ywx65
+LvKRRFHQV80MNNVIIb/bE/FmJUNS0nAiNs2fxBx1IK1jcmMGDw4nztJqDby1ORrp
+0XZ60Vzk50lJLVU3aPAaOpg+VBeHVOmmJ1CJeyAvP/+/oYtKR5j/K3tJPsMpRmAY
+QqszKbrAKbkTidOIijlBO8n9pu0f9GBj39ItVQGL
+-----END CERTIFICATE-----
+
+# Issuer: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation
+# Subject: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation
+# Label: "SSL.com TLS RSA Root CA 2022"
+# Serial: 148535279242832292258835760425842727825
+# MD5 Fingerprint: d8:4e:c6:59:30:d8:fe:a0:d6:7a:5a:2c:2c:69:78:da
+# SHA1 Fingerprint: ec:2c:83:40:72:af:26:95:10:ff:0e:f2:03:ee:31:70:f6:78:9d:ca
+# SHA256 Fingerprint: 8f:af:7d:2e:2c:b4:70:9b:b8:e0:b3:36:66:bf:75:a5:dd:45:b5:de:48:0f:8e:a8:d4:bf:e6:be:bc:17:f2:ed
+-----BEGIN CERTIFICATE-----
+MIIFiTCCA3GgAwIBAgIQb77arXO9CEDii02+1PdbkTANBgkqhkiG9w0BAQsFADBO
+MQswCQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQD
+DBxTU0wuY29tIFRMUyBSU0EgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzQyMloX
+DTQ2MDgxOTE2MzQyMVowTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jw
+b3JhdGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgUlNBIFJvb3QgQ0EgMjAyMjCC
+AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANCkCXJPQIgSYT41I57u9nTP
+L3tYPc48DRAokC+X94xI2KDYJbFMsBFMF3NQ0CJKY7uB0ylu1bUJPiYYf7ISf5OY
+t6/wNr/y7hienDtSxUcZXXTzZGbVXcdotL8bHAajvI9AI7YexoS9UcQbOcGV0ins
+S657Lb85/bRi3pZ7QcacoOAGcvvwB5cJOYF0r/c0WRFXCsJbwST0MXMwgsadugL3
+PnxEX4MN8/HdIGkWCVDi1FW24IBydm5MR7d1VVm0U3TZlMZBrViKMWYPHqIbKUBO
+L9975hYsLfy/7PO0+r4Y9ptJ1O4Fbtk085zx7AGL0SDGD6C1vBdOSHtRwvzpXGk3
+R2azaPgVKPC506QVzFpPulJwoxJF3ca6TvvC0PeoUidtbnm1jPx7jMEWTO6Af77w
+dr5BUxIzrlo4QqvXDz5BjXYHMtWrifZOZ9mxQnUjbvPNQrL8VfVThxc7wDNY8VLS
++YCk8OjwO4s4zKTGkH8PnP2L0aPP2oOnaclQNtVcBdIKQXTbYxE3waWglksejBYS
+d66UNHsef8JmAOSqg+qKkK3ONkRN0VHpvB/zagX9wHQfJRlAUW7qglFA35u5CCoG
+AtUjHBPW6dvbxrB6y3snm/vg1UYk7RBLY0ulBY+6uB0rpvqR4pJSvezrZ5dtmi2f
+gTIFZzL7SAg/2SW4BCUvAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
+BBgwFoAU+y437uOEeicuzRk1sTN8/9REQrkwHQYDVR0OBBYEFPsuN+7jhHonLs0Z
+NbEzfP/UREK5MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAjYlt
+hEUY8U+zoO9opMAdrDC8Z2awms22qyIZZtM7QbUQnRC6cm4pJCAcAZli05bg4vsM
+QtfhWsSWTVTNj8pDU/0quOr4ZcoBwq1gaAafORpR2eCNJvkLTqVTJXojpBzOCBvf
+R4iyrT7gJ4eLSYwfqUdYe5byiB0YrrPRpgqU+tvT5TgKa3kSM/tKWTcWQA673vWJ
+DPFs0/dRa1419dvAJuoSc06pkZCmF8NsLzjUo3KUQyxi4U5cMj29TH0ZR6LDSeeW
+P4+a0zvkEdiLA9z2tmBVGKaBUfPhqBVq6+AL8BQx1rmMRTqoENjwuSfr98t67wVy
+lrXEj5ZzxOhWc5y8aVFjvO9nHEMaX3cZHxj4HCUp+UmZKbaSPaKDN7EgkaibMOlq
+bLQjk2UEqxHzDh1TJElTHaE/nUiSEeJ9DU/1172iWD54nR4fK/4huxoTtrEoZP2w
+AgDHbICivRZQIA9ygV/MlP+7mea6kMvq+cYMwq7FGc4zoWtcu358NFcXrfA/rs3q
+r5nsLFR+jM4uElZI7xc7P0peYNLcdDa8pUNjyw9bowJWCZ4kLOGGgYz+qxcs+sji
+Mho6/4UIyYOf8kpIEFR3N+2ivEC+5BB09+Rbu7nzifmPQdjH5FCQNYA+HLhNkNPU
+98OwoX6EyneSMSy4kLGCenROmxMmtNVQZlR4rmA=
+-----END CERTIFICATE-----
+
+# Issuer: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation
+# Subject: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation
+# Label: "SSL.com TLS ECC Root CA 2022"
+# Serial: 26605119622390491762507526719404364228
+# MD5 Fingerprint: 99:d7:5c:f1:51:36:cc:e9:ce:d9:19:2e:77:71:56:c5
+# SHA1 Fingerprint: 9f:5f:d9:1a:54:6d:f5:0c:71:f0:ee:7a:bd:17:49:98:84:73:e2:39
+# SHA256 Fingerprint: c3:2f:fd:9f:46:f9:36:d1:6c:36:73:99:09:59:43:4b:9a:d6:0a:af:bb:9e:7c:f3:36:54:f1:44:cc:1b:a1:43
+-----BEGIN CERTIFICATE-----
+MIICOjCCAcCgAwIBAgIQFAP1q/s3ixdAW+JDsqXRxDAKBggqhkjOPQQDAzBOMQsw
+CQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQDDBxT
+U0wuY29tIFRMUyBFQ0MgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzM0OFoXDTQ2
+MDgxOTE2MzM0N1owTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jwb3Jh
+dGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgRUNDIFJvb3QgQ0EgMjAyMjB2MBAG
+ByqGSM49AgEGBSuBBAAiA2IABEUpNXP6wrgjzhR9qLFNoFs27iosU8NgCTWyJGYm
+acCzldZdkkAZDsalE3D07xJRKF3nzL35PIXBz5SQySvOkkJYWWf9lCcQZIxPBLFN
+SeR7T5v15wj4A4j3p8OSSxlUgaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME
+GDAWgBSJjy+j6CugFFR781a4Jl9nOAuc0DAdBgNVHQ4EFgQUiY8vo+groBRUe/NW
+uCZfZzgLnNAwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2gAMGUCMFXjIlbp
+15IkWE8elDIPDAI2wv2sdDJO4fscgIijzPvX6yv/N33w7deedWo1dlJF4AIxAMeN
+b0Igj762TVntd00pxCAgRWSGOlDGxK0tk/UYfXLtqc/ErFc2KAhl3zx5Zn6g6g==
+-----END CERTIFICATE-----
+
+# Issuer: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos
+# Subject: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos
+# Label: "Atos TrustedRoot Root CA ECC TLS 2021"
+# Serial: 81873346711060652204712539181482831616
+# MD5 Fingerprint: 16:9f:ad:f1:70:ad:79:d6:ed:29:b4:d1:c5:79:70:a8
+# SHA1 Fingerprint: 9e:bc:75:10:42:b3:02:f3:81:f4:f7:30:62:d4:8f:c3:a7:51:b2:dd
+# SHA256 Fingerprint: b2:fa:e5:3e:14:cc:d7:ab:92:12:06:47:01:ae:27:9c:1d:89:88:fa:cb:77:5f:a8:a0:08:91:4e:66:39:88:a8
+-----BEGIN CERTIFICATE-----
+MIICFTCCAZugAwIBAgIQPZg7pmY9kGP3fiZXOATvADAKBggqhkjOPQQDAzBMMS4w
+LAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgRUNDIFRMUyAyMDIxMQ0w
+CwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTI2MjNaFw00MTA0
+MTcwOTI2MjJaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBDQSBF
+Q0MgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMHYwEAYHKoZI
+zj0CAQYFK4EEACIDYgAEloZYKDcKZ9Cg3iQZGeHkBQcfl+3oZIK59sRxUM6KDP/X
+tXa7oWyTbIOiaG6l2b4siJVBzV3dscqDY4PMwL502eCdpO5KTlbgmClBk1IQ1SQ4
+AjJn8ZQSb+/Xxd4u/RmAo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR2
+KCXWfeBmmnoJsmo7jjPXNtNPojAOBgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMD
+aAAwZQIwW5kp85wxtolrbNa9d+F851F+uDrNozZffPc8dz7kUK2o59JZDCaOMDtu
+CCrCp1rIAjEAmeMM56PDr9NJLkaCI2ZdyQAUEv049OGYa3cpetskz2VAv9LcjBHo
+9H1/IISpQuQo
+-----END CERTIFICATE-----
+
+# Issuer: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos
+# Subject: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos
+# Label: "Atos TrustedRoot Root CA RSA TLS 2021"
+# Serial: 111436099570196163832749341232207667876
+# MD5 Fingerprint: d4:d3:46:b8:9a:c0:9c:76:5d:9e:3a:c3:b9:99:31:d2
+# SHA1 Fingerprint: 18:52:3b:0d:06:37:e4:d6:3a:df:23:e4:98:fb:5b:16:fb:86:74:48
+# SHA256 Fingerprint: 81:a9:08:8e:a5:9f:b3:64:c5:48:a6:f8:55:59:09:9b:6f:04:05:ef:bf:18:e5:32:4e:c9:f4:57:ba:00:11:2f
+-----BEGIN CERTIFICATE-----
+MIIFZDCCA0ygAwIBAgIQU9XP5hmTC/srBRLYwiqipDANBgkqhkiG9w0BAQwFADBM
+MS4wLAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgUlNBIFRMUyAyMDIx
+MQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTIxMTBaFw00
+MTA0MTcwOTIxMDlaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBD
+QSBSU0EgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMIICIjAN
+BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtoAOxHm9BYx9sKOdTSJNy/BBl01Z
+4NH+VoyX8te9j2y3I49f1cTYQcvyAh5x5en2XssIKl4w8i1mx4QbZFc4nXUtVsYv
+Ye+W/CBGvevUez8/fEc4BKkbqlLfEzfTFRVOvV98r61jx3ncCHvVoOX3W3WsgFWZ
+kmGbzSoXfduP9LVq6hdKZChmFSlsAvFr1bqjM9xaZ6cF4r9lthawEO3NUDPJcFDs
+GY6wx/J0W2tExn2WuZgIWWbeKQGb9Cpt0xU6kGpn8bRrZtkh68rZYnxGEFzedUln
+nkL5/nWpo63/dgpnQOPF943HhZpZnmKaau1Fh5hnstVKPNe0OwANwI8f4UDErmwh
+3El+fsqyjW22v5MvoVw+j8rtgI5Y4dtXz4U2OLJxpAmMkokIiEjxQGMYsluMWuPD
+0xeqqxmjLBvk1cbiZnrXghmmOxYsL3GHX0WelXOTwkKBIROW1527k2gV+p2kHYzy
+geBYBr3JtuP2iV2J+axEoctr+hbxx1A9JNr3w+SH1VbxT5Aw+kUJWdo0zuATHAR8
+ANSbhqRAvNncTFd+rrcztl524WWLZt+NyteYr842mIycg5kDcPOvdO3GDjbnvezB
+c6eUWsuSZIKmAMFwoW4sKeFYV+xafJlrJaSQOoD0IJ2azsct+bJLKZWD6TWNp0lI
+pw9MGZHQ9b8Q4HECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU
+dEmZ0f+0emhFdcN+tNzMzjkz2ggwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
+DAUAA4ICAQAjQ1MkYlxt/T7Cz1UAbMVWiLkO3TriJQ2VSpfKgInuKs1l+NsW4AmS
+4BjHeJi78+xCUvuppILXTdiK/ORO/auQxDh1MoSf/7OwKwIzNsAQkG8dnK/haZPs
+o0UvFJ/1TCplQ3IM98P4lYsU84UgYt1UU90s3BiVaU+DR3BAM1h3Egyi61IxHkzJ
+qM7F78PRreBrAwA0JrRUITWXAdxfG/F851X6LWh3e9NpzNMOa7pNdkTWwhWaJuyw
+xfW70Xp0wmzNxbVe9kzmWy2B27O3Opee7c9GslA9hGCZcbUztVdF5kJHdWoOsAgM
+rr3e97sPWD2PAzHoPYJQyi9eDF20l74gNAf0xBLh7tew2VktafcxBPTy+av5EzH4
+AXcOPUIjJsyacmdRIXrMPIWo6iFqO9taPKU0nprALN+AnCng33eU0aKAQv9qTFsR
+0PXNor6uzFFcw9VUewyu1rkGd4Di7wcaaMxZUa1+XGdrudviB0JbuAEFWDlN5LuY
+o7Ey7Nmj1m+UI/87tyll5gfp77YZ6ufCOB0yiJA8EytuzO+rdwY0d4RPcuSBhPm5
+dDTedk+SKlOxJTnbPP/lPqYO5Wue/9vsL3SD3460s6neFE3/MaNFcyT6lSnMEpcE
+oji2jbDwN/zIIX8/syQbPYtuzE2wFg2WHYMfRsCbvUOZ58SWLs5fyQ==
+-----END CERTIFICATE-----
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-311.pyc
index 27885b58..0f6e7887 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-311.pyc
index ddf2fcc0..9f86b7d5 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-311.pyc
index 9bbfaff6..31510358 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-311.pyc
index 499d1f47..c6f81cb4 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-311.pyc
index 746ccb08..39eae5ce 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-311.pyc
index eaf74d99..bfb9b1c4 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-311.pyc
index 8310a922..ac3eb3e5 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-311.pyc
index 513c7db2..ffb7b851 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-311.pyc
index 6ee1f81f..9dc9420a 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-311.pyc
index 4ebc2d16..438a3df5 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-311.pyc
index c53b1a54..10cb23a9 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-311.pyc
index 85311cef..a97e53dc 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-311.pyc
index f3ea50b1..d162373e 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-311.pyc
index 119ee1f4..60e1db87 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-311.pyc
index 39cf0d8e..b5f3a958 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-311.pyc
index b368cc3f..b6e38046 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-311.pyc
index cb0dffd8..75dcc87e 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-311.pyc
index 197bb268..b1ecff40 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-311.pyc
index cca421fe..f93b72cc 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-311.pyc
index 71f9a289..8d72d177 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-311.pyc
index 8415fb95..f81b6d28 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-311.pyc
index c8c6609f..86fa0e89 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-311.pyc
index e3d1c96e..04b4b70f 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-311.pyc
index a9f15c39..5f6bdcb6 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-311.pyc
index 828824c3..fe03dd72 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-311.pyc
index 72c33586..a632523d 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-311.pyc
index fa7cdfe2..6511edde 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-311.pyc
index 5096f2c7..b3f65327 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-311.pyc
index b0057d30..a4ccb5f5 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-311.pyc
index 5245fe3a..654c2b07 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-311.pyc
index a074ddcf..47792c35 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-311.pyc
index f04faa3d..33a795c3 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-311.pyc
index 201eb617..021a5a38 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-311.pyc
index 77ae3c7b..5f4a225b 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-311.pyc
index 25e5831d..9efcc510 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-311.pyc
index 6073eebb..1d9af64c 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-311.pyc
index fc6176dd..fda747e8 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-311.pyc
index 932a87cb..f2c5143d 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-311.pyc
index 6068c6d5..089c809d 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-311.pyc
index 43d50259..d49cae18 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-311.pyc
index 0c697ab5..1a3bf91d 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-311.pyc
index 2392905e..12b51b3f 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-311.pyc
index 069ac0cc..a1e1d9bc 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-311.pyc
index d42caf3d..0052a307 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-311.pyc
index 7747c2a8..d3187945 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-311.pyc
index c27fe22f..a9d5e2b6 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-311.pyc
index d23296da..7ca9a6b0 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-311.pyc
index bddd1be4..1ba0d673 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-311.pyc
index c0df8ac3..c7dacc66 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-311.pyc
index 468ec2e8..657e9456 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-311.pyc
index 0cc9d51a..c5a3d8e6 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-311.pyc
index 81db87bf..e4c4b689 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-311.pyc
index 4d0180ab..c1a61633 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-311.pyc
index e35cafb6..ea6c7ef8 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/__init__.cpython-311.pyc
index b80ddadc..78710ed3 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-311.pyc
index adc7362e..5e8f3171 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-311.pyc
index 248fe5f0..9bcc3dc2 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-311.pyc
index 1373b005..9675c9db 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-311.pyc
index f5f8625d..6c120719 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/utils.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/utils.cpython-311.pyc
index 2b2541c1..23d077fd 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/utils.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/utils.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-311.pyc
index 16b538d3..73b66591 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-311.pyc
index 4c58fc55..e107acb0 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-311.pyc
index fff151c1..603555b0 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-311.pyc
index 48adf313..9660c93d 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-311.pyc
index 04990d14..08bb7186 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-311.pyc
index 473d3210..54fd5a4f 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-311.pyc
index 532e719d..e9886613 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-311.pyc
index 504b4272..8c2a44a9 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-311.pyc
index d002ac5d..32a963d1 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-311.pyc
index 63448086..306a5092 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-311.pyc
index 35e01c7f..1caae4ee 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-311.pyc
index d552f623..7158a3c3 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-311.pyc
index 5dbf4335..e6508882 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-311.pyc
index f6134d67..d6d76c01 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-311.pyc
index 9b323332..05dd13d7 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-311.pyc
index 7f889fd1..ef191904 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-311.pyc
index 885299d8..aaaf4fab 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-311.pyc
index 66691dcc..48d82b24 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-311.pyc
index 75126105..d77c87cc 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-311.pyc
index 50aa0452..52f1f25f 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/core.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/core.cpython-311.pyc
index 64c5fd1f..f94a79d0 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/core.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/core.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-311.pyc
index eac28256..0429a64d 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-311.pyc
index 386d8ee1..f6db61a9 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-311.pyc
index 8b602cff..a586b892 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-311.pyc
index bf21e5bf..e9c07c61 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-311.pyc
index c6852292..5d9886e7 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-311.pyc
index e382d9e9..a096a598 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-311.pyc
index 83569f25..cc431393 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-311.pyc
index 03ccb0f4..a9782dbd 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-311.pyc
index 145944ef..0af6cfa8 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-311.pyc
index 2a9c8787..f027ce7f 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc
index 2cc979bb..075e9169 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc
index 41bf9cbf..3b1a980d 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-311.pyc
index 84989127..03e9c63e 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-311.pyc
index 4b4c2d9e..2e82fa59 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-311.pyc
index 2d8a929c..9546a4ca 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc
index e959fa5e..848960ee 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-311.pyc
index afa66f58..fd290ed8 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-311.pyc
index 64a772a1..65ef6d2e 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-311.pyc
index 6e75c387..a99f8aa0 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-311.pyc
index 41e89025..3aeaa23c 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-311.pyc
index 48515c59..efa0f7c0 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-311.pyc
index deb53523..748b3326 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-311.pyc
index 0a78a70a..91385174 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-311.pyc
index 4133006f..b6f143ff 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-311.pyc
index 06c2ef1f..4eaae82f 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-311.pyc
index 4db0d014..d140593d 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-311.pyc
index d541791e..20e9aa2f 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-311.pyc
index 44ea5659..6bd4e4c1 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-311.pyc
index 379be5ea..415ebca2 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-311.pyc
index 37aa5920..6c14e69e 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-311.pyc
index ed66ff4f..dfc98b59 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-311.pyc
index d862505d..c39229b3 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-311.pyc
index 91a69903..a4e2ca9a 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-311.pyc
index 42bb756e..68f8caad 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-311.pyc
index 32fcbd28..a117d76f 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-311.pyc
index bde09af0..550e5925 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-311.pyc
index 581a10da..879e0836 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-311.pyc
index 5e6ecee3..d9e4e563 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-311.pyc
index 96b040b8..a4ca2783 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-311.pyc
index af84f106..fd86f9f2 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-311.pyc
index 11b6143b..67470b46 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-311.pyc
index 6d78d5d4..1957092d 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-311.pyc
index b631c606..7a98ad1e 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-311.pyc
index 320ee81d..02ebe0fe 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-311.pyc
index a2b687ec..2df57636 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-311.pyc
index e6fab691..3293e484 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-311.pyc
index a17c3939..e409f2d8 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-311.pyc
index 4768a8af..9eae9847 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-311.pyc
index 9db54aee..a8ed86da 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-311.pyc
index d4224b9f..6ce36f39 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-311.pyc
index c956f866..9263c0cc 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-311.pyc
index bbef2012..4bcaa2db 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-311.pyc
index b046aa82..c8f942f4 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-311.pyc
index be12bf1b..8dec7f4a 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-311.pyc
index 15457af5..4b266ffe 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-311.pyc
index e1bf5154..48383b6b 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-311.pyc
index 25548cf4..a6cb3af0 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-311.pyc
index 273d90cd..37a05485 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-311.pyc
index 15721e28..e9b299ab 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-311.pyc
index 792bfe2f..0e572aca 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-311.pyc
index 72bab4d0..c8ee1b72 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-311.pyc
index 9f3fae75..b436f731 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-311.pyc
index 32aabb6a..5e8cae5d 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-311.pyc
index d64fc637..c61ae22e 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-311.pyc
index 40aa5e4c..bda61a24 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-311.pyc
index 15ff87da..deb72874 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-311.pyc
index bab82084..4888f776 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-311.pyc
index 00b5a58c..e2ac6af8 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-311.pyc
index 758370ff..773346cd 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-311.pyc
index b6ea7889..94d1e14c 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-311.pyc
index dec83d5b..04292942 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-311.pyc
index a28711ab..58baa265 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/util.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/util.cpython-311.pyc
index a8ddcfeb..0173699a 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/util.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/util.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-311.pyc
index e1d22b75..e54cde5f 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-311.pyc
index 8cd76c1e..006ceda5 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-311.pyc
index 05d5d440..db5d87d0 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-311.pyc
index fa815014..7f8ef44f 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-311.pyc
index b2141b03..ade2ab21 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-311.pyc
index 1294cd7b..3c1d4b63 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-311.pyc
index 420aba18..28cab06d 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-311.pyc
index 2d369668..1e55a307 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-311.pyc
index 7459d1ca..47b2837e 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-311.pyc
index 29f9b3cf..0ee55528 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/api.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/api.cpython-311.pyc
index 37a483bf..c5cef287 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/api.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/api.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-311.pyc
index 13bab0e0..269af661 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-311.pyc
index 30590b1a..386b5582 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-311.pyc
index 9aed06e6..1f842c23 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-311.pyc
index 1a358c44..673be9d6 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-311.pyc
index 691bf46b..6e7e3594 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/help.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/help.cpython-311.pyc
index e9c937f7..71fcb47e 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/help.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/help.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-311.pyc
index 5f5004d1..c53b3d36 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/models.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/models.cpython-311.pyc
index d2068163..0ca2c886 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/models.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/models.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-311.pyc
index 16500e9b..fc41f1f2 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-311.pyc
index cde5a6e7..5145e669 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-311.pyc
index 386b4760..09de5b89 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-311.pyc
index 22aa917d..8e151ddd 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-311.pyc
index 92de5472..69794947 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-311.pyc
index 2cb8d0e7..35433410 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-311.pyc
index 053289ea..05f04bc9 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-311.pyc
index c2c94add..9a22cefa 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-311.pyc
index 9f870ba4..57873c03 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-311.pyc
index 547bf00e..b1769afb 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-311.pyc
index f73e7e9e..70c5acc0 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-311.pyc
index a1aeeda4..c4732bd0 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-311.pyc
index 57a99c5c..18c51a3e 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-311.pyc
index 85300a21..25b088f7 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-311.pyc
index c20d570d..5687dd02 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-311.pyc
index d58e6dcf..426f7544 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-311.pyc
index 4f9ed186..c81b44e8 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-311.pyc
index e27507e9..c75a2174 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-311.pyc
index c8b68077..e0367460 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-311.pyc
index 62700b4e..60a9575e 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-311.pyc
index 716f4108..1c5bd9f3 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-311.pyc
index 5dd4f0d1..a4b60337 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-311.pyc
index e4fdeee1..f788bdfa 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-311.pyc
index fb29940d..f42af9bf 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-311.pyc
index c371921d..db837e27 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-311.pyc
index 8f161294..5889955d 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-311.pyc
index 69449ffe..c93f12e7 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-311.pyc
index 932b50e6..cb6362a8 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-311.pyc
index 675bbab2..dd3a702a 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-311.pyc
index e49e15c7..ee8a3440 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-311.pyc
index 86fa9c1d..910df531 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-311.pyc
index ed3a8f06..f1a655c9 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-311.pyc
index e74fd813..078e6231 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-311.pyc
index 36244df7..b6518890 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-311.pyc
index 10ac9d2c..a950f7dd 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/align.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/align.cpython-311.pyc
index 3bf74d26..7a073992 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/align.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/align.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-311.pyc
index 9af11f1a..236610c0 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-311.pyc
index 692f43a8..b99d6515 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/box.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/box.cpython-311.pyc
index 862b4a21..baccc5cd 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/box.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/box.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-311.pyc
index fd234102..0379c7c8 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/color.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/color.cpython-311.pyc
index 60942a79..64a577bb 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/color.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/color.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-311.pyc
index 22f1c7a0..484475e5 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-311.pyc
index 52a80215..e9bd6aa8 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/console.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/console.cpython-311.pyc
index 6eb2d2b1..2680d859 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/console.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/console.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-311.pyc
index 4a81d758..130dffc2 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-311.pyc
index 7dc5c704..81e078bc 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/control.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/control.cpython-311.pyc
index 08c69fd9..d88a5f9c 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/control.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/control.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-311.pyc
index 67eb7d7b..14c17ac3 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-311.pyc
index 571e74e9..ea37e1e6 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-311.pyc
index a09fa5a7..b50a595c 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-311.pyc
index 09999f83..ec6b71fc 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-311.pyc
index 940e56fa..82ea27d0 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-311.pyc
index c0f22195..e30f10a0 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-311.pyc
index ebd0cca1..a89f0bc5 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/json.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/json.cpython-311.pyc
index db20ea54..e847d050 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/json.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/json.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-311.pyc
index d23ee536..c0d9eff8 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-311.pyc
index 07956231..701cd765 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/live.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/live.cpython-311.pyc
index fe33adb3..ce81738f 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/live.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/live.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-311.pyc
index 817a9c69..32be75ab 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-311.pyc
index a0959531..0b25ba69 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-311.pyc
index 5ff97310..1ba78199 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-311.pyc
index fe41b45e..d519bd03 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-311.pyc
index c8dbfb71..84c7265b 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-311.pyc
index 6ff4c86b..0f627dc7 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-311.pyc
index 5af4f187..fc2b636d 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-311.pyc
index ed9c84d9..0c52b4a3 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-311.pyc
index 1b9ab653..3199cdaf 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-311.pyc
index 7adbd4dd..05dabb52 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-311.pyc
index 1440f26f..b92b38ab 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-311.pyc
index da605631..5a6da873 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-311.pyc
index cc5793c8..638c6f2e 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/region.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/region.cpython-311.pyc
index ebf96919..47bb8886 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/region.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/region.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-311.pyc
index 690538b6..5561ad5e 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-311.pyc
index 0130dee0..e0fd9295 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-311.pyc
index 41c0e268..60aab010 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-311.pyc
index 65578057..e40ae3bf 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-311.pyc
index 83f7977d..4e0ca5eb 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-311.pyc
index fade9afa..bd58b444 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/status.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/status.cpython-311.pyc
index e76937d6..38ef50d8 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/status.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/status.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/style.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/style.cpython-311.pyc
index 1ae976b7..8b3e6e63 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/style.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/style.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-311.pyc
index 41e84467..5a744d4d 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-311.pyc
index c990cd94..5cb32699 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/table.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/table.cpython-311.pyc
index 2de81bdf..3c6a320b 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/table.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/table.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-311.pyc
index 6128214c..8097586d 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/text.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/text.cpython-311.pyc
index 412a668a..a7d66f6b 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/text.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/text.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-311.pyc
index 94ffa1ae..aa18751d 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-311.pyc
index 9ce379b9..04b0b063 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-311.pyc
index 44ac9fee..17806ecf 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-311.pyc
index df6f4d84..763fc656 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/__init__.cpython-311.pyc
index d81c76ef..5da2e81c 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/_asyncio.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/_asyncio.cpython-311.pyc
index 0e70b732..d1dfa1f9 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/_asyncio.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/_asyncio.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-311.pyc
index 89960192..c96b98a9 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-311.pyc
index 4f1a0050..9e0ca779 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-311.pyc
index 756740a8..3a1259b9 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/before_sleep.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/before_sleep.cpython-311.pyc
index 3c7739f9..97d85c22 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/before_sleep.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/before_sleep.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-311.pyc
index 9e690704..742b3d5a 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-311.pyc
index 7a1af371..a4d34550 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-311.pyc
index 846614bd..cc0ccf93 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-311.pyc
index 51458216..955bda5b 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-311.pyc
index c2603086..b099c7f8 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-311.pyc
index 6cbac02d..e9bbd830 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-311.pyc
index 1c0d0a4b..21ad8eaf 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-311.pyc
index 06d4bde6..ff4b1ed9 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-311.pyc
index 8fbd3a3f..e7e462fb 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/truststore/__init__.py b/lib/python3.11/site-packages/pip/_vendor/truststore/__init__.py
new file mode 100644
index 00000000..59930f45
--- /dev/null
+++ b/lib/python3.11/site-packages/pip/_vendor/truststore/__init__.py
@@ -0,0 +1,13 @@
+"""Verify certificates using native system trust stores"""
+
+import sys as _sys
+
+if _sys.version_info < (3, 10):
+ raise ImportError("truststore requires Python 3.10 or later")
+
+from ._api import SSLContext, extract_from_ssl, inject_into_ssl # noqa: E402
+
+del _api, _sys # type: ignore[name-defined] # noqa: F821
+
+__all__ = ["SSLContext", "inject_into_ssl", "extract_from_ssl"]
+__version__ = "0.8.0"
diff --git a/lib/python3.11/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-311.pyc
new file mode 100644
index 00000000..5f9773f2
Binary files /dev/null and b/lib/python3.11/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-311.pyc
new file mode 100644
index 00000000..193b33be
Binary files /dev/null and b/lib/python3.11/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-311.pyc
new file mode 100644
index 00000000..8927c961
Binary files /dev/null and b/lib/python3.11/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-311.pyc
new file mode 100644
index 00000000..754ebf9d
Binary files /dev/null and b/lib/python3.11/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-311.pyc
new file mode 100644
index 00000000..cd2ad10e
Binary files /dev/null and b/lib/python3.11/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-311.pyc
new file mode 100644
index 00000000..c128b932
Binary files /dev/null and b/lib/python3.11/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/truststore/_api.py b/lib/python3.11/site-packages/pip/_vendor/truststore/_api.py
new file mode 100644
index 00000000..829aff72
--- /dev/null
+++ b/lib/python3.11/site-packages/pip/_vendor/truststore/_api.py
@@ -0,0 +1,302 @@
+import os
+import platform
+import socket
+import ssl
+import typing
+
+import _ssl # type: ignore[import]
+
+from ._ssl_constants import (
+ _original_SSLContext,
+ _original_super_SSLContext,
+ _truststore_SSLContext_dunder_class,
+ _truststore_SSLContext_super_class,
+)
+
+if platform.system() == "Windows":
+ from ._windows import _configure_context, _verify_peercerts_impl
+elif platform.system() == "Darwin":
+ from ._macos import _configure_context, _verify_peercerts_impl
+else:
+ from ._openssl import _configure_context, _verify_peercerts_impl
+
+if typing.TYPE_CHECKING:
+ from pip._vendor.typing_extensions import Buffer
+
+# From typeshed/stdlib/ssl.pyi
+_StrOrBytesPath: typing.TypeAlias = str | bytes | os.PathLike[str] | os.PathLike[bytes]
+_PasswordType: typing.TypeAlias = str | bytes | typing.Callable[[], str | bytes]
+
+
+def inject_into_ssl() -> None:
+ """Injects the :class:`truststore.SSLContext` into the ``ssl``
+ module by replacing :class:`ssl.SSLContext`.
+ """
+ setattr(ssl, "SSLContext", SSLContext)
+ # urllib3 holds on to its own reference of ssl.SSLContext
+ # so we need to replace that reference too.
+ try:
+ import pip._vendor.urllib3.util.ssl_ as urllib3_ssl
+
+ setattr(urllib3_ssl, "SSLContext", SSLContext)
+ except ImportError:
+ pass
+
+
+def extract_from_ssl() -> None:
+ """Restores the :class:`ssl.SSLContext` class to its original state"""
+ setattr(ssl, "SSLContext", _original_SSLContext)
+ try:
+ import pip._vendor.urllib3.util.ssl_ as urllib3_ssl
+
+ urllib3_ssl.SSLContext = _original_SSLContext
+ except ImportError:
+ pass
+
+
+class SSLContext(_truststore_SSLContext_super_class): # type: ignore[misc]
+ """SSLContext API that uses system certificates on all platforms"""
+
+ @property # type: ignore[misc]
+ def __class__(self) -> type:
+ # Dirty hack to get around isinstance() checks
+ # for ssl.SSLContext instances in aiohttp/trustme
+ # when using non-CPython implementations.
+ return _truststore_SSLContext_dunder_class or SSLContext
+
+ def __init__(self, protocol: int = None) -> None: # type: ignore[assignment]
+ self._ctx = _original_SSLContext(protocol)
+
+ class TruststoreSSLObject(ssl.SSLObject):
+ # This object exists because wrap_bio() doesn't
+ # immediately do the handshake so we need to do
+ # certificate verifications after SSLObject.do_handshake()
+
+ def do_handshake(self) -> None:
+ ret = super().do_handshake()
+ _verify_peercerts(self, server_hostname=self.server_hostname)
+ return ret
+
+ self._ctx.sslobject_class = TruststoreSSLObject
+
+ def wrap_socket(
+ self,
+ sock: socket.socket,
+ server_side: bool = False,
+ do_handshake_on_connect: bool = True,
+ suppress_ragged_eofs: bool = True,
+ server_hostname: str | None = None,
+ session: ssl.SSLSession | None = None,
+ ) -> ssl.SSLSocket:
+ # Use a context manager here because the
+ # inner SSLContext holds on to our state
+ # but also does the actual handshake.
+ with _configure_context(self._ctx):
+ ssl_sock = self._ctx.wrap_socket(
+ sock,
+ server_side=server_side,
+ server_hostname=server_hostname,
+ do_handshake_on_connect=do_handshake_on_connect,
+ suppress_ragged_eofs=suppress_ragged_eofs,
+ session=session,
+ )
+ try:
+ _verify_peercerts(ssl_sock, server_hostname=server_hostname)
+ except Exception:
+ ssl_sock.close()
+ raise
+ return ssl_sock
+
+ def wrap_bio(
+ self,
+ incoming: ssl.MemoryBIO,
+ outgoing: ssl.MemoryBIO,
+ server_side: bool = False,
+ server_hostname: str | None = None,
+ session: ssl.SSLSession | None = None,
+ ) -> ssl.SSLObject:
+ with _configure_context(self._ctx):
+ ssl_obj = self._ctx.wrap_bio(
+ incoming,
+ outgoing,
+ server_hostname=server_hostname,
+ server_side=server_side,
+ session=session,
+ )
+ return ssl_obj
+
+ def load_verify_locations(
+ self,
+ cafile: str | bytes | os.PathLike[str] | os.PathLike[bytes] | None = None,
+ capath: str | bytes | os.PathLike[str] | os.PathLike[bytes] | None = None,
+ cadata: typing.Union[str, "Buffer", None] = None,
+ ) -> None:
+ return self._ctx.load_verify_locations(
+ cafile=cafile, capath=capath, cadata=cadata
+ )
+
+ def load_cert_chain(
+ self,
+ certfile: _StrOrBytesPath,
+ keyfile: _StrOrBytesPath | None = None,
+ password: _PasswordType | None = None,
+ ) -> None:
+ return self._ctx.load_cert_chain(
+ certfile=certfile, keyfile=keyfile, password=password
+ )
+
+ def load_default_certs(
+ self, purpose: ssl.Purpose = ssl.Purpose.SERVER_AUTH
+ ) -> None:
+ return self._ctx.load_default_certs(purpose)
+
+ def set_alpn_protocols(self, alpn_protocols: typing.Iterable[str]) -> None:
+ return self._ctx.set_alpn_protocols(alpn_protocols)
+
+ def set_npn_protocols(self, npn_protocols: typing.Iterable[str]) -> None:
+ return self._ctx.set_npn_protocols(npn_protocols)
+
+ def set_ciphers(self, __cipherlist: str) -> None:
+ return self._ctx.set_ciphers(__cipherlist)
+
+ def get_ciphers(self) -> typing.Any:
+ return self._ctx.get_ciphers()
+
+ def session_stats(self) -> dict[str, int]:
+ return self._ctx.session_stats()
+
+ def cert_store_stats(self) -> dict[str, int]:
+ raise NotImplementedError()
+
+ @typing.overload
+ def get_ca_certs(
+ self, binary_form: typing.Literal[False] = ...
+ ) -> list[typing.Any]:
+ ...
+
+ @typing.overload
+ def get_ca_certs(self, binary_form: typing.Literal[True] = ...) -> list[bytes]:
+ ...
+
+ @typing.overload
+ def get_ca_certs(self, binary_form: bool = ...) -> typing.Any:
+ ...
+
+ def get_ca_certs(self, binary_form: bool = False) -> list[typing.Any] | list[bytes]:
+ raise NotImplementedError()
+
+ @property
+ def check_hostname(self) -> bool:
+ return self._ctx.check_hostname
+
+ @check_hostname.setter
+ def check_hostname(self, value: bool) -> None:
+ self._ctx.check_hostname = value
+
+ @property
+ def hostname_checks_common_name(self) -> bool:
+ return self._ctx.hostname_checks_common_name
+
+ @hostname_checks_common_name.setter
+ def hostname_checks_common_name(self, value: bool) -> None:
+ self._ctx.hostname_checks_common_name = value
+
+ @property
+ def keylog_filename(self) -> str:
+ return self._ctx.keylog_filename
+
+ @keylog_filename.setter
+ def keylog_filename(self, value: str) -> None:
+ self._ctx.keylog_filename = value
+
+ @property
+ def maximum_version(self) -> ssl.TLSVersion:
+ return self._ctx.maximum_version
+
+ @maximum_version.setter
+ def maximum_version(self, value: ssl.TLSVersion) -> None:
+ _original_super_SSLContext.maximum_version.__set__( # type: ignore[attr-defined]
+ self._ctx, value
+ )
+
+ @property
+ def minimum_version(self) -> ssl.TLSVersion:
+ return self._ctx.minimum_version
+
+ @minimum_version.setter
+ def minimum_version(self, value: ssl.TLSVersion) -> None:
+ _original_super_SSLContext.minimum_version.__set__( # type: ignore[attr-defined]
+ self._ctx, value
+ )
+
+ @property
+ def options(self) -> ssl.Options:
+ return self._ctx.options
+
+ @options.setter
+ def options(self, value: ssl.Options) -> None:
+ _original_super_SSLContext.options.__set__( # type: ignore[attr-defined]
+ self._ctx, value
+ )
+
+ @property
+ def post_handshake_auth(self) -> bool:
+ return self._ctx.post_handshake_auth
+
+ @post_handshake_auth.setter
+ def post_handshake_auth(self, value: bool) -> None:
+ self._ctx.post_handshake_auth = value
+
+ @property
+ def protocol(self) -> ssl._SSLMethod:
+ return self._ctx.protocol
+
+ @property
+ def security_level(self) -> int:
+ return self._ctx.security_level
+
+ @property
+ def verify_flags(self) -> ssl.VerifyFlags:
+ return self._ctx.verify_flags
+
+ @verify_flags.setter
+ def verify_flags(self, value: ssl.VerifyFlags) -> None:
+ _original_super_SSLContext.verify_flags.__set__( # type: ignore[attr-defined]
+ self._ctx, value
+ )
+
+ @property
+ def verify_mode(self) -> ssl.VerifyMode:
+ return self._ctx.verify_mode
+
+ @verify_mode.setter
+ def verify_mode(self, value: ssl.VerifyMode) -> None:
+ _original_super_SSLContext.verify_mode.__set__( # type: ignore[attr-defined]
+ self._ctx, value
+ )
+
+
+def _verify_peercerts(
+ sock_or_sslobj: ssl.SSLSocket | ssl.SSLObject, server_hostname: str | None
+) -> None:
+ """
+ Verifies the peer certificates from an SSLSocket or SSLObject
+ against the certificates in the OS trust store.
+ """
+ sslobj: ssl.SSLObject = sock_or_sslobj # type: ignore[assignment]
+ try:
+ while not hasattr(sslobj, "get_unverified_chain"):
+ sslobj = sslobj._sslobj # type: ignore[attr-defined]
+ except AttributeError:
+ pass
+
+ # SSLObject.get_unverified_chain() returns 'None'
+ # if the peer sends no certificates. This is common
+ # for the server-side scenario.
+ unverified_chain: typing.Sequence[_ssl.Certificate] = (
+ sslobj.get_unverified_chain() or () # type: ignore[attr-defined]
+ )
+ cert_bytes = [cert.public_bytes(_ssl.ENCODING_DER) for cert in unverified_chain]
+ _verify_peercerts_impl(
+ sock_or_sslobj.context, cert_bytes, server_hostname=server_hostname
+ )
diff --git a/lib/python3.11/site-packages/pip/_vendor/truststore/_macos.py b/lib/python3.11/site-packages/pip/_vendor/truststore/_macos.py
new file mode 100644
index 00000000..7dc440bf
--- /dev/null
+++ b/lib/python3.11/site-packages/pip/_vendor/truststore/_macos.py
@@ -0,0 +1,501 @@
+import contextlib
+import ctypes
+import platform
+import ssl
+import typing
+from ctypes import (
+ CDLL,
+ POINTER,
+ c_bool,
+ c_char_p,
+ c_int32,
+ c_long,
+ c_uint32,
+ c_ulong,
+ c_void_p,
+)
+from ctypes.util import find_library
+
+from ._ssl_constants import _set_ssl_context_verify_mode
+
+_mac_version = platform.mac_ver()[0]
+_mac_version_info = tuple(map(int, _mac_version.split(".")))
+if _mac_version_info < (10, 8):
+ raise ImportError(
+ f"Only OS X 10.8 and newer are supported, not {_mac_version_info[0]}.{_mac_version_info[1]}"
+ )
+
+
+def _load_cdll(name: str, macos10_16_path: str) -> CDLL:
+ """Loads a CDLL by name, falling back to known path on 10.16+"""
+ try:
+ # Big Sur is technically 11 but we use 10.16 due to the Big Sur
+ # beta being labeled as 10.16.
+ path: str | None
+ if _mac_version_info >= (10, 16):
+ path = macos10_16_path
+ else:
+ path = find_library(name)
+ if not path:
+ raise OSError # Caught and reraised as 'ImportError'
+ return CDLL(path, use_errno=True)
+ except OSError:
+ raise ImportError(f"The library {name} failed to load") from None
+
+
+Security = _load_cdll(
+ "Security", "/System/Library/Frameworks/Security.framework/Security"
+)
+CoreFoundation = _load_cdll(
+ "CoreFoundation",
+ "/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation",
+)
+
+Boolean = c_bool
+CFIndex = c_long
+CFStringEncoding = c_uint32
+CFData = c_void_p
+CFString = c_void_p
+CFArray = c_void_p
+CFMutableArray = c_void_p
+CFError = c_void_p
+CFType = c_void_p
+CFTypeID = c_ulong
+CFTypeRef = POINTER(CFType)
+CFAllocatorRef = c_void_p
+
+OSStatus = c_int32
+
+CFErrorRef = POINTER(CFError)
+CFDataRef = POINTER(CFData)
+CFStringRef = POINTER(CFString)
+CFArrayRef = POINTER(CFArray)
+CFMutableArrayRef = POINTER(CFMutableArray)
+CFArrayCallBacks = c_void_p
+CFOptionFlags = c_uint32
+
+SecCertificateRef = POINTER(c_void_p)
+SecPolicyRef = POINTER(c_void_p)
+SecTrustRef = POINTER(c_void_p)
+SecTrustResultType = c_uint32
+SecTrustOptionFlags = c_uint32
+
+try:
+ Security.SecCertificateCreateWithData.argtypes = [CFAllocatorRef, CFDataRef]
+ Security.SecCertificateCreateWithData.restype = SecCertificateRef
+
+ Security.SecCertificateCopyData.argtypes = [SecCertificateRef]
+ Security.SecCertificateCopyData.restype = CFDataRef
+
+ Security.SecCopyErrorMessageString.argtypes = [OSStatus, c_void_p]
+ Security.SecCopyErrorMessageString.restype = CFStringRef
+
+ Security.SecTrustSetAnchorCertificates.argtypes = [SecTrustRef, CFArrayRef]
+ Security.SecTrustSetAnchorCertificates.restype = OSStatus
+
+ Security.SecTrustSetAnchorCertificatesOnly.argtypes = [SecTrustRef, Boolean]
+ Security.SecTrustSetAnchorCertificatesOnly.restype = OSStatus
+
+ Security.SecTrustEvaluate.argtypes = [SecTrustRef, POINTER(SecTrustResultType)]
+ Security.SecTrustEvaluate.restype = OSStatus
+
+ Security.SecPolicyCreateRevocation.argtypes = [CFOptionFlags]
+ Security.SecPolicyCreateRevocation.restype = SecPolicyRef
+
+ Security.SecPolicyCreateSSL.argtypes = [Boolean, CFStringRef]
+ Security.SecPolicyCreateSSL.restype = SecPolicyRef
+
+ Security.SecTrustCreateWithCertificates.argtypes = [
+ CFTypeRef,
+ CFTypeRef,
+ POINTER(SecTrustRef),
+ ]
+ Security.SecTrustCreateWithCertificates.restype = OSStatus
+
+ Security.SecTrustGetTrustResult.argtypes = [
+ SecTrustRef,
+ POINTER(SecTrustResultType),
+ ]
+ Security.SecTrustGetTrustResult.restype = OSStatus
+
+ Security.SecTrustRef = SecTrustRef # type: ignore[attr-defined]
+ Security.SecTrustResultType = SecTrustResultType # type: ignore[attr-defined]
+ Security.OSStatus = OSStatus # type: ignore[attr-defined]
+
+ kSecRevocationUseAnyAvailableMethod = 3
+ kSecRevocationRequirePositiveResponse = 8
+
+ CoreFoundation.CFRelease.argtypes = [CFTypeRef]
+ CoreFoundation.CFRelease.restype = None
+
+ CoreFoundation.CFGetTypeID.argtypes = [CFTypeRef]
+ CoreFoundation.CFGetTypeID.restype = CFTypeID
+
+ CoreFoundation.CFStringCreateWithCString.argtypes = [
+ CFAllocatorRef,
+ c_char_p,
+ CFStringEncoding,
+ ]
+ CoreFoundation.CFStringCreateWithCString.restype = CFStringRef
+
+ CoreFoundation.CFStringGetCStringPtr.argtypes = [CFStringRef, CFStringEncoding]
+ CoreFoundation.CFStringGetCStringPtr.restype = c_char_p
+
+ CoreFoundation.CFStringGetCString.argtypes = [
+ CFStringRef,
+ c_char_p,
+ CFIndex,
+ CFStringEncoding,
+ ]
+ CoreFoundation.CFStringGetCString.restype = c_bool
+
+ CoreFoundation.CFDataCreate.argtypes = [CFAllocatorRef, c_char_p, CFIndex]
+ CoreFoundation.CFDataCreate.restype = CFDataRef
+
+ CoreFoundation.CFDataGetLength.argtypes = [CFDataRef]
+ CoreFoundation.CFDataGetLength.restype = CFIndex
+
+ CoreFoundation.CFDataGetBytePtr.argtypes = [CFDataRef]
+ CoreFoundation.CFDataGetBytePtr.restype = c_void_p
+
+ CoreFoundation.CFArrayCreate.argtypes = [
+ CFAllocatorRef,
+ POINTER(CFTypeRef),
+ CFIndex,
+ CFArrayCallBacks,
+ ]
+ CoreFoundation.CFArrayCreate.restype = CFArrayRef
+
+ CoreFoundation.CFArrayCreateMutable.argtypes = [
+ CFAllocatorRef,
+ CFIndex,
+ CFArrayCallBacks,
+ ]
+ CoreFoundation.CFArrayCreateMutable.restype = CFMutableArrayRef
+
+ CoreFoundation.CFArrayAppendValue.argtypes = [CFMutableArrayRef, c_void_p]
+ CoreFoundation.CFArrayAppendValue.restype = None
+
+ CoreFoundation.CFArrayGetCount.argtypes = [CFArrayRef]
+ CoreFoundation.CFArrayGetCount.restype = CFIndex
+
+ CoreFoundation.CFArrayGetValueAtIndex.argtypes = [CFArrayRef, CFIndex]
+ CoreFoundation.CFArrayGetValueAtIndex.restype = c_void_p
+
+ CoreFoundation.CFErrorGetCode.argtypes = [CFErrorRef]
+ CoreFoundation.CFErrorGetCode.restype = CFIndex
+
+ CoreFoundation.CFErrorCopyDescription.argtypes = [CFErrorRef]
+ CoreFoundation.CFErrorCopyDescription.restype = CFStringRef
+
+ CoreFoundation.kCFAllocatorDefault = CFAllocatorRef.in_dll( # type: ignore[attr-defined]
+ CoreFoundation, "kCFAllocatorDefault"
+ )
+ CoreFoundation.kCFTypeArrayCallBacks = c_void_p.in_dll( # type: ignore[attr-defined]
+ CoreFoundation, "kCFTypeArrayCallBacks"
+ )
+
+ CoreFoundation.CFTypeRef = CFTypeRef # type: ignore[attr-defined]
+ CoreFoundation.CFArrayRef = CFArrayRef # type: ignore[attr-defined]
+ CoreFoundation.CFStringRef = CFStringRef # type: ignore[attr-defined]
+ CoreFoundation.CFErrorRef = CFErrorRef # type: ignore[attr-defined]
+
+except AttributeError:
+ raise ImportError("Error initializing ctypes") from None
+
+
+def _handle_osstatus(result: OSStatus, _: typing.Any, args: typing.Any) -> typing.Any:
+ """
+ Raises an error if the OSStatus value is non-zero.
+ """
+ if int(result) == 0:
+ return args
+
+ # Returns a CFString which we need to transform
+ # into a UTF-8 Python string.
+ error_message_cfstring = None
+ try:
+ error_message_cfstring = Security.SecCopyErrorMessageString(result, None)
+
+ # First step is convert the CFString into a C string pointer.
+ # We try the fast no-copy way first.
+ error_message_cfstring_c_void_p = ctypes.cast(
+ error_message_cfstring, ctypes.POINTER(ctypes.c_void_p)
+ )
+ message = CoreFoundation.CFStringGetCStringPtr(
+ error_message_cfstring_c_void_p, CFConst.kCFStringEncodingUTF8
+ )
+
+ # Quoting the Apple dev docs:
+ #
+ # "A pointer to a C string or NULL if the internal
+ # storage of theString does not allow this to be
+ # returned efficiently."
+ #
+ # So we need to get our hands dirty.
+ if message is None:
+ buffer = ctypes.create_string_buffer(1024)
+ result = CoreFoundation.CFStringGetCString(
+ error_message_cfstring_c_void_p,
+ buffer,
+ 1024,
+ CFConst.kCFStringEncodingUTF8,
+ )
+ if not result:
+ raise OSError("Error copying C string from CFStringRef")
+ message = buffer.value
+
+ finally:
+ if error_message_cfstring is not None:
+ CoreFoundation.CFRelease(error_message_cfstring)
+
+ # If no message can be found for this status we come
+ # up with a generic one that forwards the status code.
+ if message is None or message == "":
+ message = f"SecureTransport operation returned a non-zero OSStatus: {result}"
+
+ raise ssl.SSLError(message)
+
+
+Security.SecTrustCreateWithCertificates.errcheck = _handle_osstatus # type: ignore[assignment]
+Security.SecTrustSetAnchorCertificates.errcheck = _handle_osstatus # type: ignore[assignment]
+Security.SecTrustGetTrustResult.errcheck = _handle_osstatus # type: ignore[assignment]
+
+
+class CFConst:
+ """CoreFoundation constants"""
+
+ kCFStringEncodingUTF8 = CFStringEncoding(0x08000100)
+
+ errSecIncompleteCertRevocationCheck = -67635
+ errSecHostNameMismatch = -67602
+ errSecCertificateExpired = -67818
+ errSecNotTrusted = -67843
+
+
+def _bytes_to_cf_data_ref(value: bytes) -> CFDataRef: # type: ignore[valid-type]
+ return CoreFoundation.CFDataCreate( # type: ignore[no-any-return]
+ CoreFoundation.kCFAllocatorDefault, value, len(value)
+ )
+
+
+def _bytes_to_cf_string(value: bytes) -> CFString:
+ """
+ Given a Python binary data, create a CFString.
+ The string must be CFReleased by the caller.
+ """
+ c_str = ctypes.c_char_p(value)
+ cf_str = CoreFoundation.CFStringCreateWithCString(
+ CoreFoundation.kCFAllocatorDefault,
+ c_str,
+ CFConst.kCFStringEncodingUTF8,
+ )
+ return cf_str # type: ignore[no-any-return]
+
+
+def _cf_string_ref_to_str(cf_string_ref: CFStringRef) -> str | None: # type: ignore[valid-type]
+ """
+ Creates a Unicode string from a CFString object. Used entirely for error
+ reporting.
+ Yes, it annoys me quite a lot that this function is this complex.
+ """
+
+ string = CoreFoundation.CFStringGetCStringPtr(
+ cf_string_ref, CFConst.kCFStringEncodingUTF8
+ )
+ if string is None:
+ buffer = ctypes.create_string_buffer(1024)
+ result = CoreFoundation.CFStringGetCString(
+ cf_string_ref, buffer, 1024, CFConst.kCFStringEncodingUTF8
+ )
+ if not result:
+ raise OSError("Error copying C string from CFStringRef")
+ string = buffer.value
+ if string is not None:
+ string = string.decode("utf-8")
+ return string # type: ignore[no-any-return]
+
+
+def _der_certs_to_cf_cert_array(certs: list[bytes]) -> CFMutableArrayRef: # type: ignore[valid-type]
+ """Builds a CFArray of SecCertificateRefs from a list of DER-encoded certificates.
+ Responsibility of the caller to call CoreFoundation.CFRelease on the CFArray.
+ """
+ cf_array = CoreFoundation.CFArrayCreateMutable(
+ CoreFoundation.kCFAllocatorDefault,
+ 0,
+ ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks),
+ )
+ if not cf_array:
+ raise MemoryError("Unable to allocate memory!")
+
+ for cert_data in certs:
+ cf_data = None
+ sec_cert_ref = None
+ try:
+ cf_data = _bytes_to_cf_data_ref(cert_data)
+ sec_cert_ref = Security.SecCertificateCreateWithData(
+ CoreFoundation.kCFAllocatorDefault, cf_data
+ )
+ CoreFoundation.CFArrayAppendValue(cf_array, sec_cert_ref)
+ finally:
+ if cf_data:
+ CoreFoundation.CFRelease(cf_data)
+ if sec_cert_ref:
+ CoreFoundation.CFRelease(sec_cert_ref)
+
+ return cf_array # type: ignore[no-any-return]
+
+
+@contextlib.contextmanager
+def _configure_context(ctx: ssl.SSLContext) -> typing.Iterator[None]:
+ check_hostname = ctx.check_hostname
+ verify_mode = ctx.verify_mode
+ ctx.check_hostname = False
+ _set_ssl_context_verify_mode(ctx, ssl.CERT_NONE)
+ try:
+ yield
+ finally:
+ ctx.check_hostname = check_hostname
+ _set_ssl_context_verify_mode(ctx, verify_mode)
+
+
+def _verify_peercerts_impl(
+ ssl_context: ssl.SSLContext,
+ cert_chain: list[bytes],
+ server_hostname: str | None = None,
+) -> None:
+ certs = None
+ policies = None
+ trust = None
+ cf_error = None
+ try:
+ if server_hostname is not None:
+ cf_str_hostname = None
+ try:
+ cf_str_hostname = _bytes_to_cf_string(server_hostname.encode("ascii"))
+ ssl_policy = Security.SecPolicyCreateSSL(True, cf_str_hostname)
+ finally:
+ if cf_str_hostname:
+ CoreFoundation.CFRelease(cf_str_hostname)
+ else:
+ ssl_policy = Security.SecPolicyCreateSSL(True, None)
+
+ policies = ssl_policy
+ if ssl_context.verify_flags & ssl.VERIFY_CRL_CHECK_CHAIN:
+ # Add explicit policy requiring positive revocation checks
+ policies = CoreFoundation.CFArrayCreateMutable(
+ CoreFoundation.kCFAllocatorDefault,
+ 0,
+ ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks),
+ )
+ CoreFoundation.CFArrayAppendValue(policies, ssl_policy)
+ CoreFoundation.CFRelease(ssl_policy)
+ revocation_policy = Security.SecPolicyCreateRevocation(
+ kSecRevocationUseAnyAvailableMethod
+ | kSecRevocationRequirePositiveResponse
+ )
+ CoreFoundation.CFArrayAppendValue(policies, revocation_policy)
+ CoreFoundation.CFRelease(revocation_policy)
+ elif ssl_context.verify_flags & ssl.VERIFY_CRL_CHECK_LEAF:
+ raise NotImplementedError("VERIFY_CRL_CHECK_LEAF not implemented for macOS")
+
+ certs = None
+ try:
+ certs = _der_certs_to_cf_cert_array(cert_chain)
+
+ # Now that we have certificates loaded and a SecPolicy
+ # we can finally create a SecTrust object!
+ trust = Security.SecTrustRef()
+ Security.SecTrustCreateWithCertificates(
+ certs, policies, ctypes.byref(trust)
+ )
+
+ finally:
+ # The certs are now being held by SecTrust so we can
+ # release our handles for the array.
+ if certs:
+ CoreFoundation.CFRelease(certs)
+
+ # If there are additional trust anchors to load we need to transform
+ # the list of DER-encoded certificates into a CFArray. Otherwise
+ # pass 'None' to signal that we only want system / fetched certificates.
+ ctx_ca_certs_der: list[bytes] | None = ssl_context.get_ca_certs(
+ binary_form=True
+ )
+ if ctx_ca_certs_der:
+ ctx_ca_certs = None
+ try:
+ ctx_ca_certs = _der_certs_to_cf_cert_array(cert_chain)
+ Security.SecTrustSetAnchorCertificates(trust, ctx_ca_certs)
+ finally:
+ if ctx_ca_certs:
+ CoreFoundation.CFRelease(ctx_ca_certs)
+ else:
+ Security.SecTrustSetAnchorCertificates(trust, None)
+
+ cf_error = CoreFoundation.CFErrorRef()
+ sec_trust_eval_result = Security.SecTrustEvaluateWithError(
+ trust, ctypes.byref(cf_error)
+ )
+ # sec_trust_eval_result is a bool (0 or 1)
+ # where 1 means that the certs are trusted.
+ if sec_trust_eval_result == 1:
+ is_trusted = True
+ elif sec_trust_eval_result == 0:
+ is_trusted = False
+ else:
+ raise ssl.SSLError(
+ f"Unknown result from Security.SecTrustEvaluateWithError: {sec_trust_eval_result!r}"
+ )
+
+ cf_error_code = 0
+ if not is_trusted:
+ cf_error_code = CoreFoundation.CFErrorGetCode(cf_error)
+
+ # If the error is a known failure that we're
+ # explicitly okay with from SSLContext configuration
+ # we can set is_trusted accordingly.
+ if ssl_context.verify_mode != ssl.CERT_REQUIRED and (
+ cf_error_code == CFConst.errSecNotTrusted
+ or cf_error_code == CFConst.errSecCertificateExpired
+ ):
+ is_trusted = True
+ elif (
+ not ssl_context.check_hostname
+ and cf_error_code == CFConst.errSecHostNameMismatch
+ ):
+ is_trusted = True
+
+ # If we're still not trusted then we start to
+ # construct and raise the SSLCertVerificationError.
+ if not is_trusted:
+ cf_error_string_ref = None
+ try:
+ cf_error_string_ref = CoreFoundation.CFErrorCopyDescription(cf_error)
+
+ # Can this ever return 'None' if there's a CFError?
+ cf_error_message = (
+ _cf_string_ref_to_str(cf_error_string_ref)
+ or "Certificate verification failed"
+ )
+
+ # TODO: Not sure if we need the SecTrustResultType for anything?
+ # We only care whether or not it's a success or failure for now.
+ sec_trust_result_type = Security.SecTrustResultType()
+ Security.SecTrustGetTrustResult(
+ trust, ctypes.byref(sec_trust_result_type)
+ )
+
+ err = ssl.SSLCertVerificationError(cf_error_message)
+ err.verify_message = cf_error_message
+ err.verify_code = cf_error_code
+ raise err
+ finally:
+ if cf_error_string_ref:
+ CoreFoundation.CFRelease(cf_error_string_ref)
+
+ finally:
+ if policies:
+ CoreFoundation.CFRelease(policies)
+ if trust:
+ CoreFoundation.CFRelease(trust)
diff --git a/lib/python3.11/site-packages/pip/_vendor/truststore/_openssl.py b/lib/python3.11/site-packages/pip/_vendor/truststore/_openssl.py
new file mode 100644
index 00000000..9951cf75
--- /dev/null
+++ b/lib/python3.11/site-packages/pip/_vendor/truststore/_openssl.py
@@ -0,0 +1,66 @@
+import contextlib
+import os
+import re
+import ssl
+import typing
+
+# candidates based on https://github.com/tiran/certifi-system-store by Christian Heimes
+_CA_FILE_CANDIDATES = [
+ # Alpine, Arch, Fedora 34+, OpenWRT, RHEL 9+, BSD
+ "/etc/ssl/cert.pem",
+ # Fedora <= 34, RHEL <= 9, CentOS <= 9
+ "/etc/pki/tls/cert.pem",
+ # Debian, Ubuntu (requires ca-certificates)
+ "/etc/ssl/certs/ca-certificates.crt",
+ # SUSE
+ "/etc/ssl/ca-bundle.pem",
+]
+
+_HASHED_CERT_FILENAME_RE = re.compile(r"^[0-9a-fA-F]{8}\.[0-9]$")
+
+
+@contextlib.contextmanager
+def _configure_context(ctx: ssl.SSLContext) -> typing.Iterator[None]:
+ # First, check whether the default locations from OpenSSL
+ # seem like they will give us a usable set of CA certs.
+ # ssl.get_default_verify_paths already takes care of:
+ # - getting cafile from either the SSL_CERT_FILE env var
+ # or the path configured when OpenSSL was compiled,
+ # and verifying that that path exists
+ # - getting capath from either the SSL_CERT_DIR env var
+ # or the path configured when OpenSSL was compiled,
+ # and verifying that that path exists
+ # In addition we'll check whether capath appears to contain certs.
+ defaults = ssl.get_default_verify_paths()
+ if defaults.cafile or (defaults.capath and _capath_contains_certs(defaults.capath)):
+ ctx.set_default_verify_paths()
+ else:
+ # cafile from OpenSSL doesn't exist
+ # and capath from OpenSSL doesn't contain certs.
+ # Let's search other common locations instead.
+ for cafile in _CA_FILE_CANDIDATES:
+ if os.path.isfile(cafile):
+ ctx.load_verify_locations(cafile=cafile)
+ break
+
+ yield
+
+
+def _capath_contains_certs(capath: str) -> bool:
+ """Check whether capath exists and contains certs in the expected format."""
+ if not os.path.isdir(capath):
+ return False
+ for name in os.listdir(capath):
+ if _HASHED_CERT_FILENAME_RE.match(name):
+ return True
+ return False
+
+
+def _verify_peercerts_impl(
+ ssl_context: ssl.SSLContext,
+ cert_chain: list[bytes],
+ server_hostname: str | None = None,
+) -> None:
+ # This is a no-op because we've enabled SSLContext's built-in
+ # verification via verify_mode=CERT_REQUIRED, and don't need to repeat it.
+ pass
diff --git a/lib/python3.11/site-packages/pip/_vendor/truststore/_ssl_constants.py b/lib/python3.11/site-packages/pip/_vendor/truststore/_ssl_constants.py
new file mode 100644
index 00000000..b1ee7a3c
--- /dev/null
+++ b/lib/python3.11/site-packages/pip/_vendor/truststore/_ssl_constants.py
@@ -0,0 +1,31 @@
+import ssl
+import sys
+import typing
+
+# Hold on to the original class so we can create it consistently
+# even if we inject our own SSLContext into the ssl module.
+_original_SSLContext = ssl.SSLContext
+_original_super_SSLContext = super(_original_SSLContext, _original_SSLContext)
+
+# CPython is known to be good, but non-CPython implementations
+# may implement SSLContext differently so to be safe we don't
+# subclass the SSLContext.
+
+# This is returned by truststore.SSLContext.__class__()
+_truststore_SSLContext_dunder_class: typing.Optional[type]
+
+# This value is the superclass of truststore.SSLContext.
+_truststore_SSLContext_super_class: type
+
+if sys.implementation.name == "cpython":
+ _truststore_SSLContext_super_class = _original_SSLContext
+ _truststore_SSLContext_dunder_class = None
+else:
+ _truststore_SSLContext_super_class = object
+ _truststore_SSLContext_dunder_class = _original_SSLContext
+
+
+def _set_ssl_context_verify_mode(
+ ssl_context: ssl.SSLContext, verify_mode: ssl.VerifyMode
+) -> None:
+ _original_super_SSLContext.verify_mode.__set__(ssl_context, verify_mode) # type: ignore[attr-defined]
diff --git a/lib/python3.11/site-packages/pip/_vendor/truststore/_windows.py b/lib/python3.11/site-packages/pip/_vendor/truststore/_windows.py
new file mode 100644
index 00000000..3de4960a
--- /dev/null
+++ b/lib/python3.11/site-packages/pip/_vendor/truststore/_windows.py
@@ -0,0 +1,554 @@
+import contextlib
+import ssl
+import typing
+from ctypes import WinDLL # type: ignore
+from ctypes import WinError # type: ignore
+from ctypes import (
+ POINTER,
+ Structure,
+ c_char_p,
+ c_ulong,
+ c_void_p,
+ c_wchar_p,
+ cast,
+ create_unicode_buffer,
+ pointer,
+ sizeof,
+)
+from ctypes.wintypes import (
+ BOOL,
+ DWORD,
+ HANDLE,
+ LONG,
+ LPCSTR,
+ LPCVOID,
+ LPCWSTR,
+ LPFILETIME,
+ LPSTR,
+ LPWSTR,
+)
+from typing import TYPE_CHECKING, Any
+
+from ._ssl_constants import _set_ssl_context_verify_mode
+
+HCERTCHAINENGINE = HANDLE
+HCERTSTORE = HANDLE
+HCRYPTPROV_LEGACY = HANDLE
+
+
+class CERT_CONTEXT(Structure):
+ _fields_ = (
+ ("dwCertEncodingType", DWORD),
+ ("pbCertEncoded", c_void_p),
+ ("cbCertEncoded", DWORD),
+ ("pCertInfo", c_void_p),
+ ("hCertStore", HCERTSTORE),
+ )
+
+
+PCERT_CONTEXT = POINTER(CERT_CONTEXT)
+PCCERT_CONTEXT = POINTER(PCERT_CONTEXT)
+
+
+class CERT_ENHKEY_USAGE(Structure):
+ _fields_ = (
+ ("cUsageIdentifier", DWORD),
+ ("rgpszUsageIdentifier", POINTER(LPSTR)),
+ )
+
+
+PCERT_ENHKEY_USAGE = POINTER(CERT_ENHKEY_USAGE)
+
+
+class CERT_USAGE_MATCH(Structure):
+ _fields_ = (
+ ("dwType", DWORD),
+ ("Usage", CERT_ENHKEY_USAGE),
+ )
+
+
+class CERT_CHAIN_PARA(Structure):
+ _fields_ = (
+ ("cbSize", DWORD),
+ ("RequestedUsage", CERT_USAGE_MATCH),
+ ("RequestedIssuancePolicy", CERT_USAGE_MATCH),
+ ("dwUrlRetrievalTimeout", DWORD),
+ ("fCheckRevocationFreshnessTime", BOOL),
+ ("dwRevocationFreshnessTime", DWORD),
+ ("pftCacheResync", LPFILETIME),
+ ("pStrongSignPara", c_void_p),
+ ("dwStrongSignFlags", DWORD),
+ )
+
+
+if TYPE_CHECKING:
+ PCERT_CHAIN_PARA = pointer[CERT_CHAIN_PARA] # type: ignore[misc]
+else:
+ PCERT_CHAIN_PARA = POINTER(CERT_CHAIN_PARA)
+
+
+class CERT_TRUST_STATUS(Structure):
+ _fields_ = (
+ ("dwErrorStatus", DWORD),
+ ("dwInfoStatus", DWORD),
+ )
+
+
+class CERT_CHAIN_ELEMENT(Structure):
+ _fields_ = (
+ ("cbSize", DWORD),
+ ("pCertContext", PCERT_CONTEXT),
+ ("TrustStatus", CERT_TRUST_STATUS),
+ ("pRevocationInfo", c_void_p),
+ ("pIssuanceUsage", PCERT_ENHKEY_USAGE),
+ ("pApplicationUsage", PCERT_ENHKEY_USAGE),
+ ("pwszExtendedErrorInfo", LPCWSTR),
+ )
+
+
+PCERT_CHAIN_ELEMENT = POINTER(CERT_CHAIN_ELEMENT)
+
+
+class CERT_SIMPLE_CHAIN(Structure):
+ _fields_ = (
+ ("cbSize", DWORD),
+ ("TrustStatus", CERT_TRUST_STATUS),
+ ("cElement", DWORD),
+ ("rgpElement", POINTER(PCERT_CHAIN_ELEMENT)),
+ ("pTrustListInfo", c_void_p),
+ ("fHasRevocationFreshnessTime", BOOL),
+ ("dwRevocationFreshnessTime", DWORD),
+ )
+
+
+PCERT_SIMPLE_CHAIN = POINTER(CERT_SIMPLE_CHAIN)
+
+
+class CERT_CHAIN_CONTEXT(Structure):
+ _fields_ = (
+ ("cbSize", DWORD),
+ ("TrustStatus", CERT_TRUST_STATUS),
+ ("cChain", DWORD),
+ ("rgpChain", POINTER(PCERT_SIMPLE_CHAIN)),
+ ("cLowerQualityChainContext", DWORD),
+ ("rgpLowerQualityChainContext", c_void_p),
+ ("fHasRevocationFreshnessTime", BOOL),
+ ("dwRevocationFreshnessTime", DWORD),
+ )
+
+
+PCERT_CHAIN_CONTEXT = POINTER(CERT_CHAIN_CONTEXT)
+PCCERT_CHAIN_CONTEXT = POINTER(PCERT_CHAIN_CONTEXT)
+
+
+class SSL_EXTRA_CERT_CHAIN_POLICY_PARA(Structure):
+ _fields_ = (
+ ("cbSize", DWORD),
+ ("dwAuthType", DWORD),
+ ("fdwChecks", DWORD),
+ ("pwszServerName", LPCWSTR),
+ )
+
+
+class CERT_CHAIN_POLICY_PARA(Structure):
+ _fields_ = (
+ ("cbSize", DWORD),
+ ("dwFlags", DWORD),
+ ("pvExtraPolicyPara", c_void_p),
+ )
+
+
+PCERT_CHAIN_POLICY_PARA = POINTER(CERT_CHAIN_POLICY_PARA)
+
+
+class CERT_CHAIN_POLICY_STATUS(Structure):
+ _fields_ = (
+ ("cbSize", DWORD),
+ ("dwError", DWORD),
+ ("lChainIndex", LONG),
+ ("lElementIndex", LONG),
+ ("pvExtraPolicyStatus", c_void_p),
+ )
+
+
+PCERT_CHAIN_POLICY_STATUS = POINTER(CERT_CHAIN_POLICY_STATUS)
+
+
+class CERT_CHAIN_ENGINE_CONFIG(Structure):
+ _fields_ = (
+ ("cbSize", DWORD),
+ ("hRestrictedRoot", HCERTSTORE),
+ ("hRestrictedTrust", HCERTSTORE),
+ ("hRestrictedOther", HCERTSTORE),
+ ("cAdditionalStore", DWORD),
+ ("rghAdditionalStore", c_void_p),
+ ("dwFlags", DWORD),
+ ("dwUrlRetrievalTimeout", DWORD),
+ ("MaximumCachedCertificates", DWORD),
+ ("CycleDetectionModulus", DWORD),
+ ("hExclusiveRoot", HCERTSTORE),
+ ("hExclusiveTrustedPeople", HCERTSTORE),
+ ("dwExclusiveFlags", DWORD),
+ )
+
+
+PCERT_CHAIN_ENGINE_CONFIG = POINTER(CERT_CHAIN_ENGINE_CONFIG)
+PHCERTCHAINENGINE = POINTER(HCERTCHAINENGINE)
+
+X509_ASN_ENCODING = 0x00000001
+PKCS_7_ASN_ENCODING = 0x00010000
+CERT_STORE_PROV_MEMORY = b"Memory"
+CERT_STORE_ADD_USE_EXISTING = 2
+USAGE_MATCH_TYPE_OR = 1
+OID_PKIX_KP_SERVER_AUTH = c_char_p(b"1.3.6.1.5.5.7.3.1")
+CERT_CHAIN_REVOCATION_CHECK_END_CERT = 0x10000000
+CERT_CHAIN_REVOCATION_CHECK_CHAIN = 0x20000000
+CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS = 0x00000007
+CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG = 0x00000008
+CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAG = 0x00000010
+CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG = 0x00000040
+CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG = 0x00000020
+CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG = 0x00000080
+CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS = 0x00000F00
+CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG = 0x00008000
+CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG = 0x00004000
+AUTHTYPE_SERVER = 2
+CERT_CHAIN_POLICY_SSL = 4
+FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000
+FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200
+
+# Flags to set for SSLContext.verify_mode=CERT_NONE
+CERT_CHAIN_POLICY_VERIFY_MODE_NONE_FLAGS = (
+ CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS
+ | CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG
+ | CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAG
+ | CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG
+ | CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG
+ | CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG
+ | CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS
+ | CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG
+ | CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG
+)
+
+wincrypt = WinDLL("crypt32.dll")
+kernel32 = WinDLL("kernel32.dll")
+
+
+def _handle_win_error(result: bool, _: Any, args: Any) -> Any:
+ if not result:
+ # Note, actually raises OSError after calling GetLastError and FormatMessage
+ raise WinError()
+ return args
+
+
+CertCreateCertificateChainEngine = wincrypt.CertCreateCertificateChainEngine
+CertCreateCertificateChainEngine.argtypes = (
+ PCERT_CHAIN_ENGINE_CONFIG,
+ PHCERTCHAINENGINE,
+)
+CertCreateCertificateChainEngine.errcheck = _handle_win_error
+
+CertOpenStore = wincrypt.CertOpenStore
+CertOpenStore.argtypes = (LPCSTR, DWORD, HCRYPTPROV_LEGACY, DWORD, c_void_p)
+CertOpenStore.restype = HCERTSTORE
+CertOpenStore.errcheck = _handle_win_error
+
+CertAddEncodedCertificateToStore = wincrypt.CertAddEncodedCertificateToStore
+CertAddEncodedCertificateToStore.argtypes = (
+ HCERTSTORE,
+ DWORD,
+ c_char_p,
+ DWORD,
+ DWORD,
+ PCCERT_CONTEXT,
+)
+CertAddEncodedCertificateToStore.restype = BOOL
+
+CertCreateCertificateContext = wincrypt.CertCreateCertificateContext
+CertCreateCertificateContext.argtypes = (DWORD, c_char_p, DWORD)
+CertCreateCertificateContext.restype = PCERT_CONTEXT
+CertCreateCertificateContext.errcheck = _handle_win_error
+
+CertGetCertificateChain = wincrypt.CertGetCertificateChain
+CertGetCertificateChain.argtypes = (
+ HCERTCHAINENGINE,
+ PCERT_CONTEXT,
+ LPFILETIME,
+ HCERTSTORE,
+ PCERT_CHAIN_PARA,
+ DWORD,
+ c_void_p,
+ PCCERT_CHAIN_CONTEXT,
+)
+CertGetCertificateChain.restype = BOOL
+CertGetCertificateChain.errcheck = _handle_win_error
+
+CertVerifyCertificateChainPolicy = wincrypt.CertVerifyCertificateChainPolicy
+CertVerifyCertificateChainPolicy.argtypes = (
+ c_ulong,
+ PCERT_CHAIN_CONTEXT,
+ PCERT_CHAIN_POLICY_PARA,
+ PCERT_CHAIN_POLICY_STATUS,
+)
+CertVerifyCertificateChainPolicy.restype = BOOL
+
+CertCloseStore = wincrypt.CertCloseStore
+CertCloseStore.argtypes = (HCERTSTORE, DWORD)
+CertCloseStore.restype = BOOL
+CertCloseStore.errcheck = _handle_win_error
+
+CertFreeCertificateChain = wincrypt.CertFreeCertificateChain
+CertFreeCertificateChain.argtypes = (PCERT_CHAIN_CONTEXT,)
+
+CertFreeCertificateContext = wincrypt.CertFreeCertificateContext
+CertFreeCertificateContext.argtypes = (PCERT_CONTEXT,)
+
+CertFreeCertificateChainEngine = wincrypt.CertFreeCertificateChainEngine
+CertFreeCertificateChainEngine.argtypes = (HCERTCHAINENGINE,)
+
+FormatMessageW = kernel32.FormatMessageW
+FormatMessageW.argtypes = (
+ DWORD,
+ LPCVOID,
+ DWORD,
+ DWORD,
+ LPWSTR,
+ DWORD,
+ c_void_p,
+)
+FormatMessageW.restype = DWORD
+
+
+def _verify_peercerts_impl(
+ ssl_context: ssl.SSLContext,
+ cert_chain: list[bytes],
+ server_hostname: str | None = None,
+) -> None:
+ """Verify the cert_chain from the server using Windows APIs."""
+ pCertContext = None
+ hIntermediateCertStore = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, None, 0, None)
+ try:
+ # Add intermediate certs to an in-memory cert store
+ for cert_bytes in cert_chain[1:]:
+ CertAddEncodedCertificateToStore(
+ hIntermediateCertStore,
+ X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
+ cert_bytes,
+ len(cert_bytes),
+ CERT_STORE_ADD_USE_EXISTING,
+ None,
+ )
+
+ # Cert context for leaf cert
+ leaf_cert = cert_chain[0]
+ pCertContext = CertCreateCertificateContext(
+ X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, leaf_cert, len(leaf_cert)
+ )
+
+ # Chain params to match certs for serverAuth extended usage
+ cert_enhkey_usage = CERT_ENHKEY_USAGE()
+ cert_enhkey_usage.cUsageIdentifier = 1
+ cert_enhkey_usage.rgpszUsageIdentifier = (c_char_p * 1)(OID_PKIX_KP_SERVER_AUTH)
+ cert_usage_match = CERT_USAGE_MATCH()
+ cert_usage_match.Usage = cert_enhkey_usage
+ chain_params = CERT_CHAIN_PARA()
+ chain_params.RequestedUsage = cert_usage_match
+ chain_params.cbSize = sizeof(chain_params)
+ pChainPara = pointer(chain_params)
+
+ if ssl_context.verify_flags & ssl.VERIFY_CRL_CHECK_CHAIN:
+ chain_flags = CERT_CHAIN_REVOCATION_CHECK_CHAIN
+ elif ssl_context.verify_flags & ssl.VERIFY_CRL_CHECK_LEAF:
+ chain_flags = CERT_CHAIN_REVOCATION_CHECK_END_CERT
+ else:
+ chain_flags = 0
+
+ try:
+ # First attempt to verify using the default Windows system trust roots
+ # (default chain engine).
+ _get_and_verify_cert_chain(
+ ssl_context,
+ None,
+ hIntermediateCertStore,
+ pCertContext,
+ pChainPara,
+ server_hostname,
+ chain_flags=chain_flags,
+ )
+ except ssl.SSLCertVerificationError:
+ # If that fails but custom CA certs have been added
+ # to the SSLContext using load_verify_locations,
+ # try verifying using a custom chain engine
+ # that trusts the custom CA certs.
+ custom_ca_certs: list[bytes] | None = ssl_context.get_ca_certs(
+ binary_form=True
+ )
+ if custom_ca_certs:
+ _verify_using_custom_ca_certs(
+ ssl_context,
+ custom_ca_certs,
+ hIntermediateCertStore,
+ pCertContext,
+ pChainPara,
+ server_hostname,
+ chain_flags=chain_flags,
+ )
+ else:
+ raise
+ finally:
+ CertCloseStore(hIntermediateCertStore, 0)
+ if pCertContext:
+ CertFreeCertificateContext(pCertContext)
+
+
+def _get_and_verify_cert_chain(
+ ssl_context: ssl.SSLContext,
+ hChainEngine: HCERTCHAINENGINE | None,
+ hIntermediateCertStore: HCERTSTORE,
+ pPeerCertContext: c_void_p,
+ pChainPara: PCERT_CHAIN_PARA, # type: ignore[valid-type]
+ server_hostname: str | None,
+ chain_flags: int,
+) -> None:
+ ppChainContext = None
+ try:
+ # Get cert chain
+ ppChainContext = pointer(PCERT_CHAIN_CONTEXT())
+ CertGetCertificateChain(
+ hChainEngine, # chain engine
+ pPeerCertContext, # leaf cert context
+ None, # current system time
+ hIntermediateCertStore, # additional in-memory cert store
+ pChainPara, # chain-building parameters
+ chain_flags,
+ None, # reserved
+ ppChainContext, # the resulting chain context
+ )
+ pChainContext = ppChainContext.contents
+
+ # Verify cert chain
+ ssl_extra_cert_chain_policy_para = SSL_EXTRA_CERT_CHAIN_POLICY_PARA()
+ ssl_extra_cert_chain_policy_para.cbSize = sizeof(
+ ssl_extra_cert_chain_policy_para
+ )
+ ssl_extra_cert_chain_policy_para.dwAuthType = AUTHTYPE_SERVER
+ ssl_extra_cert_chain_policy_para.fdwChecks = 0
+ if server_hostname:
+ ssl_extra_cert_chain_policy_para.pwszServerName = c_wchar_p(server_hostname)
+
+ chain_policy = CERT_CHAIN_POLICY_PARA()
+ chain_policy.pvExtraPolicyPara = cast(
+ pointer(ssl_extra_cert_chain_policy_para), c_void_p
+ )
+ if ssl_context.verify_mode == ssl.CERT_NONE:
+ chain_policy.dwFlags |= CERT_CHAIN_POLICY_VERIFY_MODE_NONE_FLAGS
+ if not ssl_context.check_hostname:
+ chain_policy.dwFlags |= CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG
+ chain_policy.cbSize = sizeof(chain_policy)
+
+ pPolicyPara = pointer(chain_policy)
+ policy_status = CERT_CHAIN_POLICY_STATUS()
+ policy_status.cbSize = sizeof(policy_status)
+ pPolicyStatus = pointer(policy_status)
+ CertVerifyCertificateChainPolicy(
+ CERT_CHAIN_POLICY_SSL,
+ pChainContext,
+ pPolicyPara,
+ pPolicyStatus,
+ )
+
+ # Check status
+ error_code = policy_status.dwError
+ if error_code:
+ # Try getting a human readable message for an error code.
+ error_message_buf = create_unicode_buffer(1024)
+ error_message_chars = FormatMessageW(
+ FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
+ None,
+ error_code,
+ 0,
+ error_message_buf,
+ sizeof(error_message_buf),
+ None,
+ )
+
+ # See if we received a message for the error,
+ # otherwise we use a generic error with the
+ # error code and hope that it's search-able.
+ if error_message_chars <= 0:
+ error_message = f"Certificate chain policy error {error_code:#x} [{policy_status.lElementIndex}]"
+ else:
+ error_message = error_message_buf.value.strip()
+
+ err = ssl.SSLCertVerificationError(error_message)
+ err.verify_message = error_message
+ err.verify_code = error_code
+ raise err from None
+ finally:
+ if ppChainContext:
+ CertFreeCertificateChain(ppChainContext.contents)
+
+
+def _verify_using_custom_ca_certs(
+ ssl_context: ssl.SSLContext,
+ custom_ca_certs: list[bytes],
+ hIntermediateCertStore: HCERTSTORE,
+ pPeerCertContext: c_void_p,
+ pChainPara: PCERT_CHAIN_PARA, # type: ignore[valid-type]
+ server_hostname: str | None,
+ chain_flags: int,
+) -> None:
+ hChainEngine = None
+ hRootCertStore = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, None, 0, None)
+ try:
+ # Add custom CA certs to an in-memory cert store
+ for cert_bytes in custom_ca_certs:
+ CertAddEncodedCertificateToStore(
+ hRootCertStore,
+ X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
+ cert_bytes,
+ len(cert_bytes),
+ CERT_STORE_ADD_USE_EXISTING,
+ None,
+ )
+
+ # Create a custom cert chain engine which exclusively trusts
+ # certs from our hRootCertStore
+ cert_chain_engine_config = CERT_CHAIN_ENGINE_CONFIG()
+ cert_chain_engine_config.cbSize = sizeof(cert_chain_engine_config)
+ cert_chain_engine_config.hExclusiveRoot = hRootCertStore
+ pConfig = pointer(cert_chain_engine_config)
+ phChainEngine = pointer(HCERTCHAINENGINE())
+ CertCreateCertificateChainEngine(
+ pConfig,
+ phChainEngine,
+ )
+ hChainEngine = phChainEngine.contents
+
+ # Get and verify a cert chain using the custom chain engine
+ _get_and_verify_cert_chain(
+ ssl_context,
+ hChainEngine,
+ hIntermediateCertStore,
+ pPeerCertContext,
+ pChainPara,
+ server_hostname,
+ chain_flags,
+ )
+ finally:
+ if hChainEngine:
+ CertFreeCertificateChainEngine(hChainEngine)
+ CertCloseStore(hRootCertStore, 0)
+
+
+@contextlib.contextmanager
+def _configure_context(ctx: ssl.SSLContext) -> typing.Iterator[None]:
+ check_hostname = ctx.check_hostname
+ verify_mode = ctx.verify_mode
+ ctx.check_hostname = False
+ _set_ssl_context_verify_mode(ctx, ssl.CERT_NONE)
+ try:
+ yield
+ finally:
+ ctx.check_hostname = check_hostname
+ _set_ssl_context_verify_mode(ctx, verify_mode)
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-311.pyc
index 2e4cd632..fbec8155 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-311.pyc
index 95412eea..7700c204 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-311.pyc
index 0ba47a0d..18e2dd35 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-311.pyc
index 7120c0b5..cf58cc47 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-311.pyc
index aafe6ac6..37166f94 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-311.pyc
index fe5b78ce..f2e16d52 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-311.pyc
index 10875151..302c6e2a 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-311.pyc
index 7a83e717..d256086c 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-311.pyc
index b9b1329a..43aefa92 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-311.pyc
index 42bc35a4..418ccc77 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-311.pyc
index 3056ce9c..1d2200d6 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/_version.py b/lib/python3.11/site-packages/pip/_vendor/urllib3/_version.py
index d69ca314..cad75fb5 100644
--- a/lib/python3.11/site-packages/pip/_vendor/urllib3/_version.py
+++ b/lib/python3.11/site-packages/pip/_vendor/urllib3/_version.py
@@ -1,2 +1,2 @@
# This file is protected via CODEOWNERS
-__version__ = "1.26.16"
+__version__ = "1.26.17"
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-311.pyc
index 4604f765..d3bf31ba 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-311.pyc
index 15076cec..91cdf6fb 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-311.pyc
index 11987806..4ac884a5 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-311.pyc
index 5d5aa1a3..c2c6a436 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-311.pyc
index 881a11fb..caedd2f8 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-311.pyc
index fe4c6101..e02789d2 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-311.pyc
index a60f2044..9a0f275f 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-311.pyc
index 230dad50..94d23179 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-311.pyc
index 1f5c0025..53090769 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-311.pyc
index f98f135a..e4e4957e 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-311.pyc
index 5412de69..295130cb 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-311.pyc
index 16f7c24f..4eaa2f2f 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-311.pyc
index ed8b82ca..85cba35e 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-311.pyc
index 89f1b605..97044fd0 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-311.pyc
index d4c179c2..44019761 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/request.py b/lib/python3.11/site-packages/pip/_vendor/urllib3/request.py
index 398386a5..3b4cf999 100644
--- a/lib/python3.11/site-packages/pip/_vendor/urllib3/request.py
+++ b/lib/python3.11/site-packages/pip/_vendor/urllib3/request.py
@@ -1,6 +1,9 @@
from __future__ import absolute_import
+import sys
+
from .filepost import encode_multipart_formdata
+from .packages import six
from .packages.six.moves.urllib.parse import urlencode
__all__ = ["RequestMethods"]
@@ -168,3 +171,21 @@ class RequestMethods(object):
extra_kw.update(urlopen_kw)
return self.urlopen(method, url, **extra_kw)
+
+
+if not six.PY2:
+
+ class RequestModule(sys.modules[__name__].__class__):
+ def __call__(self, *args, **kwargs):
+ """
+ If user tries to call this module directly urllib3 v2.x style raise an error to the user
+ suggesting they may need urllib3 v2
+ """
+ raise TypeError(
+ "'module' object is not callable\n"
+ "urllib3.request() method is not supported in this release, "
+ "upgrade to urllib3 v2 to use it\n"
+ "see https://urllib3.readthedocs.io/en/stable/v2-migration-guide.html"
+ )
+
+ sys.modules[__name__].__class__ = RequestModule
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-311.pyc
index 9861368a..6a4021e7 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-311.pyc
index 1de64a11..a456928f 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-311.pyc
index 631de945..8b6b1c77 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-311.pyc
index 5f9a4680..35ed3a10 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-311.pyc
index d3112e89..15a088c9 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-311.pyc
index 659e3e6b..458cbd1f 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-311.pyc
index 23d2f28f..077583e5 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-311.pyc
index 36c80f65..fd743e14 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-311.pyc
index fb9d3dca..4c8619c0 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-311.pyc
index 19cb8372..c68fc835 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-311.pyc
index 686d9b17..be6e8b8a 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-311.pyc
index 802dcb4d..29b8a849 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-311.pyc
index 5bb14be0..1a4a52d3 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/retry.py b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/retry.py
index 2490d5e5..60ef6c4f 100644
--- a/lib/python3.11/site-packages/pip/_vendor/urllib3/util/retry.py
+++ b/lib/python3.11/site-packages/pip/_vendor/urllib3/util/retry.py
@@ -235,7 +235,7 @@ class Retry(object):
RETRY_AFTER_STATUS_CODES = frozenset([413, 429, 503])
#: Default headers to be used for ``remove_headers_on_redirect``
- DEFAULT_REMOVE_HEADERS_ON_REDIRECT = frozenset(["Authorization"])
+ DEFAULT_REMOVE_HEADERS_ON_REDIRECT = frozenset(["Cookie", "Authorization"])
#: Maximum backoff time.
DEFAULT_BACKOFF_MAX = 120
diff --git a/lib/python3.11/site-packages/pip/_vendor/vendor.txt b/lib/python3.11/site-packages/pip/_vendor/vendor.txt
index 4ab2915f..8dbe1341 100644
--- a/lib/python3.11/site-packages/pip/_vendor/vendor.txt
+++ b/lib/python3.11/site-packages/pip/_vendor/vendor.txt
@@ -1,4 +1,4 @@
-CacheControl==0.12.11 # Make sure to update the license in pyproject.toml for this.
+CacheControl==0.13.1 # Make sure to update the license in pyproject.toml for this.
colorama==0.4.6
distlib==0.3.6
distro==1.8.0
@@ -8,10 +8,10 @@ platformdirs==3.8.1
pyparsing==3.1.0
pyproject-hooks==1.0.0
requests==2.31.0
- certifi==2023.5.7
+ certifi==2023.7.22
chardet==5.1.0
idna==3.4
- urllib3==1.26.16
+ urllib3==1.26.17
rich==13.4.2
pygments==2.15.1
typing_extensions==4.7.1
@@ -20,4 +20,5 @@ setuptools==68.0.0
six==1.16.0
tenacity==8.2.2
tomli==2.0.1
+truststore==0.8.0
webencodings==0.5.1
diff --git a/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-311.pyc
index f00c067a..a01ab357 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-311.pyc
index 290cbeba..5a703b77 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-311.pyc
index 44869f7a..d1d680e9 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-311.pyc
index e37dedd9..a38f4beb 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-311.pyc b/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-311.pyc
index 48f1ca80..6b694632 100644
Binary files a/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-311.pyc and b/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/__pycache__/__init__.cpython-311.pyc
index c762f035..e4955b2c 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-311.pyc
index c42ace3a..461cce18 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__pycache__/__init__.cpython-311.pyc
index 103eed24..4518a900 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__pycache__/context.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__pycache__/context.cpython-311.pyc
index 8652866c..0aecd837 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__pycache__/context.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__pycache__/context.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__pycache__/functools.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__pycache__/functools.cpython-311.pyc
index 6359fcd2..bdd10cec 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__pycache__/functools.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__pycache__/functools.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/text/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/text/__pycache__/__init__.cpython-311.pyc
index 0caf2e83..47dcc89c 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/text/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/text/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/__init__.cpython-311.pyc
index 1e72945c..c7b2c45b 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/more.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/more.cpython-311.pyc
index 17c0d758..2a6fdf19 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/more.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/more.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/recipes.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/recipes.cpython-311.pyc
index 9de7135d..1776c656 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/recipes.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/recipes.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-311.pyc
index 47339273..70f21471 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_elffile.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_elffile.cpython-311.pyc
index 48e69a74..c3b92dc5 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_elffile.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_elffile.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc
index 2ca00670..2997c8ed 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc
index bf4af720..987d4f7a 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_parser.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_parser.cpython-311.pyc
index 4be4b2a0..52308c8f 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_parser.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_parser.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-311.pyc
index bbedefc3..9881cbe3 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_tokenizer.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_tokenizer.cpython-311.pyc
index 0e68269b..c7989d9b 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_tokenizer.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_tokenizer.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-311.pyc
index 9dab3557..66b394f6 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-311.pyc
index 372c6f27..e80c0836 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc
index 307c069d..df7ebbce 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/tags.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/tags.cpython-311.pyc
index 616ce278..14fa9649 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/tags.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/tags.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-311.pyc
index bce8e70c..42cba325 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-311.pyc
index 7e9bf60b..b023ee86 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/__init__.cpython-311.pyc
index 2f9f4129..289efde2 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/api.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/api.cpython-311.pyc
index 7c54379e..2dab989e 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/api.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/api.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/unix.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/unix.cpython-311.pyc
index b8d2fa3c..f48ddaaf 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/unix.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/unix.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/version.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/version.cpython-311.pyc
index 7b1f67d4..1c5624e6 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/version.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/version.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-311.pyc
index 3f14357d..20b0e1ff 100644
Binary files a/lib/python3.11/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-311.pyc and b/lib/python3.11/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-311.pyc differ
diff --git a/lib/python3.11/site-packages/ranged_response/__init__.py b/lib/python3.11/site-packages/ranged_response/__init__.py
new file mode 100644
index 00000000..e588d47a
--- /dev/null
+++ b/lib/python3.11/site-packages/ranged_response/__init__.py
@@ -0,0 +1,145 @@
+from django.http.response import FileResponse
+
+
+class RangedFileReader(object):
+ """
+ Wraps a file like object with an iterator that runs over part (or all) of
+ the file defined by start and stop. Blocks of block_size will be returned
+ from the starting position, up to, but not including the stop point.
+ """
+ block_size = 8192
+
+ def __init__(self, file_like, start=0, stop=float('inf'), block_size=None):
+ """
+ Args:
+ file_like (File): A file-like object.
+ start (int): Where to start reading the file.
+ stop (Optional[int]:float): Where to end reading the file.
+ Defaults to infinity.
+ block_size (Optional[int]): The block_size to read with.
+ """
+ self.f = file_like
+ self.size = len(self.f.read())
+ self.block_size = block_size or RangedFileReader.block_size
+ self.start = start
+ self.stop = stop
+
+ def __iter__(self):
+ """
+ Reads the data in chunks.
+ """
+ self.f.seek(self.start)
+ position = self.start
+ while position < self.stop:
+ data = self.f.read(min(self.block_size, self.stop - position))
+ if not data:
+ break
+
+ yield data
+ position += self.block_size
+
+ def parse_range_header(self, header, resource_size):
+ """
+ Parses a range header into a list of two-tuples (start, stop) where
+ `start` is the starting byte of the range (inclusive) and
+ `stop` is the ending byte position of the range (exclusive).
+
+ Args:
+ header (str): The HTTP_RANGE request header.
+ resource_size (int): The size of the file in bytes.
+
+ Returns:
+ None if the value of the header is not syntatically valid.
+ """
+ if not header or '=' not in header:
+ return None
+
+ ranges = []
+ units, range_ = header.split('=', 1)
+ units = units.strip().lower()
+
+ if units != 'bytes':
+ return None
+
+ for val in range_.split(','):
+ val = val.strip()
+ if '-' not in val:
+ return None
+
+ if val.startswith('-'):
+ # suffix-byte-range-spec: this form specifies the last N bytes
+ # of an entity-body.
+ start = resource_size + int(val)
+ if start < 0:
+ start = 0
+ stop = resource_size
+ else:
+ # byte-range-spec: first-byte-pos "-" [last-byte-pos].
+ start, stop = val.split('-', 1)
+ start = int(start)
+ # The +1 is here since we want the stopping point to be
+ # exclusive, whereas in the HTTP spec, the last-byte-pos
+ # is inclusive.
+ stop = int(stop) + 1 if stop else resource_size
+ if start >= stop:
+ return None
+
+ ranges.append((start, stop))
+
+ return ranges
+
+
+class RangedFileResponse(FileResponse):
+ """
+ This is a modified FileResponse that returns `Content-Range` headers with
+ the response, so browsers that request the file, can stream the response
+ properly.
+ """
+
+ def __init__(self, request, file, *args, **kwargs):
+ """
+ RangedFileResponse constructor also requires a request, which
+ checks whether range headers should be added to the response.
+
+ Args:
+ request(WGSIRequest): The Django request object.
+ file (File): A file-like object.
+ """
+ self.ranged_file = RangedFileReader(file)
+ super(RangedFileResponse, self).__init__(
+ self.ranged_file, *args, **kwargs
+ )
+
+ if 'HTTP_RANGE' in request.META:
+ self.add_range_headers(request.META['HTTP_RANGE'])
+
+ def add_range_headers(self, range_header):
+ """
+ Adds several headers that are necessary for a streaming file
+ response, in order for Safari to play audio files. Also
+ sets the HTTP status_code to 206 (partial content).
+
+ Args:
+ range_header (str): Browser HTTP_RANGE request header.
+ """
+ self['Accept-Ranges'] = 'bytes'
+ size = self.ranged_file.size
+ try:
+ ranges = self.ranged_file.parse_range_header(range_header, size)
+ except ValueError:
+ ranges = None
+ # Only handle syntactically valid headers, that are simple (no
+ # multipart byteranges).
+ if ranges is not None and len(ranges) == 1:
+ start, stop = ranges[0]
+ if start >= size:
+ # Requested range not satisfiable.
+ self.status_code = 416
+ return
+ if stop >= size:
+ stop = size
+ self.ranged_file.start = start
+ self.ranged_file.stop = stop
+ self['Content-Range'] = 'bytes %d-%d/%d' % (start, stop - 1, size)
+ self['Content-Length'] = stop - start
+ self.status_code = 206
diff --git a/lib/python3.11/site-packages/ranged_response/__pycache__/__init__.cpython-311.pyc b/lib/python3.11/site-packages/ranged_response/__pycache__/__init__.cpython-311.pyc
new file mode 100644
index 00000000..8bfd6d65
Binary files /dev/null and b/lib/python3.11/site-packages/ranged_response/__pycache__/__init__.cpython-311.pyc differ
diff --git a/templates/anmeldung.html b/templates/anmeldung.html
index 2d7d250c..083b3017 100644
--- a/templates/anmeldung.html
+++ b/templates/anmeldung.html
@@ -14,74 +14,78 @@
{{ register_form.non_field_errors }}
{{ register_form.name.errors }}
-
-
{{ register_form.name }}
+
+{{ register_form.name }}
{{ register_form.mail.errors }}
-
-
{{register_form.mail }}
+
+{{register_form.mail }}
{{ register_form.phone.errors }}
-
-
{{ register_form.phone }}
+
+{{ register_form.phone }}
{{ register_form.rate_reduced.errors }}
-
-
{{ register_form.rate_reduced }}
+
+{{ register_form.rate_reduced }}
{{ register_form.address_street.errors }}
-
-
{{register_form.address_street }}
+
+
{{register_form.address_street }}
{{ register_form.address_plz.errors }}
-
-
{{register_form.address_plz }}
+
+{{register_form.address_plz }}
{{ register_form.address_town.errors }}
-
-
{{register_form.address_town }}
+
+{{register_form.address_town }}
{{ register_form.birthdate.errors }}
-
-
{{register_form.birthdate }}
+
+{{register_form.birthdate }}
{{ register_form.gender.errors }}
-
+
{{ register_form.food.errors }}
-
-
{{register_form.food }}
+
+
{{register_form.food }}
{{ register_form.music.errors }}
-
-
{{register_form.music }}
+
+{{register_form.music }}
{{ register_form.cake.errors }}
-
-
{{register_form.cake }}
+
+{{register_form.cake }}
{{ register_form.publish_address.errors }}
-
-
{{register_form.publish_address }}
+
+{{register_form.publish_address }}
{{ register_form.publish_phone.errors }}
-
-
{{register_form.publish_phone }}
+
+{{register_form.publish_phone }}
{{ register_form.info.errors }}
-
-
{{register_form.info }}
+
+
{{register_form.info }}
{{ register_form.message.errors }}
-
-{{register_form.message }}
+
+{{register_form.message }}
+
+{{ register_form.captcha.errors }}
+
+
{{register_form.captcha }}
-
Hinweise
+
Hinweise
- Preise bei Anmeldung vor Weihnachten: 70€ regulär, 40€ ermäßigt.
- Preise bei Anmeldung nach Weihnachten: 80€ regulär, 50€ ermäßigt.
diff --git a/templates/contact.html b/templates/contact.html
index 50556117..fd94c5c3 100644
--- a/templates/contact.html
+++ b/templates/contact.html
@@ -35,6 +35,11 @@
{{ contact_form.mail.errors }}
{{contact_form.mail }}
+
+{{ contact_form.captcha.errors }}
+
+
{{contact_form.captcha }}
+
diff --git a/website/__pycache__/views.cpython-311.pyc b/website/__pycache__/views.cpython-311.pyc
index 858bfe78..0bde04b4 100644
Binary files a/website/__pycache__/views.cpython-311.pyc and b/website/__pycache__/views.cpython-311.pyc differ
diff --git a/website/models.py b/website/models.py
index a8938fdb..441f460d 100644
--- a/website/models.py
+++ b/website/models.py
@@ -2,6 +2,7 @@ from django.contrib.auth import get_user_model
from django.db import models
from django.forms import ModelForm
from django import forms
+from captcha.fields import CaptchaField
# Create your models here.
User = get_user_model()
@@ -42,9 +43,10 @@ class Contact(models.Model):
return self.pseudonym
class ContactForm(forms.ModelForm):
+ captcha = CaptchaField()
class Meta:
model = Contact
- fields = ["pseudonym", "mail", "betreff", "nachricht"]
+ fields = ["pseudonym", "mail", "betreff", "nachricht", "captcha"]
GESCHLECHTER = [("Männlich", "Männlich"), ("Weiblich","Weiblich"),("Andere","Andere")]
ERNÄHRUNG = [("Vegetarisch","Vegetarisch"),("Vegan","Vegan"),("Glutenfrei","Glutenfrei")]
@@ -70,8 +72,9 @@ class Registrant(models.Model):
payed = models.BooleanField(default=False)
class RegisterForm(ModelForm):
+ captcha = CaptchaField()
class Meta:
model = Registrant
- fields = ["name","mail","phone","rate_reduced","address_street","address_plz","address_town","birthdate","gender","food","music","cake","publish_address","publish_phone","info","message"]
+ fields = ["name","mail","phone","rate_reduced","address_street","address_plz","address_town","birthdate","gender","food","music","cake","publish_address","publish_phone","info","message", "captcha"]
gender = forms.ChoiceField(widget=forms.RadioSelect,choices=GESCHLECHTER)
food = forms.ChoiceField(widget=forms.RadioSelect,choices=ERNÄHRUNG)
diff --git a/website/views.py b/website/views.py
index 3f48333d..45ce6f14 100644
--- a/website/views.py
+++ b/website/views.py
@@ -95,13 +95,13 @@ def anmeldung(request):
send_mail('Herzlich Willkommen zur Im·Puls-Tagung', '''Sehr geehrter ''' + name + ''',
vielen Dank für Deine Anmeldung zur Im·Puls-Tagung.
Hier kurz das wichtigste:
- - Bitte überweise den Teilnehmerbeitrag auf folgende IBAN:
- - Alternativ kannst du gerne auch am Tagungsbeginn in Bar bezahlen.
- - Der Teilnehmerbeitrag richtet sich nach Anmeldezeit und Ermäßigung.
- - Das Tagungsbüro ist unter folgender Rufnummer erreichbar: 0151 70818415.
- - Die Tagung beginnt am 14. Februar um 17:00, Du kannst gerne auch früher kommen.
- - Bitte bring einen Schlafsack, eine Isomatte und Schreibzeug mit.
- - Auf der gesamten Tagung herrscht Alkohol- und Drogenverbot.
+- Bitte überweise den Teilnehmerbeitrag auf folgende IBAN:
+- Alternativ kannst du gerne auch am Tagungsbeginn in Bar bezahlen.
+- Der Teilnehmerbeitrag richtet sich nach Anmeldezeit und Ermäßigung.
+- Das Tagungsbüro ist unter folgender Rufnummer erreichbar: 0151 70818415.
+- Die Tagung beginnt am 14. Februar um 17:00, Du kannst gerne auch früher kommen.
+- Bitte bring einen Schlafsack, eine Isomatte und Schreibzeug mit.
+- Auf der gesamten Tagung herrscht Alkohol- und Drogenverbot.
Bei weiteren Fragen kannst Du gerne mit dem Tagungsbüro Kontakt aufnehmen.
Es wünscht viel Freude bei der Tagung,
Federico J. Denkena