[py-svn] r35337 - in py/dist/py/test/rsession: . testing

fijal at codespeak.net fijal at codespeak.net
Tue Dec 5 21:20:27 CET 2006


Author: fijal
Date: Tue Dec  5 21:20:23 2006
New Revision: 35337

Modified:
   py/dist/py/test/rsession/testing/test_web.py
   py/dist/py/test/rsession/web.py
Log:
Added stuff which prevents strange errors when reloading and closing browser window (thx samuele and armin).


Modified: py/dist/py/test/rsession/testing/test_web.py
==============================================================================
--- py/dist/py/test/rsession/testing/test_web.py	(original)
+++ py/dist/py/test/rsession/testing/test_web.py	Tue Dec  5 21:20:23 2006
@@ -89,4 +89,3 @@
         result = mq.get(4567)
         assert result == 2
         assert mq.empty()
-

Modified: py/dist/py/test/rsession/web.py
==============================================================================
--- py/dist/py/test/rsession/web.py	(original)
+++ py/dist/py/test/rsession/web.py	Tue Dec  5 21:20:23 2006
@@ -11,6 +11,7 @@
 import Queue
 import os
 import sys
+import socket
 
 import py
 from py.__.test.rsession.rsession import RSession, session_options
@@ -87,6 +88,13 @@
                 q.put(item)
         finally:
             self._lock.release()
+    
+    def _del(self, sessid):
+        self._lock.acquire()
+        try:
+            del self._session_queues[sessid]
+        finally:
+            self._lock.release()
 
     def get(self, sessid):
         self._lock.acquire()
@@ -178,6 +186,18 @@
         return json.write(sessid)
     show_sessid = described(retval="aa")(show_sessid)
     
+    def failed(self, **kwargs):
+        if not 'sessid' in kwargs:
+            return
+        sessid = kwargs['sessid']
+        to_del = -1
+        for num, i in enumerate(self._sessids):
+            if i == sessid:
+                to_del = num
+        if to_del != -1:
+            del self._sessids[to_del]
+        self.pending_events._del(kwargs['sessid'])
+    
     def show_all_statuses(self, sessid=-1):
         retlist = [self.show_status_change(sessid)]
         while not self.pending_events.empty_queue(sessid):
@@ -321,8 +341,12 @@
             if exec_meth is None:
                 self.send_error(404, "File %s not found" % path)
             else:
-                self.serve_data('text/json',
+                try:
+                    self.serve_data('text/json',
                                 exec_meth(**self.parse_args(getargs)))
+                except socket.error:
+                    # client happily disconnected
+                    exported_methods.failed(**self.parse_args(getargs))
         else:
             method_to_call()
     



More information about the pytest-commit mailing list