| Index: third_party/logilab/astroid/brain/py2gi.py
|
| diff --git a/third_party/logilab/astroid/brain/py2gi.py b/third_party/logilab/astroid/brain/py2gi.py
|
| deleted file mode 100644
|
| index dd9868db31902ff69491c4e13e182493d554bec5..0000000000000000000000000000000000000000
|
| --- a/third_party/logilab/astroid/brain/py2gi.py
|
| +++ /dev/null
|
| @@ -1,159 +0,0 @@
|
| -"""Astroid hooks for the Python 2 GObject introspection bindings.
|
| -
|
| -Helps with understanding everything imported from 'gi.repository'
|
| -"""
|
| -
|
| -import inspect
|
| -import sys
|
| -import re
|
| -
|
| -from astroid import MANAGER, AstroidBuildingException
|
| -from astroid.builder import AstroidBuilder
|
| -
|
| -
|
| -_inspected_modules = {}
|
| -
|
| -_identifier_re = r'^[A-Za-z_]\w*$'
|
| -
|
| -def _gi_build_stub(parent):
|
| - """
|
| - Inspect the passed module recursively and build stubs for functions,
|
| - classes, etc.
|
| - """
|
| - classes = {}
|
| - functions = {}
|
| - constants = {}
|
| - methods = {}
|
| - for name in dir(parent):
|
| - if name.startswith("__"):
|
| - continue
|
| -
|
| - # Check if this is a valid name in python
|
| - if not re.match(_identifier_re, name):
|
| - continue
|
| -
|
| - try:
|
| - obj = getattr(parent, name)
|
| - except:
|
| - continue
|
| -
|
| - if inspect.isclass(obj):
|
| - classes[name] = obj
|
| - elif (inspect.isfunction(obj) or
|
| - inspect.isbuiltin(obj)):
|
| - functions[name] = obj
|
| - elif (inspect.ismethod(obj) or
|
| - inspect.ismethoddescriptor(obj)):
|
| - methods[name] = obj
|
| - elif type(obj) in [int, str]:
|
| - constants[name] = obj
|
| - elif (str(obj).startswith("<flags") or
|
| - str(obj).startswith("<enum ") or
|
| - str(obj).startswith("<GType ") or
|
| - inspect.isdatadescriptor(obj)):
|
| - constants[name] = 0
|
| - elif callable(obj):
|
| - # Fall back to a function for anything callable
|
| - functions[name] = obj
|
| - else:
|
| - # Assume everything else is some manner of constant
|
| - constants[name] = 0
|
| -
|
| - ret = ""
|
| -
|
| - if constants:
|
| - ret += "# %s contants\n\n" % parent.__name__
|
| - for name in sorted(constants):
|
| - if name[0].isdigit():
|
| - # GDK has some busted constant names like
|
| - # Gdk.EventType.2BUTTON_PRESS
|
| - continue
|
| -
|
| - val = constants[name]
|
| -
|
| - strval = str(val)
|
| - if type(val) is str:
|
| - strval = '"%s"' % str(val).replace("\\", "\\\\")
|
| - ret += "%s = %s\n" % (name, strval)
|
| -
|
| - if ret:
|
| - ret += "\n\n"
|
| - if functions:
|
| - ret += "# %s functions\n\n" % parent.__name__
|
| - for name in sorted(functions):
|
| - func = functions[name]
|
| - ret += "def %s(*args, **kwargs):\n" % name
|
| - ret += " pass\n"
|
| -
|
| - if ret:
|
| - ret += "\n\n"
|
| - if methods:
|
| - ret += "# %s methods\n\n" % parent.__name__
|
| - for name in sorted(methods):
|
| - func = methods[name]
|
| - ret += "def %s(self, *args, **kwargs):\n" % name
|
| - ret += " pass\n"
|
| -
|
| - if ret:
|
| - ret += "\n\n"
|
| - if classes:
|
| - ret += "# %s classes\n\n" % parent.__name__
|
| - for name in sorted(classes):
|
| - ret += "class %s(object):\n" % name
|
| -
|
| - classret = _gi_build_stub(classes[name])
|
| - if not classret:
|
| - classret = "pass\n"
|
| -
|
| - for line in classret.splitlines():
|
| - ret += " " + line + "\n"
|
| - ret += "\n"
|
| -
|
| - return ret
|
| -
|
| -# Overwrite Module.module_import to _actually_ import the introspected module if
|
| -# it's a gi module, then build stub code by examining its info and get an astng
|
| -# from that
|
| -
|
| -from astroid.scoped_nodes import Module
|
| -_orig_import_module = Module.import_module
|
| -
|
| -def _new_import_module(self, modname, relative_only=False, level=None):
|
| - # Could be a static piece of gi.repository or whatever unrelated module,
|
| - # let that fall through
|
| - try:
|
| - return _orig_import_module(self, modname, relative_only, level)
|
| - except AstroidBuildingException:
|
| - # we only consider gi.repository submodules
|
| - if not modname.startswith('gi.repository.'):
|
| - if relative_only and level is None:
|
| - level = 0
|
| - modname = self.relative_to_absolute_name(modname, level)
|
| - if not modname.startswith('gi.repository.'):
|
| - raise
|
| - # build astroid representation unless we already tried so
|
| - if modname not in _inspected_modules:
|
| - modnames = [modname]
|
| - # GLib and GObject have some special case handling
|
| - # in pygobject that we need to cope with
|
| - if modname == 'gi.repository.GLib':
|
| - modnames.append('gi._glib')
|
| - elif modname == 'gi.repository.GObject':
|
| - modnames.append('gi._gobject')
|
| - try:
|
| - modcode = ''
|
| - for m in modnames:
|
| - __import__(m)
|
| - modcode += _gi_build_stub(sys.modules[m])
|
| - except ImportError:
|
| - astng = _inspected_modules[modname] = None
|
| - else:
|
| - astng = AstroidBuilder(MANAGER).string_build(modcode, modname)
|
| - _inspected_modules[modname] = astng
|
| - else:
|
| - astng = _inspected_modules[modname]
|
| - if astng is None:
|
| - raise AstroidBuildingException('Failed to import module %r' % modname)
|
| - return astng
|
| -
|
| -Module.import_module = _new_import_module
|
|
|