From 0a2c822745d32407b0ad4b158551f557a51413b5 Mon Sep 17 00:00:00 2001 From: Michael Blatherwick Date: Fri, 22 Dec 2017 00:54:21 +0000 Subject: [PATCH 1/2] Handle decorated methods MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ported over from the static version of ccbv and apparently not committed at the time, but I remember it working, so… I guess I didn't commit or push it because it needs fixtures committing too and I was hopeful of getting to that shortly --- cbv/management/commands/populate_cbv.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/cbv/management/commands/populate_cbv.py b/cbv/management/commands/populate_cbv.py index e8cd6b6a..585721a7 100644 --- a/cbv/management/commands/populate_cbv.py +++ b/cbv/management/commands/populate_cbv.py @@ -262,6 +262,16 @@ def process_member(self, member, member_name, parent=None, parent_node=None): # METHOD elif inspect.ismethod(member) or inspect.isfunction(member): + decorated = False + if hasattr(member, 'func'): + member = member.func + decorated = True + if hasattr(member, 'im_func') and getattr(member.im_func, 'func_closure', None): + member = member.im_func + decorated = True + while getattr(member, 'func_closure', None): + member = member.func_closure[-1].cell_contents + decorated = True if not self.ok_to_add_method(member, parent): return print(' def ' + member_name) From 43935488efdc54b1be05825318b2ff9e0d8aba89 Mon Sep 17 00:00:00 2001 From: Michael Blatherwick Date: Mon, 27 Aug 2018 15:45:48 +0100 Subject: [PATCH 2/2] Add support for py3 decorator descent --- .gitignore | 1 + cbv/management/commands/populate_cbv.py | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/.gitignore b/.gitignore index 749028cc..f351cda0 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ tests/test.zip /docs/_build *.sqlite *.db +staticfiles diff --git a/cbv/management/commands/populate_cbv.py b/cbv/management/commands/populate_cbv.py index 585721a7..1cbe3267 100644 --- a/cbv/management/commands/populate_cbv.py +++ b/cbv/management/commands/populate_cbv.py @@ -263,6 +263,7 @@ def process_member(self, member, member_name, parent=None, parent_node=None): # METHOD elif inspect.ismethod(member) or inspect.isfunction(member): decorated = False + # py2 decoration if hasattr(member, 'func'): member = member.func decorated = True @@ -272,6 +273,13 @@ def process_member(self, member, member_name, parent=None, parent_node=None): while getattr(member, 'func_closure', None): member = member.func_closure[-1].cell_contents decorated = True + + # py3 decoration + while getattr(member, '__wrapped__', None): + member = member.__wrapped__ + decorated = True + + # Checks if not self.ok_to_add_method(member, parent): return print(' def ' + member_name)