K i1ddlmZddlZddlZddlZddlZddlZddlZddl Zddl Zddl m Z ddl mZddlmZmZddlmZddlmZeZej.d Zej2eZej8d Zej8d Zdd Zdd Z GddejBeZ"GddeZ#GddeZ$y)) annotationsN) _TYPE_BODY)HTTPHeaderDict)HTTPSConnection_get_default_user_agent)ConnectionError)BaseHTTPResponseTs^[!#$%&'*+\-.^_`|~0-9a-z]+$s*[\0\x00\x0a\x0d\r\n]|^[ \r\n\t]|[ \r\n\t]$c>ttj|S)a5 "An implementation that validates fields according to the definitions in Sections 5.1 and 5.5 of [HTTP] only needs an additional check that field names do not include uppercase characters." (https://httpwg.org/specs/rfc9113.html#n-field-validity) `http.client._is_legal_header_name` does not validate the field name according to the HTTP 1.1 spec, so we do that here, in addition to checking for uppercase characters. This does not allow for the `:` character in the header name, so should not be used to validate pseudo-headers. )boolRE_IS_LEGAL_HEADER_NAMEmatch)names ^/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/urllib3/http2/connection.py_is_legal_header_namers '--d3 44c>ttj|S)aK "A field value MUST NOT contain the zero value (ASCII NUL, 0x00), line feed (ASCII LF, 0x0a), or carriage return (ASCII CR, 0x0d) at any position. A field value MUST NOT start or end with an ASCII whitespace character (ASCII SP or HTAB, 0x20 or 0x09)." (https://httpwg.org/specs/rfc9113.html#n-field-validity) )r RE_IS_ILLEGAL_HEADER_VALUEsearch)values r_is_illegal_header_valuer,s *11%8 99rc<eZdZdZdZddZddZ d dZy) _LockedObjectaX A wrapper class that hides a specific object behind a lock. The goal here is to provide a simple way to protect access to an object that cannot safely be simultaneously accessed from multiple threads. The intended use of this class is simple: take hold of it with a context manager, which returns the protected object. )lock_objcDtj|_||_yN) threadingRLockrr)selfobjs r__init__z_LockedObject.__init__DsOO%  rcN|jj|jSr)racquirerr!s r __enter__z_LockedObject.__enter__Hs yyrc8|jjyr)rrelease)r!exc_typeexc_valexc_tbs r__exit__z_LockedObject.__exit__Ls rN)r"r )returnr )r*ztype[BaseException] | Noner+zBaseException | Noner,ztypes.TracebackType | Noner.None)__name__ __module__ __qualname____doc__ __slots__r#r'r-rrrr6sCI ,&+   rrceZdZ d dfd ZddZdfd Z ddZddZdddZddZ d ddZ dd Z dd d d d  dd Z dfd Z xZS)HTTP2Connectionc |j|_d|_g|_d|vsd|vr t dt |||fi||j t dy)Nproxy proxy_configz$Proxies aren't supported with HTTP/2z%Tunneling isn't supported with HTTP/2) _new_h2_conn_h2_conn _h2_stream_headersNotImplementedErrorsuperr# _tunnel_host)r!hostportkwargs __class__s rr#zHTTP2Connection.__init__Vso))+ &*35 f & 8%&LM M t.v.    (%&MN N )rctjjd}ttjj |S)NT) client_side)config)h2rHH2Configurationr connection H2Connection)r!rHs rr;zHTTP2Connection._new_h2_connes6**t*<R]]77v7FGGrct||j5}|j|j x}r|j j |dddy#1swYyxYwr)r@connectr<initiate_connection data_to_sendsocksendall)r!connrPrEs rrNzHTTP2Connection.connectis]  ]] 0d  $ $ &#0022|2 !!,/ 0 0 0s >A##A,c d|vr tdd|vr td|xsd|_|j|d|jvr!d|jd|jxsd }n|jd|jxsd }|j j d |j j d |jf|j j d |jf|j j d |jf|j5}|j|_ dddy#1swYyxYw)zputrequest This deviates from the HTTPConnection method signature since we never need to override sending accept-encoding headers or the host header. skip_hostz`skip_host` isn't supportedskip_accept_encodingz&`skip_accept_encoding` isn't supported/:[z]:i)s:schemeshttpss:methods :authoritys:pathN) r? _request_url_validate_pathrBrCr>appendencoder<get_next_available_stream_idr=)r!methodurlrD authorityrSs r putrequestzHTTP2Connection.putrequestps/ & %&CD D !V +%&NO OJ3 C $)) DII;b)9c(:;I99+Qtyy'7C&89I 34 j&--/:; mY-=-=-?@A h 56 ]] Bd"??ADO B B Bs 1EEc|t|tr|jn|}|j}t |st dt||D]c}t|tr|jn|}t |rt dt||jj||fey)NzIllegal header name zIllegal header value ) isinstancestrr]lowerr ValueErrorrr>r\)r!headervaluesrs r putheaderzHTTP2Connection.putheaders$.vs$;$V,3CK=AB B 2E&0&|j td|j5}|j|j|j|du|j x}r|j j|dddg|_y#1swYg|_yxYw)NMust call `putrequest` first.) stream_idheaders end_stream)r=r r< send_headersr>rPrQrR)r! message_bodyrSrPs r endheaderszHTTP2Connection.endheaderss ?? "!"AB B ]] 0d   // (D0   $0022|2 !!,/ 0  0 s AB  Bcd|j td|j5}|jx}r|jj |t |dr |j|j}|snlt|tr|j}|j|j|d|jx}r|jj ||j|j dddyt|tr|j} t|trL|j|j|d|jx}r|jj |nn|D]N}|j|j|d|jx}s4|jj |P|j|jdddy#t$rtdt!|zwxYw#1swYyxYw)zSend data to the server. `data` can be: `str`, `bytes`, an iterable, or file-like objects that support a .read() method. NrlreadTF)roz6`data` should be str, bytes, iterable, or file. got %r)r=r r<rPrQrRhasattrrt blocksizerdrer] send_datarobytes TypeErrortype)r!datarSrPchunks rsendzHTTP2Connection.sends ?? "!"AB B ]]# d#0022|2 !!,/tV$ IIdnn5E !%- % NN4??EeNL'+'8'8'::|: )),70# # "$${{} dE*NN4??DTNJ'+'8'8'::|: )),7!%<t%P+/+<+<+>><> II--l;<OODOO4=# # > L4j! ?# # s+C!H& H&/BH8H!H##H&&H/ctd)Nz;HTTP/2 does not support setting up a tunnel through a proxy)r?)r!rBrCrnschemes r set_tunnelzHTTP2Connection.set_tunnels" I  rc d}t}|j5}d}|s}|jjdx}r.|j |}|D]}t |t jjrnt}|jD]T\} } | dk(rt| j}%|j| jd| jdVt |t jjr6||jz }|j!|j"|j$t |t jj&sd}|j)x} r|jj+| |s}ddd|Jt-||j.t1|S#1swY/xYw)NFis:statusasciiT)statusrn request_urlr{) bytearrayr<rQrecv receive_datardrIeventsResponseReceivedrrnintdecodeadd DataReceivedr{acknowledge_received_dataflow_controlled_lengthrm StreamEndedrPrR HTTP2ResponserZrx) r!rr{rSro received_datareventrnrhrrPs r getresponsezHTTP2Connection.getresponses{ ]] 4dJ $(IINN5$99=9!..}=F!'.%eRYY-G-GH&4&6G16& #)Z#7-0-@F$+KK(. g(> W@U%& &(ryy/E/EF EJJ.D :: % < rrrr}) r!r_r`bodyrnrrrrDkvs rrequestzHTTP2Connection.request s    99 II  . $-RMMO %DAqwwy//ANq!$  % T]] 3 3 NN=*A*C D  OOO . IIdO OO rcD|j5} |j|jx}r|jj |ddd|j |_d|_g|_t|)y#t $rYEwxYw#1swYJxYwr) r<close_connectionrPrQrR Exceptionr;r=r>r@close)r!rSr{rEs rrzHTTP2Connection.close3s ]] d %%',,..4.II%%d+  ))+         s(B=B BBBBBr)rBrerC int | NonerD typing.Anyr.r/)r.z)_LockedObject[h2.connection.H2Connection]r.r/)r_rer`rerDrr.r/)rh str | bytesrirr.r/)rqrr.r/)r{rr.r/)NNhttp) rBrerCrrntyping.Mapping[str, str] | Nonerrer.r/)r.r)NN)r_rer`rerz_TYPE_BODY | Nonernrrr rr rr rDrr.r/)r0r1r2r#r;rNrbrjrrr}rrrr __classcell__rEs@rr7r7UsI,0 O O) O 2 +` 37      1      ( ( \#'37 %!%#'+%%% % 1 %%%!%%% %Nrr7c\eZdZ d dfd ZeddZddZddZxZS) rc Nt|||ddd||||_d|_y)NzHTTP/2)rrnversionversion_stringreasonrrr)r@r#_datalength_remaining)r!rrnrr{rrEs rr#zHTTP2Response.__init__Fs= #)#   !rc|jSr)rr&s rr{zHTTP2Response.data\s zzrcyrr5r&s rget_redirect_locationz#HTTP2Response.get_redirect_location`srcyrr5r&s rrzHTTP2Response.closecs r)F) rrrnrrrer{rxrr r.r/)r.rxr) r0r1r2r#propertyr{rrrrs@rrrDse % "" " "  "  " ", rr)rrxr.r )rrxr.r )% __future__rloggingrertypestyping h2.configrI h2.connection h2.events_base_connectionr _collectionsrrKrr exceptionsr responser orig_HTTPSConnectionTypeVarr getLoggerr0logcompilerrrrGenericrr7rr5rrrs"  ))A('&FNN3g!$"**%DE'RZZ(VW 5:FNN1%>lol^  $  r