Changeset 1911
- Timestamp:
- 03/07/08 23:16:44
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/598-sendall/cherrypy/wsgiserver/__init__.py
r1909 r1911 193 193 def readline(self, size=None): 194 194 if size is not None: 195 data = self.rfile.readline(size) 196 self.bytes_read += len(data) 195 local_bytes_seen = 0 196 seen_data = [] 197 while local_bytes_seen < size: 198 data = self.rfile.readline(size-local_bytes_seen) 199 if not data: 200 break 201 seen_data.append(data) 202 local_bytes_seen += len(data) 203 if '\n' in data: 204 break 205 206 self.bytes_read += local_bytes_seen 197 207 self._check_length() 198 return data208 return "".join(seen_data) 199 209 200 210 # User didn't specify a size ... … … 244 254 def __init__(self, sock): 245 255 self.sock = sock 246 self.incomplete_line_size = 0247 256 self.incomplete_line_buffer = [] 248 257 self.lines_buffer = [] … … 251 260 raise NotImplementedError 252 261 253 def readline(self , size=None):262 def readline(self): 254 263 # This doesn't raise the appropriate exceptions 255 264 # as the result may result in an Index Error? 256 265 257 266 # if we can't return their data right away, let's try to read (blocking) 258 if not (self.lines_buffer or (size and self.incomplete_line_size >= size)):267 if not self.lines_buffer: 259 268 self._fill_lines_buffer() 260 261 # if we have a complete line to send, use it. 262 if self.lines_buffer: 263 line = self.lines_buffer[0] 264 if size and len(line) > size: 265 self.lines_buffer[0] = line[size:] 266 line = line[:size] 267 return line 268 else: 269 return self.lines_buffer.pop(0) 270 271 # If we have enough of a non-complete line to 272 # satisfy the size requirement return that. 273 elif size and self.incomplete_line_size >= size: 274 line = ''.join(self.incomplete_line_buffer) 275 new_incomplete_line = line[:size] 276 self.incomplete_line_size = len(new_incomplete_line) 277 self.incomplete_line_buffer = [new_incomplete_line] 278 else: 279 assert ("We should never get here, should we?") 269 270 if not self.lines_buffer: 271 return "" 272 273 return self.lines_buffer.pop(0) 274 280 275 281 def _fill_lines_buffer(self, size=None): 282 bytes_seen = 0 276 def _fill_lines_buffer(self): 283 277 while True: 284 278 data = self.sock.recv(256) 285 bytes_seen += len(data)286 279 287 280 lines = data.split("\n") … … 299 292 self.incomplete_line_buffer.append(lines.pop(0)) 300 293 self.lines_buffer.append("".join(self.incomplete_line_buffer)) 301 self.incomplete_line_size = 0 294 302 295 self.incomplete_line_buffer = [] 303 296 … … 306 299 307 300 # Record the latest new incomplete line 308 if new_incomplete_line: 309 self.incomplete_line_size += len(new_incomplete_line) 310 self.incomplete_line_buffer.append(new_incomplete_line) 301 self.incomplete_line_buffer.append(new_incomplete_line) 311 302 312 303 # If they didn't specify a size and we have a line to send them 313 304 # stop reading 314 if not size and self.lines_buffer: 315 return 316 317 # if we've read over the size that they wanted, then stop reading 318 if size and bytes_seen > size: 305 if self.lines_buffer: 319 306 return 320 307 … … 892 879 if SSL and isinstance(sock, SSL.ConnectionType): 893 880 timeout = sock.gettimeout() 894 self.rfile = SSL_fileobject( HTTPRequestSocketWrapper(sock), "r", self.rbufsize)881 self.rfile = SSL_fileobject(sock, "r", self.rbufsize) 895 882 self.rfile.ssl_timeout = timeout 896 883 self.send = self.rfile.send 897 884 else: 898 #self.rfile = sock.makefile("rb", self.rbufsize) 899 self.rfile = HTTPRequestSocketWrapper(sock) 885 self.rfile = sock.makefile("rb", self.rbufsize) 900 886 self.send = sock.send 901 887

