summaryrefslogtreecommitdiff
path: root/docs/quick_tutorial/debugtoolbar.rst
blob: 1c540d8a25d9fcc6f5d5bd4f8c239c3d1617aeea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
.. _qtut_debugtoolbar:

============================================
04: Easier Development with ``debugtoolbar``
============================================

Error-handling and introspection using the ``pyramid_debugtoolbar``
add-on.

Background
==========

As we introduce the basics we also want to show how to be productive in
development and debugging. For example, we just discussed template
reloading and earlier we showed ``--reload`` for application reloading.

``pyramid_debugtoolbar`` is a popular Pyramid add-on which makes
several tools available in your browser. Adding it to your project
illustrates several points about configuration.

Objectives
==========

- Install and enable the toolbar to help during development

- Explain Pyramid add-ons

- Show how an add-on gets configured into your application

Steps
=====

#. First we copy the results of the previous step, as well as install
   the ``pyramid_debugtoolbar`` package:

   .. code-block:: bash

    $ cd ..; cp -r ini debugtoolbar; cd debugtoolbar
    $ $VENV/bin/python setup.py develop
    $ $VENV/bin/easy_install pyramid_debugtoolbar

#. Our ``debugtoolbar/development.ini`` gets a configuration entry for
   ``pyramid.includes``:

   .. literalinclude:: debugtoolbar/development.ini
    :language: ini
    :linenos:

#. Run the WSGI application with:

   .. code-block:: bash

    $ $VENV/bin/pserve development.ini --reload

#. Open http://localhost:6543/ in your browser. See the handy
   toolbar on the right.

Analysis
========

``pyramid_debugtoolbar`` is a full-fledged Python package,
available on PyPI just like thousands of other Python packages. Thus we
start by installing the ``pyramid_debugtoolbar`` package into our
virtual environment using normal Python package installation commands.

The ``pyramid_debugtoolbar`` Python package is also a Pyramid add-on,
which means we need to include its add-on configuration into our web
application. We could do this with imperative configuration in
``tutorial/__init__.py`` by using ``config.include``. Pyramid also
supports wiring in add-on configuration via our ``development.ini``
using ``pyramid.includes``. We use this to load the configuration for
the debugtoolbar.

You'll now see an attractive (and collapsible) menu in the right of
your browser, providing introspective access to debugging information.
Even better, if your web application generates an error,
you will see a nice traceback on the screen. When you want to disable
this toolbar, no need to change code: you can remove it from
``pyramid.includes`` in the relevant ``.ini`` configuration file (thus
showing why configuration files are handy.)

Note that the toolbar mutates the HTML generated by our app and uses jQuery to
overlay itself.  If you are using the toolbar while you're developing and you
start to experience otherwise inexplicable client-side weirdness, you can shut
it off by commenting out the ``pyramid_debugtoolbar`` line in
``pyramid.includes`` temporarily.

.. seealso:: See also :ref:`pyramid_debugtoolbar <toolbar:overview>`.

Extra Credit
============

# Why don't we add ``pyramid_debugtoolbar`` to the list of
  ``install_requires`` dependencies in ``debugtoolbar/setup.py``?

# Introduce a bug into your application:  Change:

  .. code-block:: python

    def hello_world(request):
        return Response('<body><h1>Hello World!</h1></body>')

  to:

  .. code-block:: python

    def hello_world(request):
        return xResponse('<body><h1>Hello World!</h1></body>')

  Save, and visit http://localhost:6543/ again.  Notice the nice
  traceback display.  On the lowest line, click the "screen" icon to the
  right, and try typing the variable names ``request`` and ``Response``.
  What else can you discover?