U
    ±[Öe£  ã                   @   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k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   úU/var/www/html/services/stratfitenv/lib/python3.8/site-packages/openid/yadis/accept.pyÚgenerateAcceptHeader   s$    
r   c              
   C   sÞ   dd„ |   d¡D ƒ}g }|D ]¢}dd„ |  d¡D ƒ}| d¡}d|krHq|  dd¡\}}|D ]L}d	|kr\|  d	d¡\}	}
|	d
kr\zt|
ƒ}W  q®W q\ tk
r¦   Y q\X 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>-   s     z%parseAcceptHeader.<locals>.<listcomp>ú,c                 S   s   g | ]}|  ¡ ‘qS r   r   )r   Úsr   r   r   r   0   s     ú;r   ú/r   ú=r   g      ð?c                 S   s   g | ]\}}}|||f‘qS r   r   )r   r   ÚmainÚsubr   r   r   r   J   s     )Ú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|k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   s    
 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    
 
r/   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   ‰   s     z!getAcceptable.<locals>.<listcomp>)r(   r/   )Zaccept_headerr-   ÚacceptedÚ	preferredr   r   r   ÚgetAcceptable}   s    

r2   N)Ú__doc__r   r(   r/   r2   r   r   r   r   Ú<module>   s   (0