Allow overriding renderer module with any module

Will be used in tests. Allows renderer modules (and extensions) that look like 
`foo.bar`: it will import `foo.bar` and not `powerline.renderers.foo.bar` like 
before.
This commit is contained in:
ZyX 2013-03-30 16:53:04 +04:00
parent 34c775f628
commit bc1a3e4c1d

View File

@ -111,7 +111,12 @@ class Powerline(object):
colorschemes, render module (``powerline.renders.{ext}``).
:param str renderer_module:
Overrides renderer module (defaults to ``ext``). Should be the name of
the package imported like this: ``powerline.renders.{render_module}``.
the package imported like this: ``powerline.renders.{render_module}``.
If this parameter contains a dot, ``powerline.renderers.`` is not
prepended. There is also a special case for renderers defined in
toplevel modules: ``foo.`` (note: dot at the end) tries to get renderer
from module ``foo`` (because ``foo`` (without dot) tries to get renderer
from module ``powerline.renderers.foo``).
:param bool run_once:
Determines whether .renderer.render() method will be run only once
during python session.
@ -146,6 +151,11 @@ class Powerline(object):
self.home = home
self.use_daemon_threads = use_daemon_threads
if '.' not in self.renderer_module:
self.renderer_module = 'powerline.renderers.' + self.renderer_module
elif self.renderer_module[-1] == '.':
self.renderer_module = self.renderer_module[:-1]
self.config_paths = self.get_config_paths()
self.renderer_lock = Lock()
@ -250,9 +260,8 @@ class Powerline(object):
self.theme_config = self.load_theme_config(self.ext_config.get('theme', 'default'))
if create_renderer:
renderer_module_import = 'powerline.renderers.{0}'.format(self.renderer_module)
try:
Renderer = __import__(renderer_module_import, fromlist=['renderer']).renderer
Renderer = __import__(self.renderer_module, fromlist=['renderer']).renderer
except Exception as e:
self.pl.exception('Failed to import renderer module: {0}', str(e))
sys.exit(1)