Index: tools/telemetry/third_party/modulegraph/modulegraph/find_modules.py |
diff --git a/tools/telemetry/third_party/modulegraph/modulegraph/find_modules.py b/tools/telemetry/third_party/modulegraph/modulegraph/find_modules.py |
deleted file mode 100644 |
index fee8c17879f01d9b4e95bcfaab0f95af76704c02..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/third_party/modulegraph/modulegraph/find_modules.py |
+++ /dev/null |
@@ -1,366 +0,0 @@ |
-""" |
-modulegraph.find_modules - High-level module dependency finding interface |
-========================================================================= |
- |
-History |
-........ |
- |
-Originally (loosely) based on code in py2exe's build_exe.py by Thomas Heller. |
-""" |
-from __future__ import absolute_import |
- |
-import sys |
-import os |
-import imp |
-import warnings |
- |
-import modulegraph.modulegraph as modulegraph |
-from modulegraph.modulegraph import Alias, Script, Extension |
-from modulegraph.util import imp_find_module |
- |
-__all__ = [ |
- 'find_modules', 'parse_mf_results' |
-] |
- |
-def get_implies(): |
- result = { |
- # imports done from builtin modules in C code (untrackable by modulegraph) |
- "_curses": ["curses"], |
- "posix": ["resource"], |
- "gc": ["time"], |
- "time": ["_strptime"], |
- "datetime": ["time"], |
- "MacOS": ["macresource"], |
- "cPickle": ["copy_reg", "cStringIO"], |
- "parser": ["copy_reg"], |
- "codecs": ["encodings"], |
- "cStringIO": ["copy_reg"], |
- "_sre": ["copy", "string", "sre"], |
- "zipimport": ["zlib"], |
- |
- # Python 3.2: |
- "_datetime": ["time", "_strptime"], |
- "_json": ["json.decoder"], |
- "_pickle": ["codecs", "copyreg", "_compat_pickle"], |
- "_posixsubprocess": ["gc"], |
- "_ssl": ["socket"], |
- |
- # Python 3.3: |
- "_elementtree": ["copy", "xml.etree.ElementPath" ], |
- |
- # mactoolboxglue can do a bunch more of these |
- # that are far harder to predict, these should be tracked |
- # manually for now. |
- |
- # this isn't C, but it uses __import__ |
- "anydbm": ["dbhash", "gdbm", "dbm", "dumbdbm", "whichdb"], |
- # package aliases |
- "wxPython.wx": Alias('wx'), |
- |
- } |
- |
- if sys.version_info[0] == 3: |
- result["_sre"] = ["copy", "re"] |
- result["parser"] = ["copyreg"] |
- |
- # _frozen_importlib is part of the interpreter itself |
- result["_frozen_importlib"] = None |
- |
- if sys.version_info[0] == 2 and sys.version_info[1] >= 5: |
- result.update({ |
- "email.base64MIME": Alias("email.base64mime"), |
- "email.Charset": Alias("email.charset"), |
- "email.Encoders": Alias("email.encoders"), |
- "email.Errors": Alias("email.errors"), |
- "email.Feedparser": Alias("email.feedParser"), |
- "email.Generator": Alias("email.generator"), |
- "email.Header": Alias("email.header"), |
- "email.Iterators": Alias("email.iterators"), |
- "email.Message": Alias("email.message"), |
- "email.Parser": Alias("email.parser"), |
- "email.quopriMIME": Alias("email.quoprimime"), |
- "email.Utils": Alias("email.utils"), |
- "email.MIMEAudio": Alias("email.mime.audio"), |
- "email.MIMEBase": Alias("email.mime.base"), |
- "email.MIMEImage": Alias("email.mime.image"), |
- "email.MIMEMessage": Alias("email.mime.message"), |
- "email.MIMEMultipart": Alias("email.mime.multipart"), |
- "email.MIMENonMultipart": Alias("email.mime.nonmultipart"), |
- "email.MIMEText": Alias("email.mime.text"), |
- }) |
- |
- if sys.version_info[:2] >= (2, 5): |
- result["_elementtree"] = ["pyexpat"] |
- |
- import xml.etree |
- files = os.listdir(xml.etree.__path__[0]) |
- for fn in files: |
- if fn.endswith('.py') and fn != "__init__.py": |
- result["_elementtree"].append("xml.etree.%s"%(fn[:-3],)) |
- |
- if sys.version_info[:2] >= (2, 6): |
- result['future_builtins'] = ['itertools'] |
- |
- # os.path is an alias for a platform specific submodule, |
- # ensure that the graph shows this. |
- result['os.path'] = Alias(os.path.__name__) |
- |
- |
- return result |
- |
-def parse_mf_results(mf): |
- """ |
- Return two lists: the first one contains the python files in the graph, |
- the second the C extensions. |
- |
- :param mf: a :class:`modulegraph.modulegraph.ModuleGraph` instance |
- """ |
- #for name, imports in get_hidden_imports().items(): |
- # if name in mf.modules.keys(): |
- # for mod in imports: |
- # mf.import_hook(mod) |
- |
- # Retrieve modules from modulegraph |
- py_files = [] |
- extensions = [] |
- |
- for item in mf.flatten(): |
- # There may be __main__ modules (from mf.run_script), but |
- # we don't need it in the zipfile we build. |
- if item.identifier == "__main__": |
- continue |
- src = item.filename |
- if src and src != '-': |
- if isinstance(item, Script): |
- # Scripts are python files |
- py_files.append(item) |
- |
- elif isinstance(item, Extension): |
- extensions.append(item) |
- |
- else: |
- py_files.append(item) |
- |
- # sort on the file names, the output is nicer to read |
- py_files.sort(key=lambda v: v.filename) |
- extensions.sort(key=lambda v: v.filename) |
- return py_files, extensions |
- |
- |
-def plat_prepare(includes, packages, excludes): |
- # used by Python itself |
- includes.update(["warnings", "unicodedata", "weakref"]) |
- |
- #if os.uname()[0] != 'java': |
- # Jython specific imports in the stdlib: |
- #excludes.update([ |
- # 'java.lang', |
- # 'org.python.core', |
- #]) |
- |
- if not sys.platform.startswith('irix'): |
- excludes.update([ |
- 'AL', |
- 'sgi', |
- 'vms_lib', |
- ]) |
- |
- if not sys.platform in ('mac', 'darwin'): |
- # XXX - this doesn't look nearly complete |
- excludes.update([ |
- 'Audio_mac', |
- 'Carbon.File', |
- 'Carbon.Folder', |
- 'Carbon.Folders', |
- 'EasyDialogs', |
- 'MacOS', |
- 'macfs', |
- 'macostools', |
- #'macpath', |
- '_scproxy', |
- ]) |
- |
- if not sys.platform == 'win32': |
- # only win32 |
- excludes.update([ |
- #'ntpath', |
- 'nturl2path', |
- 'win32api', |
- 'win32con', |
- 'win32event', |
- 'win32evtlogutil', |
- 'win32evtlog', |
- 'win32file', |
- 'win32gui', |
- 'win32pipe', |
- 'win32process', |
- 'win32security', |
- 'pywintypes', |
- 'winsound', |
- 'win32', |
- '_winreg', |
- '_winapi', |
- 'msvcrt', |
- 'winreg', |
- '_subprocess', |
- ]) |
- |
- if not sys.platform == 'riscos': |
- excludes.update([ |
- 'riscosenviron', |
- #'riscospath', |
- 'rourl2path', |
- ]) |
- |
- if not sys.platform == 'dos' or sys.platform.startswith('ms-dos'): |
- excludes.update([ |
- 'dos', |
- ]) |
- |
- if not sys.platform == 'os2emx': |
- excludes.update([ |
- #'os2emxpath', |
- '_emx_link', |
- ]) |
- |
- excludes.update(set(['posix', 'nt', 'os2', 'mac', 'ce', 'riscos']) - set(sys.builtin_module_names)) |
- |
- # Carbon.Res depends on this, but the module hasn't been present |
- # for a while... |
- excludes.add('OverrideFrom23') |
- excludes.add('OverrideFrom23._Res') |
- |
- # import trickery in the dummy_threading module (stdlib) |
- excludes.add('_dummy_threading') |
- |
- try: |
- imp_find_module('poll') |
- except ImportError: |
- excludes.update([ |
- 'poll', |
- ]) |
- |
-def find_needed_modules(mf=None, scripts=(), includes=(), packages=(), warn=warnings.warn): |
- if mf is None: |
- mf = modulegraph.ModuleGraph() |
- # feed Modulefinder with everything, and return it. |
- |
- for path in scripts: |
- mf.run_script(path) |
- |
- for mod in includes: |
- try: |
- if mod[-2:] == '.*': |
- mf.import_hook(mod[:-2], None, ['*']) |
- else: |
- mf.import_hook(mod) |
- except ImportError: |
- warn("No module named %s"%(mod,)) |
- |
- for f in packages: |
- # If modulegraph has seen a reference to the package, then |
- # we prefer to believe that (imp_find_module doesn't seem to locate |
- # sub-packages) |
- m = mf.findNode(f) |
- if m is not None: |
- path = m.packagepath[0] |
- else: |
- # Find path of package |
- # TODO: use imp_find_module_or_importer |
- try: |
- path = imp_find_module(f, mf.path)[1] |
- except ImportError: |
- warn("No package named %s" % f) |
- continue |
- |
- # walk the path to find subdirs containing __init__.py files |
- # scan the results (directory of __init__.py files) |
- # first trim the path (of the head package), |
- # then convert directory name in package name, |
- # finally push into modulegraph. |
- # FIXME: |
- # 1) Needs to be adjusted for namespace packages in python 3.3 |
- # 2) Code is fairly dodgy and needs better tests |
- for (dirpath, dirnames, filenames) in os.walk(path): |
- if '__init__.py' in filenames and dirpath.startswith(path): |
- package = f + '.' + dirpath[len(path)+1:].replace(os.sep, '.') |
- if package.endswith('.'): |
- package = package[:-1] |
- m = mf.import_hook(package, None, ["*"]) |
- else: |
- # Exclude subtrees that aren't packages |
- dirnames[:] = [] |
- |
- |
- return mf |
- |
-# |
-# resource constants |
-# |
-PY_SUFFIXES = ['.py', '.pyw', '.pyo', '.pyc'] |
-C_SUFFIXES = [ |
- _triple[0] for _triple in imp.get_suffixes() |
- if _triple[2] == imp.C_EXTENSION |
-] |
- |
-# |
-# side-effects |
-# |
- |
-def _replacePackages(): |
- REPLACEPACKAGES = { |
- '_xmlplus': 'xml', |
- } |
- for k,v in REPLACEPACKAGES.items(): |
- modulegraph.replacePackage(k, v) |
- |
-_replacePackages() |
- |
-def find_modules(scripts=(), includes=(), packages=(), excludes=(), path=None, debug=0): |
- """ |
- High-level interface, takes iterables for: |
- scripts, includes, packages, excludes |
- |
- And returns a :class:`modulegraph.modulegraph.ModuleGraph` instance, |
- python_files, and extensions |
- |
- python_files is a list of pure python dependencies as modulegraph.Module objects, |
- extensions is a list of platform-specific C extension dependencies as modulegraph.Module objects |
- """ |
- scripts = set(scripts) |
- includes = set(includes) |
- packages = set(packages) |
- excludes = set(excludes) |
- plat_prepare(includes, packages, excludes) |
- mf = modulegraph.ModuleGraph( |
- path=path, |
- excludes=(excludes - includes), |
- implies=get_implies(), |
- debug=debug, |
- ) |
- find_needed_modules(mf, scripts, includes, packages) |
- return mf |
- |
-def test(): |
- if '-g' in sys.argv[1:]: |
- sys.argv.remove('-g') |
- dograph = True |
- else: |
- dograph = False |
- if '-x' in sys.argv[1:]: |
- sys.argv.remove('-x') |
- doxref = True |
- else: |
- doxref= False |
- |
- scripts = sys.argv[1:] or [__file__] |
- mf = find_modules(scripts=scripts) |
- if doxref: |
- mf.create_xref() |
- elif dograph: |
- mf.graphreport() |
- else: |
- mf.report() |
- |
-if __name__ == '__main__': |
- test() |