B `4@sddlZddlZddlZddlZddlZddlZddlZddlmZm Z ddl m Z ddl m Z mZmZmZmZmZmZmZmZmZmZmZddlmZddlmZddlmZdd lmZm Z m!Z!m"Z"m#Z#dd l$m%Z%dd l&m'Z'm(Z(d Z)d Z*erddl m+Z+Gddde,Z-Gddde.ej/Z0eeeddddZ1e0j2dedee0ddddZ3GdddZ4GdddZ5GdddeZ6Gd d!d!e6Z7Gd"d#d#e7Z8Gd$d%d%e8Z9Gd&d'd'e6Z:Gd(d)d)e:Z;Gd*d+d+e:Zer.dd0l m?Z?m@Z@e@eAZBe?eAZCndd0lDm?Z?m@Z@e@ZBe?ZCGd1d2d2e6ZEGd3d4d4eEZFe5ZGeGHe7eAeIeJfeGHe8e.eGHe9ejKeGHe;ejLeGHesr+c@seZdZdZdZdZdS)Ordernormal try_firsttry_lastN)r,r-r.r2r3r4r/r/r/r0r1Bsr1r )dataargskwargsreturncOstj|f||S)N)rget)r5r6r7r/r/r0rHsr)order)factorytyper:r8cCstj|||ddS)N)r:)rregister)r;r<r:r/r/r0register_payloadLsr>c@s>eZdZejdeeddddZededddd ZdS) r)r:N)r<r:r8cCs||_||_dS)N)r<r:)selfr<r:r/r/r0__init__Sszpayload_type.__init__r )r;r8cCst||j|jd|S)N)r:)r>r<r:)r?r;r/r/r0__call__Wszpayload_type.__call__) r,r-r.r1r2rr@rrAr/r/r/r0rRsrc@sZeZdZdZddddZedeeeeddd d Zej d e deedd d dZ dS)PayloadRegistryzZPayload registry. note: we need zope.interface for more efficient adapter search N)r8cCsg|_g|_g|_dS)N)_first_normal_last)r?r/r/r0r@bszPayloadRegistry.__init__)_CHAINr )r5r6rFr7r8cOsRt|tr|Sx8||j|j|jD]"\}}t||r"||f||Sq"WtdS)N) isinstancer rCrDrEr+)r?r5rFr6r7r;r<r/r/r0r9gs   zPayloadRegistry.get)r:)r;r<r:r8cCsf|tjkr|j||fnF|tjkr8|j||fn*|tjkrT|j||fntd|dS)NzUnsupported order ) r1r3rCappendr2rDr4rE ValueError)r?r;r<r:r/r/r0r=rs   zPayloadRegistry.register) r,r-r.__doc__r@rrr9r1r2rr=r/r/r/r0rB\s  rBc @seZdZdZdZdeddfeeee e e e fe e e e ffee ee ee eddddZeeedddZeee dd d Zee dd d Zeedd dZeee dddZee dddZde eeddddZeeddddZdS)r zapplication/octet-streamN)valueheaders content_typefilenameencodingr7r8cKs||_||_t|_||_|tk r8|dk r8||jtj<nD|jdk rnt |jd}|dkr`|j }||jtj<n|j |jtj<|j |pidS)Nr) _encoding _filenamer_headers_valuerr CONTENT_TYPE mimetypes guess_type_default_content_typeupdate)r?rKrLrMrNrOr7r/r/r0r@s  zPayload.__init__)r8cCs|jS)zSize of the payload.)_size)r?r/r/r0sizesz Payload.sizecCs|jS)zFilename of the payload.)rQ)r?r/r/r0rNszPayload.filenamecCs|jS)zCustom item headers)rR)r?r/r/r0rLszPayload.headerscCs$ddd|jDddS)NcSs g|]\}}|d|dqS)z: z r/).0kvr/r/r0 sz+Payload._binary_headers..zutf-8s )joinrLitemsencode)r?r/r/r0_binary_headersszPayload._binary_headerscCs|jS)zPayload encoding)rP)r?r/r/r0rOszPayload.encodingcCs |jtjS)z Content type)rRrrT)r?r/r/r0rMszPayload.content_typeT)disptype quote_fieldsparamsr8cKs t|fd|i||jtj<dS)z$Sets ``Content-Disposition`` header.reN)rrRrCONTENT_DISPOSITION)r?rdrerfr/r/r0set_content_dispositionszPayload.set_content_disposition)writerr8csdS)zLWrite payload. writer is an AbstractStreamWriter instance: Nr/)r?rir/r/r0writesz Payload.write)T)r,r-r.rWrYrrr rrr strr rr@propertyintrZrNrLbytesrcrOrMboolrhrrrjr/r/r/r0r s0<cs8eZdZeeeddfdd ZeddddZZS)r!N)rKr6r7r8cst|tttfs"tdt|d|kr2d|d<tj|f||t|trZ|j |_ n t ||_ |j t krt r|d|i}ni}tjdtf|dS)Nz)value argument must be byte-ish, not {!r}rMzapplication/octet-streamsourcez}Sending a large body directly with raw bytes might lock the event loop. You should probably pass an io.BytesIO object instead)rGrn bytearray memoryview TypeErrorformatr<superr@nbytesrYlenTOO_LARGE_BYTES_BODYrwarningswarnResourceWarning)r?rKr6r7) __class__r/r0r@s"     zBytesPayload.__init__)rir8cs||jIdHdS)N)rjrS)r?rir/r/r0rjszBytesPayload.write) r,r-r.rrr@rrj __classcell__r/r/)r|r0r!sr!cs<eZdZdddeeeeeeeddfddZZS)r"N)rOrM)rKr6rOrMr7r8csn|dkr2|dkrd}d}qFt|}|jdd}n|dkrBd|}|}tj||f|||d|dS)Nzutf-8ztext/plain; charset=utf-8charsetztext/plain; charset=%s)rOrM)r parametersr9rur@rb)r?rKrOrMr6r7Z real_encodingmimetype)r|r/r0r@s   zStringPayload.__init__) r,r-r.r rr rkr@r}r/r/)r|r0r"sr"cs,eZdZeeeeddfdd ZZS)r'N)rKr6r7r8cstj|f||dS)N)rur@read)r?rKr6r7)r|r/r0r@szStringIOPayload.__init__)r,r-r.rrkrr@r}r/r/)r|r0r'sr'cs@eZdZd eeeeeddfdd ZeddddZZ S) r# attachmentN)rK dispositionr6r7r8csZd|krt||d<tj|f|||jdk rV|dk rVtj|jkrV|j||jddS)NrN)rN)rrur@rQrrgrLrh)r?rKrr6r7)r|r/r0r@s   zIOBasePayload.__init__)rir8c stt}zN|d|jjdIdH}x0|rR||IdH|d|jjdIdH}q$WWd|d|jjIdHXdS)Ni)asyncioget_event_looprun_in_executorrSrrjclose)r?riloopchunkr/r/r0rj#s zIOBasePayload.write)r) r,r-r.rrrkr@rrjr}r/r/)r|r0r#s r#csbeZdZdddeeeeeeeddfddZeee dddZ e dd d d Z Z S) r&N)rOrM)rKr6rOrMr7r8csd|dkr2|dkrd}d}qBt|}|jdd}n|dkrBd|}tj|f|||d|dS)Nzutf-8ztext/plain; charset=utf-8r~ztext/plain; charset=%s)rMrO)rrr9rur@)r?rKrOrMr6r7r)r|r/r0r@/s  zTextIOPayload.__init__)r8cCs6yt|jj|jStk r0dSXdS)N)osfstatrSfilenost_sizetellOSError)r?r/r/r0rZKszTextIOPayload.size)rir8c s|t}zV|d|jjdIdH}x8|rZ|||jIdH|d|jjdIdH}q$WWd|d|jjIdHXdS)Ni) rrrrSrrjrbrPr)r?rirrr/r/r0rjRs zTextIOPayload.write)r,r-r.r rr rkr@rlrmrZrrjr}r/r/)r|r0r&.sr&c@seZdZeedddZdS)r$)r8cCs.|j}|jdtj}|j|||S)Nr)rSrseekrSEEK_END)r?positionendr/r/r0rZ^s  zBytesIOPayload.sizeN)r,r-r.rlrmrZr/r/r/r0r$]sr$c@s"eZdZeeedddZdS)r%)r8cCs6yt|jj|jStk r0dSXdS)N)rrrSrrrr)r?r/r/r0rZgszBufferedReaderPayload.sizeN)r,r-r.rlr rmrZr/r/r/r0r%fsr%c s8eZdZddejfeeeeeeddfdd ZZ S)r(zutf-8zapplication/jsonN)rKrOrMdumpsr6r7r8cs,tj|||f|||d|dS)N)rMrO)rur@rb)r?rKrOrMrr6r7)r|r/r0r@rs  zJsonPayload.__init__) r,r-r.jsonrrrkrr@r}r/r/)r|r0r(qs r() AsyncIterable AsyncIteratorcs<eZdZdZeeeddfdd ZeddddZZ S)r)N)rKr6r7r8csNt|tstdt|d|kr,d|d<tj|f||||_dS)NzOvalue argument must support collections.abc.AsyncIterablebe interface, got {!r}rMzapplication/octet-stream) rGrrsrtr<rur@ __aiter___iter)r?rKr6r7)r|r/r0r@s  zAsyncIterablePayload.__init__)rir8csP|jrLy*x$|jIdH}||IdHq WWntk rJd|_YnXdS)N)r __anext__rjStopAsyncIteration)r?rirr/r/r0rjszAsyncIterablePayload.write) r,r-r.r_AsyncIterablerr@rrjr}r/r/)r|r0r)sr)cs(eZdZeeeddfdd ZZS)StreamReaderPayloadN)rKr6r7r8cstj|f||dS)N)rur@Ziter_any)r?rKr6r7)r|r/r0r@szStreamReaderPayload.__init__)r,r-r.rrr@r}r/r/)r|r0rsr)RrenumiorrUrryabcrr itertoolsrtypingrrrrr r r r r rrrZ multidictrr[rrZhelpersrrrrrZstreamsrZtypedefsrr__all__rxr* Exceptionr+rkEnumr1rr2r>rrBr r!r"r'r#r&r$r%r(rrrnZ_AsyncIteratorrcollections.abcr)rrr=rqrrStringIO TextIOBaseBytesIOBufferedReaderBufferedRandomIOBaser4r/r/r/r0sl 8      #Q"/