mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-08 06:44:46 +08:00
Avoid multiple getattrs instead of a single one, see also #1933
This commit is contained in:
@@ -9,7 +9,7 @@ import re
|
|||||||
import builtins
|
import builtins
|
||||||
import typing
|
import typing
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Optional
|
from typing import Optional, Tuple
|
||||||
|
|
||||||
from jedi.inference.compiled.getattr_static import getattr_static
|
from jedi.inference.compiled.getattr_static import getattr_static
|
||||||
|
|
||||||
@@ -329,8 +329,11 @@ class DirectObjectAccess:
|
|||||||
except TypeError:
|
except TypeError:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def is_allowed_getattr(self, name, safe=True):
|
def is_allowed_getattr(self, name, safe=True) -> Tuple[bool, bool]:
|
||||||
# TODO this API is ugly.
|
# TODO this API is ugly.
|
||||||
|
try:
|
||||||
|
attr, is_get_descriptor = getattr_static(self._obj, name)
|
||||||
|
except AttributeError:
|
||||||
if not safe:
|
if not safe:
|
||||||
# Unsafe is mostly used to check for __getattr__/__getattribute__.
|
# Unsafe is mostly used to check for __getattr__/__getattribute__.
|
||||||
# getattr_static works for properties, but the underscore methods
|
# getattr_static works for properties, but the underscore methods
|
||||||
@@ -345,10 +348,7 @@ class DirectObjectAccess:
|
|||||||
except Exception:
|
except Exception:
|
||||||
# Obviously has an attribute (probably a property) that
|
# Obviously has an attribute (probably a property) that
|
||||||
# gets executed, so just avoid all exceptions here.
|
# gets executed, so just avoid all exceptions here.
|
||||||
return False, False
|
pass
|
||||||
try:
|
|
||||||
attr, is_get_descriptor = getattr_static(self._obj, name)
|
|
||||||
except AttributeError:
|
|
||||||
return False, False
|
return False, False
|
||||||
else:
|
else:
|
||||||
if is_get_descriptor and type(attr) not in ALLOWED_DESCRIPTOR_ACCESS:
|
if is_get_descriptor and type(attr) not in ALLOWED_DESCRIPTOR_ACCESS:
|
||||||
|
|||||||
Reference in New Issue
Block a user