mirror of
https://github.com/valitydev/salt-common.git
synced 2024-11-06 10:25:23 +00:00
Add modified genshi renderer
This commit is contained in:
parent
e528300ae0
commit
15213313d3
65
sls/_renderers/genshi.py
Normal file
65
sls/_renderers/genshi.py
Normal file
@ -0,0 +1,65 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
'''
|
||||
Genshi Renderer for Salt
|
||||
'''
|
||||
|
||||
from __future__ import absolute_import, print_function, unicode_literals
|
||||
import logging
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
# Import salt libs
|
||||
from salt.ext import six
|
||||
from salt.exceptions import SaltRenderError
|
||||
|
||||
# Import 3rd party libs
|
||||
try:
|
||||
from genshi.template import MarkupTemplate
|
||||
from genshi.template import NewTextTemplate
|
||||
from genshi.template import OldTextTemplate
|
||||
HAS_LIBS = True
|
||||
except ImportError:
|
||||
HAS_LIBS = False
|
||||
|
||||
def render(genshi_data, saltenv='base', sls='', method='xml', **kws):
|
||||
'''
|
||||
Render a Genshi template. A method should be passed in as part of the
|
||||
kwargs. If no method is passed in, xml is assumed. Valid methods are:
|
||||
|
||||
.. code-block:
|
||||
|
||||
- xml
|
||||
- xhtml
|
||||
- html
|
||||
- text
|
||||
- newtext
|
||||
- oldtext
|
||||
|
||||
Note that the ``text`` method will call ``NewTextTemplate``. If ``oldtext``
|
||||
is desired, it must be called explicitly
|
||||
|
||||
:rtype: A Python data structure
|
||||
'''
|
||||
if not HAS_LIBS:
|
||||
raise SaltRenderError('Failed to import genshi template')
|
||||
|
||||
if not isinstance(genshi_data, six.string_types):
|
||||
genshi_data = genshi_data.read()
|
||||
|
||||
if genshi_data.startswith('#!'):
|
||||
genshi_data = genshi_data[(genshi_data.find('\n') + 1):]
|
||||
if not genshi_data.strip():
|
||||
return {}
|
||||
|
||||
if method == 'text' or method == 'newtext':
|
||||
tmpl = NewTextTemplate(genshi_data)
|
||||
elif method == 'oldtext':
|
||||
tmpl = OldTextTemplate(genshi_data)
|
||||
else:
|
||||
tmpl = MarkupTemplate(genshi_data)
|
||||
|
||||
generated = tmpl.generate(
|
||||
salt=__salt__, grains=__grains__, pillar=__pillar__,
|
||||
opts=__opts__, proxy=__proxy__,
|
||||
saltenv=saltenv, sls=sls, **kws)
|
||||
|
||||
return generated.render(method)
|
Loading…
Reference in New Issue
Block a user