[pyrepl-checkins] r53579 - pyrepl/trunk/pyrepl/pyrepl

arigo at codespeak.net arigo at codespeak.net
Tue Apr 8 14:25:39 CEST 2008


Author: arigo
Date: Tue Apr  8 14:25:38 2008
New Revision: 53579

Modified:
   pyrepl/trunk/pyrepl/pyrepl/readline.py
   pyrepl/trunk/pyrepl/pyrepl/simple_interact.py
Log:
The lazy imports do more harm than good.


Modified: pyrepl/trunk/pyrepl/pyrepl/readline.py
==============================================================================
--- pyrepl/trunk/pyrepl/pyrepl/readline.py	(original)
+++ pyrepl/trunk/pyrepl/pyrepl/readline.py	Tue Apr  8 14:25:38 2008
@@ -4,7 +4,11 @@
 """
 
 import sys, os
-import pyrepl.curses    # check to give an early ImportError
+from pyrepl import commands
+from pyrepl.historical_reader import HistoricalReader
+from pyrepl.completing_reader import CompletingReader
+from pyrepl.unix_console import UnixConsole
+
 
 ENCODING = 'latin1'     # XXX hard-coded
 
@@ -37,7 +41,7 @@
 
 # ____________________________________________________________
 
-class _ReaderMixin(object):
+class ReadlineAlikeReader(HistoricalReader, CompletingReader):
     readline_completer = None
     completer_delims = dict.fromkeys(' \t\n`~!@#$%^&*()-=+[{]}\\|;:\'",<>/?')
 
@@ -92,27 +96,27 @@
     more_lines = None
 
     def collect_keymap(self):
-        return super(_ReaderMixin, self).collect_keymap() + (
+        return super(ReadlineAlikeReader, self).collect_keymap() + (
             (r'\n', 'maybe-accept'),)
 
     def __init__(self, console):
-        super(_ReaderMixin, self).__init__(console)
-        from pyrepl import commands
-        class maybe_accept(commands.Command):
-            def do(self):
-                r = self.reader
-                # if there are already several lines and the cursor
-                # is not on the last one, always insert a new \n.
-                text = r.get_unicode()
-                if "\n" in r.buffer[r.pos:]:
-                    r.insert("\n")
-                elif r.more_lines is not None and r.more_lines(text):
-                    r.insert("\n")
-                else:
-                    self.finish = 1
+        super(ReadlineAlikeReader, self).__init__(console)
         self.commands['maybe_accept'] = maybe_accept
         self.commands['maybe-accept'] = maybe_accept
 
+class maybe_accept(commands.Command):
+    def do(self):
+        r = self.reader
+        # if there are already several lines and the cursor
+        # is not on the last one, always insert a new \n.
+        text = r.get_unicode()
+        if "\n" in r.buffer[r.pos:]:
+            r.insert("\n")
+        elif r.more_lines is not None and r.more_lines(text):
+            r.insert("\n")
+        else:
+            self.finish = 1
+
 # ____________________________________________________________
 
 class _ReadlineWrapper(object):
@@ -124,13 +128,8 @@
 
     def get_reader(self):
         if self.reader is None:
-            from pyrepl.historical_reader import HistoricalReader
-            from pyrepl.completing_reader import CompletingReader
-            from pyrepl.unix_console import UnixConsole
-            class MyReader(_ReaderMixin, HistoricalReader, CompletingReader):
-                pass
             console = UnixConsole(self.f_in, self.f_out, encoding=ENCODING)
-            self.reader = MyReader(console)
+            self.reader = ReadlineAlikeReader(console)
         return self.reader
 
     def raw_input(self, prompt=''):

Modified: pyrepl/trunk/pyrepl/pyrepl/simple_interact.py
==============================================================================
--- pyrepl/trunk/pyrepl/pyrepl/simple_interact.py	(original)
+++ pyrepl/trunk/pyrepl/pyrepl/simple_interact.py	Tue Apr  8 14:25:38 2008
@@ -6,12 +6,6 @@
 import sys
 from pyrepl.readline import multiline_input
 
-# please don't remove the following imports, useful
-# to give an early ImportError if something is missing
-import pyrepl.unix_console
-import pyrepl.historical_reader
-import pyrepl.completing_reader
-
 
 def run_multiline_interactive_console(mainmodule=None):
     import code


More information about the pyrepl-checkins mailing list