Rev 5260: Provide connect_socket (socket.create_connection) for pythons older than 2.6. in file:///home/vila/src/bzr/experimental/leaking-tests/

Vincent Ladeuil v.ladeuil+lp at free.fr
Wed Jun 2 14:01:24 BST 2010


At file:///home/vila/src/bzr/experimental/leaking-tests/

------------------------------------------------------------
revno: 5260
revision-id: v.ladeuil+lp at free.fr-20100602130124-wapaxlsay5csk345
parent: v.ladeuil+lp at free.fr-20100602121544-engrng3frfu4d6ad
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: propagate-exceptions
timestamp: Wed 2010-06-02 15:01:24 +0200
message:
  Provide connect_socket (socket.create_connection) for pythons older than 2.6.
  
  * bzrlib/tests/test_http.py:
  (RecordingServer.connect_socket): Removed.
  
  * bzrlib/tests/http_server.py:
  (TestingHTTPServerMixin.connect_socket): Removed.
  
  * bzrlib/osutils.py:
  (connect_socket): Remove code duplication, we are about to use it
  a third time.
-------------- next part --------------
=== modified file 'bzrlib/osutils.py'
--- a/bzrlib/osutils.py	2010-06-02 12:15:22 +0000
+++ b/bzrlib/osutils.py	2010-06-02 13:01:24 +0000
@@ -2030,6 +2030,28 @@
             sent_total += sent
             report_activity(sent, 'write')
 
+# socket.create_connection() is not available before python2.6, so we provide
+# it for earlier versions
+if getattr(socket, 'create_connection', None) is not None:
+    connect_socket = socket.create_connection
+else:
+    # We don't use nor handle the timeout though
+    def connect_socket(address, timeout=None):
+        err = socket.error('getaddrinfo returns an empty list')
+        for res in socket.getaddrinfo(host, port):
+            af, socktype, proto, canonname, sa = res
+            sock = None
+            try:
+                sock = socket.socket(af, socktype, proto)
+                sock.connect(sa)
+                return sock
+
+            except socket.error, err:
+                # 'err' is now the most recent error
+                if sock is not None:
+                    sock.close()
+        raise err
+
 
 def dereference_path(path):
     """Determine the real path to a file.

=== modified file 'bzrlib/tests/http_server.py'
--- a/bzrlib/tests/http_server.py	2010-05-31 20:23:51 +0000
+++ b/bzrlib/tests/http_server.py	2010-06-02 13:01:24 +0000
@@ -31,6 +31,7 @@
 import urlparse
 
 from bzrlib import (
+    osutils,
     tests,
     transport,
     )
@@ -392,22 +393,6 @@
             print 'Closed   %r' % (self.server_address,)
         self.is_shut_down.set()
 
-    def connect_socket(self):
-        err = socket.error('getaddrinfo returns an empty list')
-        for res in socket.getaddrinfo(*self.server_address):
-            af, socktype, proto, canonname, sa = res
-            sock = None
-            try:
-                sock = socket.socket(af, socktype, proto)
-                sock.connect(sa)
-                return sock
-
-            except socket.error, err:
-                # 'err' is now the most recent error
-                if sock is not None:
-                    sock.close()
-        raise err
-
     def join_thread(self, thread, timeout=2):
         thread.join(timeout)
         if thread.isAlive():
@@ -432,7 +417,7 @@
         # The server is listening for a last connection, let's give it:
         last_conn = None
         try:
-            last_conn = self.connect_socket()
+            last_conn = osutils.connect_socket(self.server_address)
         except socket.error, e:
             # But ignore connection errors as the point is to unblock the
             # server thread, it may happen that it's not blocked or even not

=== modified file 'bzrlib/tests/test_http.py'
--- a/bzrlib/tests/test_http.py	2010-05-26 16:48:55 +0000
+++ b/bzrlib/tests/test_http.py	2010-06-02 13:01:24 +0000
@@ -245,27 +245,11 @@
             # The client may have already closed the socket.
             pass
 
-    def connect_socket(self):
-        err = socket.error('getaddrinfo returns an empty list')
-        for res in socket.getaddrinfo(self.host, self.port):
-            af, socktype, proto, canonname, sa = res
-            sock = None
-            try:
-                sock = socket.socket(af, socktype, proto)
-                sock.connect(sa)
-                return sock
-
-            except socket.error, err:
-                # err is now the most recent error
-                if sock is not None:
-                    sock.close()
-        raise err
-
     def stop_server(self):
         try:
             # Issue a fake connection to wake up the server and allow it to
             # finish quickly
-            fake_conn = self.connect_socket()
+            fake_conn = osutils.connect_socket((self.host, self.port))
             fake_conn.close()
         except socket.error:
             # We might have already closed it.  We don't care.



More information about the bazaar-commits mailing list