Show More
@@ -24,7 +24,18 b' import os' | |||||
24 | import types |
|
24 | import types | |
25 | import warnings |
|
25 | import warnings | |
26 |
|
26 | |||
27 | from typing import cast, Any, Optional, Dict, Union, List, TypedDict, TypeAlias, Tuple |
|
27 | ||
|
28 | from typing import ( | |||
|
29 | cast, | |||
|
30 | Any, | |||
|
31 | Optional, | |||
|
32 | Dict, | |||
|
33 | Union, | |||
|
34 | List, | |||
|
35 | TypedDict, | |||
|
36 | TypeAlias, | |||
|
37 | Tuple, | |||
|
38 | ) | |||
28 |
|
39 | |||
29 | import traitlets |
|
40 | import traitlets | |
30 |
|
41 | |||
@@ -32,13 +43,11 b' import traitlets' | |||||
32 | from IPython.core import page |
|
43 | from IPython.core import page | |
33 | from IPython.lib.pretty import pretty |
|
44 | from IPython.lib.pretty import pretty | |
34 | from IPython.testing.skipdoctest import skip_doctest |
|
45 | from IPython.testing.skipdoctest import skip_doctest | |
35 | from IPython.utils import PyColorize |
|
46 | from IPython.utils import PyColorize, openpy | |
36 | from IPython.utils import openpy |
|
|||
37 | from IPython.utils.dir2 import safe_hasattr |
|
47 | from IPython.utils.dir2 import safe_hasattr | |
38 | from IPython.utils.path import compress_user |
|
48 | from IPython.utils.path import compress_user | |
39 | from IPython.utils.text import indent |
|
49 | from IPython.utils.text import indent | |
40 | from IPython.utils.wildcard import list_namespace |
|
50 | from IPython.utils.wildcard import list_namespace, typestr2type | |
41 | from IPython.utils.wildcard import typestr2type |
|
|||
42 | from IPython.utils.coloransi import TermColors |
|
51 | from IPython.utils.coloransi import TermColors | |
43 | from IPython.utils.colorable import Colorable |
|
52 | from IPython.utils.colorable import Colorable | |
44 | from IPython.utils.decorators import undoc |
|
53 | from IPython.utils.decorators import undoc | |
@@ -129,7 +138,19 b' class InfoDict(TypedDict):' | |||||
129 | name: str |
|
138 | name: str | |
130 |
|
139 | |||
131 |
|
140 | |||
132 | info_fields = list(InfoDict.__annotations__.keys()) |
|
141 | _info_fields = list(InfoDict.__annotations__.keys()) | |
|
142 | ||||
|
143 | ||||
|
144 | def __getattr__(name): | |||
|
145 | if name == "info_fields": | |||
|
146 | warnings.warn( | |||
|
147 | "IPython.core.oinspect's `info_fields` is considered for deprecation and may be removed in the Future. ", | |||
|
148 | DeprecationWarning, | |||
|
149 | stacklevel=2, | |||
|
150 | ) | |||
|
151 | return _info_fields | |||
|
152 | ||||
|
153 | raise AttributeError(f"module {__name__!r} has no attribute {name!r}") | |||
133 |
|
154 | |||
134 |
|
155 | |||
135 | @dataclass |
|
156 | @dataclass | |
@@ -144,11 +165,25 b' class InspectorHookData:' | |||||
144 |
|
165 | |||
145 |
|
166 | |||
146 | @undoc |
|
167 | @undoc | |
147 |
def object_info( |
|
168 | def object_info( | |
|
169 | *, | |||
|
170 | name: str, | |||
|
171 | found: bool, | |||
|
172 | isclass: bool = False, | |||
|
173 | isalias: bool = False, | |||
|
174 | ismagic: bool = False, | |||
|
175 | **kw, | |||
|
176 | ) -> InfoDict: | |||
148 | """Make an object info dict with all fields present.""" |
|
177 | """Make an object info dict with all fields present.""" | |
149 | infodict = {k: None for k in info_fields} |
|
178 | infodict = kw | |
150 | infodict.update(kw) |
|
179 | infodict = {k: None for k in _info_fields if k not in infodict} | |
151 | return infodict |
|
180 | infodict["name"] = name # type: ignore | |
|
181 | infodict["found"] = found # type: ignore | |||
|
182 | infodict["isclass"] = isclass # type: ignore | |||
|
183 | infodict["isalias"] = isalias # type: ignore | |||
|
184 | infodict["ismagic"] = ismagic # type: ignore | |||
|
185 | ||||
|
186 | return InfoDict(**infodict) # type:ignore | |||
152 |
|
187 | |||
153 |
|
188 | |||
154 | def get_encoding(obj): |
|
189 | def get_encoding(obj): | |
@@ -175,7 +210,7 b' def get_encoding(obj):' | |||||
175 | return encoding |
|
210 | return encoding | |
176 |
|
211 | |||
177 |
|
212 | |||
178 | def getdoc(obj) -> Union[str,None]: |
|
213 | def getdoc(obj) -> Union[str, None]: | |
179 | """Stable wrapper around inspect.getdoc. |
|
214 | """Stable wrapper around inspect.getdoc. | |
180 |
|
215 | |||
181 | This can't crash because of attribute problems. |
|
216 | This can't crash because of attribute problems. | |
@@ -581,8 +616,10 b' class Inspector(Colorable):' | |||||
581 | # run contents of file through pager starting at line where the object |
|
616 | # run contents of file through pager starting at line where the object | |
582 | # is defined, as long as the file isn't binary and is actually on the |
|
617 | # is defined, as long as the file isn't binary and is actually on the | |
583 | # filesystem. |
|
618 | # filesystem. | |
584 | if ofile.endswith(('.so', '.dll', '.pyd')): |
|
619 | if ofile is None: | |
585 | print('File %r is binary, not printing.' % ofile) |
|
620 | print("Could not find file for object") | |
|
621 | elif ofile.endswith((".so", ".dll", ".pyd")): | |||
|
622 | print("File %r is binary, not printing." % ofile) | |||
586 | elif not os.path.isfile(ofile): |
|
623 | elif not os.path.isfile(ofile): | |
587 | print('File %r does not exist, not printing.' % ofile) |
|
624 | print('File %r does not exist, not printing.' % ofile) | |
588 | else: |
|
625 | else: | |
@@ -670,7 +707,7 b' class Inspector(Colorable):' | |||||
670 | title: str, |
|
707 | title: str, | |
671 | key: str, |
|
708 | key: str, | |
672 | info, |
|
709 | info, | |
673 | omit_sections, |
|
710 | omit_sections: List[str], | |
674 | formatter, |
|
711 | formatter, | |
675 | ): |
|
712 | ): | |
676 | """Append an info value to the unformatted mimebundle being constructed by _make_info_unformatted""" |
|
713 | """Append an info value to the unformatted mimebundle being constructed by _make_info_unformatted""" | |
@@ -767,8 +804,8 b' class Inspector(Colorable):' | |||||
767 | oname: str = "", |
|
804 | oname: str = "", | |
768 | formatter=None, |
|
805 | formatter=None, | |
769 | info: Optional[OInfo] = None, |
|
806 | info: Optional[OInfo] = None, | |
770 | detail_level=0, |
|
807 | detail_level: int = 0, | |
771 | omit_sections=(), |
|
808 | omit_sections: Union[List[str], Tuple[()]] = (), | |
772 | ) -> Bundle: |
|
809 | ) -> Bundle: | |
773 | """Retrieve an info dict and format it. |
|
810 | """Retrieve an info dict and format it. | |
774 |
|
811 | |||
@@ -783,11 +820,12 b' class Inspector(Colorable):' | |||||
783 | already computed information |
|
820 | already computed information | |
784 | detail_level : integer |
|
821 | detail_level : integer | |
785 | Granularity of detail level, if set to 1, give more information. |
|
822 | Granularity of detail level, if set to 1, give more information. | |
786 |
omit_sections : |
|
823 | omit_sections : list[str] | |
787 | Titles or keys to omit from output (can be set, tuple, etc., anything supporting `in`) |
|
824 | Titles or keys to omit from output (can be set, tuple, etc., anything supporting `in`) | |
788 | """ |
|
825 | """ | |
789 |
|
826 | |||
790 | info_dict = self.info(obj, oname=oname, info=info, detail_level=detail_level) |
|
827 | info_dict = self.info(obj, oname=oname, info=info, detail_level=detail_level) | |
|
828 | omit_sections = list(omit_sections) | |||
791 |
|
829 | |||
792 | bundle = self._make_info_unformatted( |
|
830 | bundle = self._make_info_unformatted( | |
793 | obj, |
|
831 | obj, | |
@@ -804,7 +842,7 b' class Inspector(Colorable):' | |||||
804 | detail_level=detail_level, |
|
842 | detail_level=detail_level, | |
805 | omit_sections=omit_sections, |
|
843 | omit_sections=omit_sections, | |
806 | ) |
|
844 | ) | |
807 | for key, hook in self.mime_hooks.items(): |
|
845 | for key, hook in self.mime_hooks.items(): # type:ignore | |
808 | required_parameters = [ |
|
846 | required_parameters = [ | |
809 | parameter |
|
847 | parameter | |
810 | for parameter in inspect.signature(hook).parameters.values() |
|
848 | for parameter in inspect.signature(hook).parameters.values() | |
@@ -920,7 +958,7 b' class Inspector(Colorable):' | |||||
920 | out: InfoDict = cast( |
|
958 | out: InfoDict = cast( | |
921 | InfoDict, |
|
959 | InfoDict, | |
922 | { |
|
960 | { | |
923 | **{field: None for field in info_fields}, |
|
961 | **{field: None for field in _info_fields}, | |
924 | **{ |
|
962 | **{ | |
925 | "name": oname, |
|
963 | "name": oname, | |
926 | "found": True, |
|
964 | "found": True, |
General Comments 0
You need to be logged in to leave comments.
Login now