o
    f!#                     @   s   d Z 	 ddlmZ ddlmZ G dd dZG dd dZG dd	 d	ZG d
d dZG dd dZ	G dd dZ
G dd dZG dd dZG dd dZG dd dZzddlZW n eyf   dZY nw G dd dZG dd dZdS )z;$Id: producers.py,v 1.9 2004/04/21 13:56:28 akuchling Exp $    )find_prefix_at_end)as_bytesc                   @   "   e Zd ZdZdddZdd ZdS )	simple_producerzproducer for a string   c                 C      || _ || _d S N)databuffer_sizeselfr	   r
    r   N/var/www/html/venv/lib/python3.10/site-packages/supervisor/medusa/producers.py__init__      
zsimple_producer.__init__c                 C   sF   t | j| jkr| jd | j }| j| jd  | _|S | j}d| _|S N    )lenr	   r
   r   resultr   r   r   more   s   zsimple_producer.moreNr   __name__
__module____qualname____doc__r   r   r   r   r   r   r      s    
r   c                   @   r   )	scanning_producerz:like simple_producer, but more efficient for large stringsr   c                 C      || _ || _d| _d S Nr   )r	   r
   posr   r   r   r   r   #      
zscanning_producer.__init__c                 C   sV   | j t| jk r)| j }tt| j| j | j }| j|| }|  j t|7  _ |S dS r   )r    r   r	   minr
   )r   lprpr   r   r   r   r   (   s   
zscanning_producer.moreNr   r   r   r   r   r   r   !   s    
r   c                   @       e Zd ZdZdd Zdd ZdS )lines_producerzproducer for a list of linesc                 C   
   || _ d S r   )linesr   r(   r   r   r   r   8      
zlines_producer.__init__c                 C   s6   | j r| j d d }| j dd  | _ d|d S dS )N2   
 )r(   join)r   chunkr   r   r   r   ;   s
   zlines_producer.moreNr   r   r   r   r   r&   5   s    r&   c                   @   r%   )buffer_list_producerzproducer for a list of stringsc                 C      d| _ || _d S r   )indexbuffers)r   r3   r   r   r   r   H   r   zbuffer_list_producer.__init__c                 C   s2   | j t| jkr
