@@ -819,18 +819,25 @@ class ClientResponse(HeadersMixin):
819
819
status : int = None # type: ignore[assignment] # Status-Code
820
820
reason : Optional [str ] = None # Reason-Phrase
821
821
822
- content : StreamReader = None # type: ignore[assignment] # Payload stream
822
+ content : StreamReader = None # type: ignore[assignment] # Payload stream
823
+ _body : Optional [bytes ] = None
823
824
_headers : CIMultiDictProxy [str ] = None # type: ignore[assignment]
825
+ _history : Tuple ["ClientResponse" , ...] = ()
824
826
_raw_headers : RawHeaders = None # type: ignore[assignment]
825
827
826
- _connection = None # current connection
828
+ _connection : Optional ["Connection" ] = None # current connection
829
+ _continue : Optional ["asyncio.Future[bool]" ] = None
827
830
_source_traceback : Optional [traceback .StackSummary ] = None
831
+ _session : Optional ["ClientSession" ] = None
828
832
# set up by ClientRequest after ClientResponse object creation
829
833
# post-init stage allows to not change ctor signature
830
834
_closed = True # to allow __del__ for non-initialized properly response
831
835
_released = False
832
836
_in_context = False
833
- __writer = None
837
+
838
+ _resolve_charset : Callable [["ClientResponse" , bytes ], str ] = lambda * _ : "utf-8"
839
+
840
+ __writer : Optional ["asyncio.Task[None]" ] = None
834
841
835
842
def __init__ (
836
843
self ,
@@ -845,34 +852,29 @@ def __init__(
845
852
loop : asyncio .AbstractEventLoop ,
846
853
session : "ClientSession" ,
847
854
) -> None :
848
- assert isinstance (url , URL )
855
+ # URL forbids subclasses, so a simple type check is enough.
856
+ assert type (url ) is URL
849
857
850
858
self .method = method
851
859
self .cookies = SimpleCookie ()
852
860
853
861
self ._real_url = url
854
862
self ._url = url .with_fragment (None ) if url .raw_fragment else url
855
- self ._body : Optional [bytes ] = None
856
863
if writer is not None :
857
864
self ._writer = writer
858
- self ._continue = continue100 # None by default
859
- self ._closed = True
860
- self ._history : Tuple [ClientResponse , ...] = ()
865
+ if continue100 is not None :
866
+ self ._continue = continue100
861
867
self ._request_info = request_info
862
868
self ._timer = timer if timer is not None else TimerNoop ()
863
869
self ._cache : Dict [str , Any ] = {}
864
870
self ._traces = traces
865
871
self ._loop = loop
866
- # store a reference to session #1985
867
- self ._session : Optional [ClientSession ] = session
868
872
# Save reference to _resolve_charset, so that get_encoding() will still
869
873
# work after the response has finished reading the body.
870
- if session is None :
871
- # TODO: Fix session=None in tests (see ClientRequest.__init__).
872
- self ._resolve_charset : Callable [["ClientResponse" , bytes ], str ] = (
873
- lambda * _ : "utf-8"
874
- )
875
- else :
874
+ # TODO: Fix session=None in tests (see ClientRequest.__init__).
875
+ if session is not None :
876
+ # store a reference to session #1985
877
+ self ._session = session
876
878
self ._resolve_charset = session ._resolve_charset
877
879
if loop .get_debug ():
878
880
self ._source_traceback = traceback .extract_stack (sys ._getframe (1 ))
0 commit comments