--- a/cubicweb/debug.py Thu Nov 14 01:01:00 2019 +0100
+++ b/cubicweb/debug.py Thu Nov 14 15:40:35 2019 +0100
@@ -25,6 +25,7 @@
"controller": [],
"rql": [],
"sql": [],
+ "vreg": [],
}
--- a/cubicweb/pyramid/bwcompat.py Thu Nov 14 01:01:00 2019 +0100
+++ b/cubicweb/pyramid/bwcompat.py Thu Nov 14 15:40:35 2019 +0100
@@ -93,6 +93,9 @@
ctrlid, req.path, controller,
inspect.getsourcefile(controller.__class__),
inspect.getsourcelines(controller.__class__)[1])
+ emit_to_debug_channel("vreg", {
+ "vreg": vreg,
+ })
emit_to_debug_channel("controller", {
"kind": ctrlid,
"request": req,
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cubicweb/pyramid/debug_toolbar_templates/registry.dbtmako Thu Nov 14 15:40:35 2019 +0100
@@ -0,0 +1,93 @@
+% if vreg:
+
+<div id="registry-store">
+ <div class="row">
+ <div class="col-md-3">
+ <nav id="registry-store-categories">
+ <ul class="nav nav-pills nav-stacked">
+ % for category in sorted(vreg.keys()):
+ <li role="presentation"><a href="#detail-${category}">${category}</a></li>
+ % endfor
+ </ul>
+ </nav>
+ </div>
+
+ <div class="col-md-9">
+ % for category, data in sorted(vreg.items(), key=lambda x: x[0]):
+ <div class="anchor">
+ <a class="anchor" id="detail-${category}"></a>
+ <h4>${category.title()}</h4>
+ <table class="table table-bordered table-striped">
+ % for key, values in sorted(data.items(), key=lambda x: x[0]):
+ <tr>
+ <th>${key}</th>
+ <td>
+ <ul>
+ % for value in values:
+ <li>
+ % if isinstance(value, type):
+ ${value.__module__}.${value.__name__}
+ % else:
+ ${value}
+ % endif
+
+ <ul>
+ % if hasattr(value, "cw_etype"):
+ <li>regid: '${value.cw_etype}'</li>
+ % elif hasattr(value, "__regid__"):
+ <li>regid: '${value.__regid__}'</li>
+ % endif
+
+ % if hasattr(value, "__select__"):
+ <li>select: '${value.__select__}'</li>
+ % if hasattr(value.__select__, "func_name"):
+ <li>select name: '${value.__select__.func_name}'</li>
+ % endif
+ % if hasattr(value.__select__, "score"):
+ <li>select score: '${value.__select__.score}'</li>
+ % endif
+ % endif
+
+ <li>registries: ${value.__registries__}</li>
+
+ % if hasattr(value, "rest_attr"):
+ <li>rest_attr: '${value.rest_attr}'</li>
+ % endif
+
+ % if hasattr(value, "fetch_attrs"):
+ <li>fetch_attrs: '${value.fetch_attrs}'</li>
+ % endif
+
+ % if hasattr(value, "cw_skip_copy_for"):
+ <li>cw_skip_copy_for: '${value.cw_skip_copy_for}'</li>
+ % endif
+
+ % if hasattr(value, "e_schema"):
+ <li>e_schema: '${value.e_schema}'</li>
+ % endif
+ </ul>
+ </li>
+ % endfor
+ </ul>
+ </td>
+ </tr>
+ % endfor
+ </table>
+ </div>
+ % endfor
+ </div>
+ </div>
+</div>
+
+% else:
+<p>No registry store got collected, is it a bug?</p>
+% endif
+
+<style>
+a.anchor {
+ display: block;
+ position: relative;
+ top: -150px;
+ visibility: hidden;
+}
+</style>
--- a/cubicweb/pyramid/debugtoolbar_panels.py Thu Nov 14 01:01:00 2019 +0100
+++ b/cubicweb/pyramid/debugtoolbar_panels.py Thu Nov 14 15:40:35 2019 +0100
@@ -54,6 +54,29 @@
unsubscribe_to_debug_channel("controller", self.collect_controller)
+class RegistryDebugPanel(DebugPanel):
+ """
+ CubicWeb registry content and decisions debug panel
+ """
+
+ name = 'Registry'
+ title = 'Registry Store'
+ nav_title = 'Registry Store'
+
+ has_content = True
+ template = 'cubicweb.pyramid:debug_toolbar_templates/registry.dbtmako'
+
+ def __init__(self, request):
+ self.data = {'vreg': None}
+ subscribe_to_debug_channel("vreg", self.collect_vreg)
+
+ def collect_vreg(self, message):
+ self.data["vreg"] = message["vreg"]
+
+ def process_response(self, response):
+ unsubscribe_to_debug_channel("vreg", self.collect_vreg)
+
+
class RQLDebugPanel(DebugPanel):
"""
CubicWeb RQL debug panel
@@ -167,5 +190,6 @@
def includeme(config):
config.add_debugtoolbar_panel(CubicWebDebugPanel)
+ config.add_debugtoolbar_panel(RegistryDebugPanel)
config.add_debugtoolbar_panel(RQLDebugPanel)
config.add_debugtoolbar_panel(SQLDebugPanel)