§
    Ètºfä  ã                   óB  — d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZ  G d„ d¦  «        Z G d	„ d
¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ de¦  «        Z eej        ¦  «         G d„ de¦  «        ¦   «         Z G d„ dej        ¦  «        Zd„ ZdS )z
Utility classes for spread.
é    )Úimplementer)ÚdeferÚ
interfaces)Úbasic)ÚFailure)Úpbc                   ó   — e Zd Zd„ Zd„ ZdS )ÚLocalMethodc                 ó"   — || _         || _        d S ©N)ÚlocalÚname)Úselfr   r   s      úR/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/spread/util.pyÚ__init__zLocalMethod.__init__   s   € ØˆŒ
ØˆŒ	ˆ	ˆ	ó    c                 ó8   —  | j         j        | j        g|¢R i |¤ŽS r   )r   Ú
callRemoter   )r   ÚargsÚkws      r   Ú__call__zLocalMethod.__call__   s)   € Ø$ˆtŒzÔ$ T¤YÐ<°Ð<Ð<Ð<¸Ð<Ð<Ð<r   N)Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r
   r
      s2   € € € € € ðð ð ð=ð =ð =ð =ð =r   r
   c                   ó"   — e Zd ZdZdZd„ Zd„ ZdS )ÚLocalAsRemotezN
    A class useful for emulating the effects of remote behavior locally.
    é   c                 óP  — t          | d|z   ¦  «        r t          | d|z   ¦  «        |i |¤ŽS 	 t          | d|z   ¦  «        }t          j         ||i |¤Ž¦  «        S # t          $ r@ t          ¦   «         }| j        r|                     ¦   «          t          j        |¦  «        cY S w xY w)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_)	ÚhasattrÚgetattrr   ÚsucceedÚBaseExceptionr   ÚreportAllTracebacksÚprintTracebackÚfail)r   r   r   r   ÚmethodÚfs         r   r   zLocalAsRemote.callRemote#   sÉ   € õ �4˜ 4™Ñ(Ô(ð 	>Ø0•7˜4 ¨4¡Ñ0Ô0°$Ð=¸"Ð=Ð=Ð=ð	!Ý˜T 8¨d¡?Ñ3Ô3ˆFÝ”=  ¨Ð!4°Ð!4Ð!4Ñ5Ô5Ð5øÝð 	!ð 	!ð 	!Ý‘	”	ˆAØÔ'ð #Ø× Ò Ñ"Ô"Ð"Ý”:˜a‘=”=Ð Ð Ð ð		!øøøs   ®,A ÁAB%Â$B%c                 ó"   — t          | |¦  «        S r   )r
   )r   r   s     r   ÚremoteMethodzLocalAsRemote.remoteMethod8   s   € Ý˜4 Ñ&Ô&Ð&r   N)r   r   r   Ú__doc__r&   r   r,   r   r   r   r   r      sD   € € € € € ðð ð Ðð!ð !ð !ð*'ð 'ð 'ð 'ð 'r   r   c                   ó&   — e Zd ZdZdd„Zd„ Zd„ ZdS )ÚLocalAsyncForwarderzD
    A class useful for forwarding a locally-defined interface.
    r   c                 ó^   — |                      |¦  «        sJ ‚|| _        || _        || _        d S r   )Ú
