@@ -102,7 +102,8 @@ def _test():
102
102
import sys
103
103
import traceback
104
104
import unittest
105
- from io import StringIO , IncrementalNewlineDecoder
105
+ import importlib .resources
106
+ from io import StringIO
106
107
from collections import namedtuple
107
108
import _colorize # Used in doctests
108
109
from _colorize import ANSIColors , can_colorize
@@ -235,25 +236,31 @@ def _normalize_module(module, depth=2):
235
236
else :
236
237
raise TypeError ("Expected a module, string, or None" )
237
238
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
-
242
239
def _load_testfile (filename , package , module_relative , encoding ):
243
240
if module_relative :
244
241
package = _normalize_module (package , 3 )
245
242
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
+
257
264
with open (filename , encoding = encoding ) as f :
258
265
return f .read (), filename
259
266
0 commit comments