From 6b60165a8e1b745ae8edbdd405021346029daf06 Mon Sep 17 00:00:00 2001 From: jonathan vanasco Date: Wed, 23 Nov 2016 17:08:33 -0500 Subject: [PATCH 1/3] working on toolbar --- pyramid_mako/__init__.py | 2 + pyramid_mako/debugtoolbar/__init__.py | 0 pyramid_mako/debugtoolbar/panels/__init__.py | 0 pyramid_mako/debugtoolbar/panels/main.py | 24 ++++++++++ .../panels/templates/main.dbtmako | 48 +++++++++++++++++++ 5 files changed, 74 insertions(+) create mode 100644 pyramid_mako/debugtoolbar/__init__.py create mode 100644 pyramid_mako/debugtoolbar/panels/__init__.py create mode 100644 pyramid_mako/debugtoolbar/panels/main.py create mode 100644 pyramid_mako/debugtoolbar/panels/templates/main.dbtmako diff --git a/pyramid_mako/__init__.py b/pyramid_mako/__init__.py index 1038306..d4b1f16 100644 --- a/pyramid_mako/__init__.py +++ b/pyramid_mako/__init__.py @@ -161,6 +161,7 @@ def __call__(self, value, system): class MakoRendererFactory(object): lookup = None + registered_ext = None renderer_factory = staticmethod(MakoLookupTemplateRenderer) # testing def __call__(self, info): @@ -261,6 +262,7 @@ def register(): lookup = PkgResourceTemplateLookup(**opts) renderer_factory.lookup = lookup + renderer_factory.registered_ext = extension config.action(('mako-renderer', extension), register) diff --git a/pyramid_mako/debugtoolbar/__init__.py b/pyramid_mako/debugtoolbar/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pyramid_mako/debugtoolbar/panels/__init__.py b/pyramid_mako/debugtoolbar/panels/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pyramid_mako/debugtoolbar/panels/main.py b/pyramid_mako/debugtoolbar/panels/main.py new file mode 100644 index 0000000..d21dc6d --- /dev/null +++ b/pyramid_mako/debugtoolbar/panels/main.py @@ -0,0 +1,24 @@ +from pyramid_debugtoolbar.panels import DebugPanel +from pyramid_debugtoolbar.compat import text_ +from pyramid.interfaces import IRendererFactory +import pyramid_mako +_ = lambda x: x + + +class PyramidMakoMainDebugPanel(DebugPanel): + """ + A panel to display HTTP request and response headers. + """ + name = 'pyramid_mako' + has_content = True + template = 'pyramid_mako.debugtoolbar.panels:templates/main.dbtmako' + title = _('PyramidMako') + nav_title = title + + + def __init__(self, request): + self.registry = request.registry + all_renderers = request.registry.getAllUtilitiesRegisteredFor(IRendererFactory) + mako_renderers = [r for r in all_renderers if isinstance(r, pyramid_mako.MakoRendererFactory)] + self.mako_renderers = mako_renderers + self.data = {'mako_renderers': self.mako_renderers, } diff --git a/pyramid_mako/debugtoolbar/panels/templates/main.dbtmako b/pyramid_mako/debugtoolbar/panels/templates/main.dbtmako new file mode 100644 index 0000000..b72bd6d --- /dev/null +++ b/pyramid_mako/debugtoolbar/panels/templates/main.dbtmako @@ -0,0 +1,48 @@ +

Mako Renderers

+ +% for renderer in mako_renderers: + + + + + + + + + + + + + ## + + + + + + + + + + ## + ## + ## + ## + ## +
renderer${renderer}
renderer extension${renderer.registered_ext}
lookup${renderer.lookup}${renderer.lookup.__dict__}
lookup directories + directories configured +
    + % for i in renderer.lookup.directories: +
  • ${i}
  • + % endfor +
+
lookup collection + templates that have already been loaded/compiled +
    + % for i in renderer.lookup._collection.keys(): +
  • ${i}
  • + % endfor +
