xL is& ddlmZddlZddlZddlZddlZddlZddlmZddl m Z m Z m Z m Z mZmZddlmZmZmZddd Zej+ed Dcic] }|d k7s e|d j1|"c}ej2d j5ej7Dcgc]}ej8|c}ZddZddZ ddZ GddZ!GddZ"Gddee Z#ycc}wcc}w)) annotationsN)Path)AsyncByteStream FileContent FileTypes RequestData RequestFilesSyncByteStream)peek_filelike_lengthprimitive_value_to_strto_bytesz%22z\\)"\ z%{:02X}|cbdd}tj||}|d|djS)z; Encode a name/value pair within a multipart form. c2t|jdS)Nr)!_HTML5_FORM_ENCODING_REPLACEMENTSgroup)matchs V/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/httpx/_multipart.pyreplacerz$_format_form_param..replacer&s0Q@@z="r)rztyping.Match[str]returnstr)_HTML5_FORM_ENCODING_REsubencode)namevaluers r_format_form_paramr#!s8 A $ ' '% 8EV2eWA  % % ''rc@|rtj|dxsdSy)z Guesses the mimetype based on a filename. Defaults to `application/octet-stream`. Returns `None` if `filename` is `None` or empty. rzapplication/octet-streamN) mimetypes guess_type)filenames r_guess_content_typer(-s& ##H-a0N4NN rc|r|jdsyd|vrp|jdD]\}|jjjds1|jt ddjdcSy)Nsmultipart/form-data;s boundary=") startswithsplitstriplowerlen) content_typesections r(get_multipart_boundary_from_content_typer38s |667MN |#))$/ HG}}$$&11,?}}s<'8':;AA$GG H rc8eZdZdZddZd dZd dZd dZd dZy) DataFieldzB A single form field item, within a multipart form field. c.t|tstdt|d||:t|ttt t fstdt|d|||_t|tr||_ yt||_ y)Nz)Invalid type for name. Expected str, got : z5Invalid type for value. Expected primitive type, got ) isinstancer TypeErrortypebytesintfloatr!r r")selfr!r"s r__init__zDataField.__init__Ks$$;DJr!s rrender_headerszDataField.render_headersZsBtZ(%fdii8DHH4dKHDM}}rcft|dst|j|_|jS)N_data)rDrr"rHr>s r render_datazDataField.render_datacs&tW%!$**-DJzzrcp|j}|j}t|t|zSN)rFrJr0)r>headersdatas r get_lengthzDataField.get_lengthis1%%'!7|c$i''rc#TK|j|jywrLrFrJrIs rrenderzDataField.renderns$!!##  s&(N)r!rr"z str | bytes | int | float | NonerNonerr;)rr<rztyping.Iterator[bytes]) __name__ __module__ __qualname____doc__r?rFrJrOrRrrr5r5Fs    ( !rr5c<eZdZdZdZd dZd dZd dZd dZd dZ y) FileFieldzB A single file field item, within a multipart form field. ic ||_i}d}t|tr1t|dk(r|\}}nHt|dk(r|\}}}n3|\}}}}n+t t t |ddj}|}| t|}td|D}||s||d<t|tjr tdt|tjr td||_ ||_||_y) Nr!uploadc3@K|]}d|jvyw)z content-typeN)r/).0keys r z%FileField.__init__..s%Wn &C%W Content-Typez?Multipart file uploads require 'io.BytesIO', not 'io.StringIO'.zDMultipart file uploads must be opened in binary mode, not text mode.)r!r8tupler0rrgetattrr(anyioStringIOr9 TextIOBaser'filerM)r>r!r"rMr1r'fileobjhas_content_type_headers rr?zFileField.__init__zs #%#' eU #5zQ%*!'Uq27/'<rM file_lengths rrOzFileField.get_lengthsg%%' dii#u .w<#htyy&9":: :*4995   7|k))rct|dsdtd|jg}|jr)td|j}|j d|g|j j D]<\}}d|dj|j}}|j ||g>|jdd j||_ |jS) NrArBr!r's; z r7rCr) rDr#r!r'extendrMitemsr appendrErA)r>partsr' header_name header_valuercvals rrFzFileField.render_headersstZ(3"64995E}}-j$--H eX./-1\\-?-?-A )) \!+b188:Lchunks rrJzFileField.render_datas dii#u .499% %  499f %  q! t/5/ !IINN4??3E **  s1AC$C -AC$ C$ C!C$ C!!C$c#dK|j|jEd{y7wrLrQrIs rrRzFileField.renders'!!####%%%s &0.0N)r!rr"rrrSrz int | NonerTrU) rVrWrXrYr~r?rOrFrJrRrZrrr\r\ss(J/b *"4 &rr\cfeZdZdZ d d dZ d dZd dZddZddZd dZ dd Z y)MultipartStreamzC Request content as streaming multipart encoded form data. Nc|2tjdjjd}||_d|j dz|_t|j|||_ y)Nasciiz multipart/form-data; boundary=%s) osurandomhexr boundarydecoder1list _iter_fieldsfields)r>rNfilesrs rr?zMultipartStream.__init__si  zz"~))+227;H  > B  4,,T59: rc#>K|jD]A\}}t|ttfr|D]}t ||3t ||Ct|t j r|jn|}|D]\}}t||yw)N)r!r")rtr8rgrr5typingMappingr\)r>rNrr!r"item file_itemss rrzMultipartStream._iter_fieldss ::< 8KD%%%/!;D#T::; T77  8'1&GU[[]U % 4KD%U3 3 4sBBc#K|jD]/}d|jz|jEd{d1d|jzy7w)Ns--%s s s--%s-- )rrrR)r>fields r iter_chunkszMultipartStream.iter_chunkssR[[ E - -||~ % %M dmm++ &s4AAAct|j}d}|jD]+}|j}|y|d|zdzz }||z }|dz }-|d|zdzz }|S)z Return the length of the multipart encoded content, or `None` if any of the files have a length that cannot be determined upfront. rNr^)r0rrrO)r>boundary_lengthlengthr field_lengths rget_content_lengthz"MultipartStream.get_content_length s dmm,[[ E ++-L# a/)A- -F l "F aKF  !o%)) rcd|j}|j}|d|dSt||dS)Nchunked)zTransfer-Encodingrf)zContent-Lengthrf)rr1r)r>content_lengthr1s r get_headerszMultipartStream.get_headerss<002((  !)2LQ Q"%n"5|TTrc#>K|jD]}|ywrLrrs r__iter__zMultipartStream.__iter__&s#%%' EK sc@K|jD]}| ywrLrrs r __aiter__zMultipartStream.__aiter__*s#%%' EK rerL)rNr rr r bytes | NonerrS)rNr rr rz&typing.Iterator[FileField | DataField]rUr)rzdict[str, str])rztyping.AsyncIterator[bytes]) rVrWrXrYr?rrrrrrrZrrrrsn"& ; ; ; ;  ; 4 4(4 4 / 4,,Urr)r!rr"rrr;)r' str | Nonerr)r1rrr)$ __future__rrjr%rrerpathlibr_typesrrrr r r _utilsr r rrupdaterangechrformatcompilerEkeysescaperr#r(r3r5r\r)cs0rrs"   +0v$>!!((*//GQQ$YSVY  a  G%"**II%F%K%K%MNyryy|NO (   *!*!Zj&j&ZLnoLMHOs C? C?*D