8000 MNT: make certifi actually optional · tacaswell/matplotlib@1883380 · GitHub
[go: up one dir, main page]

Skip to content

Commit 1883380

Browse files
committed
MNT: make certifi actually optional
In matplotlib#18636 we removed certifi as a runtime dependency, but it turns out we do try to use it if you read from a url in a handful of places. This makes us fail gracefully and log if we can not import certifi.
1 parent f905e64 commit 1883380

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

lib/matplotlib/__init__.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -717,7 +717,11 @@ def is_url(filename):
717717

718718
@functools.lru_cache()
719719
def _get_ssl_context():
720-
import certifi
720+
try:
721+
import certifi
722+
except ImportError:
723+
_log.debug("Could not import certifi.")
724+
return None
721725
import ssl
722726
return ssl.create_default_context(cafile=certifi.where())
723727

@@ -726,7 +730,12 @@ def _get_ssl_context():
726730
def _open_file_or_url(fname):
727731
if not isinstance(fname, Path) and is_url(fname):
728732
import urllib.request
729-
with urllib.request.urlopen(fname, context=_get_ssl_context()) as f:
733+
ssl_ctx = _get_ssl_context()
734+
if ssl_ctx is None:
735+
_log.debug(
736+
"Could not get certifi ssl context, https may not work."
737+
)
738+
with urllib.request.urlopen(fname, context=ssl_ctx) as f:
730739
yield (line.decode('utf-8') for line in f)
731740
else:
732741
fname = os.path.expanduser(fname)

lib/matplotlib/image.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1478,8 +1478,12 @@ def imread(fname, format=None):
14781478
if len(parsed.scheme) > 1: # Pillow doesn't handle URLs directly.
14791479
# hide imports to speed initial import on systems with slow linkers
14801480
from urllib import request
1481-
with request.urlopen(fname,
1482-
context=mpl._get_ssl_context()) as response:
1481+
ssl_ctx = mpl._get_ssl_context()
1482+
if ssl_ctx is None:
1483+
_log.debug(
1484+
"Could not get certifi ssl context, https may not work."
1485+
)
1486+
with request.urlopen(fname, context=ssl_ctx) as response:
14831487
import io
14841488
try:
14851489
response.seek(0)

0 commit comments

Comments
 (0)
0