From c9a21adc5fade5bd42e93b33c28ee6403da8eb6f Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sun, 7 Jun 2020 15:01:12 +0200 Subject: [PATCH] Make sure py__get__ is applied properly for Django metaclasses --- jedi/inference/value/klass.py | 5 +++-- jedi/plugins/django.py | 6 +++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/jedi/inference/value/klass.py b/jedi/inference/value/klass.py index 6f60d4b8..5c45bb5f 100644 --- a/jedi/inference/value/klass.py +++ b/jedi/inference/value/klass.py @@ -189,7 +189,8 @@ class ClassMixin(object): mro.append(cls_new) yield cls_new - def get_filters(self, origin_scope=None, is_instance=False, include_metaclasses=True): + def get_filters(self, origin_scope=None, is_instance=False, + include_metaclasses=True, include_type_when_class=True): if include_metaclasses: metaclasses = self.get_metaclasses() if metaclasses: @@ -206,7 +207,7 @@ class ClassMixin(object): origin_scope=origin_scope, is_instance=is_instance ) - if not is_instance: + if not is_instance and include_type_when_class: from jedi.inference.compiled import builtin_from_name type_ = builtin_from_name(self.inference_state, u'type') assert isinstance(type_, ClassValue) diff --git a/jedi/plugins/django.py b/jedi/plugins/django.py index b8aaa126..69ba6139 100644 --- a/jedi/plugins/django.py +++ b/jedi/plugins/django.py @@ -154,7 +154,11 @@ def _new_dict_filter(cls, is_instance): if manager: return manager.name - filters = list(cls.get_filters(is_instance=True, include_metaclasses=False)) + filters = list(cls.get_filters( + is_instance=is_instance, + include_metaclasses=False, + include_type_when_class=False) + ) dct = { name.string_name: DjangoModelName(cls, name, is_instance) for filter_ in reversed(filters)