[pyrepl-checkins] pyrepl/pyrepl python_reader.py,1.15,1.16 reader.py,1.13,1.14 unix_console.py,1.12,1.13

mwh@codespeak.net mwh@codespeak.net
Wed, 12 May 2004 18:21:40 +0200 (MEST)


Update of /cvs/pyrepl/pyrepl/pyrepl
In directory thoth.codespeak.net:/tmp/cvs-serv27716/pyrepl

Modified Files:
	python_reader.py reader.py unix_console.py 
Log Message:
Hackish twisted support.


Index: python_reader.py
===================================================================
RCS file: /cvs/pyrepl/pyrepl/pyrepl/python_reader.py,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** python_reader.py	11 May 2004 17:56:01 -0000	1.15
--- python_reader.py	12 May 2004 16:21:38 -0000	1.16
***************
*** 287,290 ****
--- 287,312 ----
                  break
  
+     def twistedinteract(self):
+         from twisted.internet import reactor
+         outerself = self
+         class Me(object):
+             def fileno(self):
+                 """ We want to select on FD 0 """
+                 return 0
+ 
+             def doRead(self):
+                 """called when input is ready"""
+                 outerself.handle1()
+ 
+             def logPrefix(self): return 'PyRepl'
+             
+         reactor.addReader(Me())
+         self.prepare()
+         try:
+             reactor.run()
+         finally:
+             self.restore()
+         
+ 
      def cocoainteract(self, inputfilehandle=None, outputfilehandle=None):
          # only call this when there's a run loop already going!
***************
*** 294,298 ****
          
          
! def main(use_pygame_console=0, interactmethod="interact"):
      si, se, so = sys.stdin, sys.stderr, sys.stdout
      try:
--- 316,320 ----
          
          
! def main(use_pygame_console=0, interactmethod="twistedinteract"):
      si, se, so = sys.stdin, sys.stderr, sys.stdout
      try:

Index: reader.py
===================================================================
RCS file: /cvs/pyrepl/pyrepl/pyrepl/reader.py,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -d -r1.13 -r1.14
*** reader.py	11 May 2004 17:56:01 -0000	1.13
--- reader.py	12 May 2004 16:21:38 -0000	1.14
***************
*** 526,529 ****
--- 526,533 ----
              self.do_cmd(cmd)
              return 1
+ 
+     def push_char(self, char):
+         self.console.push_char(char)
+         self.handle1(0)
      
      def readline(self):

Index: unix_console.py
===================================================================
RCS file: /cvs/pyrepl/pyrepl/pyrepl/unix_console.py,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
*** unix_console.py	11 May 2004 18:05:00 -0000	1.12
--- unix_console.py	12 May 2004 16:21:38 -0000	1.13
***************
*** 152,155 ****
--- 152,156 ----
  
          self.event_queue = unix_eventqueue.EventQueue(self.input_fd)
+         self.partial_char = ''
  
      def change_encoding(self, encoding):
***************
*** 377,398 ****
          self.event_queue.insert(Event('resize', None))
  
      def get_event(self, block=1):
          while self.event_queue.empty():
              while 1: # All hail Unix!
                  try:
!                     c = ''
!                     while 1:
!                         c += os.read(self.input_fd, 1)
!                         try:
!                             c = unicode(c, self.encoding)
!                         except UnicodeError, e:
!                             if len(e.args) > 4 and \
!                                e.args[4] == 'unexpected end of data':
!                                 continue
!                             else:
!                                 raise
!                         else:
!                             break
!                         
                  except IOError, err:
                      if err.errno == errno.EINTR:
--- 378,400 ----
          self.event_queue.insert(Event('resize', None))
  
+     def push_char(self, char):
+         self.partial_char += char
+         try:
+             c = unicode(self.partial_char, self.encoding)
+         except UnicodeError, e:
+             if len(e.args) > 4 and \
+                    e.args[4] == 'unexpected end of data':
+                 pass
+             else:
+                 raise
+         else:
+             self.partial_char = ''
+             self.event_queue.push(c)
+         
      def get_event(self, block=1):
          while self.event_queue.empty():
              while 1: # All hail Unix!
                  try:
!                     self.push_char(os.read(self.input_fd, 1))
                  except IOError, err:
                      if err.errno == errno.EINTR:
***************
*** 400,409 ****
                              return self.event_queue.get()
                          else:
!                             continue # be explicit
                      else:
                          raise
                  else:
                      break
-             self.event_queue.push(c)
              if not block:
                  break
--- 402,410 ----
                              return self.event_queue.get()
                          else:
!                             continue
                      else:
                          raise
                  else:
                      break
              if not block:
                  break