Package restkit :: Module sock
[hide private]
[frames] | no frames]

Source Code for Module restkit.sock

 1  # -*- coding: utf-8 - 
 2  # 
 3  # This file is part of restkit released under the MIT license.  
 4  # See the NOTICE for more information. 
 5   
 6  import socket 
 7   
 8  CHUNK_SIZE = (16 * 1024) 
 9  MAX_BODY = 1024 * 112 
10   
11  try: 
12      import ssl # python 2.6 
13      _ssl_wrap_socket = ssl.wrap_socket 
14  except ImportError: 
15 - def _ssl_wrap_socket(sock, key_file, cert_file):
16 ssl_sock = socket.ssl(sock, key_file, cert_file) 17 return ssl_sock
18 19 if not hasattr(socket, '_GLOBAL_DEFAULT_TIMEOUT'): # python < 2.6 20 _GLOBAL_DEFAULT_TIMEOUT = object() 21 else: 22 _GLOBAL_DEFAULT_TIMEOUT = socket._GLOBAL_DEFAULT_TIMEOUT 23
24 -def connect(address, timeout=_GLOBAL_DEFAULT_TIMEOUT, ssl=False, 25 key_file=None, cert_file=None):
26 msg = "getaddrinfo returns an empty list" 27 host, port = address 28 for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM): 29 af, socktype, proto, canonname, sa = res 30 sock = None 31 try: 32 sock = socket.socket(af, socktype, proto) 33 if timeout is not _GLOBAL_DEFAULT_TIMEOUT: 34 sock.settimeout(timeout) 35 sock.connect(sa) 36 if ssl: 37 sock = _ssl_wrap_socket(sock, key_file, cert_file) 38 return sock 39 except socket.error, msg: 40 if sock is not None: 41 sock.close() 42 raise socket.error, msg
43
44 -def close(skt):
45 if not skt: return 46 try: 47 skt.close() 48 except socket.error: 49 pass
50
51 -def send_chunk(sock, data):
52 chunk = "".join(("%X\r\n" % len(data), data, "\r\n")) 53 sock.sendall(chunk)
54
55 -def send(sock, data, chunked=False):
56 if chunked: 57 return send_chunk(sock, data) 58 sock.sendall(data)
59
60 -def send_nonblock(sock, data, chunked=False):
61 timeout = sock.gettimeout() 62 if timeout != 0.0: 63 try: 64 sock.setblocking(0) 65 return send(sock, data, chunked) 66 finally: 67 sock.setblocking(1) 68 else: 69 return send(sock, data, chunked)
70
71 -def sendlines(sock, lines, chunked=False):
72 for line in list(lines): 73 send(sock, line, chunked)
74
75 -def sendfile(sock, data, chunked=False):
76 if hasattr(data, 'seek'): 77 data.seek(0) 78 79 while True: 80 binarydata = data.read(CHUNK_SIZE) 81 if binarydata == '': break 82 send(sock, binarydata, chunked)
83