providedByÚ	forwardedÚinterfaceClassÚfailWhenNotImplemented)r   r2   r3   r4   s       r   r   zLocalAsyncForwarder.__init__A   s9   € Ø×(Ò(¨Ñ3Ô3Ð3Ð3Ð3Ø"ˆŒØ,ˆÔØ&<ˆÔ#Ð#Ð#r   c                 ó8   —  t          | j        |¦  «        |i |¤ŽS r   )r#   r2   )r   r)   r   r   s       r   Ú_callMethodzLocalAsyncForwarder._callMethodG   s#   € Ø.�w�t”~ vÑ.Ô.°Ð;¸Ð;Ð;Ð;r   c                 óú   — | j                              |¦  «        rt          j        | j        |g|¢R i |¤Ž}|S | j        r*t          j        t          t          d|z  ¦  «        ¦  «        S t          j	        d ¦  «        S )NzNo Such Method in Interface: %s)
r3   ÚqueryDescriptionForr   ÚmaybeDeferredr6   r4   r(   r   ÚNotImplementedErrorr$   )r   r)   r   r   Úresults        r   r   zLocalAsyncForwarder.callRemoteJ   s‹   € ØÔ×2Ò2°6Ñ:Ô:ð 	'ÝÔ(¨Ô)9¸6ÐOÀDÐOÐOÐOÈBÐOÐOˆFØˆMØÔ(ð 	'Ý”:ÝÕ+Ð-NÐQWÑ-WÑXÔXñô ð õ ”= Ñ&Ô&Ð&r   N)r   )r   r   r   r-   r   r6   r   r   r   r   r/   r/   <   sP   € € € € € ðð ð=ð =ð =ð =ð<ð <ð <ð	'ð 	'ð 	'ð 	'ð 	'r   r/   c                   ó2   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ ZdS )	ÚPagerz5
    I am an object which pages out information.
    Nc                 ó®   — t          |¦  «        r|| _        || _        || _        nd| _        d| _        || _        |j                             | ¦  «         dS )zƒ
        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   rD   r@   r   r   s        r   r   zPager.__init__[   sa   € õ
 �HÑÔð 	!Ø$ˆDŒMØ $ˆDÔØ#%ˆDÔ Ð à ˆDŒMØˆÔØ"ˆŒØÔ×-Ò-¨dÑ3Ô3Ð3Ð3Ð3r   c                 ó’   — | j         s:| j                             dd¬¦  «         | j        � | j        | j        i | j        ¤Ž | j         S )ú5
        (internal) Method called by Broker.
        ÚendedPagingF©Úpbanswer)rC   rD   r   r@   rA   rB   ©r   s    r   ÚstillPagingzPager.stillPagingj   sY   € ð Ô ð 	JØŒN×%Ò% m¸eÐ%ÑDÔDÐDØŒ}Ð(Ø�”˜tÔ0ÐI°DÔ4HÐIÐIÐIØÔ Ð r   c                 ód   — | j                              d|                      ¦   «         d¬¦  «         dS )rH   ÚgotPageFrJ   N)rD   r   ÚnextPagerL   s    r   ÚsendNextPagezPager.sendNextPaget   s/   € ð 	Œ×!Ò! )¨T¯]ª]©_¬_ÀuÐ!ÑMÔMÐMÐMÐMr   c                 ó   — t          ¦   «         ‚)zO
        Override this to return an object to be sent to my collector.
        )r:   rL   s    r   rP   zPager.nextPagez   s   € õ "Ñ#Ô#Ð#r   c                 ó   — d| _         dS )z4
        Call this when you're done paging.
        r   N)rC   rL   s    r   Ú
