From ec257c2a933a1bcfa5d1cc52a344d27bccf45840 Mon Sep 17 00:00:00 2001 From: Jonathan LaCour Date: Fri, 23 Mar 2012 15:04:26 -0700 Subject: [PATCH] Adding documentation for the debug middleware, including docstrings. --- docs/source/debug-middleware-1.png | Bin 0 -> 67278 bytes docs/source/debug-middleware-2.png | Bin 0 -> 13493 bytes docs/source/development.rst | 32 ++++++++++++++++++++++++- docs/source/index.rst | 1 + docs/source/pecan_middleware_debug.rst | 9 +++++++ pecan/middleware/debug.py | 29 ++++++++++++++++++++++ 6 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 docs/source/debug-middleware-1.png create mode 100644 docs/source/debug-middleware-2.png create mode 100644 docs/source/pecan_middleware_debug.rst diff --git a/docs/source/debug-middleware-1.png b/docs/source/debug-middleware-1.png new file mode 100644 index 0000000000000000000000000000000000000000..350e2a6bd1d7ffcb1a7d1cb0f3d9793a3f098a25 GIT binary patch literal 67278 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

p>TV;*<5*-G%{kO-E_-sbm+eH}X{k%b8 zD1njSTXzcl}DROZ`N+l?pg2ku7VrsUfF`&csACh ziW{24s1t|N!(*?)2MK)oo(+Y3MJp=z)ESw`?wamRa~yd;l}>cAxRp<7Uv|C0hn@cJ z_zRHza@8T6hL5n>#O(9_Fs5gUl5*SP{#;$0aP*prG>QBljx$%aN`t&2DwD?jW)JxxZ3Y5i0ffd&0h1CFu%Xw*K(#TQJ5t+5^67Fjry2qv@;Yt`oUf7 z0~f1?8!W%2Kr@zAj^uSWb6%yD`^-=^Nj2hLwS4IdwX1yge~O4d+AwKmEsLL&DdVkD8?ap20{r@i>~t1dl6u|Lu*>Ys9BfRUS&To4{UQ9VP+! zZowYzh?W_Dq+~TUHro!3;t@p2kdz2eU z&&4sX;Ni7~@lZ9`v=tg~&Cc7zq@Xc7{Ev0^K<2Bpn~7gZ;=R1Rc1|#-CsMB^S*UH0 zuqVC=Y`61d;EPGm@bMb<%&S@t2fCiL*NG8=gTH-TYx=xTC_6DGEAX~l7a4qO%arf- z2hA5~YO%L4SQY(tZ2i>ma8V@ty0GT4Y6gwRCvGkUl+7!Yc{<&R{Wg3U=OAUbFwzbQ z-ROLZ4IZY;ez`LtPvKhO-&G_N=%#H5&wvd-*5}5wh2`T9%zk&J*Lw?e%!5tv`3`_9 zz?@{`g=z*>8z9`8CU?X8jN`Lt2TwMaed~8^-P2vBn)p%nwkU0!8Tq(3K#oDP%FHi+ zRk+*qj?(d9dThYj(}MsgL@W}qnw#rCOF3W#m>2229w#RI<=h;`Lc*PJwbr_R`SS6i z!kvcV;%|O6-MGcu>!I@I;%cYRVg%(ad{< zWoQL@$Tr}l{_~-FN9bn%X??s^cQ;lm_@~%uqtO2w&5{4Ta1)1M2Z0Q)-T0*cY8skm zMvKh@Z7-i+|5M_i#QcBQ#Q9(I{1cK$Xz5s~E#2bCRx@Q@{VxuHEN{L9BOuGL}4RP^Gm5O0BHhd4`<<`|jgMfr2R46Yk)GMOP*GHj0n(O(*c-y?x~(?#$^=+?OWbtP?$T=jfi} z3*FDEq6to3{&Ek|BhOZlQuQHd`(GwSvN`*=j`E)VY?^`pO>HNoMLjm5NFr1J;tQ+k z(N*8)y61m$hWB>I6f|91A@RJ~o~nk>9Ak95-v*=)cfU1)5sw9I<%TpeJZ^pDS~A1s(ivU9l|7GVjFRA&(LCKIdW7zE4WBzk zjb`NY=rul)bKYRI1pW`o-a0CeXX_Gf+#v}X+}+(F5Ind$L4r%r;1BNZ?g4_kJh%jR zcXxM(;dkHfe)F!GyVlH{zp7EJJ$ zGmG2uw47Xh&_@Gci?@1Y`B+)U{z|w;o-|1y5c8GW6tZYCiRntddJYUZ<)Lp?l%V{d z(TgA&raRZCy?ESO1i((b^FTnGi(nw_{-BFx?ANl1&Hx-IMBJmG2@-ILl~?E#v3k

_x+-q=|Oi+!L*@72oiS<~ptWoVK% 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�Yidw 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.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 literal 0 HcmV?d00001 diff --git a/docs/source/debug-middleware-2.png b/docs/source/debug-middleware-2.png new file mode 100644 index 0000000000000000000000000000000000000000..ce83f18d31f28323b1d1c0821a46dd557320bb06 GIT binary patch literal 13493 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 I64VR$Kd~-{lmGw# literal 0 HcmV?d00001 diff --git a/docs/source/development.rst b/docs/source/development.rst index f987ddf..0cc214c 100644 --- a/docs/source/development.rst +++ b/docs/source/development.rst @@ -9,7 +9,37 @@ Reloading Automatically as Files Change Debugging Pecan Applications ---------------------------- -TODO +Pecan comes with a simple debugging middleware for helping track down problems +in your applications. To enable the debugging middleware, simply set the +``debug`` flag to ``True`` in your configuration file:: + + app = { + ... + 'debug': True, + ... + } + +Once enabled, the middleware will automatically catch exceptions raised by your +application, and display the Python stack trace and WSGI environment in your +browser for easy debugging. + +.. figure:: debug-middleware-1.png + :alt: Pecan debug middleware sample output. + :width: 90% + :align: center + +To further aid in debugging, the middleware includes the ability to repeat the +offending request, automatically inserting a breakpoint, and dropping your +console into the Python debugger, ``pdb``. + +.. figure:: debug-middleware-2.png + :alt: Pecan debug middleware request debugger. + :align: center + +For more information, refer to the +`documentation for pdb `_ available on +the Python website. + Serving Static Files -------------------- diff --git a/docs/source/index.rst b/docs/source/index.rst index 64ef9f3..7b80851 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -73,6 +73,7 @@ docstrings here: pecan_decorators.rst pecan_deploy.rst pecan_hooks.rst + pecan_middleware_debug.rst pecan_jsonify.rst pecan_rest.rst pecan_routing.rst diff --git a/docs/source/pecan_middleware_debug.rst b/docs/source/pecan_middleware_debug.rst new file mode 100644 index 0000000..51dc1a2 --- /dev/null +++ b/docs/source/pecan_middleware_debug.rst @@ -0,0 +1,9 @@ +.. _pecan_middleware_debug: + +:mod:`pecan.middleware.debug` -- Pecan Debugging Middleware +=========================================================== + +.. automodule:: pecan.middleware.debug + :members: + :show-inheritance: + diff --git a/pecan/middleware/debug.py b/pecan/middleware/debug.py index f4e545f..d100e0b 100644 --- a/pecan/middleware/debug.py +++ b/pecan/middleware/debug.py @@ -231,6 +231,35 @@ class PdbMiddleware(object): class DebugMiddleware(object): + """A WSGI middleware that provides debugging assistance for development + environments. + + To enable the debugging middleware, simply set the ``debug`` flag to + ``True`` in your configuration file:: + + app = { + ... + 'debug': True, + ... + } + + Once enabled, the middleware will automatically catch exceptions raised by + your application, and display the Python stack trace and WSGI environment + in your browser for easy debugging. + + To further aid in debugging, the middleware includes the ability to repeat + the offending request, automatically inserting a breakpoint, and dropping + your console into the Python debugger, ``pdb``. + + For more information, refer to the `documentation for pdb + `_ available on the Python + website. + + :param app: the application to wrap. + :param debugger: a callable to start debugging, defaulting to the Python + debugger, ``pdb``. + """ + def __init__(self, app, debugger=pdb.post_mortem): self.app = app self.debugger = debugger