def connect(self): """Connect to beanstalkd server.""" self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.socket.settimeout(self._connect_timeout) SocketError.wrap(self.socket.connect, (self.host, self.port)) self.socket.settimeout(None) self.socket_file = self.socket.makefile('rb')
def _interact(self, command, expected_ok, expected_err=[]): connection = self._connection_pool.get_connection() SocketError.wrap(connection.socket.sendall, command) status, results = self._read_response(connection) if status in expected_ok: return results elif status in expected_err: raise CommandFailed(command.split()[0], status, results) else: raise UnexpectedResponse(command.split()[0], status, results)
def _read_body(self, connection, size): body = SocketError.wrap(connection.socket_file.read, size) SocketError.wrap(connection.socket_file.read, 2) # trailing crlf if size > 0 and not body: raise SocketError() return body
def _read_response(self, connection): line = SocketError.wrap(connection.socket_file.readline) if not line: raise SocketError() response = line.split() return response[0], response[1:]