ó
    Ö›‘hä  ã                   ó  • S r SSKJr  SSKJrJr  SSKJr  SSKJ	r	  SSK
Jr   " S S5      r " S	 S
5      r " S S5      r " S S5      r " S S\5      r\" \R"                  5       " S S\5      5       r " S S\R&                  5      rS rg)z
Utility classes for spread.
é    )Úimplementer)ÚdeferÚ
interfaces)Úbasic)ÚFailure)Úpbc                   ó    • \ rS rSrS rS rSrg)ÚLocalMethodé   c                 ó   • Xl         X l        g ©N©ÚlocalÚname)Úselfr   r   s      ÚWC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/spread/util.pyÚ__init__ÚLocalMethod.__init__   s   € ØŒ
Ø�	ó    c                 óV   • U R                   R                  " U R                  /UQ70 UD6$ r   )r   Ú
callRemoter   )r   ÚargsÚkws      r   Ú__call__ÚLocalMethod.__call__   s%   € Ø�z‰z×$Ò$ T§Y¡YÐ<°Ò<¸Ñ<Ð<r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   Ú__static_attributes__© r   r   r
   r
      s   † òõ=r   r
   c                   ó(   • \ rS rSrSrSrS rS rSrg)ÚLocalAsRemoteé   zF
A class useful for emulating the effects of remote behavior locally.
é   c                 óN  • [        U SU-   5      (       a  [        U SU-   5      " U0 UD6$  [        U SU-   5      n[        R                  " U" U0 UD65      $ ! [         aD    [        5       nU R                  (       a  UR                  5         [        R                  " U5      s $ f = f)a@  
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_)	ÚhasattrÚgetattrr   ÚsucceedÚBaseExceptionr   ÚreportAllTracebacksÚprintTracebackÚfail)r   r   r   r   ÚmethodÚfs         r   r   ÚLocalAsRemote.callRemote#   s—   € ô �4˜ 4™×(Ñ(Ü˜4 ¨4¡Ô0°$Ð=¸"Ñ=Ð=ð	!Ü˜T 8¨d¡?Ó3ˆFÜ—=’=¡¨Ð!4°Ñ!4Ó5Ð5øÜó 	!Ü“	ˆAØ×'×'Ø× Ñ Ô"Ü—:’:˜a“=Ò ð		!ús   «*A ÁAB$Â#B$c                 ó   • [        X5      $ r   )r
   )r   r   s     r   ÚremoteMethodÚLocalAsRemote.remoteMethod8   s   € Ü˜4Ó&Ð&r   r!   N)	r   r   r   r   Ú__doc__r-   r   r4   r    r!   r   r   r#   r#      s   † ñð Ðò!õ*'r   r#   c                   ó.   • \ rS rSrSrSS jrS rS rSrg)	ÚLocalAsyncForwarderé<   z<
A class useful for forwarding a locally-defined interface.
c                 óX   • UR                  U5      (       d   eXl        X l        X0l        g r   )Ú
providedByÚ	forwardedÚinterfaceClassÚfailWhenNotImplemented)r   r<   r=   r>   s       r   r   ÚLocalAsyncForwarder.__init__A   s*   € Ø×(Ñ(¨×3Ñ3Ð3Ð3Ø"ŒØ,ÔØ&<Õ#r   c                 ó:   • [        U R                  U5      " U0 UD6$ r   )r*   r<   )r   r0   r   r   s       r   Ú_callMethodÚLocalAsyncForwarder._callMethodG   s   € Ü�t—~‘~ vÔ.°Ð;¸Ñ;Ð;r   c                 ó,  • U R                   R                  U5      (       a'  [        R                  " U R                  U/UQ70 UD6nU$ U R
                  (       a'  [        R                  " [        [        SU-  5      5      $ [        R                  " S 5      $ )NzNo Such Method in Interface: %s)
r=   ÚqueryDescriptionForr   ÚmaybeDeferredrA   r>   r/   r   ÚNotImplementedErrorr+   )r   r0   r   r   Úresults        r   r   ÚLocalAsyncForwarder.callRemoteJ   s}   € Ø×Ñ×2Ñ2°6×:Ñ:Ü×(Ò(¨×)9Ñ)9¸6ÐOÀDÒOÈBÑOˆFØˆMØ×(×(Ü—:’:ÜÔ+Ð-NÐQWÑ-WÓXóð ô —=’= Ó&Ð&r   )r>   r<   r=   N)r   )	r   r   r   r   r6   r   rA   r   r    r!   r   r   r8   r8   <   s   † ñô=ò<õ	'r   r8   c                   ó:   • \ rS rSrSrS
S jrS rS rS rS r	S	r
g)ÚPageréV   z-
I am an object which pages out information.
Nc                 ó¨   • [        U5      (       a  X l        X0l        X@l        OSU l        SU l        Xl        UR                  R                  U 5        g)zk
Create a pager with a Reference to a remote collector and
an optional callable to invoke upon completion.
Nr%   )ÚcallableÚcallbackÚcallbackArgsÚcallbackKeywordÚ_stillPagingÚ	collectorÚbrokerÚregisterPageProducer)r   rR   rN   r   r   s        r   r   ÚPager.__init__[   sH   € ô
 �H×ÑØ$ŒMØ $ÔØ#%Õ à ˆDŒMØˆÔØ"ŒØ×Ñ×-Ñ-¨dÕ3r   c                 óÖ   • U R                   (       dM  U R                  R                  SSS9  U R                  b&  U R                  " U R                  0 U R
                  D6  U R                   $ )ú%
