
    3 d
                         d Z ddlZddlZddlZddlZddl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  eded	
            ej        e          Z G d d          ZdS )z This module implements the DecompressionMiddleware which tries to recognise
and extract the potentially compressed responses that may arrive.
    N)BytesIO)mktemp)warn)ScrapyDeprecationWarning)responsetypesz8scrapy.downloadermiddlewares.decompression is deprecated   )
stacklevelc                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	DecompressionMiddlewarezeThis middleware tries to recognise and extract the possibly compressed
    responses that may arrive.c                 F    | j         | j        | j        | j        d| _        d S )N)tarzipgzbz2)_is_tar_is_zip_is_gzip	_is_bzip2_formats)selfs    Jlib/python3.11/site-packages/scrapy/downloadermiddlewares/decompression.py__init__z DecompressionMiddleware.__init__   s(    <<->	
 
    c                 |   t          |j                  }	 t          j        t	                      |          }n# t          j        $ r Y d S w xY w|                    |j        d                                                   }t          j
        |j        d         j        |          }|                    ||          S )N)namefileobjr   filenamebodyr   cls)r   r   tarfileopenr   	ReadErrorextractfilemembersreadr   	from_argsr   replace)r   responsearchivetar_filer   respclss         r   r   zDecompressionMiddleware._is_tar'   s    (-((	|7CCCHH  	 	 	FF	 ##H$4Q$788==??)83CA3F3KRVWWWTw777s   "9 AAc                 F   t          |j                  }	 t          j        |          }n# t          j        $ r Y d S w xY w|                                }|                    |d                   }t          j        |d         |          }|	                    ||          S )Nr   r   r    )
r   r   zipfileZipFile
BadZipfilenamelistr'   r   r(   r)   )r   r*   r+   zip_filer2   r   r-   s          r   r   zDecompressionMiddleware._is_zip2   s    (-((	w//HH! 	 	 	FF	 $$&&}}Xa[)))8A;TJJJTw777s   + >>c                     t          |j                  }	 t          j        |                                          }n# t
          $ r Y d S w xY wt          j        |          }|                    ||          S )N)r   r   r    )	r   r   gzipGzipFiler'   IOErrorr   r(   r)   )r   r*   r+   r   r-   s        r   r   z DecompressionMiddleware._is_gzip>   s    (-((	=1116688DD 	 	 	FF	  )t444Tw777s   '> 
AAc                     	 t          j        |j                  }n# t          $ r Y d S w xY wt	          j        |          }|                    ||          S )Nr5   r    )r   
decompressr   r8   r   r(   r)   )r   r*   r   r-   s       r   r   z!DecompressionMiddleware._is_bzip2H   sj    	>(-00DD 	 	 	FF	  )t444Tw777s    
**c                     |j         s|S | j                                        D ]7\  }} ||          }|r%t                              dd|id|i           |c S 8|S )Nz2Decompressed response with format: %(responsefmt)sresponsefmtspider)extra)r   r   itemsloggerdebug)r   requestr*   r=   fmtfuncnew_responses          r   process_responsez(DecompressionMiddleware.process_responseQ   s    } 	O,,.. 	$ 	$IC4>>L $H"C(#V,    
 $###$ r   N)
__name__
__module____qualname____doc__r   r   r   r   r   rF    r   r   r   r      sx        " "
 
 
	8 	8 	8
8 
8 
88 8 88 8 8    r   r   )rJ   r   r6   loggingr"   r/   ior   tempfiler   warningsr   scrapy.exceptionsr   scrapy.responsetypesr   	getLoggerrG   r@   r   rK   r   r   <module>rS      s
    


                       6 6 6 6 6 6 . . . . . . >    
	8	$	$C C C C C C C C C Cr   