LAZR Debugging Helpers

LAZR offers a variety of debug helpers to help diagnose problems in your application.

debug_proxy

There is a debug_proxy() function that can be used to print information about the layers of proxy around the object.

>>> from lazr.restful.debug import debug_proxy

In the simple case, where no proxy is used, as simple message is output:

>>> print(debug_proxy(1))
1 doesn't have any proxies.

Otherwise, it prints the proxy type for each proxy used:

>>> from zope.proxy import ProxyBase
>>> print(debug_proxy(ProxyBase(1)))
zope.proxy.ProxyBase

If more than one proxy is used, information about the proxies will be output from the most outer proxy to the most inner ones:

>>> class SimpleProxy(ProxyBase):
...     """A very simple proxy."""
>>> print(debug_proxy(SimpleProxy(ProxyBase(1))))
SimpleProxy
zope.proxy.ProxyBase

If the object is wrapped into a security proxy, additional information about the checker used will be output:

>>> from zope.security.checker import ProxyFactory, CheckerPublic, Checker
>>> checker = Checker({'__str__': 'lazr.View',
...                    '__repr__': 'lazr.View',
...                    '__add__': 'lazr.Edit'},
...                   {'value': CheckerPublic,
...                    'some_other_value': 'lazr.Edit'})
>>> p = ProxyFactory(1, checker)
>>> print(debug_proxy(p))
zope.security._proxy._Proxy (using zope.security.checker.Checker)
    lazr.Edit: __add__
    lazr.Edit (set): some_other_value
    lazr.View: __repr__, __str__
    public (set): value