Ë
    ûmxi‚  ã                   ó^   — d Z ddlmZ ddlmZ dZdZdZdZdZ	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)au  MIME-Type Parser

This module provides basic functions for handling mime-types. It can handle
matching mime-types against a list of media-ranges. See section 14.1 of the
HTTP specification [RFC 2616] for a complete explanation.

   http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1

Contents:
 - parse_mime_type():   Parses a mime-type into its component parts.
 - parse_media_range(): Media-ranges are mime-types with wild-cards and a 'q'
                          quality parameter.
 - quality():           Determines the quality ('q') of a mime-type when
                          compared against a list of media-ranges.
 - quality_parsed():    Just like quality() except the second parameter must be
                          pre-parsed.
 - best_match():        Choose the mime-type with the highest quality ('q')
                          from a list of candidates.
é    )Úabsolute_import)Úreducez0.1.3zJoe Gregoriozjoe@bitworking.orgzMIT LicenseÚ c                 ó~  — | j                  d«      }t        |dd D ��cg c]9  }t        |j                  dd«      D �cg c]  }|j                  «       ‘Œ c}«      ‘Œ; c}}«      }|d   j                  «       }|dk(  rd}|j                  d«      \  }}|j                  «       |j                  «       |fS c c}w c c}}w )	aR  Parses a mime-type into its component parts.

    Carves up a mime-type and returns a tuple of the (type, subtype, params)
    where 'params' is a dictionary of all the parameters for the media range.
    For example, the media range 'application/xhtml;q=0.5' would get parsed
    into:

       ('application', 'xhtml', {'q', '0.5'})
    ú;é   Nú=r   Ú*z*/*ú/)ÚsplitÚdictÚtupleÚstrip)Ú	mime_typeÚpartsÚparamÚsÚparamsÚ	full_typeÚtypeÚsubtypes           úP/home/htdocs/ttos/venv/lib/python3.12/site-packages/googleapiclient/mimeparse.pyÚparse_mime_typer   #   s¥   € ð �O‰O˜CÓ €EÜØFKÈAÈBÀi×P¸UŒ 5§;¡;¨s°AÓ#6Ö7˜a�—‘•	Ò7Õ	8ÓPó€Fð �a‘—‘Ó €Ið �CÒØˆ	Ø—o‘o cÓ*�O€Tˆ7à�J‰J‹L˜'Ÿ-™-›/¨6Ð2Ð2ùò 8ùÓPs   ŸB9
½B4Á	B9
Â4B9
c                 ó¦   — t        | «      \  }}}d|vs5|d   r0t        |d   «      r"t        |d   «      dkD  st        |d   «      dk  rd|d<   |||fS )aï  Parse a media-range into its component parts.

    Carves up a media range and returns a tuple of the (type, subtype,
    params) where 'params' is a dictionary of all the parameters for the media
    range.  For example, the media range 'application/*;q=0.5' would get parsed
    into:

       ('application', '*', {'q', '0.5'})

    In addition this function also guarantees that there is a value for 'q'
    in the params dictionary, filling it in with a proper default if
    necessary.
    Úqr   r   Ú1)r   Úfloat)Úranger   r   r   s       r   Úparse_media_ranger   ;   sh   € ô .¨eÓ4Ñ€Tˆ7�Fà�6ÑØ�cŠ{Ü�V˜C‘[Ô!Ü�˜‘Ó Ò!Ü�˜‘Ó Ò!àˆˆs‰à�'˜6Ð"Ð"ó    c                 óš  — d}d}t        | «      \  }}}|D ]¡  \  }}}	||k(  xs |dk(  xs |dk(  }
||k(  xs |dk(  xs |dk(  }|
sŒ0|sŒ3t        d„ |j                  «       D ��cg c]  \  }}|dk7  r||	v r
||	|   k(  rd‘Œ c}}d«      }||k(  xr dxs d}|||k(  xr dxs dz  }||z  }||kD  sŒ›|}|	d   }Œ£ |t        |«      fS c c}}w )	a³  Find the best match for a mime-type amongst parsed media-ranges.

    Find the best match for a given mime-type against a list of media_ranges
    that have already been parsed by parse_media_range(). Returns a tuple of
    the fitness value and the value of the 'q' quality parameter of the best
    match, or (-1, 0) if no match was found. Just as for quality_parsed(),
    'parsed_ranges' must be a list of parsed media ranges.
    éÿÿÿÿr   r
   c                 ó   — | |z   S ©N© )ÚxÚys     r   ú<lambda>z,fitness_and_quality_parsed.<locals>.<lambda>i   s
   € ˜Q ™U€ r    r   r   éd   é
   )r   r   Úitemsr   )r   Úparsed_rangesÚbest_fitnessÚ
best_fit_qÚtarget_typeÚtarget_subtypeÚtarget_paramsr   r   r   Ú
type_matchÚsubtype_matchÚkeyÚvalueÚparam_matchesÚfitnesss                   r   Úfitness_and_quality_parsedr8   V   s.  € ð €LØ€JÜ3DÀYÓ3OÑ0€[�. -Ø#0ò )Ñˆˆw˜Ø˜[Ñ(ÒM¨D°C©KÒM¸;È#Ñ;Mˆ
à�~Ñ%ÒP¨°C©ÒP¸>ÈSÑ;Pð 	ò š-Ü"Ù"ð )6×(;Ñ(;Ó(=÷á$˜˜eØ˜c’z c¨V¡m¸ÀÈÁÒ8Lò óð
 óˆMð ˜{Ñ*Ò3°Ò8°qˆGØ˜ >Ñ1Ò9°rÒ>¸QÑ>ˆGØ�}Ñ$ˆGØ˜Ó%Ø&�Ø# C™[‘
ð))ð, œ˜zÓ*Ð*Ð*ùós   Á#Cc                 ó    — t        | |«      d   S )a–  Find the best match for a mime-type amongst parsed media-ranges.

    Find the best match for a given mime-type against a list of media_ranges
    that have already been parsed by parse_media_range(). Returns the 'q'
    quality parameter of the best match, 0 if no match was found. This function
    bahaves the same as quality() except that 'parsed_ranges' must be a list of
    parsed media ranges.
    r   )r8   )r   r,   s     r   Úquality_parsedr:   {   s   € ô & i°Ó?ÀÑBÐBr    c                 ór   — |j                  d«      D �cg c]  }t        |«      ‘Œ }}t        | |«      S c c}w )aK  Return the quality ('q') of a mime-type against a list of media-ranges.

    Returns the quality 'q' of a mime-type when compared against the
    media-ranges in ranges. For example:

    >>> quality('text/html','text/*;q=0.3, text/html;q=0.7,
                  text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5')
    0.7

    ú,)r   r   r:   )r   ÚrangesÚrr,   s       r   Úqualityr?   ˆ   s9   € ð 4:·<±<ÀÓ3DÖE¨aÔ& qÕ)ÐE€MÐEä˜) ]Ó3Ð3ùò Fs   ”4c                 ó  — t        |j                  d«      «      }|D �cg c]  }t        |«      ‘Œ }}g }d}| D ]%  }|j                  t	        ||«      ||f«       |dz  }Œ' |j                  «        |d   d   d   xr |d   d   xs dS c c}w )aY  Return mime-type with the highest quality ('q') from list of candidates.

    Takes a list of supported mime-types and finds the best match for all the
    media-ranges listed in header. The value of header must be a string that
    conforms to the format of the HTTP Accept: header. The value of 'supported'
    is a list of mime-types. The list of supported mime-types should be sorted
    in order of increasing desirability, in case of a situation where there is
    a tie.

    >>> best_match(['application/xbel+xml', 'text/xml'],
                   'text/*;q=0.5,*/*; q=0.1')
    'text/xml'
    r<   r   r   r"   é   r   )Ú_filter_blankr   r   Úappendr8   Úsort)Ú	supportedÚheaderÚsplit_headerr>   Úparsed_headerÚweighted_matchesÚposr   s           r   Ú
best_matchrK   ˜   s²   € ô ! §¡¨cÓ!2Ó3€LØ3?Ö@¨aÔ& qÕ)Ð@€MÐ@ØÐØ
€CØò ˆ	Ø×ÑÜ'¨	°=ÓAÀ3È	ÐRô	
ð 	ˆq‰‰ð	ð
 ×ÑÔà˜BÑ Ñ" 1Ñ%ÒAÐ*:¸2Ñ*>¸qÑ*AÒGÀRÐGùò As   ŸB
c              #   óD   K  — | D ]  }|j                  «       sŒ|–— Œ y ­wr$   )r   )Úir   s     r   rB   rB   ´   s#   è ø€ Øò ˆØ�7‰7�9Ø‹Gñùs   ‚ ™ N)Ú__doc__Ú
__future__r   Ú	functoolsr   Ú__version__Ú
__author__Ú	__email__Ú__license__Ú__credits__r   r   r8   r:   r?   rK   rB   r%   r    r   ú<module>rV      sQ   ðñ
õ& 'å à€Ø€
Ø €	Ø€Ø€ò3ò0#ò6"+òJ
Cò4ò Hó8r    