a
    Šxd£  ã                   @   s(   d Z dd„ Zdd„ Zdd„ Zdd„ Zd	S )
znFunctions for generating and parsing HTTP Accept: headers for
supporting server-directed content negotiation.
c                  G   s²   g }| D ]^}t |ƒtu r"d}|}n6|\}}t|ƒ}|dksB|dkrNtd| ƒ‚d|f }| ||f¡ q| ¡  g }|D ].\}}|dkr”| |¡ qx| d||f ¡ qxd |¡S )zFGenerate an accept header value

    [str or (str, float)] -> str
    z1.0é   é    zInvalid preference factor: %rz%0.1fz%s; q=%sz, )ÚtypeÚstrÚfloatÚ
ValueErrorÚappendÚsortÚjoin)ÚelementsÚpartsÚelementÚqsÚmtypeÚqÚchunks© r   úK/var/www/html/Ranjet/env/lib/python3.9/site-packages/openid/yadis/accept.pyÚgenerateAcceptHeader   s$    
r   c              
   C   sÜ   dd„ |   d¡D ƒ}g }|D ] }dd„ |  d¡D ƒ}| d¡}d|vrHq|  dd¡\}}|D ]J}d	|v r\|  d	d¡\}	}
|	d
kr\zt|
ƒ}W  q¬W q\ ty¤   Y q\0 q\d}| |||f¡ q| ¡  | ¡  dd„ |D ƒS )z¼Parse an accept header, ignoring any accept-extensions

    returns a list of tuples containing main MIME type, MIME subtype,
    and quality markdown.

    str -> [(str, str, float)]
    c                 S   s   g | ]}|  ¡ ‘qS r   ©Ústrip)Ú.0Úchunkr   r   r   Ú
<listcomp>-   ó    z%parseAcceptHeader.<locals>.<listcomp>ú,c                 S   s   g | ]}|  ¡ ‘qS r   r   )r   Úsr   r   r   r   0   r   ú;r   ú/r   ú=r   g      ð?c                 S   s   g | ]\}}}|||f‘qS r   r   )r   r   ÚmainÚsubr   r   r   r   J   r   )ÚsplitÚpopr   r   r   r   Úreverse)Úvaluer   Úacceptr   r   r   r   r    ÚextÚkÚvr   r   r   r   ÚparseAcceptHeader%   s,    

r)   c                 C   sø   | s
d}nd}i }i }| D ]^\}}}|dkr:t ||ƒ}qq|dkrZt | |d¡|ƒ||< qt | ||fd¡|ƒ|||f< qg }d}	|D ]Z}
|
 d¡\}}||f|v r²|||f }n| ||¡}|r†| d| |	||
f¡ |	d7 }	q†| ¡  dd„ |D ƒS )aª  Given the result of parsing an Accept: header, and the
    available MIME types, return the acceptable types with their
    quality markdowns.

    For example:

    >>> acceptable = parseAcceptHeader('text/html, text/plain; q=0.5')
    >>> matchTypes(acceptable, ['text/plain', 'text/html', 'image/jpeg'])
    [('text/html', 1.0), ('text/plain', 0.5)]


    Type signature: ([(str, str, float)], [str]) -> [(str, float)]
    r   r   Ú*r   c                 S   s   g | ]\}}}}||f‘qS r   r   )r   Ú_r   r   r   r   r   r   z   r   zmatchTypes.<locals>.<listcomp>)ÚmaxÚgetr!   r   r   )Zaccept_typesÚ
have_typesÚdefaultZ
match_mainZ	match_subr   r    r   Zaccepted_listZorder_maintainerr   r   r   r   Ú
matchTypesM   s0    
 
r0   c                 C   s    t | ƒ}t||ƒ}dd„ |D ƒS )a	  Parse the accept header and return a list of available types in
    preferred order. If a type is unacceptable, it will not be in the
    resulting list.

    This is a convenience wrapper around matchTypes and
    parseAcceptHeader.

    (str, [str]) -> [str]
    c                 S   s   g | ]\}}|‘qS r   r   )r   r   r+   r   r   r   r   ‰   r   z!getAcceptable.<locals>.<listcomp>)r)   r0   )Zaccept_headerr.   ÚacceptedÚ	preferredr   r   r   ÚgetAcceptable}   s    

r3   N)Ú__doc__r   r)   r0   r3   r   r   r   r   Ú<module>   s   (0