Show More
@@ -105,23 +105,6 b' class SpaceInInput(exceptions.Exception): pass' | |||||
105 |
|
105 | |||
106 | class Bunch: pass |
|
106 | class Bunch: pass | |
107 |
|
107 | |||
108 | class SyntaxTB(ultratb.ListTB): |
|
|||
109 | """Extension which holds some state: the last exception value""" |
|
|||
110 |
|
||||
111 | def __init__(self,color_scheme = 'NoColor'): |
|
|||
112 | ultratb.ListTB.__init__(self,color_scheme) |
|
|||
113 | self.last_syntax_error = None |
|
|||
114 |
|
||||
115 | def __call__(self, etype, value, elist): |
|
|||
116 | self.last_syntax_error = value |
|
|||
117 | ultratb.ListTB.__call__(self,etype,value,elist) |
|
|||
118 |
|
||||
119 | def clear_err_state(self): |
|
|||
120 | """Return the current error state and clear it""" |
|
|||
121 | e = self.last_syntax_error |
|
|||
122 | self.last_syntax_error = None |
|
|||
123 | return e |
|
|||
124 |
|
||||
125 |
|
108 | |||
126 | def get_default_colors(): |
|
109 | def get_default_colors(): | |
127 | if sys.platform=='darwin': |
|
110 | if sys.platform=='darwin': | |
@@ -1104,7 +1087,7 b' class InteractiveShell(Configurable, Magic):' | |||||
1104 |
|
1087 | |||
1105 | def init_traceback_handlers(self, custom_exceptions): |
|
1088 | def init_traceback_handlers(self, custom_exceptions): | |
1106 | # Syntax error handler. |
|
1089 | # Syntax error handler. | |
1107 | self.SyntaxTB = SyntaxTB(color_scheme='NoColor') |
|
1090 | self.SyntaxTB = ultratb.SyntaxTB(color_scheme='NoColor') | |
1108 |
|
1091 | |||
1109 | # The interactive one is initialized with an offset, meaning we always |
|
1092 | # The interactive one is initialized with an offset, meaning we always | |
1110 | # want to remove the topmost item in the traceback, which is our own |
|
1093 | # want to remove the topmost item in the traceback, which is our own |
@@ -178,7 +178,7 b' def test_shist():' | |||||
178 | # XXX failing for now, until we get clearcmd out of quarantine. But we should |
|
178 | # XXX failing for now, until we get clearcmd out of quarantine. But we should | |
179 | # fix this and revert the skip to happen only if numpy is not around. |
|
179 | # fix this and revert the skip to happen only if numpy is not around. | |
180 | #@dec.skipif_not_numpy |
|
180 | #@dec.skipif_not_numpy | |
181 | @dec.skipknownfailure |
|
181 | @dec.skip_known_failure | |
182 | def test_numpy_clear_array_undec(): |
|
182 | def test_numpy_clear_array_undec(): | |
183 | from IPython.extensions import clearcmd |
|
183 | from IPython.extensions import clearcmd | |
184 |
|
184 |
@@ -385,7 +385,7 b' class ListTB(TBTools):' | |||||
385 | IPython.utils.io.Term.cerr.write(self.text(etype,value,elist)) |
|
385 | IPython.utils.io.Term.cerr.write(self.text(etype,value,elist)) | |
386 | IPython.utils.io.Term.cerr.write('\n') |
|
386 | IPython.utils.io.Term.cerr.write('\n') | |
387 |
|
387 | |||
388 |
def |
|
388 | def structured_traceback(self, etype, value, elist, context=5): | |
389 | """Return a color formatted string with the traceback info. |
|
389 | """Return a color formatted string with the traceback info. | |
390 |
|
390 | |||
391 | Parameters |
|
391 | Parameters | |
@@ -414,6 +414,12 b' class ListTB(TBTools):' | |||||
414 | for line in lines[:-1]: |
|
414 | for line in lines[:-1]: | |
415 | out_string.append(" "+line) |
|
415 | out_string.append(" "+line) | |
416 | out_string.append(lines[-1]) |
|
416 | out_string.append(lines[-1]) | |
|
417 | return out_string | |||
|
418 | ||||
|
419 | def text(self, etype, value, elist, context=5): | |||
|
420 | out_string = ListTB.structured_traceback( | |||
|
421 | self, etype, value, elist, context | |||
|
422 | ) | |||
417 | return ''.join(out_string) |
|
423 | return ''.join(out_string) | |
418 |
|
424 | |||
419 | def _format_list(self, extracted_list): |
|
425 | def _format_list(self, extracted_list): | |
@@ -569,7 +575,7 b' class VerboseTB(TBTools):' | |||||
569 | self.long_header = long_header |
|
575 | self.long_header = long_header | |
570 | self.include_vars = include_vars |
|
576 | self.include_vars = include_vars | |
571 |
|
577 | |||
572 |
def |
|
578 | def structured_traceback(self, etype, evalue, etb, context=5): | |
573 | """Return a nice text document describing the traceback.""" |
|
579 | """Return a nice text document describing the traceback.""" | |
574 |
|
580 | |||
575 | # some locals |
|
581 | # some locals | |
@@ -861,7 +867,14 b' class VerboseTB(TBTools):' | |||||
861 | # vds: << |
|
867 | # vds: << | |
862 |
|
868 | |||
863 | # return all our info assembled as a single string |
|
869 | # return all our info assembled as a single string | |
864 | return '%s\n\n%s\n%s' % (head,'\n'.join(frames),''.join(exception[0]) ) |
|
870 | # return '%s\n\n%s\n%s' % (head,'\n'.join(frames),''.join(exception[0]) ) | |
|
871 | return [head] + frames + [''.join(exception[0])] | |||
|
872 | ||||
|
873 | def text(self, etype, evalue, etb, context=5): | |||
|
874 | tb_list = VerboseTB.structured_traceback( | |||
|
875 | self, etype, evalue, etb, context | |||
|
876 | ) | |||
|
877 | return '\n'.join(tb_list) | |||
865 |
|
878 | |||
866 | def debugger(self,force=False): |
|
879 | def debugger(self,force=False): | |
867 | """Call up the pdb debugger if desired, always clean up the tb |
|
880 | """Call up the pdb debugger if desired, always clean up the tb | |
@@ -957,17 +970,13 b' class FormattedTB(VerboseTB,ListTB):' | |||||
957 | else: |
|
970 | else: | |
958 | return None |
|
971 | return None | |
959 |
|
972 | |||
960 |
def |
|
973 | def structured_traceback(self, etype, value, tb, context=5, mode=None): | |
961 | """Return formatted traceback. |
|
974 | mode = self.mode if mode is None else mode | |
962 |
|
||||
963 | If the optional mode parameter is given, it overrides the current |
|
|||
964 | mode.""" |
|
|||
965 |
|
||||
966 | if mode is None: |
|
|||
967 | mode = self.mode |
|
|||
968 | if mode in self.verbose_modes: |
|
975 | if mode in self.verbose_modes: | |
969 |
# |
|
976 | # Verbose modes need a full traceback | |
970 | return VerboseTB.text(self,etype, value, tb,context=5) |
|
977 | return VerboseTB.structured_traceback( | |
|
978 | self, etype, value, tb, context | |||
|
979 | ) | |||
971 | else: |
|
980 | else: | |
972 | # We must check the source cache because otherwise we can print |
|
981 | # We must check the source cache because otherwise we can print | |
973 | # out-of-date source code. |
|
982 | # out-of-date source code. | |
@@ -976,7 +985,19 b' class FormattedTB(VerboseTB,ListTB):' | |||||
976 | elist = self._extract_tb(tb) |
|
985 | elist = self._extract_tb(tb) | |
977 | if len(elist) > self.tb_offset: |
|
986 | if len(elist) > self.tb_offset: | |
978 | del elist[:self.tb_offset] |
|
987 | del elist[:self.tb_offset] | |
979 | return ListTB.text(self,etype,value,elist) |
|
988 | return ListTB.structured_traceback( | |
|
989 | self, etype, value, elist, context | |||
|
990 | ) | |||
|
991 | ||||
|
992 | def text(self, etype, value, tb, context=5, mode=None): | |||
|
993 | """Return formatted traceback. | |||
|
994 | ||||
|
995 | If the optional mode parameter is given, it overrides the current | |||
|
996 | mode.""" | |||
|
997 | tb_list = FormattedTB.structured_traceback( | |||
|
998 | self, etype, value, tb, context, mode | |||
|
999 | ) | |||
|
1000 | return '\n'.join(tb_list) | |||
980 |
|
1001 | |||
981 | def set_mode(self,mode=None): |
|
1002 | def set_mode(self,mode=None): | |
982 | """Switch to the desired mode. |
|
1003 | """Switch to the desired mode. | |
@@ -1051,13 +1072,23 b' class AutoFormattedTB(FormattedTB):' | |||||
1051 | except KeyboardInterrupt: |
|
1072 | except KeyboardInterrupt: | |
1052 | print "\nKeyboardInterrupt" |
|
1073 | print "\nKeyboardInterrupt" | |
1053 |
|
1074 | |||
1054 |
def |
|
1075 | def structured_traceback(self, etype=None, value=None, tb=None, | |
|
1076 | context=5, mode=None): | |||
1055 | if etype is None: |
|
1077 | if etype is None: | |
1056 | etype,value,tb = sys.exc_info() |
|
1078 | etype,value,tb = sys.exc_info() | |
1057 | self.tb = tb |
|
1079 | self.tb = tb | |
1058 | return FormattedTB.text(self,etype,value,tb,context=5,mode=mode) |
|
1080 | return FormattedTB.structured_traceback( | |
|
1081 | self, etype, value, tb, context, mode | |||
|
1082 | ) | |||
|
1083 | ||||
|
1084 | def text(self, etype=None, value=None, tb=None, context=5, mode=None): | |||
|
1085 | tb_list = AutoFormattedTB.structured_traceback( | |||
|
1086 | self, etype, value, tb, context, mode | |||
|
1087 | ) | |||
|
1088 | return '\n'.join(tb_list) | |||
1059 |
|
1089 | |||
1060 | #--------------------------------------------------------------------------- |
|
1090 | #--------------------------------------------------------------------------- | |
|
1091 | ||||
1061 | # A simple class to preserve Nathan's original functionality. |
|
1092 | # A simple class to preserve Nathan's original functionality. | |
1062 | class ColorTB(FormattedTB): |
|
1093 | class ColorTB(FormattedTB): | |
1063 | """Shorthand to initialize a FormattedTB in Linux colors mode.""" |
|
1094 | """Shorthand to initialize a FormattedTB in Linux colors mode.""" | |
@@ -1065,6 +1096,24 b' class ColorTB(FormattedTB):' | |||||
1065 | FormattedTB.__init__(self,color_scheme=color_scheme, |
|
1096 | FormattedTB.__init__(self,color_scheme=color_scheme, | |
1066 | call_pdb=call_pdb) |
|
1097 | call_pdb=call_pdb) | |
1067 |
|
1098 | |||
|
1099 | ||||
|
1100 | class SyntaxTB(ListTB): | |||
|
1101 | """Extension which holds some state: the last exception value""" | |||
|
1102 | ||||
|
1103 | def __init__(self,color_scheme = 'NoColor'): | |||
|
1104 | ListTB.__init__(self,color_scheme) | |||
|
1105 | self.last_syntax_error = None | |||
|
1106 | ||||
|
1107 | def __call__(self, etype, value, elist): | |||
|
1108 | self.last_syntax_error = value | |||
|
1109 | ListTB.__call__(self,etype,value,elist) | |||
|
1110 | ||||
|
1111 | def clear_err_state(self): | |||
|
1112 | """Return the current error state and clear it""" | |||
|
1113 | e = self.last_syntax_error | |||
|
1114 | self.last_syntax_error = None | |||
|
1115 | return e | |||
|
1116 | ||||
1068 | #---------------------------------------------------------------------------- |
|
1117 | #---------------------------------------------------------------------------- | |
1069 | # module testing (minimal) |
|
1118 | # module testing (minimal) | |
1070 | if __name__ == "__main__": |
|
1119 | if __name__ == "__main__": |
General Comments 0
You need to be logged in to leave comments.
Login now