diff --git a/rhodecode/lib/utils.py b/rhodecode/lib/utils.py --- a/rhodecode/lib/utils.py +++ b/rhodecode/lib/utils.py @@ -859,78 +859,6 @@ class BasePasterCommand(Command): initialize_database(config) -class PartialRenderer(object): - """ - Partial renderer used to render chunks of html used in datagrids - use like:: - - _render = PartialRenderer('data_table/_dt_elements.mako') - _render('quick_menu', args, kwargs) - PartialRenderer.h, - c, - _, - ungettext - are the template stuff initialized inside and can be re-used later - - :param tmpl_name: template path relate to /templates/ dir - """ - - def __init__(self, tmpl_name): - import rhodecode - from pylons import request, tmpl_context as c - from pylons.i18n.translation import _, ungettext - from rhodecode.lib import helpers as h - - self.tmpl_name = tmpl_name - self.rhodecode = rhodecode - self.c = c - self._ = _ - self.ungettext = ungettext - self.h = h - self.request = request - - def _mako_lookup(self): - _tmpl_lookup = self.rhodecode.CONFIG['pylons.app_globals'].mako_lookup - return _tmpl_lookup.get_template(self.tmpl_name) - - def _update_kwargs_for_render(self, kwargs): - """ - Inject params required for Mako rendering - """ - _kwargs = { - '_': self._, - 'h': self.h, - 'c': self.c, - 'request': self.request, - '_ungettext': self.ungettext, - } - _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) - - def password_changed(auth_user, session): # Never report password change in case of default user or anonymous user. if auth_user.username == User.DEFAULT_USER or auth_user.user_id is None: diff --git a/rhodecode/model/notification.py b/rhodecode/model/notification.py --- a/rhodecode/model/notification.py +++ b/rhodecode/model/notification.py @@ -26,11 +26,11 @@ Model for notifications import logging import traceback +from pyramid.threadlocal import get_current_request from sqlalchemy.sql.expression import false, true import rhodecode from rhodecode.lib import helpers as h -from rhodecode.lib.utils import PartialRenderer from rhodecode.model import BaseModel from rhodecode.model.db import Notification, User, UserNotification from rhodecode.model.meta import Session @@ -343,9 +343,9 @@ class EmailNotificationModel(BaseModel): def whitespace_filter(self, text): return text.replace('\n', '').replace('\t', '') - def get_renderer(self, type_): + def get_renderer(self, type_, request): template_name = self.email_types[type_] - return PartialRenderer(template_name) + return request.get_partial_renderer(template_name) def render_email(self, type_, **kwargs): """ @@ -354,8 +354,8 @@ class EmailNotificationModel(BaseModel): """ # translator and helpers inject _kwargs = self._update_kwargs_for_render(kwargs) - - email_template = self.get_renderer(type_) + request = get_current_request() + email_template = self.get_renderer(type_, request=request) subject = email_template.render('subject', **_kwargs) diff --git a/rhodecode/tests/lib/test_mako_emails.py b/rhodecode/tests/lib/test_mako_emails.py --- a/rhodecode/tests/lib/test_mako_emails.py +++ b/rhodecode/tests/lib/test_mako_emails.py @@ -1,16 +1,35 @@ import collections +# -*- 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 . +# +# 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 pytest -from rhodecode.lib.utils import PartialRenderer +from rhodecode.lib.partial_renderer import PyramidPartialRenderer from rhodecode.lib.utils2 import AttributeDict from rhodecode.model.notification import EmailNotificationModel -def test_get_template_obj(app): +def test_get_template_obj(app, request_stub): template = EmailNotificationModel().get_renderer( - EmailNotificationModel.TYPE_TEST) - assert isinstance(template, PartialRenderer) + EmailNotificationModel.TYPE_TEST, request_stub) + assert isinstance(template, PyramidPartialRenderer) def test_render_email(app, http_host_only_stub):