idn rUddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddlm Z ddl m Z mZmZmZmZmZmZmZmZmZmZddlmZddlZddlmZmZmZmZddl m!Z!dd l"m#Z#dd l$m%Z%dd l&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/dd l0m1Z1dd l2m3Z3ddl4m5Z5m6Z6ddl7m8Z8m9Z9ddl:m;Z;mZ>m?Z?m@Z@ddlAmBZBddlCmDZDdZEe rddlFmGZGddlHmIZIddlJmKZKejLdddGddZMejNejOzdzZPerSSs( K KSVV K K K K K KrH) !#_QDTEXTz \\[\t !-~] _QUOTED_PAIRz"(?:{quoted_pair}|{qdtext})*")qdtext quoted_pair_QUOTED_STRINGz0({token})=({token}|{quoted_string})(:\d{{1,4}})?)token quoted_string_FORWARDED_PAIRz \\([\t !-~])_QUOTED_PAIR_REPLACE_RE_FORWARDED_PAIR_REc.eZdZejejejejejhZ e j e gdzZ ddddddde deddd ed d d ejd edeeeefdeedeedeeddfdZeeeeeeddededededededdfdZed]dZed^dZedeejfdZ edefdZ!e"de fdZ#e"de$fdZ%e"dejfdZ&d edefd!Z'd ed"eddfd#Z(d eddfd$Z)defd%Z*de+efd&Z,e"de-fd'Z.e"de/e0eefd(ffd)Z1e"defd*Z2e"defd+Z3e"de4fd,Z5e"defd-Z6e"deefd.Z7e"de$fd/Z8e"defd0Z9e"defd1Z:e"defd2Z;e"d_d4Ze"de?fd8Z@e"deeAjAfd9ZBe"deeAjAfd:ZCeDd;ede+eEfd<ZFeGd=eedee/eEd(ffd>ZHe"dee/eEd(ffd?ZIe"dee/eEd(ffd@ZJe"deeAjAfdAZKe"de-fdBZLe"de0eeffdCZMe"deNfdDZOe"defdEZPede-fdFZQede-fdGZRe"de-fdHZSdadIZTdeUfdJZVdefdKZWeXdLdMeYdefdNZZde[fdOZ\dbdQZ]dcdRedSedefdTZ^defdUZ_dVe`de-fdWZade-fdXZbdYecddfdZZdd[eeddfd\ZfdS)dr0)_message _protocol_payload_writer_payload_headers_method_version_rel_url_post _read_bytes_state_cache_task_client_max_size_loop_transport_sslcontext_transport_peernameiN)client_max_sizestateschemehostremotemessagepayloadprotocolr4payload_writertaskasyncio.Task[None]looprurvrwrxryreturnc|i}||_||_||_||_|j|_|j|_|j|_ i|_ |j } | rB| |j d<| j |j d<| j|j d<| |_n |j |_d|_d|_||_||_||_||_|jj} | J| d|_| d|_| | |j d<| | |j d<| | |j d<dSdS)Nurlrxrw sslcontextpeernamery)rdrerfrgr?rhmethodriversionrjror is_absoluterxrwrelativerkrlrmrnrprqrr transportget_extra_inforsrt)selfrzr{r|r}r~rrurvrwrxryrrs rI__init__zBaseRequest.__init__s\ =E !-  ~  &( k ??   ("%DK "%(DK $'JDK !LLNNDMM#KDMMQ ,0  / N, $$$%.%=%=l%K%K"#,#;#;J#G#G  $*DK !  "&DK   $*DK ! ! !  rHrrel_urlr?rwrxryrrr?cj|jrtdi}|tur||d<|tur&t|}||d<t ||d<|turMt t ||d<td|D|d<|j j d i|} i} |tur|| d<|tur|| d <|tur|| d <|j | |j |j |j|j|jf|j|jd | S) aClone itself with replacement some attributes. Creates and returns a new instance of Request object. If no parameters are given, an exact copy is returned. If a parameter is not passed, it will reuse the one from the current request object. z.Cannot clone request after reading its contentrrpathr?c3pK|]1\}}|d|dfV2dS)utf-8N)encode)rQkvs rIrSz$BaseRequest.clone..sT'';?1a'""AHHW$5$56''''''rH raw_headersrwrxry)rurvrG)rm RuntimeErrorr!rrCrrtupleitemsrd_replace __class__rgrerfrprrrqrncopy) rrrr?rwrxrydctnew_urlrzkwargss rIclonezBaseRequest.clones   TRSS S   ! !"CM ( " "'llG CJg,,CK ( " "-k'.B.BCCC N!&''CJ==??'''""C )$-(//3//  ! !%F8  x  !F6N  ! !%F8 t~  M N  J J  !1+""$$      rHc|jSrO)rprs rIr~zBaseRequest.tasks zrHc|jSrO)rers rIr|zBaseRequest.protocols ~rHc,|jdS|jjSrO)rerrs rIrzBaseRequest.transports > !4~''rHc|jSrO)rfrs rIwriterzBaseRequest.writer s ##rHcHtjdtd|jS)NzRequest.message is deprecated stacklevel)warningswarnDeprecationWarningrdrs rIrzzBaseRequest.messages$ 57IVWXXXX}rHc|jSrO)rkrs rIrzBaseRequest.rel_urls }rHcHtjdtd|jS)Nz#request.loop property is deprecatedr)rrrrrrs rIrzBaseRequest.loops. 13ERS    zrHkeyc|j|SrOrnrrs rI __getitem__zBaseRequest.__getitem__"s{3rHvaluec||j|<dSrOr)rrrs rI __setitem__zBaseRequest.__setitem__%s  CrHc|j|=dSrOrrs rI __delitem__zBaseRequest.__delitem__(s K   rHc*t|jSrO)lenrnrs rI__len__zBaseRequest.__len__+s4;rHc*t|jSrO)iterrnrs rI__iter__zBaseRequest.__iter__.sDK   rHc|jdkS)z5A bool indicating if the request is handled with SSL.https)rwrs rIsecurezBaseRequest.secure3s{g%%rH.cg}|jjtjdD]}t |}d}d}i}|tj|d|cxkr|krOnPt ||}||r| d|}n| \}} } | ddkr#td| dd } | r| | z } | ||<|t |dz }d }nw||dkr1d}i}|tj||dz }n:||d krd}|dz }n&||d vr|dz }n| d|}d|cxkr|kIt#|S) aA tuple containing all parsed Forwarded header(s). Makes an effort to parse Forwarded headers as specified by RFC 7239: - It adds one (immutable) dictionary per Forwarded 'field-value', ie per proxy. The element corresponds to the data in the Forwarded field-value added by the first proxy encountered by the client. Each subsequent item corresponds to those added by later proxies. - It checks that every value has valid syntax in general as specified in section 4: either a 'token' or a 'quoted-string'. - It un-escapes found escape sequences. - It does NOT validate 'by' and 'for' contents as specified in section 6. - It does NOT validate 'host' contents (Host ABNF). - It does NOT validate 'proto' contents for valid URI scheme names. Returns a tuple containing one or more immutable dicts rGrFN,"z\1rT;z )rdr?getallr FORWARDEDrappendtypesrrbmatchfindgroupsrasublowergroupr) relems field_valuelengthposneed_separatorelemrr:rports rI forwardedzBaseRequest.forwarded8s(=077KK% 5% 5K%%FC"N#%D LL/55 6 6 6s####V#####*00cBB$% .)..sC88,1LLNN)eT 8s??$;$?$?uQrT{$S$SE*!TME-2TZZ\\*s5;;q>>222)- %,,%*NDLL!7!=!=>>>1HCC %,,%*N1HCC %..1HCC&**344C?s####V####@U||rHc|jrdSdS)aA string representing the scheme of the request. Hostname is resolved in this order: - overridden value by .clone(scheme=new_scheme) call. - type of connection to peer: HTTPS if socket is SSL, HTTP otherwise. 'http' or 'https'. rhttp)rsrs rIrwzBaseRequest.schemeus  % 76rHc|jS)zyRead only property for getting HTTP method. The value is upper-cased str like 'GET', 'POST', 'PUT' etc. )rirs rIrzBaseRequest.methods |rHc|jS)zxRead only property for getting HTTP version of request. Returns aiohttp.protocol.HttpVersion instance. )rjrs rIrzBaseRequest.versions }rHc|jjtj}||St jS)zHostname of the request. Hostname is resolved in this order: - overridden value by .clone(host=new_host) call. - HOST HTTP header - socket.getfqdn() value )rdr?getrHOSTsocketgetfqdn)rrxs rIrxzBaseRequest.hosts7}$((33  K~rHc|jdSt|jttfrt |jdSt |jS)zRemote IP of client initiated HTTP request. The IP is resolved in this order: - overridden value by .clone(remote=new_remote) call. - peername of opened socket Nr)rt isinstancelistrrCrs rIryzBaseRequest.remotesR  # +4 d.u > > 4t/233 34+,,,rHcvtj|j|j}||jS)N)rwrx)rbuildrwrxjoinrk)rrs rIrzBaseRequest.urls.it{;;;xx &&&rHc|jjS)z_The URL including *PATH INFO* without the host or scheme. E.g., ``/app/blog`` )rkrrs rIrzBaseRequest.paths }!!rHc*t|jS)zXThe URL including PATH_INFO and the query string. E.g, /app/blog?id=10 )rCrkrs rIpath_qszBaseRequest.path_qss 4=!!!rHc|jjS)zThe URL including raw *PATH INFO* without the host or scheme. Warning, the path is unquoted and may contains non valid URL characters E.g., ``/my%2Fpath%7Cwith%21some%25strange%24characters`` )rdrrs rIraw_pathzBaseRequest.raw_paths}!!rHMultiDictProxy[str]c4t|jjS)z7A multidict with all the variables in the query string.)rrkqueryrs rIrzBaseRequest.querysdm1222rHc|jjS)z:The query string in the URL. E.g., id=10 )rk query_stringrs rIrzBaseRequest.query_strings }))rHr>c|jS)z4A case-insensitive multidict proxy with all headers.)rhrs rIr?zBaseRequest.headers }rHc|jjS)z$A sequence of pairs for all headers.)rdrrs rIrzBaseRequest.raw_headerss}((rHcdt|jtjS)zyThe value of If-Modified-Since HTTP header, or None. This header is represented as a `datetime` object. )rr?rrIF_MODIFIED_SINCErs rIif_modified_sincezBaseRequest.if_modified_sinces% t|//0FGGHHHrHcdt|jtjS)z{The value of If-Unmodified-Since HTTP header, or None. This header is represented as a `datetime` object. )rr?rrIF_UNMODIFIED_SINCErs rIif_unmodified_sincezBaseRequest.if_unmodified_sinces% t|//0HIIJJJrH etag_headerc#K|tkrtdtVdStj|D]B}|ddd\}}}|rdStt ||VCdS)z'Extract `ETag` objects from raw header.F)is_weakrrrN)rrrfinditerrbool)rrrrgarbages rI _etag_valueszBaseRequest._etag_valuess ( " "      -5kBB  */++aA*>*>'EE MM  rH header_valuecN|sdSt||SrO)rr)clsrs rI_if_match_or_none_implz"BaseRequest._if_match_or_none_impls- 4S%%l33444rHcp||jtjS)zxThe value of If-Match HTTP header, or None. This header is represented as a `tuple` of `ETag` objects. )r r?rrIF_MATCHrs rIif_matchzBaseRequest.if_matchs* **4<+;+;DM+J+JKKKrHcp||jtjS)z}The value of If-None-Match HTTP header, or None. This header is represented as a `tuple` of `ETag` objects. )r r?rr IF_NONE_MATCHrs rI if_none_matchzBaseRequest.if_none_matchs+ **4<+;+;D>???rHc|jj S)zIs keepalive enabled by client?)rd should_closers rI keep_alivezBaseRequest.keep_alive/s=---rHc|jtjd}t |}t d|DS)zMReturn request cookies. A read-only dictionary-like object. rMc$i|] \}}||jSrG)r)rQrvals rI z'BaseRequest.cookies..<s O O OHCci O O OrH)r?rrCOOKIErrr)rrawparseds rIcookieszBaseRequest.cookies4sO lt{B//$0$5$5 O O  O O OPPPrHc|jtj}d\}}| d}t j||d\}}n#t $rtdwxYw|rt|nd}|rt|nd}||| }d}|||dz }||krtd||cxurnntdt||dS) zMThe content of Range HTTP header. Return a slice instance. )NNNz^bytes=(\d*)-(\d*)$rzrange not in acceptable formatrzstart cannot be after endz"No start or end of range specified) rhrrRANGErefindall IndexError ValueErrorintslice)rrngstartendpatterns rI http_rangezBaseRequest.http_range>s&m ++ s ? C0Z55a8 ss C C C !ABBB C"+#c(((tC"'1CJJJTE} S_qC<<$%@AAA######## !EFFFUC###s AA(c|jS)zReturn raw payload stream.)rgrs rIcontentzBaseRequest.contentbrrHcntjdtd|j S)@Return True if request's HTTP BODY can be read, False otherwise.z$Deprecated, use .can_read_body #2005rr)rrrrgat_eofrs rIhas_bodyzBaseRequest.has_bodygs?  24FST    =''))))rHc6|j S)r.)rgr/rs rI can_read_bodyzBaseRequest.can_read_bodyos=''))))rHc8t|jtuS)z6Return True if request has HTTP BODY, False otherwise.)typergr&rs rI body_existszBaseRequest.body_existstsDM""*;;;rHcK|js:|jd{V|j8dSdS)zKRelease request. Eat unread part of HTTP BODY if present. N)rgr/readanyrs rIreleasezBaseRequest.releaseysp -&&(( *-'')) ) ) ) ) ) ) )-&&(( * * * * *rHcFK|jt} |jd{V}|||jr0t |}||jkrt|j||snot||_|jS)z_Read request body if present. Returns bytes object with full request content. NTmax_size actual_size) rm bytearrayrgr7extendrqrr.bytes)rbodychunk body_sizes rIreadzBaseRequest.reads   #;;D "m3355555555 E"""( #D I D$9997%)%:   %T{{D rHcvK|d{V}|jpd}||S)z1Return BODY as text using encoding from .charset.Nr)rCcharsetdecode)r bytes_bodyencodings rItextzBaseRequest.textsE99;;&&&&&& <*7  ***rH)loadsrJcPK|d{V}||S)zReturn BODY as JSON.N)rI)rrJr@s rIjsonzBaseRequest.jsons3YY[[      uT{{rHc:Kt|j|jS)z3Return async iterator to process BODY as multipart.)r%rhrgrs rI multipartzBaseRequest.multipartst}dm<<rrstrip)rr=outrNr;fieldrRfield_cttmprAffrrEdatas rIpostzBaseRequest.posts> : !:  ??e^442 :111 ~'&466&+&6&6E&6&B&B B B B B B B# G$)LL$7$7EIIe,,, CJJ.D 82222d22222 # &?-54'"'"'"!"+0*:*:*:*F*F$F$F$F$F$F$FE$ G #+'AH&!J!N !2C88$!M  B////',jjj&=&= = = = = = =#+x/B/B7/K/K+&+&7&7&7&H&HGGGEJ W0E0EFFFFGGEJ666E *x....$.....";)1t###/ %U(nn........q#t$$$$$$D ,1'  ,,W55*.!($C(( zrHr:rScZ|j}||S|j}||S|||S)z"Extra info from protocol transport)rerr)rr:rSr|rs rIrzBaseRequest.get_extra_infos=>  N&  N''g666rHc|jddd}d|jj|j|S)Nasciibackslashreplacez <{} {} {} >)rrrFformatrr@ri)rascii_encodable_paths rI__repr__zBaseRequest.__repr__sW#y//9KLLSS   ## N #T\3G   rHothercBt|t|kSrO)id)rrps rI__eq__zBaseRequest.__eq__s$xx2e99$$rHcdS)NTrGrs rI__bool__zBaseRequest.__bool__strHresponsec KdSrOrG)rrvs rI _prepare_hookzBaseRequest._prepare_hooks rHexcc:|j|dSrO)rg set_exception)rrys rI_cancelzBaseRequest._cancel"s ##C(((((rH)rr)rr4)rr)rr>)rN)rrOrO)gr@rArBr METH_PATCH METH_POSTMETH_PUT METH_TRACE METH_DELETErUrATTRS frozensetr"r'rasyncioAbstractEventLoopr$r rrCrrr!r-r+rpropertyr~r| Transportrrr rzrrrrrrrrrrrr r rrwrr#rrxryrrrrrrr?r,rdatetimerr staticmethodrr classmethodr r rrrrr%r*r,r0r2r5r8r?rCrIr(r*rLr%rNrhrroobjectrsrur/rx BaseExceptionr|rGrHrIr0r0ns       L     "" E> '*. $" $7+7+7+"7+7+# 7+ - 7+ # 7+'7+7+S#X'7+ 7+sm7+ 7+ 7+7+7+7+x$ (5 5 5 5  5  5  5 5 5  5 5 5 5 nXX(8G$56(((X( $,$$$X$ * U  U g/ U s s    !s!3!4!!!!st     !(3-!!!!  &&&& U& :5c!2C!78::: U:x      U   U  U   c     U    - - - - U - 'S''' U' "c""" U" """" U" "#""" U" 333 U3 *c*** U*  U )Z))) U) I8H,=#>III UI KXh.?%@KKK UK#(4.\(5#C=5 %c " #555[5 L(5s#34LLL UL QxdCi(89QQQ UQ @(8#45@@@ U@ .D... U. Qc*QQQ UQ !$E!$!$!$ U!$F  U*$***X**t***X* > > > > > > > > > ? ?rH)rr5)rr3)r@rArBr0rrrrrrCrr!r-r+rr rrrrrr/rx __classcell__)rs@rIr2r2&s   =/ : : :E?c?S?T?????? + +C +c +d + + + + + +$ (      ,  U &&&X& &]&&&X&?N?t????????rHr2)arrrEr rstringrXrr http.cookiesrrtypingrrrrr r r r r rr urllib.parserattr multidictrrrryarlrrMrabcrhelpersrrrrrrrr r! http_parserr" http_writerr#rNr$r%streamsr&r'typedefsr(r)r*r+r,r-web_exceptionsr. web_responser/__all__web_appr3 web_protocolr4web_urldispatcherr5sr1digits ascii_lettersrJrCrDrLrmrrrangerYrZr]r`compilerarbr0r2rGrHrIrs6  %%%%%%""""""                          #""""" NNNNNNNNNNNN%%%%%%                      +*****$$$$$$6666666644444444655555(((((( 17$$$$$$,,,,,,666666T$d333%%%%%%%43%]V%99> ? 0:rz//J/Jws|,JJJ+5"*_*E*EE'#,'EEEu )u )u )u )u ).c*Lu )u )u )pL?L?L?L?L?kL?L?L?L?L?rH