1010from .py39compat import FS_NONASCII
1111from typing import Dict , Union
1212
13+ try :
14+ from importlib import resources
15+
16+ getattr (resources , 'files' )
17+ getattr (resources , 'as_file' )
18+ except (ImportError , AttributeError ):
19+ import importlib_resources as resources # type: ignore
20+
1321
1422@contextlib .contextmanager
1523def tempdir ():
@@ -54,7 +62,7 @@ def setUp(self):
5462
5563class SiteDir (Fixtures ):
5664 def setUp (self ):
57- super (SiteDir , self ).setUp ()
65+ super ().setUp ()
5866 self .site_dir = self .fixtures .enter_context (tempdir ())
5967
6068
@@ -69,7 +77,7 @@ def add_sys_path(dir):
6977 sys .path .remove (str (dir ))
7078
7179 def setUp (self ):
72- super (OnSysPath , self ).setUp ()
80+ super ().setUp ()
7381 self .fixtures .enter_context (self .add_sys_path (self .site_dir ))
7482
7583
@@ -106,7 +114,7 @@ def main():
106114 }
107115
108116 def setUp (self ):
109- super (DistInfoPkg , self ).setUp ()
117+ super ().setUp ()
110118 build_files (DistInfoPkg .files , self .site_dir )
111119
112120 def make_uppercase (self ):
@@ -131,7 +139,7 @@ class DistInfoPkgWithDot(OnSysPath, SiteDir):
131139 }
132140
133141 def setUp (self ):
134- super (DistInfoPkgWithDot , self ).setUp ()
142+ super ().setUp ()
135143 build_files (DistInfoPkgWithDot .files , self .site_dir )
136144
137145
@@ -152,13 +160,13 @@ class DistInfoPkgWithDotLegacy(OnSysPath, SiteDir):
152160 }
153161
154162 def setUp (self ):
155- super (DistInfoPkgWithDotLegacy , self ).setUp ()
163+ super ().setUp ()
156164 build_files (DistInfoPkgWithDotLegacy .files , self .site_dir )
157165
158166
159167class DistInfoPkgOffPath (SiteDir ):
160168 def setUp (self ):
161- super (DistInfoPkgOffPath , self ).setUp ()
169+ super ().setUp ()
162170 build_files (DistInfoPkg .files , self .site_dir )
163171
164172
@@ -198,7 +206,7 @@ def main():
198206 }
199207
200208 def setUp (self ):
201- super (EggInfoPkg , self ).setUp ()
209+ super ().setUp ()
202210 build_files (EggInfoPkg .files , prefix = self .site_dir )
203211
204212
@@ -219,7 +227,7 @@ class EggInfoFile(OnSysPath, SiteDir):
219227 }
220228
221229 def setUp (self ):
222- super (EggInfoFile , self ).setUp ()
230+ super ().setUp ()
223231 build_files (EggInfoFile .files , prefix = self .site_dir )
224232
225233
@@ -285,3 +293,19 @@ def DALS(str):
285293class NullFinder :
286294 def find_module (self , name ):
287295 pass
296+
297+
298+ class ZipFixtures :
299+ root = 'tests.data'
300+
301+ def _fixture_on_path (self , filename ):
302+ pkg_file = resources .files (self .root ).joinpath (filename )
303+ file = self .resources .enter_context (resources .as_file (pkg_file ))
304+ assert file .name .startswith ('example' ), file .name
305+ sys .path .insert (0 , str (file ))
306+ self .resources .callback (sys .path .pop , 0 )
307+
308+ def setUp (self ):
309+ # Add self.zip_name to the front of sys.path.
310+ self .resources = contextlib .ExitStack ()
311+ self .addCleanup (self .resources .close )
0 commit comments