U
    
"g
                     @   s@   d dl mZ d dlmZ ddlmZ dd Zdd Zd	d
 Z	dS )    )absolute_import)http_client   )HeaderParsingErrorc                 C   sl   z
|   W S  tk
r   Y nX z| jW S  tk
r<   Y nX z| jdkW S  tk
r^   Y nX tddS )zt
    Checks whether a given file-like object is closed.

    :param obj:
        The file-like object to check.
    Nz)Unable to determine whether fp is closed.)ZisclosedAttributeErrorclosedfp
ValueError)obj r   7/usr/lib/python3/dist-packages/urllib3/util/response.pyis_fp_closed   s    
r   c                 C   sv   t | tjstdt| t| dd}t| dd}d}|r^|  s^| }t |tt	fr^|}|sf|rrt
||ddS )aP  
    Asserts whether all headers have been successfully parsed.
    Extracts encountered errors from the result of parsing headers.

    Only works on Python 3.

    :param headers: Headers to verify.
    :type headers: `httplib.HTTPMessage`.

    :raises urllib3.exceptions.HeaderParsingError:
        If parsing errors are found.
    z"expected httplib.Message, got {0}.defectsNget_payload)r   unparsed_data)
isinstancehttplibZHTTPMessage	TypeErrorformattypegetattrZis_multipartbytesstrr   )Zheadersr   r   r   Zpayloadr   r   r   assert_header_parsing&   s    r   c                 C   s$   | j }t|tr|dkS | dkS )z
    Checks whether the request of a response has been a HEAD-request.
    Handles the quirks of AppEngine.

    :param conn:
    :type conn: :class:`httplib.HTTPResponse`
       ZHEAD)_methodr   intupper)Zresponsemethodr   r   r   is_response_to_headJ   s    	
r   N)
Z
__future__r   Z	six.movesr   r   
exceptionsr   r   r   r   r   r   r   r   <module>   s
   $