Show More
@@ -4,7 +4,7 b'' | |||||
4 | All the matplotlib support code was co-developed with John Hunter, |
|
4 | All the matplotlib support code was co-developed with John Hunter, | |
5 | matplotlib's author. |
|
5 | matplotlib's author. | |
6 |
|
6 | |||
7 |
$Id: Shell.py 9 |
|
7 | $Id: Shell.py 964 2005-12-28 21:03:01Z fperez $""" | |
8 |
|
8 | |||
9 | #***************************************************************************** |
|
9 | #***************************************************************************** | |
10 | # Copyright (C) 2001-2004 Fernando Perez <fperez@colorado.edu> |
|
10 | # Copyright (C) 2001-2004 Fernando Perez <fperez@colorado.edu> | |
@@ -47,10 +47,10 b' USE_TK = False' | |||||
47 | class IPShell: |
|
47 | class IPShell: | |
48 | """Create an IPython instance.""" |
|
48 | """Create an IPython instance.""" | |
49 |
|
49 | |||
50 |
def __init__(self,argv=None,user_ns=None, |
|
50 | def __init__(self,argv=None,user_ns=None,user_global_ns=None, | |
51 | shell_class=InteractiveShell): |
|
51 | debug=1,shell_class=InteractiveShell): | |
52 |
self.IP = make_IPython(argv,user_ns=user_ns, |
|
52 | self.IP = make_IPython(argv,user_ns=user_ns,user_global_ns=user_global_ns, | |
53 | shell_class=shell_class) |
|
53 | debug=debug,shell_class=shell_class) | |
54 |
|
54 | |||
55 | def mainloop(self,sys_exit=0,banner=None): |
|
55 | def mainloop(self,sys_exit=0,banner=None): | |
56 | self.IP.mainloop(banner) |
|
56 | self.IP.mainloop(banner) | |
@@ -261,10 +261,11 b' class MTInteractiveShell(InteractiveShell):' | |||||
261 | # from the pygtk mailing list, to avoid lockups with system calls. |
|
261 | # from the pygtk mailing list, to avoid lockups with system calls. | |
262 |
|
262 | |||
263 | def __init__(self,name,usage=None,rc=Struct(opts=None,args=None), |
|
263 | def __init__(self,name,usage=None,rc=Struct(opts=None,args=None), | |
264 |
user_ns |
|
264 | user_ns=None,user_global_ns=None,banner2='',**kw): | |
265 | """Similar to the normal InteractiveShell, but with threading control""" |
|
265 | """Similar to the normal InteractiveShell, but with threading control""" | |
266 |
|
266 | |||
267 |
|
|
267 | InteractiveShell.__init__(self,name,usage,rc,user_ns, | |
|
268 | user_global_ns,banner2) | |||
268 |
|
269 | |||
269 | # Locking control variable |
|
270 | # Locking control variable | |
270 | self.thread_ready = threading.Condition() |
|
271 | self.thread_ready = threading.Condition() | |
@@ -475,17 +476,19 b' class MatplotlibShell(MatplotlibShellBase,InteractiveShell):' | |||||
475 | """Single-threaded shell with matplotlib support.""" |
|
476 | """Single-threaded shell with matplotlib support.""" | |
476 |
|
477 | |||
477 | def __init__(self,name,usage=None,rc=Struct(opts=None,args=None), |
|
478 | def __init__(self,name,usage=None,rc=Struct(opts=None,args=None), | |
478 |
user_ns |
|
479 | user_ns=None,user_global_ns=None,**kw): | |
479 | user_ns,b2 = self._matplotlib_config(name) |
|
480 | user_ns,b2 = self._matplotlib_config(name) | |
480 |
InteractiveShell.__init__(self,name,usage,rc,user_ns, |
|
481 | InteractiveShell.__init__(self,name,usage,rc,user_ns,user_global_ns, | |
|
482 | banner2=b2,**kw) | |||
481 |
|
483 | |||
482 | class MatplotlibMTShell(MatplotlibShellBase,MTInteractiveShell): |
|
484 | class MatplotlibMTShell(MatplotlibShellBase,MTInteractiveShell): | |
483 | """Multi-threaded shell with matplotlib support.""" |
|
485 | """Multi-threaded shell with matplotlib support.""" | |
484 |
|
486 | |||
485 | def __init__(self,name,usage=None,rc=Struct(opts=None,args=None), |
|
487 | def __init__(self,name,usage=None,rc=Struct(opts=None,args=None), | |
486 |
user_ns |
|
488 | user_ns=None,user_global_ns=None, **kw): | |
487 | user_ns,b2 = self._matplotlib_config(name) |
|
489 | user_ns,b2 = self._matplotlib_config(name) | |
488 |
MTInteractiveShell.__init__(self,name,usage,rc,user_ns, |
|
490 | MTInteractiveShell.__init__(self,name,usage,rc,user_ns,user_global_ns, | |
|
491 | banner2=b2,**kw) | |||
489 |
|
492 | |||
490 | #----------------------------------------------------------------------------- |
|
493 | #----------------------------------------------------------------------------- | |
491 | # Utility functions for the different GUI enabled IPShell* classes. |
|
494 | # Utility functions for the different GUI enabled IPShell* classes. | |
@@ -581,8 +584,8 b' class IPShellGTK(threading.Thread):' | |||||
581 |
|
584 | |||
582 | TIMEOUT = 100 # Millisecond interval between timeouts. |
|
585 | TIMEOUT = 100 # Millisecond interval between timeouts. | |
583 |
|
586 | |||
584 |
def __init__(self,argv=None,user_ns=None, |
|
587 | def __init__(self,argv=None,user_ns=None,user_global_ns=None, | |
585 | shell_class=MTInteractiveShell): |
|
588 | debug=1,shell_class=MTInteractiveShell): | |
586 |
|
589 | |||
587 | import gtk |
|
590 | import gtk | |
588 |
|
591 | |||
@@ -595,7 +598,9 b' class IPShellGTK(threading.Thread):' | |||||
595 | if gtk.pygtk_version >= (2,4,0): mainquit = self.gtk.main_quit |
|
598 | if gtk.pygtk_version >= (2,4,0): mainquit = self.gtk.main_quit | |
596 | else: mainquit = self.gtk.mainquit |
|
599 | else: mainquit = self.gtk.mainquit | |
597 |
|
600 | |||
598 |
self.IP = make_IPython(argv,user_ns=user_ns, |
|
601 | self.IP = make_IPython(argv,user_ns=user_ns, | |
|
602 | user_global_ns=user_global_ns, | |||
|
603 | debug=debug, | |||
599 | shell_class=shell_class, |
|
604 | shell_class=shell_class, | |
600 | on_kill=[mainquit]) |
|
605 | on_kill=[mainquit]) | |
601 |
|
606 | |||
@@ -656,8 +661,8 b' class IPShellWX(threading.Thread):' | |||||
656 |
|
661 | |||
657 | TIMEOUT = 100 # Millisecond interval between timeouts. |
|
662 | TIMEOUT = 100 # Millisecond interval between timeouts. | |
658 |
|
663 | |||
659 |
def __init__(self,argv=None,user_ns=None, |
|
664 | def __init__(self,argv=None,user_ns=None,user_global_ns=None, | |
660 | shell_class=MTInteractiveShell): |
|
665 | debug=1,shell_class=MTInteractiveShell): | |
661 |
|
666 | |||
662 | import wxPython.wx as wx |
|
667 | import wxPython.wx as wx | |
663 |
|
668 | |||
@@ -668,7 +673,9 b' class IPShellWX(threading.Thread):' | |||||
668 | # Allows us to use both Tk and GTK. |
|
673 | # Allows us to use both Tk and GTK. | |
669 | self.tk = get_tk() |
|
674 | self.tk = get_tk() | |
670 |
|
675 | |||
671 |
self.IP = make_IPython(argv,user_ns=user_ns, |
|
676 | self.IP = make_IPython(argv,user_ns=user_ns, | |
|
677 | user_global_ns=user_global_ns, | |||
|
678 | debug=debug, | |||
672 | shell_class=shell_class, |
|
679 | shell_class=shell_class, | |
673 | on_kill=[self.wxexit]) |
|
680 | on_kill=[self.wxexit]) | |
674 | # HACK: slot for banner in self; it will be passed to the mainloop |
|
681 | # HACK: slot for banner in self; it will be passed to the mainloop | |
@@ -738,8 +745,8 b' class IPShellQt(threading.Thread):' | |||||
738 |
|
745 | |||
739 | TIMEOUT = 100 # Millisecond interval between timeouts. |
|
746 | TIMEOUT = 100 # Millisecond interval between timeouts. | |
740 |
|
747 | |||
741 |
def __init__(self,argv=None,user_ns=None, |
|
748 | def __init__(self,argv=None,user_ns=None,user_global_ns=None, | |
742 | shell_class=MTInteractiveShell): |
|
749 | debug=0,shell_class=MTInteractiveShell): | |
743 |
|
750 | |||
744 | import qt |
|
751 | import qt | |
745 |
|
752 | |||
@@ -761,7 +768,9 b' class IPShellQt(threading.Thread):' | |||||
761 | # Allows us to use both Tk and QT. |
|
768 | # Allows us to use both Tk and QT. | |
762 | self.tk = get_tk() |
|
769 | self.tk = get_tk() | |
763 |
|
770 | |||
764 |
self.IP = make_IPython(argv,user_ns=user_ns, |
|
771 | self.IP = make_IPython(argv,user_ns=user_ns, | |
|
772 | user_global_ns=user_global_ns, | |||
|
773 | debug=debug, | |||
765 | shell_class=shell_class, |
|
774 | shell_class=shell_class, | |
766 | on_kill=[qt.qApp.exit]) |
|
775 | on_kill=[qt.qApp.exit]) | |
767 |
|
776 | |||
@@ -809,32 +818,36 b' class IPShellMatplotlib(IPShell):' | |||||
809 |
|
818 | |||
810 | Having this on a separate class simplifies the external driver code.""" |
|
819 | Having this on a separate class simplifies the external driver code.""" | |
811 |
|
820 | |||
812 | def __init__(self,argv=None,user_ns=None,debug=1): |
|
821 | def __init__(self,argv=None,user_ns=None,user_global_ns=None,debug=1): | |
813 |
IPShell.__init__(self,argv,user_ns,debug, |
|
822 | IPShell.__init__(self,argv,user_ns,user_global_ns,debug, | |
|
823 | shell_class=MatplotlibShell) | |||
814 |
|
824 | |||
815 | class IPShellMatplotlibGTK(IPShellGTK): |
|
825 | class IPShellMatplotlibGTK(IPShellGTK): | |
816 | """Subclass IPShellGTK with MatplotlibMTShell as the internal shell. |
|
826 | """Subclass IPShellGTK with MatplotlibMTShell as the internal shell. | |
817 |
|
827 | |||
818 | Multi-threaded class, meant for the GTK* backends.""" |
|
828 | Multi-threaded class, meant for the GTK* backends.""" | |
819 |
|
829 | |||
820 | def __init__(self,argv=None,user_ns=None,debug=1): |
|
830 | def __init__(self,argv=None,user_ns=None,user_global_ns=None,debug=1): | |
821 |
IPShellGTK.__init__(self,argv,user_ns,debug, |
|
831 | IPShellGTK.__init__(self,argv,user_ns,user_global_ns,debug, | |
|
832 | shell_class=MatplotlibMTShell) | |||
822 |
|
833 | |||
823 | class IPShellMatplotlibWX(IPShellWX): |
|
834 | class IPShellMatplotlibWX(IPShellWX): | |
824 | """Subclass IPShellWX with MatplotlibMTShell as the internal shell. |
|
835 | """Subclass IPShellWX with MatplotlibMTShell as the internal shell. | |
825 |
|
836 | |||
826 | Multi-threaded class, meant for the WX* backends.""" |
|
837 | Multi-threaded class, meant for the WX* backends.""" | |
827 |
|
838 | |||
828 | def __init__(self,argv=None,user_ns=None,debug=1): |
|
839 | def __init__(self,argv=None,user_ns=None,user_global_ns=None,debug=1): | |
829 |
IPShellWX.__init__(self,argv,user_ns,debug, |
|
840 | IPShellWX.__init__(self,argv,user_ns,user_global_ns,debug, | |
|
841 | shell_class=MatplotlibMTShell) | |||
830 |
|
842 | |||
831 | class IPShellMatplotlibQt(IPShellQt): |
|
843 | class IPShellMatplotlibQt(IPShellQt): | |
832 | """Subclass IPShellQt with MatplotlibMTShell as the internal shell. |
|
844 | """Subclass IPShellQt with MatplotlibMTShell as the internal shell. | |
833 |
|
845 | |||
834 | Multi-threaded class, meant for the Qt* backends.""" |
|
846 | Multi-threaded class, meant for the Qt* backends.""" | |
835 |
|
847 | |||
836 | def __init__(self,argv=None,user_ns=None,debug=1): |
|
848 | def __init__(self,argv=None,user_ns=None,user_global_ns=None,debug=1): | |
837 |
IPShellQt.__init__(self,argv,user_ns,debug, |
|
849 | IPShellQt.__init__(self,argv,user_ns,user_global_ns,debug, | |
|
850 | shell_class=MatplotlibMTShell) | |||
838 |
|
851 | |||
839 | #----------------------------------------------------------------------------- |
|
852 | #----------------------------------------------------------------------------- | |
840 | # Factory functions to actually start the proper thread-aware shell |
|
853 | # Factory functions to actually start the proper thread-aware shell |
@@ -103,12 +103,13 b' class Completer:' | |||||
103 |
|
103 | |||
104 | readline.set_completer(Completer(my_namespace).complete) |
|
104 | readline.set_completer(Completer(my_namespace).complete) | |
105 | """ |
|
105 | """ | |
106 |
|
||||
107 | if namespace and type(namespace) != types.DictType: |
|
|||
108 | raise TypeError,'namespace must be a dictionary' |
|
|||
109 |
|
106 | |||
110 | if global_namespace and type(global_namespace) != types.DictType: |
|
107 | # some minimal strict typechecks. For some core data structures, I | |
111 | raise TypeError,'global_namespace must be a dictionary' |
|
108 | # want actual basic python types, not just anything that looks like | |
|
109 | # one. This is especially true for namespaces. | |||
|
110 | for ns in (namespace,global_namespace): | |||
|
111 | if ns is not None and type(ns) != types.DictType: | |||
|
112 | raise TypeError,'namespace must be a dictionary' | |||
112 |
|
113 | |||
113 | # Don't bind to namespace quite yet, but flag whether the user wants a |
|
114 | # Don't bind to namespace quite yet, but flag whether the user wants a | |
114 | # specific namespace or to use __main__.__dict__. This will allow us |
|
115 | # specific namespace or to use __main__.__dict__. This will allow us | |
@@ -518,6 +519,8 b' class IPCompleter(Completer):' | |||||
518 | except IndexError: |
|
519 | except IndexError: | |
519 | return None |
|
520 | return None | |
520 | except: |
|
521 | except: | |
521 | #import traceback; traceback.print_exc() # dbg |
|
522 | #from IPython.ultraTB import AutoFormattedTB; # dbg | |
|
523 | #tb=AutoFormattedTB('Verbose');tb() #dbg | |||
|
524 | ||||
522 | # If completion fails, don't annoy the user. |
|
525 | # If completion fails, don't annoy the user. | |
523 | return None |
|
526 | return None |
@@ -6,7 +6,7 b' Requires Python 2.1 or newer.' | |||||
6 |
|
6 | |||
7 | This file contains all the classes and helper functions specific to IPython. |
|
7 | This file contains all the classes and helper functions specific to IPython. | |
8 |
|
8 | |||
9 |
$Id: iplib.py 96 |
|
9 | $Id: iplib.py 964 2005-12-28 21:03:01Z fperez $ | |
10 | """ |
|
10 | """ | |
11 |
|
11 | |||
12 | #***************************************************************************** |
|
12 | #***************************************************************************** | |
@@ -236,6 +236,13 b' class InteractiveShell(Logger, Magic):' | |||||
236 | user_ns = None,user_global_ns=None,banner2='', |
|
236 | user_ns = None,user_global_ns=None,banner2='', | |
237 | custom_exceptions=((),None),embedded=False): |
|
237 | custom_exceptions=((),None),embedded=False): | |
238 |
|
238 | |||
|
239 | # some minimal strict typechecks. For some core data structures, I | |||
|
240 | # want actual basic python types, not just anything that looks like | |||
|
241 | # one. This is especially true for namespaces. | |||
|
242 | for ns in (user_ns,user_global_ns): | |||
|
243 | if ns is not None and type(ns) != types.DictType: | |||
|
244 | raise TypeError,'namespace must be a dictionary' | |||
|
245 | ||||
239 | # Put a reference to self in builtins so that any form of embedded or |
|
246 | # Put a reference to self in builtins so that any form of embedded or | |
240 | # imported code can test for being inside IPython. |
|
247 | # imported code can test for being inside IPython. | |
241 | __builtin__.__IPYTHON__ = self |
|
248 | __builtin__.__IPYTHON__ = self |
@@ -6,7 +6,7 b' Requires Python 2.1 or better.' | |||||
6 |
|
6 | |||
7 | This file contains the main make_IPython() starter function. |
|
7 | This file contains the main make_IPython() starter function. | |
8 |
|
8 | |||
9 |
$Id: ipmaker.py 96 |
|
9 | $Id: ipmaker.py 964 2005-12-28 21:03:01Z fperez $""" | |
10 |
|
10 | |||
11 | #***************************************************************************** |
|
11 | #***************************************************************************** | |
12 | # Copyright (C) 2001-2004 Fernando Perez. <fperez@colorado.edu> |
|
12 | # Copyright (C) 2001-2004 Fernando Perez. <fperez@colorado.edu> | |
@@ -55,8 +55,9 b' from IPython.Prompts import CachedOutput' | |||||
55 | from IPython.genutils import * |
|
55 | from IPython.genutils import * | |
56 |
|
56 | |||
57 | #----------------------------------------------------------------------------- |
|
57 | #----------------------------------------------------------------------------- | |
58 |
def make_IPython(argv=None,user_ns=None,debug=1, |
|
58 | def make_IPython(argv=None,user_ns=None,user_global_ns=None,debug=1, | |
59 |
shell_class=InteractiveShell, |
|
59 | rc_override=None,shell_class=InteractiveShell, | |
|
60 | embedded=False,**kw): | |||
60 | """This is a dump of IPython into a single function. |
|
61 | """This is a dump of IPython into a single function. | |
61 |
|
62 | |||
62 | Later it will have to be broken up in a sensible manner. |
|
63 | Later it will have to be broken up in a sensible manner. | |
@@ -86,7 +87,8 b' def make_IPython(argv=None,user_ns=None,debug=1,rc_override=None,' | |||||
86 | # __IP.name. We set its name via the first parameter passed to |
|
87 | # __IP.name. We set its name via the first parameter passed to | |
87 | # InteractiveShell: |
|
88 | # InteractiveShell: | |
88 |
|
89 | |||
89 |
IP = shell_class('__IP',user_ns=user_ns, |
|
90 | IP = shell_class('__IP',user_ns=user_ns,user_global_ns=user_global_ns, | |
|
91 | embedded=embedded,**kw) | |||
90 |
|
92 | |||
91 | # Put 'help' in the user namespace |
|
93 | # Put 'help' in the user namespace | |
92 | from site import _Helper |
|
94 | from site import _Helper |
@@ -5,6 +5,7 b'' | |||||
5 | questions part 2 - \/ characters revisited' on the iypthon user |
|
5 | questions part 2 - \/ characters revisited' on the iypthon user | |
6 | list: |
|
6 | list: | |
7 | http://scipy.net/pipermail/ipython-user/2005-June/000907.html |
|
7 | http://scipy.net/pipermail/ipython-user/2005-June/000907.html | |
|
8 | (InteractiveShell.__init__): fix tab-completion bug in threaded shells. | |||
8 |
|
9 | |||
9 | * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag |
|
10 | * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag | |
10 | true by default, and add it to the shipped ipythonrc file. Since |
|
11 | true by default, and add it to the shipped ipythonrc file. Since |
General Comments 0
You need to be logged in to leave comments.
Login now