stopPagingzPager.stopPaging€   s   € ð ˆÔÐÐr   r   )	r   r   r   r-   r   rM   rQ   rP   rT   r   r   r   r=   r=   V   sq   € € € € € ðð ð4ð 4ð 4ð 4ð!ð !ð !ðNð Nð Nð$ð $ð $ðð ð ð ð r   r=   c                   ó    — e Zd ZdZdd„Zd„ ZdS )ÚStringPagerz:
    A simple pager that splits a string into chunks.
    é    Nc                 ó^   — || _         d| _        || _        t          j        | ||g|¢R i |¤Ž d S )Nr   )ÚstringÚpointerÚ	chunkSizer=   r   )r   rD   Ústr[   r@   r   r   s          r   r   zStringPager.__init__Œ   sA   € ØˆŒØˆŒØ"ˆŒÝŒ�t˜Y¨Ð>°4Ð>Ð>Ð>¸2Ð>Ð>Ð>Ð>Ð>r   c                 óÔ   — | j         | j        | j        | j        z   …         }| xj        | j        z  c_        | j        t          | j         ¦  «        k    r|                      ¦   «          |S r   )rY   rZ   r[   ÚlenrT   ©r   Úvals     r   rP   zStringPager.nextPage’   s\   € ØŒk˜$œ,¨¬¸¼Ñ)FÐFÔGˆØˆŒ˜œÑ&ˆŒØŒ<�3˜tœ{Ñ+Ô+Ò+Ð+Ø�OŠOÑÔÐØˆ
r   )rW   N)r   r   r   r-   r   rP   r   r   r   rV   rV   ‡   sA   € € € € € ðð ð?ð ?ð ?ð ?ðð ð ð ð r   rV   c                   ó8   — e Zd ZdZd	d„Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )
Ú	FilePagerzC
    Reads a file in chunks and sends the chunks as they come.
    Nc                 ól   — g | _         t          j        | ||g|¢R i |¤Ž |                      |¦  «         d S r   )Úchunksr=   r   ÚstartProducing)r   rD   Úfdr@   r   r   s         r   r   zFilePager.__init__    sG   € ØˆŒÝŒ�t˜Y¨Ð>°4Ð>Ð>Ð>¸2Ð>Ð>Ð>Ø×Ò˜BÑÔÐÐÐr   c                 óš   ‡ — t          j        ¦   «                              |‰ ¦  «        ‰ _        ‰ j                             ˆ fd„¦  «         d S )Nc                 ó,   •— ‰                      ¦   «         S r   )rT   )Úxr   s    €r   ú<lambda>z*FilePager.startProducing.<locals>.<lambda>§   s   ø€ ¨¯ªÑ(9Ô(9€ r   )r   Ú
FileSenderÚbeginFileTransferÚdeferredÚaddBoth)r   rf   s   ` r   re   zFilePager.startProducing¥   sI   ø€ ÝÔ(Ñ*Ô*×<Ò<¸RÀÑFÔFˆŒØŒ×ÒÐ9Ð9Ð9Ð9Ñ:Ô:Ð:Ð:Ð:r   c                 óN   — || _         |s| j                              ¦   «          d S d S r   )ÚproducerÚresumeProducing)r   rp   Ú	streamings      r   ÚregisterProducerzFilePager.registerProducer©   s5   € Ø ˆŒØð 	,ØŒM×)Ò)Ñ+Ô+Ð+Ð+Ð+ð	,ð 	,r   c                 ó   — d | _         d S r   )rp   rL   s    r   ÚunregisterProducerzFilePager.unregisterProducer®   s   € ØˆŒˆˆr   c                 ó:   — | j                              |¦  «         d S r   )rd   Úappend)r   Úchunks     r   ÚwritezFilePager.write±   s   € ØŒ×Ò˜5Ñ!Ô!Ð!Ð!Ð!r   c                 ó¸   — | j         sdS | j                              d¦  «        }| j                             ¦   «          | j                             d|d¬¦  «         dS )zD
        Get the first chunk read and send it to collector.
        Nr   rO   FrJ   )rd   Úpoprp   rq   rD   r   r_   s     r   rQ   zFilePager.sendNextPage´   s]   € ð Œ{ð 	ØˆFØŒk�oŠo˜aÑ Ô ˆØŒ×%Ò%Ñ'Ô'Ð'ØŒ×!Ò! )¨S¸5Ð!ÑAÔAÐAÐAÐAr   r   )
r   r   r   r-   r   re   rs   ru   ry   rQ   r   r   r   rb   rb   š   s‚   € € € € € ðð ð ð  ð  ð  ð
;ð ;ð ;ð,ð ,ð ,ð
ð ð ð"ð "ð "ðBð Bð Bð Bð Br   rb   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚCallbackPageCollectorzµ
    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                 ó"   — g | _         || _        d S r   )Úpagesr@   )r   r@   s     r   r   zCallbackPageCollector.__init__Ç   s   € ØˆŒ
Ø ˆŒˆˆr   c                 ó:   — | j                              |¦  «         d S r   )r   rw   )r   Úpages     r   Úremote_gotPagez$CallbackPageCollector.remote_gotPageË   s   € ØŒ
×Ò˜$ÑÔÐÐÐr   c                 ó:   — |                       | j        ¦  «         d S r   )r@   r   rL   s    r   Úremote_endedPagingz(CallbackPageCollector.remote_endedPagingÎ   s   € Ø�Š�d”jÑ!Ô!Ð!Ð!Ð!r   N)r   r   r   r-   r   r‚   r„   r   r   r   r}   r}   À   sK   € € € € € ðð ð!ð !ð !ð ð  ð  ð"ð "ð "ð "ð "r   r}   c                 ót   — t          j        ¦   «         } | j        |t          |j        ¦  «        g|¢R i |¤Ž |S )zr
    A utility method that will call a remote method which expects a
    PageCollector as the first argument.
    )r   ÚDeferredr   r}   r@   )ÚreferenceableÚ
methodNamer   r   Úds        r   ÚgetAllPagesrŠ   Ò   sG   € õ
 	ŒÑÔ€AØ€MÔ˜ZÕ)>¸q¼zÑ)JÔ)JÐXÈTÐXÐXÐXÐUWÐXÐXÐXØ€Hr   N)r-   Úzope.interfacer   Útwisted.internetr   r   Útwisted.protocolsr   Útwisted.python.failurer   Útwisted.spreadr   r
   r   r/   r=   rV   Ú	IConsumerrb   ÚReferenceabler}   rŠ   r   r   r   ú<module>r’      sÐ  ððð ð 'Ð &Ð &Ð &Ð &Ð &à .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø #Ð #Ð #Ð #Ð #Ð #Ø *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð ð=ð =ð =ð =ð =ñ =ô =ð =ð'ð 'ð 'ð 'ð 'ñ 'ô 'ð 'ð@'ð 'ð 'ð 'ð 'ñ 'ô 'ð 'ð4.ð .ð .ð .ð .ñ .ô .ð .ðbð ð ð ð �%ñ ô ð ð& €ˆZÔ!Ñ"Ô"ð!Bð !Bð !Bð !Bð !B�ñ !Bô !Bñ #Ô"ð!BðJ"ð "ð "ð "ð "˜BÔ,ñ "ô "ð "ð$ð ð ð ð r   