@@ -86,14 +86,11 @@ class Response:
86
86
87
87
encoding = None
88
88
89
- def __init__ (
90
- self , sock : SocketType , session : "Session" , fast_close : bool = False
91
- ) -> None :
89
+ def __init__ (self , sock : SocketType , session : "Session" ) -> None :
92
90
self .socket = sock
93
91
self .encoding = "utf-8"
94
92
self ._cached = None
95
93
self ._headers = {}
96
- self ._fast_close = fast_close
97
94
98
95
# _start_index and _receive_buffer are used when parsing headers.
99
96
# _receive_buffer will grow by 32 bytes everytime it is too small.
@@ -230,27 +227,16 @@ def _throw_away(self, nbytes: int) -> None:
230
227
to_read -= self ._recv_into (buf , to_read )
231
228
232
229
def close (self ) -> None :
233
- """Drain the remaining ESP socket buffers. We assume we already got what we wanted ."""
230
+ """Close out the socket. If we have a session free it instead ."""
234
231
if not self .socket :
235
232
return
236
- # Make sure we've read all of our response.
237
- if self ._cached is None and not self ._fast_close :
238
- if self ._remaining and self ._remaining > 0 :
239
- self ._throw_away (self ._remaining )
240
- elif self ._chunked :
241
- while True :
242
- chunk_header = bytes (self ._readto (b"\r \n " )).split (b";" , 1 )[0 ]
243
- if not chunk_header :
244
- break
245
- chunk_size = int (bytes (chunk_header ), 16 )
246
- if chunk_size == 0 :
247
- break
248
- self ._throw_away (chunk_size + 2 )
233
+
249
234
if self ._session :
250
235
# pylint: disable=protected-access
251
236
self ._session ._connection_manager .free_socket (self .socket )
252
237
else :
253
238
self .socket .close ()
239
+
254
240
self .socket = None
255
241
256
242
def _parse_headers (self ) -> None :
@@ -365,13 +351,11 @@ def __init__(
365
351
socket_pool : SocketpoolModuleType ,
366
352
ssl_context : Optional [SSLContextType ] = None ,
367
353
session_id : Optional [str ] = None ,
368
- fast_close : Optional [bool ] = False ,
369
354
) -> None :
370
355
self ._connection_manager = get_connection_manager (socket_pool )
371
356
self ._ssl_context = ssl_context
372
357
self ._session_id = session_id
373
358
self ._last_response = None
374
- self ._fast_close = fast_close
375
359
376
360
@staticmethod
377
361
def _check_headers (headers : Dict [str , str ]):
@@ -389,7 +373,6 @@ def _check_headers(headers: Dict[str, str]):
389
373
def _send (socket : SocketType , data : bytes ):
390
374
total_sent = 0
391
375
while total_sent < len (data ):
392
- # ESP32SPI sockets raise a RuntimeError when unable to send.
393
376
try :
394
377
sent = socket .send (data [total_sent :])
395
378
except OSError as exc :
@@ -399,6 +382,7 @@ def _send(socket: SocketType, data: bytes):
399
382
# Some worse error.
400
383
raise
401
384
except RuntimeError as exc :
385
+ # ESP32SPI sockets raise a RuntimeError when unable to send.
402
386
raise OSError (errno .EIO ) from exc
403
387
if sent is None :
404
388
sent = len (data )
@@ -566,7 +550,7 @@ def request(
566
550
if not socket :
567
551
raise OutOfRetries ("Repeated socket failures" ) from last_exc
568
552
569
- resp = Response (socket , self , fast_close = self . _fast_close ) # our response
553
+ resp = Response (socket , self ) # our response
570
554
if allow_redirects :
571
555
if "location" in resp .headers and 300 <= resp .status_code <= 399 :
572
556
# a naive handler for redirects
@@ -594,6 +578,10 @@ def request(
594
578
self ._last_response = resp
595
579
return resp
596
580
581
+ def options (self , url : str , ** kw ) -> Response :
582
+ """Send HTTP OPTIONS request"""
583
+ return self .request ("OPTIONS" , url , ** kw )
584
+
597
585
def head (self , url : str , ** kw ) -> Response :
598
586
"""Send HTTP HEAD request"""
599
587
return self .request ("HEAD" , url , ** kw )
0 commit comments