ϪfdZddlmZddlmZmZddlmZddlm Z ddl m Z GddZ Gd d Z Gd d ZGd dZGddeZeej"GddeZGdde j&ZdZy)z Utility classes for spread. ) implementer)defer interfaces)basic)Failure)pbceZdZdZdZy) LocalMethodc ||_||_yN)localname)selfr rs 5/usr/lib/python3/dist-packages/twisted/spread/util.py__init__zLocalMethod.__init__s  cV|jj|jg|i|Sr )r callRemoter)rargskws r__call__zLocalMethod.__call__s'$tzz$$TYY<<<t }|j r|jtj|cYSwxYw)ax Call a specially-designated local method. self.callRemote('x') will first try to invoke a method named sync_x and return its result (which should probably be a Deferred). Second, it will look for a method called async_x, which will be called and then have its result (or Failure) automatically wrapped in a Deferred. sync_async_) hasattrgetattrrsucceed BaseExceptionrreportAllTracebacksprintTracebackfail)rrrrmethodfs rrzLocalAsRemote.callRemote#s 44 (07440$="= = !T8d?3F==!4!45 5 ! A''  "::a=  !s)AABBct||Sr )r )rrs r remoteMethodzLocalAsRemote.remoteMethod8s4&&rN)rrr__doc__r&rr,rrrrrs!*'rrc$eZdZdZddZdZdZy)LocalAsyncForwarderzD A class useful for forwarding a locally-defined interface. cT|j|sJ||_||_||_yr ) providedBy forwardedinterfaceClassfailWhenNotImplemented)rr2r3r4s rrzLocalAsyncForwarder.__init__As-((333",&<#rc:t|j||i|Sr )r#r2)rr)rrs r _callMethodzLocalAsyncForwarder._callMethodGs.wt~~v.;;;rc|jj|r&tj|j|g|i|}|S|j r&tj ttd|zStjdS)NzNo Such Method in Interface: %s) r3queryDescriptionForr maybeDeferredr6r4r(rNotImplementedErrorr$)rr)rrresults rrzLocalAsyncForwarder.callRemoteJsz    2 26 :(()9)96ODOBOFM  ( (::+-NQW-WX ==& &rN)r)rrrr-rr6rrrrr/r/<s= < 'rr/c0eZdZdZddZdZdZdZdZy) Pagerz5 I am an object which pages out information. Nct|r||_||_||_nd|_d|_||_|j j|y)z Create a pager with a Reference to a remote collector and an optional callable to invoke upon completion. Nr)callablecallback callbackArgscallbackKeyword _stillPaging collectorbrokerregisterPageProducer)rrDr@rrs rrzPager.__init__[sM H $DM $D #%D  DM"--d3rc|jsO|jjdd|j&|j|ji|j |jS)5 (internal) Method called by Broker. endedPagingFpbanswer)rCrDrr@rArBrs r stillPagingzPager.stillPagingjsY  NN % %me % D}}( t00ID4H4HI   rc\|jjd|jdy)rHgotPageFrJN)rDrnextPagerLs r sendNextPagezPager.sendNextPagets# !!)T]]_u!Mrct)zO Override this to return an object to be sent to my collector. )r:rLs rrPzPager.nextPagezs "##rcd|_y)z4 Call this when you're done paging. rN)rCrLs r stopPagingzPager.stopPagings rr ) rrrr-rrMrQrPrTrrrr=r=Vs! 4!N $ rr=ceZdZdZddZdZy) StringPagerz: A simple pager that splits a string into chunks. Ncd||_d|_||_tj|||g|i|y)Nr)stringpointer chunkSizer=r)rrDstrZr@rrs rrzStringPager.__init__s1  " tY>4>2>rc|j|j|j|jz}|xj|jz c_|jt|jk\r|j |Sr )rXrYrZlenrTrvals rrPzStringPager.nextPagesYkk$,,)FG & <<3t{{+ + OO  r)i N)rrrr-rrPrrrrVrVs? rrVc6eZdZdZd dZdZdZdZdZdZ y) FilePagerzC Reads a file in chunks and sends the chunks as they come. Ncjg|_tj|||g|i||j|yr )chunksr=rstartProducing)rrDfdr@rrs rrzFilePager.__init__s1  tY>4>2> Brctjj|_jj fdy)Nc$jSr )rT)xrs rz*FilePager.startProducing..s(9r)r FileSenderbeginFileTransferdeferredaddBoth)rres` rrdzFilePager.startProducings3((*<qzz)JXTXUWX HrN)r-zope.interfacertwisted.internetrrtwisted.protocolsrtwisted.python.failurertwisted.spreadrr rr/r=rV IConsumerra Referenceabler|rrrrrs'.#*==''@''4..b%& Z ! !"!B!B#!BJ"B,,"$ r