New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix deprecation warning on Python 3.11 #193
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -4,12 +4,12 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
This module returns the installation location of cacert.pem or its contents. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import os | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import types | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from typing import Union | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import sys | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
try: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from importlib.resources import path as get_path, read_text | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if sys.version_info >= (3, 9): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from importlib.resources import as_file, files | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_CACERT_CTX = None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_CACERT_PATH = None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -33,36 +33,45 @@ def where() -> str: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# 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("certifi", "cacert.pem") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_CACERT_CTX = as_file(files("certifi").joinpath("cacert.pem")) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_CACERT_PATH = str(_CACERT_CTX.__enter__()) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return _CACERT_PATH | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
adamchainz marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def contents() -> str: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return files("certifi").joinpath("cacert.pem").read_text(encoding="ascii") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
else: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
except ImportError: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Package = Union[types.ModuleType, str] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Resource = Union[str, "os.PathLike"] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from importlib.resources import path as get_path, read_text | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# 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() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_CACERT_CTX = None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_CACERT_PATH = None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# 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") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# 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("certifi", "cacert.pem") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_CACERT_PATH = str(_CACERT_CTX.__enter__()) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return _CACERT_PATH | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
adamchainz marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def contents() -> str: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return read_text("certifi", "cacert.pem", encoding="ascii") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def contents() -> str: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return read_text("certifi", "cacert.pem", encoding="ascii") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
Original file line number | Diff line number | Diff line change | ||||||
---|---|---|---|---|---|---|---|---|
|
@@ -46,19 +46,20 @@ | |||||||
include_package_data=True, | ||||||||
zip_safe=False, | ||||||||
license='MPL-2.0', | ||||||||
python_requires=">=3.6", | ||||||||
python_requires=">=3.7", | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||
classifiers=[ | ||||||||
'Development Status :: 5 - Production/Stable', | ||||||||
'Intended Audience :: Developers', | ||||||||
'License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)', | ||||||||
'Natural Language :: English', | ||||||||
'Programming Language :: Python', | ||||||||
'Programming Language :: Python :: 3', | ||||||||
adamchainz marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||
'Programming Language :: Python :: 3.6', | ||||||||
'Programming Language :: Python :: 3 :: Only', | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||
'Programming Language :: Python :: 3.7', | ||||||||
'Programming Language :: Python :: 3.8', | ||||||||
'Programming Language :: Python :: 3.9', | ||||||||
'Programming Language :: Python :: 3.10', | ||||||||
'Programming Language :: Python :: 3.11', | ||||||||
], | ||||||||
project_urls={ | ||||||||
'Source': 'https://github.com/certifi/python-certifi', | ||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.