aboutsummaryrefslogtreecommitdiff
path: root/catapult/telemetry/third_party/modulegraph/modulegraph/util.py
diff options
context:
space:
mode:
Diffstat (limited to 'catapult/telemetry/third_party/modulegraph/modulegraph/util.py')
-rw-r--r--catapult/telemetry/third_party/modulegraph/modulegraph/util.py119
1 files changed, 119 insertions, 0 deletions
diff --git a/catapult/telemetry/third_party/modulegraph/modulegraph/util.py b/catapult/telemetry/third_party/modulegraph/modulegraph/util.py
new file mode 100644
index 00000000..acf6bc13
--- /dev/null
+++ b/catapult/telemetry/third_party/modulegraph/modulegraph/util.py
@@ -0,0 +1,119 @@
+from __future__ import absolute_import
+
+import os
+import imp
+import sys
+import re
+import marshal
+import warnings
+
+try:
+ unicode
+except NameError:
+ unicode = str
+
+
+if sys.version_info[0] == 2:
+ from StringIO import StringIO as BytesIO
+ from StringIO import StringIO
+
+else:
+ from io import BytesIO, StringIO
+
+
+
+def imp_find_module(name, path=None):
+ """
+ same as imp.find_module, but handles dotted names
+ """
+ names = name.split('.')
+ if path is not None:
+ if isinstance(path, (str, unicode)):
+ path = [os.path.realpath(path)]
+ for name in names:
+ result = imp.find_module(name, path)
+ if result[0] is not None:
+ result[0].close()
+ path = [result[1]]
+ return result
+
+def _check_importer_for_path(name, path_item):
+ try:
+ importer = sys.path_importer_cache[path_item]
+ except KeyError:
+ for path_hook in sys.path_hooks:
+ try:
+ importer = path_hook(path_item)
+ break
+ except ImportError:
+ pass
+ else:
+ importer = None
+ sys.path_importer_cache.setdefault(path_item, importer)
+
+
+ if importer is None:
+ try:
+ return imp.find_module(name, [path_item])
+ except ImportError:
+ return None
+ return importer.find_module(name)
+
+def imp_walk(name):
+ """
+ yields namepart, tuple_or_importer for each path item
+
+ raise ImportError if a name can not be found.
+ """
+ warnings.warn("imp_walk will be removed in a future version", DeprecationWarning)
+
+ if name in sys.builtin_module_names:
+ yield name, (None, None, ("", "", imp.C_BUILTIN))
+ return
+ paths = sys.path
+ res = None
+ for namepart in name.split('.'):
+ for path_item in paths:
+ res = _check_importer_for_path(namepart, path_item)
+ if hasattr(res, 'load_module'):
+ if res.path.endswith('.py') or res.path.endswith('.pyw'):
+ fp = StringIO(res.get_source(namepart))
+ res = (fp, res.path, ('.py', 'rU', imp.PY_SOURCE))
+ elif res.path.endswith('.pyc') or res.path.endswith('.pyo'):
+ co = res.get_code(namepart)
+ fp = BytesIO(imp.get_magic() + b'\0\0\0\0' + marshal.dumps(co))
+ res = (fp, res.path, ('.pyc', 'rb', imp.PY_COMPILED))
+
+ else:
+ res = (None, loader.path, (os.path.splitext(loader.path)[-1], 'rb', imp.C_EXTENSION))
+
+ break
+ elif isinstance(res, tuple):
+ break
+ else:
+ break
+
+ yield namepart, res
+ paths = [os.path.join(path_item, namepart)]
+ else:
+ return
+
+ raise ImportError('No module named %s' % (name,))
+
+
+cookie_re = re.compile(b"coding[:=]\s*([-\w.]+)")
+if sys.version_info[0] == 2:
+ default_encoding = 'ascii'
+else:
+ default_encoding = 'utf-8'
+
+def guess_encoding(fp):
+
+ for i in range(2):
+ ln = fp.readline()
+
+ m = cookie_re.search(ln)
+ if m is not None:
+ return m.group(1).decode('ascii')
+
+ return default_encoding