
    >OOf                         d Z 	 ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZ dd
lmZmZ  G d de      Zy# e$ r	 ddlmZ Y Ew xY w)
    )Queue)StringIO)linesep   ) decode_persistent_search_control)AsyncStrategy)LDAPLDIFError)prepare_for_stream)"persistent_search_response_to_ldifadd_ldif_headerc                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	AsyncStreamStrategyz|
    This strategy is asynchronous. It streams responses in a generator as they appear in the self._responses container
    c                 :   t        j                  | |       d| _        t        | _        d| _        d | _        t               | _        d| _	        d | _
        d| _        d | _        |j                  rt        |j                        | _        | `y t               | _        | `y )NTF)r	   __init__
can_streamr   line_separator
all_base64streamdictorder_header_addedpersistent_search_message_id	streamingcallback	pool_sizer   events	_requests)selfldap_connections     [/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/ldap3/strategy/asyncStream.pyr   zAsyncStreamStrategy.__init__/   s    t_5%V
",0)$$ 9 9:DK N  'DKN    c                     t        j                  |        | j                  rX| j                  r0t	        | j                  t
              r1| j                  j                  r| j                  t                      y y y y N)r	   _start_listenr   r   
isinstancer   closed
set_streamr   s    r!   r%   z!AsyncStreamStrategy._start_listenA   sT    ##D)>>;;:dkk8#DI[I[
+ J\#D r"   c                 |    t        j                  |        | j                  r| j                  j	                          y y r$   )r	   _stop_listenr   r   closer)   s    r!   r+   z AsyncStreamStrategy._stop_listenG   s,    ""4(>>KK r"   c                 Z   || j                   k(  r| j                  5  g | j                  |<   d d d        | j                  r| j                  sj| j
                  j                         dk(  rMt        dg      d   }| j
                  j                  t        || j                  z   | j                  z                t        |      }| j
                  r|r| j                  j                  s| j                  j                  |      }| j                  sq| j
                  j                         dk(  rTd| _        t        dg      d   }| j
                  j                  t        || j                  z   | j                  z                | j
                  j                  t        || j                  z   | j                  z                y y y y t        |      }|r|j!                  |       |d   d= | j"                  s| j$                  j'                  |       y | j#                  |       y y # 1 sw Y   xY w)Nr   -Tcontrolsz2.16.840.1.113730.3.4.7)r   
async_lock
_responsesr   r   r   tellr   writer   r   r   
connectionr'   joinr   updater   r   put)r   
message_idchangeheader
ldif_linesfragmentnotifications          r!   accumulate_streamz%AsyncStreamStrategy.accumulate_streamL   s   ::: 1.0
+1~~))dkk.>.>.@A.E,cU3A6FKK%%&8$BUBU9UX\XkXk9k&lm?G
;;:doo6L6L#2277
CH--$++2B2B2D2I-1*!0#!7!:))*<VdFYFY=Y\`\o\o=o*pqKK%%&8DDWDW9WZ^ZmZm9m&no 7M:;  @GMM,/z*+DE}}KKOOF+MM&)/ ;1 1s   H  H*c                 4    | j                   r| j                  S y r$   )r   r   r)   s    r!   
get_streamzAsyncStreamStrategy.get_streamf   s    >>;;r"   c                     d}	 |j                         sd}|rt        d      || _        d| _        y # t        t        f$ r d}Y /w xY w)NFTzstream must be writable)writable
ValueErrorAttributeErrorr
   r   r   )r   valueerrors      r!   r(   zAsyncStreamStrategy.set_streamk   sU    	>>#  9:: N+ 	E	s   2 AAN)
__name__
__module____qualname____doc__r   r%   r+   r>   r@   r(    r"   r!   r   r   +   s%    $, 
*4
r"   r   N)rJ   queuer   ImportErrorior   osr   protocol.rfc2849r   strategy.asynchronousr	   core.exceptionsr
   
utils.convr   r   r   r   rK   r"   r!   <module>rT      sK   2
   ? 1 + + RL- L  s   A AA