§
    ¥”jÂ  ã                   óx   — d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
  G d„ d¦  «        Z G d„ d	e¦  «        Zd
S )zœ
Content negotiation deals with selecting an appropriate renderer given the
incoming request.  Typically this will be based on the request's Accept header.
é    ©ÚHttp404)Ú
exceptions)Úapi_settings)Ú
_MediaTypeÚmedia_type_matchesÚorder_by_precedencec                   ó   — e Zd Zd„ Zdd„ZdS )ÚBaseContentNegotiationc                 ó    — t          d¦  «        ‚)Nz$.select_parser() must be implemented©ÚNotImplementedError)ÚselfÚrequestÚparserss      úi/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/rest_framework/negotiation.pyÚselect_parserz$BaseContentNegotiation.select_parser   s   € Ý!Ð"HÑIÔIÐIó    Nc                 ó    — t          d¦  «        ‚)Nz&.select_renderer() must be implementedr   )r   r   Ú	renderersÚformat_suffixs       r   Úselect_rendererz&BaseContentNegotiation.select_renderer   s   € Ý!Ð"JÑKÔKÐKr   ©N)Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r   r      s@   € € € € € ðJð Jð JðLð Lð Lð Lð Lð Lr   r   c                   ó,   — e Zd ZeZd„ Zdd„Zd„ Zd„ ZdS )ÚDefaultContentNegotiationc                 óL   — |D ] }t          |j        |j        ¦  «        r|c S Œ!dS )z�
        Given a list of parsers and a media type, return the appropriate
        parser to handle the incoming request.
        N)r   Ú
media_typeÚcontent_type)r   r   r   Úparsers       r   r   z'DefaultContentNegotiation.select_parser   s>   € ð
 ð 	ð 	ˆFÝ! &Ô"3°WÔ5IÑJÔJð Ø���ðàˆtr   Nc                 óZ  — | j         j        }|p|j                             |¦  «        }|r|                      ||¦  «        }|                      |¦  «        }t          |¦  «        D ]²}|D ]­}|D ]¨}	t          |j        |	¦  «        r‘t          |	¦  «        }
t          |j        ¦  «        j
        |
j
        k    rVd                     |j        ft          d„ |
j                             ¦   «         D ¦   «         ¦  «        z   ¦  «        }||fc c c S ||	fc c c S Œ©Œ®Œ³t          j        |¬¦  «        ‚)zq
        Given a request and a list of renderers, return a two-tuple of:
        (renderer, media type).
        ú;c              3   ó*   K  — | ]\  }}|› d |› �V — ŒdS )ú=Nr   )Ú.0ÚkeyÚvalues      r   ú	<genexpr>z<DefaultContentNegotiation.select_renderer.<locals>.<genexpr>C   sH   è è € ð &"ð &"á(2¨¨Uð (+Ð$4Ð$4¨UÐ$4Ð$4ð&"ð &"ð &"ð &"ð &"ð &"r   )Úavailable_renderers)ÚsettingsÚURL_FORMAT_OVERRIDEÚquery_paramsÚgetÚfilter_renderersÚget_accept_listr	   r   r!   r   Ú
precedenceÚjoinÚtupleÚparamsÚitemsr   ÚNotAcceptable)r   r   r   r   Úformat_query_paramÚformatÚacceptsÚmedia_type_setÚrendererr!   Úmedia_type_wrapperÚfull_media_types               r   r   z)DefaultContentNegotiation.select_renderer#   s•  € ð "œ]Ô>ÐØÐN 'Ô"6×":Ò":Ð;MÑ"NÔ"Nˆàð 	AØ×-Ò-¨i¸Ñ@Ô@ˆIà×&Ò& wÑ/Ô/ˆõ 2°'Ñ:Ô:ð 	8ð 	8ˆNØ%ð 8ð 8�Ø"0ð 8ð 8�JÝ)¨(Ô*=¸zÑJÔJð 8å-7¸
Ñ-CÔ-CÐ*å& xÔ':Ñ;Ô;ÔFØ.Ô9ò:ð :ð
 /2¯hªhØ!)Ô!4Ð 6Ý %ð &"ð &"à6HÔ6O×6UÒ6UÑ6WÔ6Wð&"ñ &"ô &"ñ !"ô !"ñ!"ñ/ô /˜Oð $,¨_Ð#<Ð<Ð<Ð<Ð<Ð<Ð<Ð<ð $,¨ZÐ#7Ð7Ð7Ð7Ð7Ð7Ð7Ð7ð)8ð8ð8õ0 Ô&¸9ÐEÑEÔEÐEr   c                 ó6   ‡— ˆfd„|D ¦   «         }|st           ‚|S )zœ
        If there is a '.json' style format suffix, filter the renderers
        so that we only negotiation against those that accept that format.
        c                 ó*   •— g | ]}|j         ‰k    ¯|‘ŒS r   )r:   )r(   r=   r:   s     €r   ú
<listcomp>z>DefaultContentNegotiation.filter_renderers.<locals>.<listcomp>U   s/   ø€ ð 3ð 3ð 3 (Ø œ¨6Ò1Ð1ð Ø1Ð1Ð1r   r   )r   r   r:   s     `r   r1   z*DefaultContentNegotiation.filter_renderersP   s=   ø€ ð
3ð 3ð 3ð 3¨ið 3ñ 3ô 3ˆ	àð 	ÝˆMØÐr   c                 óv   — |j                              dd¦  «        }d„ |                     d¦  «        D ¦   «         S )zd
        Given the incoming request, return a tokenized list of media
        type strings.
        ÚHTTP_ACCEPTz*/*c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   )Ústrip)r(   Útokens     r   rB   z=DefaultContentNegotiation.get_accept_list.<locals>.<listcomp>a   s    € Ð=Ð=Ð= %�—’‘”Ð=Ð=Ð=r   ú,)ÚMETAr0   Úsplit)r   r   Úheaders      r   r2   z)DefaultContentNegotiation.get_accept_list[   s;   € ð
 ”×!Ò! -°Ñ7Ô7ˆØ=Ð=¨6¯<ª<¸Ñ+<Ô+<Ð=Ñ=Ô=Ð=r   r   )	r   r   r   r   r-   r   r   r1   r2   r   r   r   r   r      s_   € € € € € Ø€Hðð ð ð+Fð +Fð +Fð +FðZ	ð 	ð 	ð>ð >ð >ð >ð >r   r   N)Ú__doc__Údjango.httpr   Úrest_frameworkr   Úrest_framework.settingsr   Úrest_framework.utils.mediatypesr   r   r	   r   r   r   r   r   ú<module>rQ      sè   ððð ð  Ð Ð Ð Ð Ð à %Ð %Ð %Ð %Ð %Ð %Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0ðð ð ð ð ð ð ð ð ð ð
Lð Lð Lð Lð Lñ Lô Lð LðK>ð K>ð K>ð K>ð K>Ð 6ñ K>ô K>ð K>ð K>ð K>r   