Show More
@@ -13,6 +13,7 b' reference the name under which an object is being read.' | |||||
13 | __all__ = ['Inspector','InspectColors'] |
|
13 | __all__ = ['Inspector','InspectColors'] | |
14 |
|
14 | |||
15 | # stdlib modules |
|
15 | # stdlib modules | |
|
16 | import ast | |||
16 | import inspect |
|
17 | import inspect | |
17 | from inspect import signature |
|
18 | from inspect import signature | |
18 | import linecache |
|
19 | import linecache | |
@@ -630,10 +631,10 b' class Inspector(Colorable):' | |||||
630 | # Functions, methods, classes |
|
631 | # Functions, methods, classes | |
631 | append_field(_mime, 'Signature', 'definition', code_formatter) |
|
632 | append_field(_mime, 'Signature', 'definition', code_formatter) | |
632 | append_field(_mime, 'Init signature', 'init_definition', code_formatter) |
|
633 | append_field(_mime, 'Init signature', 'init_definition', code_formatter) | |
|
634 | append_field(_mime, 'Docstring', 'docstring', formatter) | |||
633 | if detail_level > 0 and info['source']: |
|
635 | if detail_level > 0 and info['source']: | |
634 | append_field(_mime, 'Source', 'source', code_formatter) |
|
636 | append_field(_mime, 'Source', 'source', code_formatter) | |
635 | else: |
|
637 | else: | |
636 | append_field(_mime, 'Docstring', 'docstring', formatter) |
|
|||
637 | append_field(_mime, 'Init docstring', 'init_docstring', formatter) |
|
638 | append_field(_mime, 'Init docstring', 'init_docstring', formatter) | |
638 |
|
639 | |||
639 | append_field(_mime, 'File', 'file') |
|
640 | append_field(_mime, 'File', 'file') | |
@@ -821,7 +822,7 b' class Inspector(Colorable):' | |||||
821 | pass |
|
822 | pass | |
822 |
|
823 | |||
823 | # Add docstring only if no source is to be shown (avoid repetitions). |
|
824 | # Add docstring only if no source is to be shown (avoid repetitions). | |
824 | if ds and out.get('source', None) is None: |
|
825 | if ds and not self._source_contains_docstring(out.get('source'), ds): | |
825 | out['docstring'] = ds |
|
826 | out['docstring'] = ds | |
826 |
|
827 | |||
827 | # Constructor docstring for classes |
|
828 | # Constructor docstring for classes | |
@@ -936,6 +937,23 b' class Inspector(Colorable):' | |||||
936 |
|
937 | |||
937 | return object_info(**out) |
|
938 | return object_info(**out) | |
938 |
|
939 | |||
|
940 | @staticmethod | |||
|
941 | def _source_contains_docstring(src, doc): | |||
|
942 | """ | |||
|
943 | Check whether the source *src* contains the docstring *doc*. | |||
|
944 | ||||
|
945 | This is is helper function to skip displaying the docstring if the | |||
|
946 | source already contains it, avoiding repetition of information. | |||
|
947 | """ | |||
|
948 | try: | |||
|
949 | def_node, = ast.parse(dedent(src)).body | |||
|
950 | return ast.get_docstring(def_node) == doc | |||
|
951 | except Exception: | |||
|
952 | # The source can become invalid or even non-existent (because it | |||
|
953 | # is re-fetched from the source file) so the above code fail in | |||
|
954 | # arbitrary ways. | |||
|
955 | return False | |||
|
956 | ||||
939 | def psearch(self,pattern,ns_table,ns_search=[], |
|
957 | def psearch(self,pattern,ns_table,ns_search=[], | |
940 | ignore_case=False,show_all=False): |
|
958 | ignore_case=False,show_all=False): | |
941 | """Search namespaces with wildcards for objects. |
|
959 | """Search namespaces with wildcards for objects. |
General Comments 0
You need to be logged in to leave comments.
Login now