dS | j| j  }|  j d7  _ |S Nr      )r2   r   r3   r   r	   r   r   r   r   L   s
   zbuffer_list_producer.moreNr   r   r   r   r   r0   C   s    r0   c                   @   s$   e Zd ZdZdZdd Zdd ZdS )file_producerz(producer wrapper for file[-like] objects   c                 C   r1   r   )donefile)r   r:   r   r   r   r   Z   r   zfile_producer.__init__c                 C   s8   | j rdS | j| j}|s| j  | `d| _ dS |S r4   )r9   r:   readout_buffer_sizecloser6   r   r   r   r   ^   s   
zfile_producer.moreN)r   r   r   r   r<   r   r   r   r   r   r   r7   T   s
    r7   c                   @   sH   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dS )output_producerz;Acts like an output file; suitable for capturing sys.stdoutc                 C   s
   d| _ d S r   r	   r   r   r   r   r   t   r*   zoutput_producer.__init__c                 C   s&   | d}d|}|  j|7  _d S )N
r,   )splitr.   r	   )r   r	   r(   r   r   r   writew   s   

zoutput_producer.writec                 C   s   | j | d | _ d S Nr,   r?   )r   liner   r   r   	writeline|   s   zoutput_producer.writelinec                 C   s   | j d| d | _ d S rD   )r	   r.   r)   r   r   r   
writelines   s   zoutput_producer.writelinesc                 C      d S r   r   r@   r   r   r   flush      zoutput_producer.flushc                 G   rH   r   r   )r   argsr   r   r   	softspace   rJ   zoutput_producer.softspacec                 C   s,   | j r| j d d }| j dd  | _ |S dS )Ni   r-   r?   r   r   r   r   r      s
   zoutput_producer.moreN)r   r   r   r   r   rC   rF   rG   rI   rL   r   r   r   r   r   r>   r   s    r>   c                   @   r%   )composite_producerz$combine a fifo of producers into onec                 C   r'   r   )	producers)r   rN   r   r   r   r      r*   zcomposite_producer.__init__c                 C   s>   t | jr| jd }| }|r|S | jd t | jsdS )Nr   r   )r   rN   r   pop)r   pdr   r   r   r      s   


zcomposite_producer.moreNr   r   r   r   r   rM      s    rM   c                   @   r   )	globbing_producerz
    'glob' the output from a producer into a particular buffer size.
    helps reduce the number of calls to send().  [this appears to
    gain about 30% performance on requests to a single channel]
    r8   c                 C   s   || _ d| _|| _d S r   )producerbufferr
   )r   rS   r
   r   r   r   r      r!   zglobbing_producer.__init__c                 C   sN   t | j| jk r| j }|r| j| | _nnt | j| jk s| j}d| _|S r   )r   rT   r
   rS   r   )r   r	   rr   r   r   r      s   
zglobbing_producer.moreN)r8   r   r   r   r   r   rR      s    
rR   c                   @   r%   )hooked_producerz
    A producer that will call <function> when it empties,.
    with an argument of the number of bytes produced.  Useful
    for logging/instrumentation purposes.
    c                 C   r   r   )rS   functionbytes)r   rS   rW   r   r   r   r      r!   zhooked_producer.__init__c                 C   sD   | j r | j  }|sd | _ | | j |S |  jt|7  _|S dS )Nr-   )rS   r   rW   rX   r   r   r   r   r   r      s   
zhooked_producer.moreNr   r   r   r   r   rV      s    rV   c                   @   s"   e Zd ZdZdddZdd ZdS )chunked_producera'  A producer that implements the 'chunked' transfer coding for HTTP/1.1.
    Here is a sample usage:
            request['Transfer-Encoding'] = 'chunked'
            request.push (
                    producers.chunked_producer (your_producer)
                    )
            request.done()
    Nc                 C   r   r   )rS   footers)r   rS   rZ   r   r   r   r      r   zchunked_producer.__init__c                 C   s^   | j r-| j  }|rdt| }t|d | d S d | _ | jr+ddg| j d S dS dS )Nz%xs   
   0s   

s   0

r   )rS   r   r   r   rZ   r.   )r   r	   sr   r   r   r      s   
zchunked_producer.morer   r   r   r   r   r   rY      s    
	rY   Nc                   @   r   )	compressed_producerz:
    Compress another producer on-the-fly, using ZLIB
       c                 C   s   || _ t|| _d S r   )rS   zlibcompressobj
compressor)r   rS   levelr   r   r   r     s   zcompressed_producer.__init__c                 C   sD   | j r d}|s| j  }|sd | _ | j S | j|}|r|S dS r   )rS   r   ra   rI   compress)r   cdatar	   r   r   r   r     s   

zcompressed_producer.moreN)r^   r   r   r   r   r   r]      s    
r]   c                   @   s"   e Zd ZdZd	ddZdd ZdS )
escaping_producerz0A producer that escapes a sequence of characters
.
..c                 C   s"   || _ || _|| _d| _t| _d S r   )rS   esc_fromesc_torT   r   )r   rS   rh   ri   r   r   r   r      s
   
zescaping_producer.__init__c                 C   sh   | j }| j}| j| j  }|r2|||}| ||}|r-|| d  | _|d |  S d| _|S |S r   )rh   ri   rT   rS   r   replacer   )r   rh   ri   rT   ir   r   r   r   '  s   zescaping_producer.moreN)rf   rg   r   r   r   r   r   re     s    
re   )RCS_IDsupervisor.medusa.asynchat_25r   supervisor.compatr   r   r   r&   r0   r7   r>   rM   rR   rV   rY   r_   ImportErrorr]   re   r   r   r   r   <module>   s*   	  