Skip to content

Commit 9b850e7

Browse files
committed
use importlib.resources to acquire doctest resources
1 parent 748a21c commit 9b850e7

File tree

1 file changed

+23
-16
lines changed

1 file changed

+23
-16
lines changed

Lib/doctest.py

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,8 @@ def _test():
102102
import sys
103103
import traceback
104104
import unittest
105-
from io import StringIO, IncrementalNewlineDecoder
105+
import importlib.resources
106+
from io import StringIO
106107
from collections import namedtuple
107108
import _colorize # Used in doctests
108109
from _colorize import ANSIColors, can_colorize
@@ -235,25 +236,31 @@ def _normalize_module(module, depth=2):
235236
else:
236237
raise TypeError("Expected a module, string, or None")
237238

238-
def _newline_convert(data):
239-
# The IO module provides a handy decoder for universal newline conversion
240-
return IncrementalNewlineDecoder(None, True).decode(data, True)
241-
242239
def _load_testfile(filename, package, module_relative, encoding):
243240
if module_relative:
244241
package = _normalize_module(package, 3)
245242
filename = _module_relative_path(package, filename)
246-
if (loader := getattr(package, '__loader__', None)) is None:
247-
try:
248-
loader = package.__spec__.loader
249-
except AttributeError:
250-
pass
251-
if hasattr(loader, 'get_data'):
252-
file_contents = loader.get_data(filename)
253-
file_contents = file_contents.decode(encoding)
254-
# get_data() opens files as 'rb', so one must do the equivalent
255-
# conversion as universal newlines would do.
256-
return _newline_convert(file_contents), filename
243+
try:
244+
loader = package.__loader__
245+
except AttributeError:
246+
pass
247+
else:
248+
if loader is not None:
249+
return (
250+
importlib.resources.read_text(package, filename, encoding=encoding),
251+
filename,
252+
)
253+
254+
try:
255+
package.__spec__.loader
256+
except AttributeError:
257+
pass
258+
else:
259+
return (
260+
importlib.resources.read_text(package, filename, encoding=encoding),
261+
filename,
262+
)
263+
257264
with open(filename, encoding=encoding) as f:
258265
return f.read(), filename
259266

0 commit comments

Comments
 (0)