Mercurial > repos > guerler > springsuite
comparison planemo/lib/python3.7/site-packages/importlib_metadata/tests/fixtures.py @ 1:56ad4e20f292 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author | guerler |
---|---|
date | Fri, 31 Jul 2020 00:32:28 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:d30785e31577 | 1:56ad4e20f292 |
---|---|
1 from __future__ import unicode_literals | |
2 | |
3 import os | |
4 import sys | |
5 import shutil | |
6 import tempfile | |
7 import textwrap | |
8 import test.support | |
9 | |
10 from .._compat import pathlib, contextlib | |
11 | |
12 | |
13 __metaclass__ = type | |
14 | |
15 | |
16 @contextlib.contextmanager | |
17 def tempdir(): | |
18 tmpdir = tempfile.mkdtemp() | |
19 try: | |
20 yield pathlib.Path(tmpdir) | |
21 finally: | |
22 shutil.rmtree(tmpdir) | |
23 | |
24 | |
25 @contextlib.contextmanager | |
26 def save_cwd(): | |
27 orig = os.getcwd() | |
28 try: | |
29 yield | |
30 finally: | |
31 os.chdir(orig) | |
32 | |
33 | |
34 @contextlib.contextmanager | |
35 def tempdir_as_cwd(): | |
36 with tempdir() as tmp: | |
37 with save_cwd(): | |
38 os.chdir(str(tmp)) | |
39 yield tmp | |
40 | |
41 | |
42 @contextlib.contextmanager | |
43 def install_finder(finder): | |
44 sys.meta_path.append(finder) | |
45 try: | |
46 yield | |
47 finally: | |
48 sys.meta_path.remove(finder) | |
49 | |
50 | |
51 class Fixtures: | |
52 def setUp(self): | |
53 self.fixtures = contextlib.ExitStack() | |
54 self.addCleanup(self.fixtures.close) | |
55 | |
56 | |
57 class SiteDir(Fixtures): | |
58 def setUp(self): | |
59 super(SiteDir, self).setUp() | |
60 self.site_dir = self.fixtures.enter_context(tempdir()) | |
61 | |
62 | |
63 class OnSysPath(Fixtures): | |
64 @staticmethod | |
65 @contextlib.contextmanager | |
66 def add_sys_path(dir): | |
67 sys.path[:0] = [str(dir)] | |
68 try: | |
69 yield | |
70 finally: | |
71 sys.path.remove(str(dir)) | |
72 | |
73 def setUp(self): | |
74 super(OnSysPath, self).setUp() | |
75 self.fixtures.enter_context(self.add_sys_path(self.site_dir)) | |
76 | |
77 | |
78 class DistInfoPkg(OnSysPath, SiteDir): | |
79 files = { | |
80 "distinfo_pkg-1.0.0.dist-info": { | |
81 "METADATA": """ | |
82 Name: distinfo-pkg | |
83 Author: Steven Ma | |
84 Version: 1.0.0 | |
85 Requires-Dist: wheel >= 1.0 | |
86 Requires-Dist: pytest; extra == 'test' | |
87 """, | |
88 "RECORD": "mod.py,sha256=abc,20\n", | |
89 "entry_points.txt": """ | |
90 [entries] | |
91 main = mod:main | |
92 ns:sub = mod:main | |
93 """ | |
94 }, | |
95 "mod.py": """ | |
96 def main(): | |
97 print("hello world") | |
98 """, | |
99 } | |
100 | |
101 def setUp(self): | |
102 super(DistInfoPkg, self).setUp() | |
103 build_files(DistInfoPkg.files, self.site_dir) | |
104 | |
105 | |
106 class DistInfoPkgOffPath(SiteDir): | |
107 def setUp(self): | |
108 super(DistInfoPkgOffPath, self).setUp() | |
109 build_files(DistInfoPkg.files, self.site_dir) | |
110 | |
111 | |
112 class EggInfoPkg(OnSysPath, SiteDir): | |
113 files = { | |
114 "egginfo_pkg.egg-info": { | |
115 "PKG-INFO": """ | |
116 Name: egginfo-pkg | |
117 Author: Steven Ma | |
118 License: Unknown | |
119 Version: 1.0.0 | |
120 Classifier: Intended Audience :: Developers | |
121 Classifier: Topic :: Software Development :: Libraries | |
122 """, | |
123 "SOURCES.txt": """ | |
124 mod.py | |
125 egginfo_pkg.egg-info/top_level.txt | |
126 """, | |
127 "entry_points.txt": """ | |
128 [entries] | |
129 main = mod:main | |
130 """, | |
131 "requires.txt": """ | |
132 wheel >= 1.0; python_version >= "2.7" | |
133 [test] | |
134 pytest | |
135 """, | |
136 "top_level.txt": "mod\n" | |
137 }, | |
138 "mod.py": """ | |
139 def main(): | |
140 print("hello world") | |
141 """, | |
142 } | |
143 | |
144 def setUp(self): | |
145 super(EggInfoPkg, self).setUp() | |
146 build_files(EggInfoPkg.files, prefix=self.site_dir) | |
147 | |
148 | |
149 class EggInfoFile(OnSysPath, SiteDir): | |
150 files = { | |
151 "egginfo_file.egg-info": """ | |
152 Metadata-Version: 1.0 | |
153 Name: egginfo_file | |
154 Version: 0.1 | |
155 Summary: An example package | |
156 Home-page: www.example.com | |
157 Author: Eric Haffa-Vee | |
158 Author-email: eric@example.coms | |
159 License: UNKNOWN | |
160 Description: UNKNOWN | |
161 Platform: UNKNOWN | |
162 """, | |
163 } | |
164 | |
165 def setUp(self): | |
166 super(EggInfoFile, self).setUp() | |
167 build_files(EggInfoFile.files, prefix=self.site_dir) | |
168 | |
169 | |
170 class LocalPackage: | |
171 files = { | |
172 "setup.py": """ | |
173 import setuptools | |
174 setuptools.setup(name="local-pkg", version="2.0.1") | |
175 """, | |
176 } | |
177 | |
178 def setUp(self): | |
179 self.fixtures = contextlib.ExitStack() | |
180 self.addCleanup(self.fixtures.close) | |
181 self.fixtures.enter_context(tempdir_as_cwd()) | |
182 build_files(self.files) | |
183 | |
184 | |
185 def build_files(file_defs, prefix=pathlib.Path()): | |
186 """Build a set of files/directories, as described by the | |
187 | |
188 file_defs dictionary. Each key/value pair in the dictionary is | |
189 interpreted as a filename/contents pair. If the contents value is a | |
190 dictionary, a directory is created, and the dictionary interpreted | |
191 as the files within it, recursively. | |
192 | |
193 For example: | |
194 | |
195 {"README.txt": "A README file", | |
196 "foo": { | |
197 "__init__.py": "", | |
198 "bar": { | |
199 "__init__.py": "", | |
200 }, | |
201 "baz.py": "# Some code", | |
202 } | |
203 } | |
204 """ | |
205 for name, contents in file_defs.items(): | |
206 full_name = prefix / name | |
207 if isinstance(contents, dict): | |
208 full_name.mkdir() | |
209 build_files(contents, prefix=full_name) | |
210 else: | |
211 if isinstance(contents, bytes): | |
212 with full_name.open('wb') as f: | |
213 f.write(contents) | |
214 else: | |
215 with full_name.open('w') as f: | |
216 f.write(DALS(contents)) | |
217 | |
218 | |
219 class FileBuilder: | |
220 def unicode_filename(self): | |
221 return test.support.FS_NONASCII or \ | |
222 self.skip("File system does not support non-ascii.") | |
223 | |
224 | |
225 def DALS(str): | |
226 "Dedent and left-strip" | |
227 return textwrap.dedent(str).lstrip() | |
228 | |
229 | |
230 class NullFinder: | |
231 def find_module(self, name): | |
232 pass |