summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudiu Popa <pcmanticore@gmail.com>2015-07-08 19:08:02 +0300
committerClaudiu Popa <pcmanticore@gmail.com>2015-07-08 19:08:02 +0300
commit553fb66e75368199d8cbfeefa132cf9925e963e4 (patch)
tree37fce61476d9adfd07d0b6070d2201b167d95873
parent2444ab4b230d7d466cae383fe2225f4c5c5fe0e0 (diff)
parent71ff78a4590edabc526c23105622d867aac12857 (diff)
downloadastroid-git-553fb66e75368199d8cbfeefa132cf9925e963e4.tar.gz
Merged in davidshea/astroid/pygobject-require_version (pull request #78)
Duplicate calls to gi.require_version.
-rw-r--r--astroid/brain/py2gi.py36
1 files changed, 34 insertions, 2 deletions
diff --git a/astroid/brain/py2gi.py b/astroid/brain/py2gi.py
index 2f8494d6..30a178ca 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,38 @@ 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
+ try:
+ import gi
+ gi.require_version(node.args[0].value, node.args[1].value)
+ except Exception:
+ pass
+
+ return node
+
+MANAGER.register_failed_import_hook(_import_gi_module)
+MANAGER.register_transform(nodes.CallFunc, _register_require_version, _looks_like_require_version)