| 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
 | 
| 
 |