Документация здесь: http://docs.pylonsproject.org/projects/pyramid_debugtoolbar/en/latest/#adding-custom-panels
Я создал небольшой пример, как это сделать на примере sadisplay.
sadisplay - это модуль который отображает модели SQLAlchemy в виде UML диаграммы.
Было бы удобно видеть схему БД проекта в дебаг панеле. Для этого создадим папку проекта pyramid_debugtoolbar_sadisplay со структурой:
├── __init__.py ├── panel.py └── templates └── base.dbtmako
panel.py
#! /usr/bin/env python # -*- coding: utf-8 -*- # vim:fenc=utf-8 # # Copyright © 2014 uralbash# # Distributed under terms of the MIT license. """ sadisplay in pyramid_debugtoolbar """ import pydot import sadisplay import sqlalchemy from sqlalchemy import engine_from_config from pyramid_debugtoolbar.panels import DebugPanel _ = lambda x: x def get_sa_base(request, settings=None): if settings is None: settings = request.registry.settings engine = engine_from_config(settings, 'sqlalchemy.') sabase = sqlalchemy.ext.declarative.declarative_base() sabase.metadata.reflect(engine) return sabase class SadisplayDebugPanel(DebugPanel): """ debug panel """ name = 'SADisplay' has_content = True template = 'pyramid_debugtoolbar_sadisplay:templates/base.dbtmako' def __init__(self, request): self.request = request self.data = {} self.Base = get_sa_base(request) def nav_title(self): return _('SADisplay') def url(self): return '' def title(self): return _('SADisplay') def render_vars(self, request): tables = self.Base.metadata.tables.values() desc = sadisplay.describe(tables) dot_data = sadisplay.dot(desc) graph = pydot.graph_from_dot_data(str(dot_data)) svg_img = graph.create_svg() return {'svg_img': svg_img} def content(self): vars = self.render_vars(self.request) return self.render( 'pyramid_debugtoolbar_sadisplay:templates/base.dbtmako', vars, self.request)
Функция get_sa_base создает base объект и заполняет его метаданными по строке подключения к БД, в дальнейшем мы сможем получить все модели проекта.
Метод render_vars при помощи sadisplay генерит текст формата dot и при помощи pydot конвертит его в svg.
В версии pyramid_debugtoolbar 1.0.* нужно рендерить шаблон в методе content. В 2.0.* метод content не нужен, шаблон указывается в виде атрибута template, а параметры атдаются в методе render_vars. В примере используются оба метода, что бы работало во всех версиях.
шаблон base.dbtmako
<h4>
SQLAlchemy models preview</h4>
${ svg_img|n }
link: <a href="https://github.com/uralbash/pyramid_debugtoolbar_sadisplay" style="color: blue;">pyramid_debugtoolbar_sadisplay</a>
Подключаем к приложению:
# __init__.py # SADisplay in pyramid_debugtoolbar from pyramid_debugtoolbar_sadisplay.panel import SadisplayDebugPanel config.registry.settings['debugtoolbar.panels'].append(SadisplayDebugPanel)
Результат:
Код примера здесь: https://github.com/uralbash/pyramid_debugtoolbar_sadisplay
Очень здорово )))
ОтветитьУдалитьА можно ли сделать так что бы панель не всю БД рисовало, а только те таблицы, которые были задействованы в ходе выполнения запроса?
А так конечно все это сахар и лучше БД документировать https://pypi.python.org/pypi/sphinxcontrib-sadisplay