Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit d7dfa85

Browse filesBrowse files
authored
Revert "bpo-44771: Apply changes from importlib_resources 5.2.1 (GH-27436)"
This reverts commit aaa83cd.
1 parent 7cad0be commit d7dfa85
Copy full SHA for d7dfa85
Expand file treeCollapse file tree

19 files changed

+373
-714
lines changed

‎.gitattributes

Copy file name to clipboardExpand all lines: .gitattributes
-1Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ Lib/test/test_email/data/*.txt -text
2828
Lib/test/xmltestdata/* -text
2929
Lib/test/coding20731.py -text
3030
Lib/test/test_importlib/data01/* -text
31-
Lib/test/test_importlib/namespacedata01/* -text
3231

3332
# CRLF files
3433
*.bat text eol=crlf

‎Lib/importlib/_adapters.py

Copy file name to clipboardExpand all lines: Lib/importlib/_adapters.py
+10-98Lines changed: 10 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from contextlib import suppress
2-
from io import TextIOWrapper
32

43
from . import abc
54

@@ -26,119 +25,32 @@ def __init__(self, spec):
2625
self.spec = spec
2726

2827
def get_resource_reader(self, name):
29-
return CompatibilityFiles(self.spec)._native()
28+
return DegenerateFiles(self.spec)._native()
3029

3130

32-
def _io_wrapper(file, mode='r', *args, **kwargs):
33-
if mode == 'r':
34-
return TextIOWrapper(file, *args, **kwargs)
35-
elif mode == 'rb':
36-
return file
37-
raise ValueError(
38-
"Invalid mode value '{}', only 'r' and 'rb' are supported".format(mode)
39-
)
40-
41-
42-
class CompatibilityFiles:
31+
class DegenerateFiles:
4332
"""
4433
Adapter for an existing or non-existant resource reader
45-
to provide a compability .files().
34+
to provide a degenerate .files().
4635
"""
4736

48-
class SpecPath(abc.Traversable):
49-
"""
50-
Path tied to a module spec.
51-
Can be read and exposes the resource reader children.
52-
"""
53-
54-
def __init__(self, spec, reader):
55-
self._spec = spec
56-
self._reader = reader
57-
58-
def iterdir(self):
59-
if not self._reader:
60-
return iter(())
61-
return iter(
62-
CompatibilityFiles.ChildPath(self._reader, path)
63-
for path in self._reader.contents()
64-
)
65-
66-
def is_file(self):
67-
return False
68-
69-
is_dir = is_file
70-
71-
def joinpath(self, other):
72-
if not self._reader:
73-
return CompatibilityFiles.OrphanPath(other)
74-
return CompatibilityFiles.ChildPath(self._reader, other)
75-
76-
@property
77-
def name(self):
78-
return self._spec.name
79-
80-
def open(self, mode='r', *args, **kwargs):
81-
return _io_wrapper(self._reader.open_resource(None), mode, *args, **kwargs)
82-
83-
class ChildPath(abc.Traversable):
84-
"""
85-
Path tied to a resource reader child.
86-
Can be read but doesn't expose any meaningfull children.
87-
"""
88-
89-
def __init__(self, reader, name):
90-
self._reader = reader
91-
self._name = name
92-
37+
class Path(abc.Traversable):
9338
def iterdir(self):
9439
return iter(())
9540

96-
def is_file(self):
97-
return self._reader.is_resource(self.name)
98-
9941
def is_dir(self):
100-
return not self.is_file()
101-
102-
def joinpath(self, other):
103-
return CompatibilityFiles.OrphanPath(self.name, other)
104-
105-
@property
106-
def name(self):
107-
return self._name
108-
109-
def open(self, mode='r', *args, **kwargs):
110-
return _io_wrapper(
111-
self._reader.open_resource(self.name), mode, *args, **kwargs
112-
)
113-
114-
class OrphanPath(abc.Traversable):
115-
"""
116-
Orphan path, not tied to a module spec or resource reader.
117-
Can't be read and doesn't expose any meaningful children.
118-
"""
119-
120-
def __init__(self, *path_parts):
121-
if len(path_parts) < 1:
122-
raise ValueError('Need at least one path part to construct a path')
123-
self._path = path_parts
124-
125-
def iterdir(self):
126-
return iter(())
127-
128-
def is_file(self):
12942
return False
13043

131-
is_dir = is_file
44+
is_file = exists = is_dir # type: ignore
13245

13346
def joinpath(self, other):
134-
return CompatibilityFiles.OrphanPath(*self._path, other)
47+
return DegenerateFiles.Path()
13548

136-
@property
13749
def name(self):
138-
return self._path[-1]
50+
return ''
13951

140-
def open(self, mode='r', *args, **kwargs):
141-
raise FileNotFoundError("Can't open orphan path")
52+
def open(self):
53+
raise ValueError()
14254

14355
def __init__(self, spec):
14456
self.spec = spec
@@ -159,7 +71,7 @@ def __getattr__(self, attr):
15971
return getattr(self._reader, attr)
16072

16173
def files(self):
162-
return CompatibilityFiles.SpecPath(self.spec, self._reader)
74+
return DegenerateFiles.Path()
16375

16476

16577
def wrap_spec(package):

‎Lib/importlib/_common.py

Copy file name to clipboardExpand all lines: Lib/importlib/_common.py
+1-2Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
from ._adapters import wrap_spec
1313

1414
Package = Union[types.ModuleType, str]
15-
Resource = Union[str, os.PathLike]
1615

1716

1817
def files(package):
@@ -94,7 +93,7 @@ def _tempfile(reader, suffix=''):
9493
finally:
9594
try:
9695
os.remove(raw_path)
97-
except (FileNotFoundError, PermissionError):
96+
except FileNotFoundError:
9897
pass
9998

10099

‎Lib/importlib/_itertools.py

Copy file name to clipboardExpand all lines: Lib/importlib/_itertools.py
-19Lines changed: 0 additions & 19 deletions
This file was deleted.

‎Lib/importlib/_legacy.py

Copy file name to clipboardExpand all lines: Lib/importlib/_legacy.py
-84Lines changed: 0 additions & 84 deletions
This file was deleted.

‎Lib/importlib/readers.py

Copy file name to clipboardExpand all lines: Lib/importlib/readers.py
+8-7Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
import collections
2-
import operator
3-
import pathlib
42
import zipfile
5-
3+
import pathlib
64
from . import abc
75

8-
from ._itertools import unique_everseen
9-
106

117
def remove_duplicates(items):
128
return iter(collections.OrderedDict.fromkeys(items))
@@ -67,8 +63,13 @@ def __init__(self, *paths):
6763
raise NotADirectoryError('MultiplexedPath only supports directories')
6864

6965
def iterdir(self):
70-
files = (file for path in self._paths for file in path.iterdir())
71-
return unique_everseen(files, key=operator.attrgetter('name'))
66+
visited = []
67+
for path in self._paths:
68+
for file in path.iterdir():
69+
if file.name in visited:
70+
continue
71+
visited.append(file.name)
72+
yield file
7273

7374
def read_bytes(self):
7475
raise FileNotFoundError(f'{self} is not a file')

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.