forked from pool/python-pip
Dirk Mueller
87ecd8d9d6
* Actually use system trust stores when the truststore feature is enabled. * Report informative messages about invalid requirements. * Eagerly import the self version check logic to avoid crashes while upgrading or downgrading pip at the same time. * Accommodate for mismatches between different sources of truth for extra names, for packages generated by setuptools. * Accommodate for development versions of CPython ending in + in the version string. * requests provides optional character detection support on some APIs when processing ambiguous bytes. This isn't relevant for pip to function and we're able to remove it due to recent upstream changes. * Drop support for EOL Python 3.7. * Remove support for legacy versions and dependency specifiers. * Packages with non standard-compliant versions or dependency specifiers are now ignored by the resolver. Already installed packages with non standard-compliant versions or dependency specifiers must be uninstalled before upgrading them. * Improve performance of resolution of large dependency trees, with more caching. * Further improve resolution performance of large dependency trees, by caching hash calculations. * Reduce startup time of commands (e.g. show, freeze) that do not access the network by 15-30%. * Reword and improve presentation of uninstallation errors. * Add a 'raw' progress_bar type for simple and parsable download progress reports * pip list no longer performs the pip version check unless OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-pip?expand=0&rev=122
159 lines
6.2 KiB
Diff
159 lines
6.2 KiB
Diff
---
|
|
src/pip/_vendor/certifi/core.py | 105 +++-------------------------------------
|
|
tests/unit/test_options.py | 5 +
|
|
2 files changed, 13 insertions(+), 97 deletions(-)
|
|
|
|
Index: pip-24.1.1/src/pip/_vendor/certifi/core.py
|
|
===================================================================
|
|
--- pip-24.1.1.orig/src/pip/_vendor/certifi/core.py
|
|
+++ pip-24.1.1/src/pip/_vendor/certifi/core.py
|
|
@@ -3,112 +3,15 @@ certifi.py
|
|
~~~~~~~~~~
|
|
|
|
This module returns the installation location of cacert.pem or its contents.
|
|
+Patched by openSUSE: return the system bundle
|
|
"""
|
|
-import sys
|
|
-import atexit
|
|
|
|
-def exit_cacert_ctx() -> None:
|
|
- _CACERT_CTX.__exit__(None, None, None) # type: ignore[union-attr]
|
|
+def read_text(_module=None, _path=None, encoding="ascii"):
|
|
+ with open(where(), "r", encoding=encoding) as data:
|
|
+ return data.read()
|
|
|
|
+def where() -> str:
|
|
+ return "/etc/ssl/ca-bundle.pem"
|
|
|
|
-if sys.version_info >= (3, 11):
|
|
-
|
|
- from importlib.resources import as_file, files
|
|
-
|
|
- _CACERT_CTX = None
|
|
- _CACERT_PATH = None
|
|
-
|
|
- def where() -> str:
|
|
- # This is slightly terrible, but we want to delay extracting the file
|
|
- # in cases where we're inside of a zipimport situation until someone
|
|
- # actually calls where(), but we don't want to re-extract the file
|
|
- # on every call of where(), so we'll do it once then store it in a
|
|
- # global variable.
|
|
- global _CACERT_CTX
|
|
- global _CACERT_PATH
|
|
- if _CACERT_PATH is None:
|
|
- # This is slightly janky, the importlib.resources API wants you to
|
|
- # manage the cleanup of this file, so it doesn't actually return a
|
|
- # path, it returns a context manager that will give you the path
|
|
- # when you enter it and will do any cleanup when you leave it. In
|
|
- # the common case of not needing a temporary file, it will just
|
|
- # return the file system location and the __exit__() is a no-op.
|
|
- #
|
|
- # We also have to hold onto the actual context manager, because
|
|
- # it will do the cleanup whenever it gets garbage collected, so
|
|
- # we will also store that at the global level as well.
|
|
- _CACERT_CTX = as_file(files("pip._vendor.certifi").joinpath("cacert.pem"))
|
|
- _CACERT_PATH = str(_CACERT_CTX.__enter__())
|
|
- atexit.register(exit_cacert_ctx)
|
|
-
|
|
- return _CACERT_PATH
|
|
-
|
|
- def contents() -> str:
|
|
- return files("pip._vendor.certifi").joinpath("cacert.pem").read_text(encoding="ascii")
|
|
-
|
|
-elif sys.version_info >= (3, 7):
|
|
-
|
|
- from importlib.resources import path as get_path, read_text
|
|
-
|
|
- _CACERT_CTX = None
|
|
- _CACERT_PATH = None
|
|
-
|
|
- def where() -> str:
|
|
- # This is slightly terrible, but we want to delay extracting the
|
|
- # file in cases where we're inside of a zipimport situation until
|
|
- # someone actually calls where(), but we don't want to re-extract
|
|
- # the file on every call of where(), so we'll do it once then store
|
|
- # it in a global variable.
|
|
- global _CACERT_CTX
|
|
- global _CACERT_PATH
|
|
- if _CACERT_PATH is None:
|
|
- # This is slightly janky, the importlib.resources API wants you
|
|
- # to manage the cleanup of this file, so it doesn't actually
|
|
- # return a path, it returns a context manager that will give
|
|
- # you the path when you enter it and will do any cleanup when
|
|
- # you leave it. In the common case of not needing a temporary
|
|
- # file, it will just return the file system location and the
|
|
- # __exit__() is a no-op.
|
|
- #
|
|
- # We also have to hold onto the actual context manager, because
|
|
- # it will do the cleanup whenever it gets garbage collected, so
|
|
- # we will also store that at the global level as well.
|
|
- _CACERT_CTX = get_path("pip._vendor.certifi", "cacert.pem")
|
|
- _CACERT_PATH = str(_CACERT_CTX.__enter__())
|
|
- atexit.register(exit_cacert_ctx)
|
|
-
|
|
- return _CACERT_PATH
|
|
-
|
|
- def contents() -> str:
|
|
- return read_text("pip._vendor.certifi", "cacert.pem", encoding="ascii")
|
|
-
|
|
-else:
|
|
- import os
|
|
- import types
|
|
- from typing import Union
|
|
-
|
|
- Package = Union[types.ModuleType, str]
|
|
- Resource = Union[str, "os.PathLike"]
|
|
-
|
|
- # This fallback will work for Python versions prior to 3.7 that lack the
|
|
- # importlib.resources module but relies on the existing `where` function
|
|
- # so won't address issues with environments like PyOxidizer that don't set
|
|
- # __file__ on modules.
|
|
- def read_text(
|
|
- package: Package,
|
|
- resource: Resource,
|
|
- encoding: str = 'utf-8',
|
|
- errors: str = 'strict'
|
|
- ) -> str:
|
|
- with open(where(), encoding=encoding) as data:
|
|
- return data.read()
|
|
-
|
|
- # If we don't have importlib.resources, then we will just do the old logic
|
|
- # of assuming we're on the filesystem and munge the path directly.
|
|
- def where() -> str:
|
|
- f = os.path.dirname(__file__)
|
|
-
|
|
- return os.path.join(f, "cacert.pem")
|
|
-
|
|
- def contents() -> str:
|
|
- return read_text("pip._vendor.certifi", "cacert.pem", encoding="ascii")
|
|
+def contents() -> str:
|
|
+ return read_text(encoding="ascii")
|
|
Index: pip-24.1.1/tests/unit/test_options.py
|
|
===================================================================
|
|
--- pip-24.1.1.orig/tests/unit/test_options.py
|
|
+++ pip-24.1.1/tests/unit/test_options.py
|
|
@@ -1,4 +1,5 @@
|
|
import os
|
|
+import os.path
|
|
from contextlib import contextmanager
|
|
from optparse import Values
|
|
from tempfile import NamedTemporaryFile
|
|
@@ -11,6 +12,7 @@ from pip._internal.cli.main import main
|
|
from pip._internal.commands import create_command
|
|
from pip._internal.commands.configuration import ConfigurationCommand
|
|
from pip._internal.exceptions import PipError
|
|
+from pip._vendor.certifi import where
|
|
from tests.lib.options_helpers import AddFakeCommandMixin
|
|
|
|
|
|
@@ -617,6 +619,9 @@ class TestOptionsConfigFiles:
|
|
else:
|
|
assert expect == cmd._determine_file(options, need_value=False)
|
|
|
|
+ def test_certificates(self):
|
|
+ assert os.path.exists(where())
|
|
+
|
|
|
|
class TestOptionsExpandUser(AddFakeCommandMixin):
|
|
def test_cache_dir(self) -> None:
|