(internal) Method called by Broker.
ÚendedPagingF©Úpbanswer)rQ   rR   r   rN   rO   rP   ©r   s    r   ÚstillPagingÚPager.stillPagingj   sW   € ð × × Ø�N‰N×%Ñ% m¸eÐ%ÑDØ�}‰}Ñ(Ø—’˜t×0Ñ0ÐI°D×4HÑ4HÒIØ× Ñ Ð r   c                 óV   • U R                   R                  SU R                  5       SS9  g)rW   ÚgotPageFrY   N)rR   r   ÚnextPager[   s    r   ÚsendNextPageÚPager.sendNextPaget   s#   € ð 	�‰×!Ñ! )¨T¯]©]«_ÀuÐ!ÒMr   c                 ó   • [        5       e)z?
Override this to return an object to be sent to my collector.
)rF   r[   s    r   r`   ÚPager.nextPagez   s   € ô "Ó#Ð#r   c                 ó   • SU l         g)z$
Call this when you're done paging.
r   N)rQ   r[   s    r   Ú
stopPagingÚPager.stopPaging€   s   € ð ˆÕr   )rQ   rN   rO   rP   rR   r   )r   r   r   r   r6   r   r\   ra   r`   rf   r    r!   r   r   rJ   rJ   V   s!   † ñô4ò!òNò$õr   rJ   c                   ó(   • \ rS rSrSrSS jrS rSrg)ÚStringPageré‡   z2
A simple pager that splits a string into chunks.
Nc                 ó`   • X l         SU l        X0l        [        R                  " XU/UQ70 UD6  g )Nr   )ÚstringÚpointerÚ	chunkSizerJ   r   )r   rR   Ústrn   rN   r   r   s          r   r   ÚStringPager.__init__Œ   s+   € ØŒØˆŒØ"ŒÜ�Š�t¨Ð>°4Ò>¸2Ó>r   c                 ó
  • U R                   U R                  U R                  U R                  -    nU =R                  U R                  -  sl        U R                  [        U R                   5      :¼  a  U R	                  5         U$ r   )rl   rm   rn   Úlenrf   ©r   Úvals     r   r`   ÚStringPager.nextPage’   sY   € Ø�k‰k˜$Ÿ,™,¨¯©¸¿¹Ñ)FÐGˆØ�Š˜Ÿ™Ñ&�Ø�<‰<œ3˜tŸ{™{Ó+Ó+Ø�O‰OÔØˆ
r   )rn   rm   rl   )i    N)r   r   r   r   r6   r   r`   r    r!   r   r   ri   ri   ‡   s   † ñô?õr   ri   c                   ó@   • \ rS rSrSrSS jrS rS rS rS r	S	 r
S
rg)Ú	FilePageréš   z;
Reads a file in chunks and sends the chunks as they come.
Nc                 ój   • / U l         [        R                  " XU/UQ70 UD6  U R                  U5        g r   )ÚchunksrJ   r   ÚstartProducing)r   rR   ÚfdrN   r   r   s         r   r   ÚFilePager.__init__    s/   € ØˆŒÜ�Š�t¨Ð>°4Ò>¸2Ò>Ø×Ñ˜BÕr   c                 ó˜   ^ • [         R                  " 5       R                  UT 5      T l        T R                  R	                  U 4S j5        g )Nc                 ó$   >• TR                  5       $ r   )rf   )Úxr   s    €r   Ú<lambda>Ú*FilePager.startProducing.<locals>.<lambda>§   s   ø€ ¨¯©Ô(9r   )r   Ú
FileSenderÚbeginFileTransferÚdeferredÚaddBoth)r   r|   s   ` r   r{   ÚFilePager.startProducing¥   s3   ø€ Ü×(Ò(Ó*×<Ñ<¸RÀÓFˆŒØ�‰×ÑÔ9Õ:r   c                 óT   • Xl         U(       d  U R                   R                  5         g g r   )ÚproducerÚresumeProducing)r   r‰   Ú	streamings      r   ÚregisterProducerÚFilePager.registerProducer©   s   € Ø ŒÞØ�M‰M×)Ñ)Õ+ð r   c                 ó   • S U l         g r   )r‰   r[   s    r   ÚunregisterProducerÚFilePager.unregisterProducer®   s	   € Øˆ�r   c                 ó:   • U R                   R                  U5        g r   )rz   Úappend)r   Úchunks     r   ÚwriteÚFilePager.write±   s   € Ø�‰×Ñ˜5Õ!r   c                 óÈ   • U R                   (       d  gU R                   R                  S5      nU R                  R                  5         U R                  R                  SUSS9  g)z4
Get the first chunk read and send it to collector.
Nr   r_   FrY   )rz   Úpopr‰   rŠ   rR   r   rs   s     r   ra   ÚFilePager.sendNextPage´   sI   € ð �{�{ØØ�k‰k�o‰o˜aÓ ˆØ�‰×%Ñ%Ô'Ø�‰×!Ñ! )¨S¸5Ð!ÒAr   )rz   r…   r‰   r   )r   r   r   r   r6   r   r{   rŒ   r�   r”   ra   r    r!   r   r   rw   rw   š   s&   † ñô ò
;ò,ò
ò"õBr   rw   c                   ó*   • \ rS rSrSrS rS rS rSrg)ÚCallbackPageCollectoréÀ   z¥
I receive pages from the peer. You may instantiate a Pager with a
remote reference to me. I will call the callback with a list of pages
once they are all received.
c                 ó   • / U l         Xl        g r   )ÚpagesrN   )r   rN   s     r   r   ÚCallbackPageCollector.__init__Ç   s   € ØˆŒ
Ø �r   c                 ó:   • U R                   R                  U5        g r   )r�   r’   )r   Úpages     r   Úremote_gotPageÚ$CallbackPageCollector.remote_gotPageË   s   € Ø�
‰
×Ñ˜$Õr   c                 ó:   • U R                  U R                  5        g r   ©rN   r�   r[   s    r   Úremote_endedPagingÚ(CallbackPageCollector.remote_endedPagingÎ   s   € Ø�‰�d—j‘jÕ!r   r¤   N)	r   r   r   r   r6   r   r¡   r¥   r    r!   r   r   rš   rš   À   s   † ñò!ò õ"r   rš   c                 ó„   • [         R                  " 5       nU R                  " U[        UR                  5      /UQ70 UD6  U$ )zf
A utility method that will call a remote method which expects a
PageCollector as the first argument.
)r   ÚDeferredr   rš   rN   )ÚreferenceableÚ
methodNamer   r   Úds        r   ÚgetAllPagesr¬   Ò   s:   € ô
 	�ŠÓ€AØ×Ò˜ZÔ)>¸q¿z¹zÓ)JÐXÈTÒXÐUWÒXØ€Hr   N)r6   Úzope.interfacer   Útwisted.internetr   r   Útwisted.protocolsr   Útwisted.python.failurer   Útwisted.spreadr   r
   r#   r8   rJ   ri   Ú	IConsumerrw   ÚReferenceablerš   r¬   r!   r   r   Ú<module>r´      s’   ðñõ 'ç .Ý #Ý *Ý ÷=ñ =÷'ñ '÷@'ñ '÷4.ñ .ôb�%ô ñ& ˆZ×!Ñ!Ó"ô!B�ó !Bó #ð!BôJ"˜B×,Ñ,ô "ó$r   