|
19 | 19 | # HelpSource was extracted from configHelpSourceEdit.py (temporarily |
20 | 20 | # config_help.py), with darwin code moved from ok to path_ok. |
21 | 21 |
|
22 | | -import importlib |
| 22 | +import importlib.util, importlib.abc |
23 | 23 | import os |
24 | 24 | import shlex |
25 | 25 | from sys import executable, platform # Platform is set for one test. |
@@ -57,7 +57,8 @@ def __init__(self, parent, title, message, *, text0='', used_names={}, |
57 | 57 | self.withdraw() # Hide while configuring, especially geometry. |
58 | 58 | self.title(title) |
59 | 59 | self.transient(parent) |
60 | | - self.grab_set() |
| 60 | + if not _utest: # Otherwise fail when directly run unittest. |
| 61 | + self.grab_set() |
61 | 62 |
|
62 | 63 | windowingsystem = self.tk.call('tk', 'windowingsystem') |
63 | 64 | if windowingsystem == 'aqua': |
@@ -209,17 +210,23 @@ def entry_ok(self): |
209 | 210 | self.showerror(str(msg)) |
210 | 211 | return None |
211 | 212 | if spec is None: |
212 | | - self.showerror("module not found") |
| 213 | + self.showerror("module not found.") |
213 | 214 | return None |
214 | 215 | if not isinstance(spec.loader, importlib.abc.SourceLoader): |
215 | | - self.showerror("not a source-based module") |
| 216 | + self.showerror("not a source-based module.") |
216 | 217 | return None |
217 | 218 | try: |
218 | 219 | file_path = spec.loader.get_filename(name) |
219 | 220 | except AttributeError: |
220 | | - self.showerror("loader does not support get_filename", |
221 | | - parent=self) |
| 221 | + self.showerror("loader does not support get_filename.") |
222 | 222 | return None |
| 223 | + except ImportError: |
| 224 | + # Some special modules require this (e.g. os.path) |
| 225 | + try: |
| 226 | + file_path = spec.loader.get_filename() |
| 227 | + except TypeError: |
| 228 | + self.showerror("loader failed to get filename.") |
| 229 | + return None |
223 | 230 | return file_path |
224 | 231 |
|
225 | 232 |
|
@@ -375,7 +382,7 @@ def cli_args_ok(self): |
375 | 382 | return cli_args |
376 | 383 |
|
377 | 384 | def entry_ok(self): |
378 | | - "Return apparently valid (cli_args, restart) or None" |
| 385 | + "Return apparently valid (cli_args, restart) or None." |
379 | 386 | cli_args = self.cli_args_ok() |
380 | 387 | restart = self.restartvar.get() |
381 | 388 | return None if cli_args is None else (cli_args, restart) |
|
0 commit comments