a
    '(b
                     @   s8   d dl mZ d dlmZ d dlmZ G dd deZdS )    headers_dict_to_raw)CaselessDict)
to_unicodec                       s   e Zd ZdZd# fdd	Zdd Zdd	 Zd
d Z fddZd$ fdd	Z	d% fdd	Z
dd Zd&ddZdd Zdd Zdd Zdd Zdd  Zd!d" ZeZ  ZS )'Headersz(Case insensitive http headers dictionaryNutf-8c                    s   || _ t | d S N)encodingsuper__init__)selfseqr	   	__class__ 2lib/python3.9/site-packages/scrapy/http/headers.pyr   	   s    zHeaders.__init__c                 C   s   |  | S )zNormalize key to bytes)_tobytestitler   keyr   r   r   normkey   s    zHeaders.normkeyc                    sF   |du rg }n&t |ttfr$|g}nt|ds4|g} fdd|D S )zNormalize values to bytesN__iter__c                    s   g | ]}  |qS r   )r   ).0xr   r   r   
<listcomp>       z%Headers.normvalue.<locals>.<listcomp>)
isinstancestrbyteshasattr)r   valuer   r   r   	normvalue   s    
zHeaders.normvaluec                 C   sT   t |tr|S t |tr$|| jS t |tr>t|| jS tdt| d S )NzUnsupported value type: )r   r   r   encoder	   int	TypeErrortype)r   r   r   r   r   r      s    


zHeaders._tobytesc                    s,   zt  |d W S  ty&   Y d S 0 d S N)r
   __getitem__
IndexErrorr   r   r   r   r)   &   s    zHeaders.__getitem__c                    s.   zt  ||d W S  ty(   Y d S 0 d S r'   )r
   getr*   r   r   Zdef_valr   r   r   r+   ,   s    zHeaders.getc                    s@   zt  |W S  ty:   |d ur2| | Y S g  Y S 0 d S r   )r
   r)   KeyErrorr"   r,   r   r   r   getlist2   s    zHeaders.getlistc                 C   s   || |< d S r   r   )r   r   Zlist_r   r   r   setlist:   s    zHeaders.setlistr   c                 C   s   |  ||S r   )
setdefault)r   r   Zdefault_listr   r   r   setlistdefault=   s    zHeaders.setlistdefaultc                 C   s&   |  |}|| | || |< d S r   )r.   extendr"   )r   r   r!   Zlstr   r   r   
appendlist@   s    
zHeaders.appendlistc                    s    fdd   D S )Nc                 3   s   | ]}|  |fV  qd S r   )r.   r   kr   r   r   	<genexpr>F   r   z Headers.items.<locals>.<genexpr>keysr   r   r   r   itemsE   s    zHeaders.itemsc                    s    fdd   D S )Nc                    s   g | ]} | qS r   r   r4   r   r   r   r   I   r   z"Headers.values.<locals>.<listcomp>r7   r   r   r   r   valuesH   s    zHeaders.valuesc                 C   s   t | S r   r   r   r   r   r   	to_stringK   s    zHeaders.to_stringc                    s   t  fdd  D S )z} Return headers as a CaselessDict with unicode keys
        and unicode values. Multiple values are joined with ','.
        c                 3   s4   | ],\}}t | jd t d| jd fV  qdS ))r	      ,N)r   r	   join)r   r   r!   r   r   r   r6   R   s   z*Headers.to_unicode_dict.<locals>.<genexpr>)r   r9   r   r   r   r   to_unicode_dictN   s    zHeaders.to_unicode_dictc                 C   s
   |  | S r   r   r   r   r   r   __copy__W   s    zHeaders.__copy__)Nr   )N)N)r   )__name__
__module____qualname____doc__r   r   r"   r   r)   r+   r.   r/   r1   r3   r9   r:   r;   r>   r?   copy__classcell__r   r   r   r   r      s"   

	r   N)Z
w3lib.httpr   Zscrapy.utils.datatypesr   Zscrapy.utils.pythonr   r   r   r   r   r   <module>   s   