
    RSi%
                     l    d dl Z d dlmZ  ed          ZddgZ G d d          Z G d d          ZdS )    N)_FileReadWriteErrorBufferedIteratorProducerFileProducerc                   (    e Zd ZdZdZd Zd Zd ZdS )r   z)Producer wrapper for file[-like] objects.i   c                     || _         || _        d| _        |dk    rt          j        dk    r| j        | _        dS d| _        dS )zInitialize the producer with a data_wrapper appropriate to TYPE.

        - (file) file: the file[-like] object.
        - (str) type: the current TYPE, 'a' (ASCII) or 'i' (binary).
        Faz
N)filetype_prev_chunk_endswith_croslinesep_posix_ascii_data_wrapper_data_wrapper)selfr
   r   s      T/home/jrussi/.local/lib/python3.11/site-packages/pyftpdlib/handlers/ftp/producers.py__init__zFileProducer.__init__   sN     		',$3;;2://!%!?D!%D    c                 N   t          |          }d}| j        r|                    d          r|dz  }	 |                    d|          }|dk    rn:||dz
           t          k    r |                    |t                     |dz  }|dz  }W|                    d          | _        |S )zThe data wrapper used for sending data in ASCII mode on
        systems using a single line terminator, handling those cases
        where CRLF ('
') gets delivered in two chunks.
        r      
   T   )	bytearrayr   
startswithfindCR_BYTEinsertendswith)r   chunkposs      r   r   z&FileProducer._posix_ascii_data_wrapper!   s    
 %  ' 	E,<,<U,C,C 	1HC	**UC((CbyyS1W~((S'***q1HC	 (-~~e'<'<$r   c                     	 | j                             | j                  }| j        |                     |          }|S # t          $ r}t          |          |d}~ww xY w)z1Attempt a chunk of data of size self.buffer_size.N)r
   readbuffer_sizer   OSErrorr   )r   dataerrs      r   morezFileProducer.more5   sq    	9>>$"233D !-))$//K  	4 	4 	4%c**3	4s   ? 
A	AAN)__name__
__module____qualname____doc__r$   r   r   r(    r   r   r   r      sL        33K& & &  (	 	 	 	 	r   c                   "    e Zd ZdZdZd Zd ZdS )r   z7Producer for iterator objects with buffer capabilities.   c                     || _         d S )N)iterator)r   r1   s     r   r   z!BufferedIteratorProducer.__init__H   s     r   c                     g }t          | j                  D ];}	 |                    t          | j                             +# t
          $ r Y  nw xY wd                    |          S )zdAttempt a chunk of data from iterator by calling
        its next() method different times.
        r   )rangeloopsappendnextr1   StopIterationjoin)r   buffer_s      r   r(   zBufferedIteratorProducer.moreK   sz     tz"" 	 	Ad4=112222    xxs   'A
AAN)r)   r*   r+   r,   r4   r   r(   r-   r   r   r   r   A   s?        AA E! ! !
  
  
  
  
 r   )r   pyftpdlib.exceptionsr   ordr   __all__r   r   r-   r   r   <module>r>      s   
 
			 4 4 4 4 4 4
#d))%~
60 0 0 0 0 0 0 0f                   r   