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