Show More
@@ -48,7 +48,10 b' TIMEOUT_STORAGE = 2' | |||
|
48 | 48 | TIMEOUT_GIVEUP = 20 |
|
49 | 49 | |
|
50 | 50 | # Regular expression for the python import statement |
|
51 | import_re = re.compile(r'.*(\.so|\.py[cod]?)$') | |
|
51 | import_re = re.compile(r'(?P<name>[a-zA-Z_][a-zA-Z0-9_]*?)' | |
|
52 | r'(?P<package>[/\\]__init__)?' | |
|
53 | r'(?P<suffix>%s)$' % | |
|
54 | r'|'.join(re.escape(s[0]) for s in imp.get_suffixes())) | |
|
52 | 55 | |
|
53 | 56 | # RE for the ipython %run command (python + ipython scripts) |
|
54 | 57 | magic_run_re = re.compile(r'.*(\.ipy|\.py[w]?)$') |
@@ -66,36 +69,35 b' def module_list(path):' | |||
|
66 | 69 | if path == '': |
|
67 | 70 | path = '.' |
|
68 | 71 | |
|
69 | if os.path.isdir(path): | |
|
70 | folder_list = os.listdir(path) | |
|
71 | elif path.endswith('.egg'): | |
|
72 | try: | |
|
73 | folder_list = [f for f in zipimporter(path)._files] | |
|
74 | except: | |
|
75 | folder_list = [] | |
|
76 | else: | |
|
77 | folder_list = [] | |
|
78 | ||
|
79 | if not folder_list: | |
|
80 | return [] | |
|
81 | ||
|
82 | 72 | # A few local constants to be used in loops below |
|
83 | isfile = os.path.isfile | |
|
84 | 73 | pjoin = os.path.join |
|
85 | basename = os.path.basename | |
|
86 | ||
|
87 | def is_importable_file(path): | |
|
88 | """Returns True if the provided path is a valid importable module""" | |
|
89 | name, extension = os.path.splitext( path ) | |
|
90 | return import_re.match(path) and py3compat.isidentifier(name) | |
|
91 | 74 | |
|
92 | # Now find actual path matches for packages or modules | |
|
93 | folder_list = [p for p in folder_list | |
|
94 | if any(isfile(pjoin(path, p, '__init__' + suffix[0])) for | |
|
95 | suffix in imp.get_suffixes()) | |
|
96 | or is_importable_file(p) ] | |
|
75 | if os.path.isdir(path): | |
|
76 | # Build a list of all files in the directory and all files | |
|
77 | # in its subdirectories. For performance reasons, do not | |
|
78 | # recurse more than one level into subdirectories. | |
|
79 | files = [] | |
|
80 | for root, dirs, nondirs in os.walk(path): | |
|
81 | subdir = root[len(path)+1:] | |
|
82 | if subdir: | |
|
83 | files.extend(pjoin(subdir, f) for f in nondirs) | |
|
84 | dirs[:] = [] # Do not recurse into additional subdirectories. | |
|
85 | else: | |
|
86 | files.extend(nondirs) | |
|
97 | 87 | |
|
98 | return [basename(p).split('.')[0] for p in folder_list] | |
|
88 | else: | |
|
89 | try: | |
|
90 | files = list(zipimporter(path)._files.keys()) | |
|
91 | except: | |
|
92 | files = [] | |
|
93 | ||
|
94 | # Build a list of modules which match the import_re regex. | |
|
95 | modules = [] | |
|
96 | for f in files: | |
|
97 | m = import_re.match(f) | |
|
98 | if m: | |
|
99 | modules.append(m.group('name')) | |
|
100 | return list(set(modules)) | |
|
99 | 101 | |
|
100 | 102 | def get_root_modules(): |
|
101 | 103 | """ |
General Comments 0
You need to be logged in to leave comments.
Login now