summaryrefslogtreecommitdiffstats
path: root/powerline/lint/imp.py
diff options
context:
space:
mode:
Diffstat (limited to 'powerline/lint/imp.py')
-rw-r--r--powerline/lint/imp.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/powerline/lint/imp.py b/powerline/lint/imp.py
new file mode 100644
index 0000000..399654e
--- /dev/null
+++ b/powerline/lint/imp.py
@@ -0,0 +1,56 @@
+# vim:fileencoding=utf-8:noet
+from __future__ import (unicode_literals, division, absolute_import, print_function)
+
+import sys
+
+from powerline.lint.selfcheck import havemarks
+
+
+class WithPath(object):
+ def __init__(self, import_paths):
+ self.import_paths = import_paths
+
+ def __enter__(self):
+ self.oldpath = sys.path
+ sys.path = self.import_paths + sys.path
+
+ def __exit__(self, *args):
+ sys.path = self.oldpath
+
+
+def import_function(function_type, name, data, context, echoerr, module):
+ havemarks(name, module)
+
+ if module == 'powerline.segments.i3wm' and name == 'workspaces':
+ echoerr(context='Warning while checking segments (key {key})'.format(key=context.key),
+ context_mark=name.mark,
+ problem='segment {0} from {1} is deprecated'.format(name, module),
+ problem_mark=module.mark)
+
+ with WithPath(data['import_paths']):
+ try:
+ func = getattr(__import__(str(module), fromlist=[str(name)]), str(name))
+ except ImportError:
+ echoerr(context='Error while checking segments (key {key})'.format(key=context.key),
+ context_mark=name.mark,
+ problem='failed to import module {0}'.format(module),
+ problem_mark=module.mark)
+ return None
+ except AttributeError:
+ echoerr(context='Error while loading {0} function (key {key})'.format(function_type, key=context.key),
+ problem='failed to load function {0} from module {1}'.format(name, module),
+ problem_mark=name.mark)
+ return None
+
+ if not callable(func):
+ echoerr(context='Error while checking segments (key {key})'.format(key=context.key),
+ context_mark=name.mark,
+ problem='imported “function” {0} from module {1} is not callable'.format(name, module),
+ problem_mark=module.mark)
+ return None
+
+ return func
+
+
+def import_segment(*args, **kwargs):
+ return import_function('segment', *args, **kwargs)