diff options
| author | Michael Merickel <github@m.merickel.org> | 2019-04-11 21:17:30 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-04-11 21:17:30 -0500 |
| commit | 8a6df4e6fd9a86467262a805be4f1541f46bddbc (patch) | |
| tree | 6535f127150a373198e9805790e3a03e339e0818 /src | |
| parent | 01618a1399f547fb1f89cf8b56600325b4f8d04b (diff) | |
| parent | bd51b6c3afb8bd46d37bbf77e208f2e91401b1db (diff) | |
| download | pyramid-8a6df4e6fd9a86467262a805be4f1541f46bddbc.tar.gz pyramid-8a6df4e6fd9a86467262a805be4f1541f46bddbc.tar.bz2 pyramid-8a6df4e6fd9a86467262a805be4f1541f46bddbc.zip | |
Merge pull request #3483 from luhn/better-action-info
Improve debugging info from view_config decorator
Diffstat (limited to 'src')
| -rw-r--r-- | src/pyramid/view.py | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/pyramid/view.py b/src/pyramid/view.py index 944ad93ea..b856c309a 100644 --- a/src/pyramid/view.py +++ b/src/pyramid/view.py @@ -1,5 +1,6 @@ import itertools import sys +import inspect import venusian @@ -216,6 +217,13 @@ class view_config(object): if settings.get('context') is None: settings['context'] = settings['for_'] self.__dict__.update(settings) + self._get_info() + + def _get_info(self): + depth = self.__dict__.get('_depth', 0) + frameinfo = inspect.stack()[depth + 2] + sourceline = frameinfo[4][0].strip() + self._info = frameinfo[1], frameinfo[2], frameinfo[3], sourceline def __call__(self, wrapped): settings = self.__dict__.copy() @@ -237,14 +245,13 @@ class view_config(object): if settings.get('attr') is None: settings['attr'] = wrapped.__name__ - settings['_info'] = info.codeinfo # fbo "action_method" return wrapped bfg_view = view_config # bw compat (forever) -class view_defaults(view_config): +def view_defaults(**settings): """ A class :term:`decorator` which, when applied to a class, will provide defaults for all view configurations that use the class. This decorator accepts all the arguments accepted by @@ -253,10 +260,12 @@ class view_defaults(view_config): See :ref:`view_defaults` for more information. """ - def __call__(self, wrapped): - wrapped.__view_defaults__ = self.__dict__.copy() + def wrap(wrapped): + wrapped.__view_defaults__ = settings return wrapped + return wrap + class AppendSlashNotFoundViewFactory(object): """ There can only be one :term:`Not Found view` in any |
