diff options
author | Claudiu Popa <pcmanticore@gmail.com> | 2015-07-08 19:08:02 +0300 |
---|---|---|
committer | Claudiu Popa <pcmanticore@gmail.com> | 2015-07-08 19:08:02 +0300 |
commit | 553fb66e75368199d8cbfeefa132cf9925e963e4 (patch) | |
tree | 37fce61476d9adfd07d0b6070d2201b167d95873 | |
parent | 2444ab4b230d7d466cae383fe2225f4c5c5fe0e0 (diff) | |
parent | 71ff78a4590edabc526c23105622d867aac12857 (diff) | |
download | astroid-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.py | 36 |
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) |