diff options
author | David Shea <dshea@redhat.com> | 2015-07-08 10:43:10 -0400 |
---|---|---|
committer | David Shea <dshea@redhat.com> | 2015-07-08 10:43:10 -0400 |
commit | 0e284e5b69b694d9d0be5e57be7033f51caaeabd (patch) | |
tree | 71751aa513a4a0cb022254652c1873a890f4a1e7 | |
parent | 86a2c52cfb2608b3004cee5d98b90e004a12912f (diff) | |
download | astroid-0e284e5b69b694d9d0be5e57be7033f51caaeabd.tar.gz |
Duplicate calls to gi.require_version.
gobject-introspection uses gi.require_version to choose which version of a
library to import from gi.repository, and pygobject now issues a warning if
gi.require_version is not used. Find calls to require_version and duplicate
them in py2gi.py so that the version data is present in the context of the
import.
-rw-r--r-- | astroid/brain/py2gi.py | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/astroid/brain/py2gi.py b/astroid/brain/py2gi.py index 2f8494d..2e62b9a 100644 --- a/astroid/brain/py2gi.py +++ b/astroid/brain/py2gi.py @@ -9,7 +9,7 @@ import sys import re import warnings -from astroid import MANAGER, AstroidBuildingException +from astroid import MANAGER, AstroidBuildingException, nodes from astroid.builder import AstroidBuilder @@ -158,6 +158,34 @@ def _import_gi_module(modname): raise AstroidBuildingException('Failed to import module %r' % modname) return astng +def _looks_like_require_version(node): + # Return whether this looks like a call to gi.require_version(<name>, <version>) + # Only accept function calls with two constant arguments + if len(node.args) != 2: + return False -MANAGER.register_failed_import_hook(_import_gi_module) + if not all(isinstance(arg, nodes.Const) for arg in node.args): + return False + + func = node.func + if isinstance(func, nodes.Getattr): + if func.attrname != 'require_version': + return False + if isinstance(func.expr, nodes.Name) and func.expr.name == 'gi': + return True + + return False + + if isinstance(func, nodes.Name): + return func.name == 'require_version' + return False + +def _register_require_version(node): + # Load the gi.require_version locally + import gi + gi.require_version(node.args[0].value, node.args[1].value) + return node + +MANAGER.register_failed_import_hook(_import_gi_module) +MANAGER.register_transform(nodes.CallFunc, _register_require_version, _looks_like_require_version) |