U '7`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||SN)rget)r5r6r7r/r/r0rHsrorderfactorytyper<r8cCstj|||ddSNr;)rregister)r>r?r<r/r/r0register_payloadLsrBc@s>eZdZejdeeddddZededddd ZdS) rr;N)r?r<r8cCs||_||_dSr9)r?r<)selfr?r<r/r/r0__init__Sszpayload_type.__init__r )r>r8cCst||j|jd|Sr@)rBr?r<)rCr>r/r/r0__call__Wszpayload_type.__call__) r,r-r.r1r2rrDrrEr/r/r/r0rRsrc@sZeZdZdZddddZedeeeeddd d Zej d e deedd d dZ dS)PayloadRegistryzZPayload registry. note: we need zope.interface for more efficient adapter search Nr8cCsg|_g|_g|_dSr9)_first_normal_lastrCr/r/r0rDbszPayloadRegistry.__init__)_CHAINr )r5r6rLr7r8cOsRt|tr|S||j|j|jD]&\}}t||r ||f||Sq tdSr9) isinstancer rHrIrJr+)rCr5rLr6r7r>r?r/r/r0r:gs   zPayloadRegistry.getr;r=cCsf|tjkr|j||fnF|tjkr8|j||fn*|tjkrT|j||fntd|dS)NzUnsupported order ) r1r3rHappendr2rIr4rJ ValueError)rCr>r?r<r/r/r0rArs   zPayloadRegistry.register) r,r-r.__doc__rDrrr:r1r2rrAr/r/r/r0rF\s" rFc @seZdZdZdZdeddfeeee e e e fe e e e ffee ee ee eddddZeeedddZeee dd d Zee dd d Zeedd dZeee dddZee dddZde eeddddZeeddddZdS)r application/octet-streamN)valueheaders content_typefilenameencodingr7r8cKs||_||_t|_||_|tk r8|dk r8||jtj<nD|jdk rnt |jd}|dkr`|j }||jtj<n|j |jtj<|j |pidSNr) _encoding _filenamer_headers_valuerr CONTENT_TYPE mimetypesZ guess_type_default_content_typeupdate)rCrRrSrTrUrVr7r/r/r0rDs  zPayload.__init__rGcCs|jS)zSize of the payload.)_sizerKr/r/r0sizesz Payload.sizecCs|jS)zFilename of the payload.)rYrKr/r/r0rUszPayload.filenamecCs|jS)zCustom item headers)rZrKr/r/r0rSszPayload.headerscCs$ddd|jDddS)NcSs g|]\}}|d|dqS)z: z r/).0kvr/r/r0 sz+Payload._binary_headers..utf-8s )joinrSitemsencoderKr/r/r0_binary_headerss zPayload._binary_headerscCs|jS)zPayload encoding)rXrKr/r/r0rVszPayload.encodingcCs |jtjS)z Content type)rZrr\rKr/r/r0rTszPayload.content_typeT)disptype quote_fieldsparamsr8cKs t|fd|i||jtj<dS)z$Sets ``Content-Disposition`` header.rmN)rrZrCONTENT_DISPOSITION)rCrlrmrnr/r/r0set_content_dispositionszPayload.set_content_dispositionwriterr8csdS)zLWrite payload. writer is an AbstractStreamWriter instance: Nr/rCrrr/r/r0writesz Payload.write)T)r,r-r.r^r`rrr rrr strr rrDpropertyintrarUrSbytesrkrVrTboolrprrrtr/r/r/r0r sL   cs8eZdZeeeddfdd ZeddddZZS)r!NrRr6r7r8cst|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}rTrQsourcez}Sending a large body directly with raw bytes might lock the event loop. You should probably pass an io.BytesIO object instead)rMrx bytearray memoryview TypeErrorformatr?superrDnbytesr`lenTOO_LARGE_BYTES_BODYrwarningswarnResourceWarningrCrRr6r7 __class__r/r0rDs(      zBytesPayload.__init__rqcs||jIdHdSr9)rtr[rsr/r/r0rtszBytesPayload.write) r,r-r.rrrDrrt __classcell__r/r/rr0r!sr!cs<eZdZdddeeeeeeeddfddZZS)r"NrVrTrRr6rVrTr7r8csn|dkr2|dkrd}d}qFt|}|jdd}n|dkrBd|}|}tj||f|||d|dS)Nrgtext/plain; charset=utf-8charsettext/plain; charset=%sr)r parametersr:rrDrj)rCrRrVrTr6r7Z real_encodingmimetyperr/r0rDs& zStringPayload.__init__) r,r-r.r rr rurDrr/r/rr0r"sr"cs,eZdZeeeeddfdd ZZS)r'Nrzcstj|f||dSr9)rrDreadrrr/r0rDszStringIOPayload.__init__)r,r-r.rrurrDrr/r/rr0r'sr'cs@eZdZd eeeeeddfdd ZeddddZZ S) r# attachmentN)rR dispositionr6r7r8csZd|krt||d<tj|f|||jdk rV|dk rVtj|jkrV|j||jddS)NrU)rU)rrrDrYrrorSrp)rCrRrr6r7rr/r0rDs   zIOBasePayload.__init__rqc spt}zJ|d|jjdIdH}|rP||IdH|d|jjdIdH}q"W5|d|jjIdHXdSNi)asyncioget_event_looprun_in_executorr[closerrtrCrrZloopchunkr/r/r0rt#szIOBasePayload.write)r) r,r-r.rrrurDrrtrr/r/rr0r#s r#csbeZdZdddeeeeeeeddfddZeee dddZ e dd d d Z Z S) r&Nrrcsd|dkr2|dkrd}d}qBt|}|jdd}n|dkrBd|}tj|f|||d|dS)NrgrrrrTrV)rrr:rrD)rCrRrVrTr6r7rrr/r0rD/s$ zTextIOPayload.__init__rGcCs:zt|jj|jWStk r4YdSXdSr9osfstatr[filenost_sizetellOSErrorrKr/r/r0raKszTextIOPayload.sizerqc sxt}zR|d|jjdIdH}|rX|||jIdH|d|jjdIdH}q"W5|d|jjIdHXdSr) rrrr[rrrtrjrXrr/r/r0rtRszTextIOPayload.write)r,r-r.r rr rurDrvrwrarrtrr/r/rr0r&.sr&c@seZdZeedddZdS)r$rGcCs.|j}|jdtj}|j|||SrW)r[rseekrSEEK_END)rCZpositionendr/r/r0ra^s  zBytesIOPayload.sizeN)r,r-r.rvrwrar/r/r/r0r$]sr$c@s"eZdZeeedddZdS)r%rGcCs:zt|jj|jWStk r4YdSXdSr9rrKr/r/r0ragszBufferedReaderPayload.sizeN)r,r-r.rvr rwrar/r/r/r0r%fsr%c s8eZdZddejfeeeeeeddfdd ZZ S)r(rgzapplication/jsonN)rRrVrTdumpsr6r7r8cs,tj|||f|||d|dS)Nr)rrDrj)rCrRrVrTrr6r7rr/r0rDrs  zJsonPayload.__init__) r,r-r.jsonrrrurrDrr/r/rr0r(qsr() AsyncIterable AsyncIteratorcs<eZdZdZeeeddfdd ZeddddZZ S)r)NrzcsNt|tstdt|d|kr,d|d<tj|f||||_dS)NzOvalue argument must support collections.abc.AsyncIterablebe interface, got {!r}rTrQ) rMrr~rr?rrD __aiter___iterrrr/r0rDs zAsyncIterablePayload.__init__rqcsL|jrHz&|jIdH}||IdHqWntk rFd|_YnXdSr9)r __anext__rtStopAsyncIteration)rCrrrr/r/r0rts zAsyncIterablePayload.write) r,r-r.r_AsyncIterablerrDrrtrr/r/rr0r)sr)cs(eZdZeeeddfdd ZZS)StreamReaderPayloadNrzcstj|f||dSr9)rrDZiter_anyrrr/r0rDszStreamReaderPayload.__init__)r,r-r.rrrDrr/r/rr0rsr)Rrenumiorr]rrabcrr itertoolsrtypingrrrrr r r r r rrrZ multidictrrbrrZhelpersrrrrrZstreamsrZtypedefsrr__all__rr* Exceptionr+ruEnumr1rr2rBrrFr r!r"r'r#r&r$r%r(rrrxZ_AsyncIteratorrZcollections.abcr)rrrAr|r}StringIO TextIOBaseBytesIOBufferedReaderBufferedRandomIOBaser4r/r/r/r0sv 8       #Q"/