You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/dev-python/certifi/files/certifi-3021.3.16-use-impor...

165 lines
6.1 KiB

1. https://github.com/tiran/certifi-system-store/commit/6945f34b7be433dbf22946825cdb225d5d2136d5
2. https://github.com/tiran/certifi-system-store/pull/21
Avoid repeated instances of https://bugs.gentoo.org/878045 when a package
has too-strict requirements and then affects other, unrelated Python
packages on the system.
From 6945f34b7be433dbf22946825cdb225d5d2136d5 Mon Sep 17 00:00:00 2001
From: Christian Heimes <christian@python.org>
Date: Tue, 16 Mar 2021 16:00:08 +0100
Subject: [PATCH] Relax patch checks (#13)
- only check that version matches, not files are identical
- compare base directories with samefile. This fixes a problem with
lib64 symlink in virtual envs.
Signed-off-by: Christian Heimes <christian@python.org>
--- a/src/certifi/_patch.py
+++ b/src/certifi/_patch.py
@@ -28,7 +28,7 @@ def _patch_dist_info():
except pkg_resources.DistributionNotFound:
pass
else:
- if os.path.samefile(css_dist.egg_info, certifi_dist.egg_info):
+ if certifi_dist.version == css_dist.version:
return False, css_dist.egg_info, certifi_dist.egg_info
else:
# blow away certifi's dist-info
@@ -55,7 +55,9 @@ def _patch_dist_info():
certifi_dir = os.path.dirname(os.path.abspath(__file__))
dist_dir = os.path.abspath(certifi_dist.egg_info)
- if os.path.dirname(certifi_dir) != os.path.dirname(dist_dir):
+ # compare with samefile instead of string comparison to avoid false
+ # negatives caused by venv lib64 / lib symlinks
+ if not os.path.samefile(os.path.dirname(certifi_dir), os.path.dirname(dist_dir)):
raise RuntimeError(
f"'{certifi_dir} and {dist_dir} have different parent directories."
)
From cdec6d20b5d716d9853e72a1519a304070395498 Mon Sep 17 00:00:00 2001
From: Christian Heimes <christian@python.org>
Date: Wed, 22 Jun 2022 10:08:18 +0200
Subject: [PATCH] Use importlib on Python 3.8+
--- a/setup.cfg
+++ b/setup.cfg
@@ -38,8 +40,9 @@ packages = certifi
include_package_data = True
zip_safe = True
setup_requires = setuptools
-# hack to prevent installation on unsupported platforms Windows and macOS
install_requires =
+ setuptools; python_version < "3.8"
+ # hack to prevent installation on unsupported platforms Windows and macOS
certifi-system-store > 4000; sys_platform == "win32" or sys_platform == "darwin"
python_requires = >=3.6
--- a/src/certifi/_patch.py
+++ b/src/certifi/_patch.py
@@ -1,7 +1,31 @@
import os
import shutil
import sys
-import pkg_resources
+
+if sys.version_info >= (3, 8):
+ from importlib import metadata
+
+ PackageNotFoundError = metadata.PackageNotFoundError
+
+ def _get_distinfo(name):
+ dist = metadata.distribution(name)
+ egg_info = dist._path
+ return dist.version, egg_info
+
+ def _invalidate_caches():
+ pass
+
+else:
+ import pkg_resources
+
+ PackageNotFoundError = pkg_resources.DistributionNotFound
+
+ def _get_distinfo(name):
+ dist = pkg_resources.get_distribution(name)
+ return dist.version, dist.egg_info
+
+ def _invalidate_caches():
+ pkg_resources.working_set.__init__()
def _relsymlink(target, linkname):
@@ -22,22 +46,22 @@ def _relsymlink(target, linkname):
def _patch_dist_info():
# distribution object for the canonical project name
- css_dist = pkg_resources.get_distribution("certifi_system_store")
+ css_version, css_egg_info = _get_distinfo("certifi_system_store")
try:
- certifi_dist = pkg_resources.get_distribution("certifi")
- except pkg_resources.DistributionNotFound:
+ certifi_version, certifi_egg_info = _get_distinfo("certifi")
+ except PackageNotFoundError:
pass
else:
- if certifi_dist.version == css_dist.version:
- return False, css_dist.egg_info, certifi_dist.egg_info
+ if certifi_version == css_version:
+ return False, css_egg_info, certifi_egg_info
else:
# blow away certifi's dist-info
- shutil.rmtree(certifi_dist.egg_info)
+ shutil.rmtree(certifi_egg_info)
# reset current working set, so pkg_resources can pick up our hack
- pkg_resources.working_set.__init__()
+ _invalidate_caches()
# certifi-system-store's dist-info
- abs_css_distinfodir = os.path.abspath(css_dist.egg_info)
+ abs_css_distinfodir = os.path.abspath(css_egg_info)
css_basedir, css_distinfodir = os.path.split(abs_css_distinfodir)
# certifi's dist-info in same base directory
@@ -48,12 +72,12 @@ def _patch_dist_info():
_relsymlink(target=abs_css_distinfodir, linkname=abs_certifi_distinfodir)
# get dist info from refreshed working set
- css_dist = pkg_resources.get_distribution("certifi_system_store")
- certifi_dist = pkg_resources.get_distribution("certifi")
+ css_version, css_egg_info = _get_distinfo("certifi_system_store")
+ certifi_version, certifi_egg_info = _get_distinfo("certifi")
# check that certifi dist-info is in same site-packages as certifi package
certifi_dir = os.path.dirname(os.path.abspath(__file__))
- dist_dir = os.path.abspath(certifi_dist.egg_info)
+ dist_dir = os.path.abspath(certifi_egg_info)
# compare with samefile instead of string comparison to avoid false
# negatives caused by venv lib64 / lib symlinks
@@ -65,17 +89,17 @@ def _patch_dist_info():
# double check versions
_verify_dist_info()
- return True, css_dist.egg_info, certifi_dist.egg_info
+ return True, css_egg_info, certifi_egg_info
def _verify_dist_info():
- css_dist = pkg_resources.get_distribution("certifi_system_store")
+ css_version, css_egg_info = _get_distinfo("certifi_system_store")
try:
- certifi_dist = pkg_resources.get_distribution("certifi")
- except pkg_resources.DistributionNotFound as e:
+ certifi_version, certifi_egg_info = _get_distinfo("certifi")
+ except PackageNotFoundError as e:
raise RuntimeError(e)
else:
- if certifi_dist.version != css_dist.version:
+ if certifi_version != css_version:
raise RuntimeError(
f"'certifi.dist-info' is not an alias to "
f"'certifi_system_store.dist-info'. "