+
renderer_factory${renderer.renderer_factory}${renderer.renderer_factory.__dict__}
+
+ ## ${dir(renderer)} +% endfor From eb5d6c2e46de42a20d553254f8abea5f7c0041fb Mon Sep 17 00:00:00 2001 From: jonathan vanasco Date: Thu, 24 Nov 2016 12:05:32 -0500 Subject: [PATCH 2/3] tests pass --- CHANGES.txt | 11 ++++++ pyramid_mako/__init__.py | 39 ++++++++++++------- .../panels/templates/main.dbtmako | 10 ++--- pyramid_mako/tests.py | 27 +++++++++++++ setup.py | 1 + 5 files changed, 68 insertions(+), 20 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 049e4a6..93ad8f0 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -5,6 +5,17 @@ unreleased the ``preprocessor`` will be wrapped in a function that invokes the preprocessor with pyramid's config settings as the second argument. +- Added a debugtoolbar panel for debugging use + debugtoolbar.panels = + pyramid_mako.debugtoolbar.panels.main.PyramidMakoMainDebugPanel + +- `add_mako_renderer` now accepts a list of `extensions` instead of a single + `extension`. This allows for multiple extensions to share a single lookup. + Under the previous system, `.mako` and `.mak` would be registered to different + render factories and template lookups; if a `.mako` referenced a `.mak` file, + then it would be compiled into the `.mako` template lookup and recompiled + again for the `.mak` template lookup if accessed directly. + 1.0.2 (2014-04-22) ================== diff --git a/pyramid_mako/__init__.py b/pyramid_mako/__init__.py index d4b1f16..59beb65 100644 --- a/pyramid_mako/__init__.py +++ b/pyramid_mako/__init__.py @@ -161,7 +161,7 @@ def __call__(self, value, system): class MakoRendererFactory(object): lookup = None - registered_ext = None + registered_extensions = None # debugging only renderer_factory = staticmethod(MakoLookupTemplateRenderer) # testing def __call__(self, info): @@ -239,8 +239,8 @@ def preprocessor_injector(template): preprocessor=preprocessor, ) -def add_mako_renderer(config, extension, settings_prefix='mako.'): - """ Register a Mako renderer for a template extension. +def add_mako_renderer(config, extensions, settings_prefix='mako.'): + """ Register a Mako renderer for a template extension(s). This function is available on the Pyramid configurator after including the package: @@ -251,20 +251,29 @@ def add_mako_renderer(config, extension, settings_prefix='mako.'): The renderer will load its configuration from a prefix in the Pyramid settings dictionary. The default prefix is 'mako.'. + + Multiple extensions can be registered to a single factory and template + lookup by passing in a list or tuple for the extensions arg. + + .. code-block:: python + + config.add_mako_renderer(('.mako', '.mak'), settings_prefix='mako.') """ + extensions = extensions if isinstance(extensions, (list, tuple)) else (extensions, ) renderer_factory = MakoRendererFactory() - config.add_renderer(extension, renderer_factory) + renderer_factory.registered_extensions = extensions + for ext in extensions: + config.add_renderer(ext, renderer_factory) def register(): - registry = config.registry - opts = parse_options_from_settings( - registry.settings, settings_prefix, config.maybe_dotted) - lookup = PkgResourceTemplateLookup(**opts) + if renderer_factory.lookup is None: + opts = parse_options_from_settings( + config.registry.settings, settings_prefix, config.maybe_dotted) + lookup = PkgResourceTemplateLookup(**opts) + renderer_factory.lookup = lookup - renderer_factory.lookup = lookup - renderer_factory.registered_ext = extension - - config.action(('mako-renderer', extension), register) + for ext in extensions: + config.action(('mako-renderer', ext), register) def includeme(config): """ Set up standard configurator registrations. Use via: @@ -280,6 +289,6 @@ def includeme(config): :func:`~pyramid_mako.add_mako_renderer` documentation for more information. """ config.add_directive('add_mako_renderer', add_mako_renderer) - - config.add_mako_renderer('.mako') - config.add_mako_renderer('.mak') + config.add_mako_renderer(('.mako', + '.mak', + )) diff --git a/pyramid_mako/debugtoolbar/panels/templates/main.dbtmako b/pyramid_mako/debugtoolbar/panels/templates/main.dbtmako index b72bd6d..ccfd60f 100644 --- a/pyramid_mako/debugtoolbar/panels/templates/main.dbtmako +++ b/pyramid_mako/debugtoolbar/panels/templates/main.dbtmako @@ -3,16 +3,16 @@ % for renderer in mako_renderers: - - + + - - + + - + ## diff --git a/pyramid_mako/tests.py b/pyramid_mako/tests.py index 59fee57..7d2ba23 100644 --- a/pyramid_mako/tests.py +++ b/pyramid_mako/tests.py @@ -641,6 +641,33 @@ def test_repr_and_str(self): self.assertEqual(str(exc), 'text') self.assertEqual(repr(exc), 'text') +class TestDebugtoolbarPanel(Base, unittest.TestCase): + + def test_panel_null(self): + # we shouldn't have any mako_renderers configured... but the panel should run + from pyramid_mako.debugtoolbar.panels.main import PyramidMakoMainDebugPanel + from pyramid.testing import DummyRequest + panel = PyramidMakoMainDebugPanel(DummyRequest()) + self.assertTrue('mako_renderers' in panel.data) + self.assertTrue(len(panel.data['mako_renderers']) == 0) + + def test_panel_full(self): + # we should have a single renders for .mako+.mak + from pyramid_mako.debugtoolbar.panels.main import PyramidMakoMainDebugPanel + from pyramid.testing import DummyRequest + self.config = testing.setUp() + self.settings = {'mako.directories': 'pyramid_mako.tests:fixtures', + 'mako.preprocessor': + 'pyramid_mako.tests.dummy_mako_preprocessor', + 'mako.preprocessor_wants_settings': 'true', + 'replace_Hello': 'Goodbye', + } + self.config.add_settings(self.settings) + self.config.include('pyramid_mako') + panel = PyramidMakoMainDebugPanel(DummyRequest()) + self.assertTrue('mako_renderers' in panel.data) + self.assertTrue(len(panel.data['mako_renderers']) == 1) + class DummyLookup(object): directories = True diff --git a/setup.py b/setup.py index a0068d1..930a29f 100644 --- a/setup.py +++ b/setup.py @@ -37,6 +37,7 @@ testing_extras = tests_require + [ 'nose', 'coverage', + 'pyramid_debugtoolbar', ] requires = [ From 2c69a9169f4feed5b40d630cd783c9225bca4e16 Mon Sep 17 00:00:00 2001 From: jonathan vanasco Date: Mon, 28 Nov 2016 15:55:03 -0500 Subject: [PATCH 3/3] removed debugtoolbar feature. --- CHANGES.txt | 4 -- pyramid_mako/debugtoolbar/__init__.py | 0 pyramid_mako/debugtoolbar/panels/__init__.py | 0 pyramid_mako/debugtoolbar/panels/main.py | 24 ---------- .../panels/templates/main.dbtmako | 48 ------------------- pyramid_mako/tests.py | 26 ---------- setup.py | 1 - 7 files changed, 103 deletions(-) delete mode 100644 pyramid_mako/debugtoolbar/__init__.py delete mode 100644 pyramid_mako/debugtoolbar/panels/__init__.py delete mode 100644 pyramid_mako/debugtoolbar/panels/main.py delete mode 100644 pyramid_mako/debugtoolbar/panels/templates/main.dbtmako diff --git a/CHANGES.txt b/CHANGES.txt index 93ad8f0..a3bff28 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -5,10 +5,6 @@ unreleased the ``preprocessor`` will be wrapped in a function that invokes the preprocessor with pyramid's config settings as the second argument. -- Added a debugtoolbar panel for debugging use - debugtoolbar.panels = - pyramid_mako.debugtoolbar.panels.main.PyramidMakoMainDebugPanel - - `add_mako_renderer` now accepts a list of `extensions` instead of a single `extension`. This allows for multiple extensions to share a single lookup. Under the previous system, `.mako` and `.mak` would be registered to different diff --git a/pyramid_mako/debugtoolbar/__init__.py b/pyramid_mako/debugtoolbar/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/pyramid_mako/debugtoolbar/panels/__init__.py b/pyramid_mako/debugtoolbar/panels/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/pyramid_mako/debugtoolbar/panels/main.py b/pyramid_mako/debugtoolbar/panels/main.py deleted file mode 100644 index d21dc6d..0000000 --- a/pyramid_mako/debugtoolbar/panels/main.py +++ /dev/null @@ -1,24 +0,0 @@ -from pyramid_debugtoolbar.panels import DebugPanel -from pyramid_debugtoolbar.compat import text_ -from pyramid.interfaces import IRendererFactory -import pyramid_mako -_ = lambda x: x - - -class PyramidMakoMainDebugPanel(DebugPanel): - """ - A panel to display HTTP request and response headers. - """ - name = 'pyramid_mako' - has_content = True - template = 'pyramid_mako.debugtoolbar.panels:templates/main.dbtmako' - title = _('PyramidMako') - nav_title = title - - - def __init__(self, request): - self.registry = request.registry - all_renderers = request.registry.getAllUtilitiesRegisteredFor(IRendererFactory) - mako_renderers = [r for r in all_renderers if isinstance(r, pyramid_mako.MakoRendererFactory)] - self.mako_renderers = mako_renderers - self.data = {'mako_renderers': self.mako_renderers, } diff --git a/pyramid_mako/debugtoolbar/panels/templates/main.dbtmako b/pyramid_mako/debugtoolbar/panels/templates/main.dbtmako deleted file mode 100644 index ccfd60f..0000000 --- a/pyramid_mako/debugtoolbar/panels/templates/main.dbtmako +++ /dev/null @@ -1,48 +0,0 @@ -

