FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
ipython/IPython/utils/dir2.py at python-3.14-dev · krassowski/ipython · GitHub
krassowski
ipython
Repository navigation
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
ipython
/
IPython
/
utils
/
dir2.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
83 lines (61 loc) · 2.18 KB
Breadcrumbs
ipython
/
IPython
/
utils
/
dir2.py
Copy path
File metadata and controls
83 lines (61 loc) · 2.18 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# encoding: utf-8
"""A fancy version of Python's builtin :func:`dir` function."""
# Copyright (c) IPython Development Team.
# Distributed under the terms of the Modified BSD License.
import
inspect
import
types
def
safe_hasattr
(
obj
,
attr
):
"""In recent versions of Python, hasattr() only catches AttributeError.
This catches all errors.
"""
try
:
getattr
(
obj
,
attr
)
return
True
except
:
return
False
def
dir2
(
obj
):
"""dir2(obj) -> list of strings
Extended version of the Python builtin dir(), which does a few extra
checks.
This version is guaranteed to return only a list of true strings, whereas
dir() returns anything that objects inject into themselves, even if they
are later not really valid for attribute access (many extension libraries
have such bugs).
"""
# Start building the attribute list via dir(), and then complete it
# with a few extra special-purpose calls.
try
:
words
=
set
(
dir
(
obj
))
except
Exception
:
# TypeError: dir(obj) does not return a list
words
=
set
()
if
safe_hasattr
(
obj
,
"__class__"
):
words
|=
set
(
dir
(
obj
.
__class__
))
# filter out non-string attributes which may be stuffed by dir() calls
# and poor coding in third-party modules
words
=
[
w
for
w
in
words
if
isinstance
(
w
,
str
)]
return
sorted
(
words
)
def
get_real_method
(
obj
,
name
):
"""Like getattr, but with a few extra sanity checks:
- If obj is a class, ignore everything except class methods
- Check if obj is a proxy that claims to have all attributes
- Catch attribute access failing with any exception
- Check that the attribute is a callable object
Returns the method or None.
"""
try
:
canary
=
getattr
(
obj
,
"_ipython_canary_method_should_not_exist_"
,
None
)
except
Exception
:
return
None
if
canary
is
not
None
:
# It claimed to have an attribute it should never have
return
None
try
:
m
=
getattr
(
obj
,
name
,
None
)
except
Exception
:
return
None
if
inspect
.
isclass
(
obj
)
and
not
isinstance
(
m
,
types
.
MethodType
):
return
None
if
callable
(
m
):
return
m
return
None
Back
|
FazBrowse Home
|
New Git URL