core: expose pyraid specific partialRenderer request attribute.
- allows pure pyramid PartialRenderer - exposes nicer and more consistent api
This commit is contained in:
parent
ff28358243
commit
28ef616e7d
2 changed files with 101 additions and 0 deletions
|
|
@ -319,6 +319,10 @@ def includeme(config):
|
|||
config.add_subscriber(write_metadata_if_needed, ApplicationCreated)
|
||||
config.add_subscriber(write_js_routes_if_enabled, ApplicationCreated)
|
||||
|
||||
config.add_request_method(
|
||||
'rhodecode.lib.partial_renderer.get_partial_renderer',
|
||||
'get_partial_renderer')
|
||||
|
||||
# events
|
||||
# TODO(marcink): this should be done when pyramid migration is finished
|
||||
# config.add_subscriber(
|
||||
|
|
|
|||
97
rhodecode/lib/partial_renderer.py
Normal file
97
rhodecode/lib/partial_renderer.py
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright (C) 2010-2017 RhodeCode GmbH
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License, version 3
|
||||
# (only), as published by the Free Software Foundation.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# This program is dual-licensed. If you wish to learn more about the
|
||||
# RhodeCode Enterprise Edition, including its added features, Support services,
|
||||
# and proprietary license terms, please see https://rhodecode.com/licenses/
|
||||
|
||||
|
||||
import logging
|
||||
from mako import exceptions
|
||||
from pyramid.renderers import get_renderer
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def get_partial_renderer(request, tmpl_name):
|
||||
return PyramidPartialRenderer(request, tmpl_name=tmpl_name)
|
||||
|
||||
|
||||
class PyramidPartialRenderer(object):
|
||||
|
||||
"""
|
||||
Partial renderer used to render chunks of html used in datagrids
|
||||
use like::
|
||||
|
||||
_renderer = request.get_partial_renderer('_dt/template_base.mako')
|
||||
_render('quick_menu', args, kwargs)
|
||||
|
||||
:param tmpl_name: template path relate to /templates/ dir
|
||||
"""
|
||||
|
||||
def __init__(self, request, tmpl_name):
|
||||
self.tmpl_name = tmpl_name
|
||||
self.request = request
|
||||
|
||||
def _mako_lookup(self):
|
||||
_tmpl_lookup = get_renderer('root.mako').lookup
|
||||
return _tmpl_lookup.get_template(self.tmpl_name)
|
||||
|
||||
def get_call_context(self):
|
||||
return self.request.call_context
|
||||
|
||||
def get_helpers(self):
|
||||
from rhodecode.lib import helpers
|
||||
return helpers
|
||||
|
||||
def _update_kwargs_for_render(self, kwargs):
|
||||
"""
|
||||
Inject params required for Mako rendering
|
||||
"""
|
||||
|
||||
_kwargs = {
|
||||
'_': self.request.translate,
|
||||
'ungettext': self.request.plularize,
|
||||
'h': self.get_helpers(),
|
||||
'c': self.get_call_context(),
|
||||
|
||||
'request': self.request,
|
||||
}
|
||||
_kwargs.update(kwargs)
|
||||
return _kwargs
|
||||
|
||||
def _render_with_exc(self, render_func, args, kwargs):
|
||||
try:
|
||||
return render_func.render(*args, **kwargs)
|
||||
except:
|
||||
log.error(exceptions.text_error_template().render())
|
||||
raise
|
||||
|
||||
def _get_template(self, template_obj, def_name):
|
||||
if def_name:
|
||||
tmpl = template_obj.get_def(def_name)
|
||||
else:
|
||||
tmpl = template_obj
|
||||
return tmpl
|
||||
|
||||
def render(self, def_name, *args, **kwargs):
|
||||
lookup_obj = self._mako_lookup()
|
||||
tmpl = self._get_template(lookup_obj, def_name=def_name)
|
||||
kwargs = self._update_kwargs_for_render(kwargs)
|
||||
return self._render_with_exc(tmpl, args, kwargs)
|
||||
|
||||
def __call__(self, tmpl, *args, **kwargs):
|
||||
return self.render(tmpl, *args, **kwargs)
|
||||
Loading…
Add table
Add a link
Reference in a new issue