Mako Renderers

- -% for renderer in mako_renderers: -
renderer${renderer}renderer extensions${renderer.registered_extensions}
renderer extension${renderer.registered_ext}renderer${renderer}, ${id(renderer)}
lookup${renderer.lookup}${renderer.lookup}, ${id(renderer.lookup)}${renderer.lookup.__dict__}
- - - - - - - - - - - - ## - - - - - - - - - - ## - ## - ## - ## - ## -
renderer extensions${renderer.registered_extensions}
renderer${renderer}, ${id(renderer)}
lookup${renderer.lookup}, ${id(renderer.lookup)}${renderer.lookup.__dict__}
lookup directories - directories configured -
    - % for i in renderer.lookup.directories: -
  • ${i}
  • - % endfor -
-
lookup collection - templates that have already been loaded/compiled -
    - % for i in renderer.lookup._collection.keys(): -
  • ${i}
  • - % endfor -
-
renderer_factory${renderer.renderer_factory}${renderer.renderer_factory.__dict__}
-
- ## ${dir(renderer)} -% endfor diff --git a/pyramid_mako/tests.py b/pyramid_mako/tests.py index 7d2ba23..777c87b 100644 --- a/pyramid_mako/tests.py +++ b/pyramid_mako/tests.py @@ -641,32 +641,6 @@ def test_repr_and_str(self): self.assertEqual(str(exc), 'text') self.assertEqual(repr(exc), 'text') -class TestDebugtoolbarPanel(Base, unittest.TestCase): - - def test_panel_null(self): - # we shouldn't have any mako_renderers configured... but the panel should run - from pyramid_mako.debugtoolbar.panels.main import PyramidMakoMainDebugPanel - from pyramid.testing import DummyRequest - panel = PyramidMakoMainDebugPanel(DummyRequest()) - self.assertTrue('mako_renderers' in panel.data) - self.assertTrue(len(panel.data['mako_renderers']) == 0) - - def test_panel_full(self): - # we should have a single renders for .mako+.mak - from pyramid_mako.debugtoolbar.panels.main import PyramidMakoMainDebugPanel - from pyramid.testing import DummyRequest - self.config = testing.setUp() - self.settings = {'mako.directories': 'pyramid_mako.tests:fixtures', - 'mako.preprocessor': - 'pyramid_mako.tests.dummy_mako_preprocessor', - 'mako.preprocessor_wants_settings': 'true', - 'replace_Hello': 'Goodbye', - } - self.config.add_settings(self.settings) - self.config.include('pyramid_mako') - panel = PyramidMakoMainDebugPanel(DummyRequest()) - self.assertTrue('mako_renderers' in panel.data) - self.assertTrue(len(panel.data['mako_renderers']) == 1) class DummyLookup(object): directories = True diff --git a/setup.py b/setup.py index 930a29f..a0068d1 100644 --- a/setup.py +++ b/setup.py @@ -37,7 +37,6 @@ testing_extras = tests_require + [ 'nose', 'coverage', - 'pyramid_debugtoolbar', ] requires = [