Ë
    ûûàgÌ  ã                   ój   — 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y
)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y)ÚBaseContentNegotiationc                 ó   — t        d«      ‚)Nz$.select_parser() must be implemented©ÚNotImplementedError)ÚselfÚrequestÚparserss      úX/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/rest_framework/negotiation.pyÚselect_parserz$BaseContentNegotiation.select_parser   s   € Ü!Ð"HÓ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ÐKr   ©N)Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r
   r
      s   „ òJôLr   r
   c                   ó*   — e Zd ZeZd„ Zdd„Zd„ Zd„ Zy)ÚDefaultContentNegotiationc                 óZ   — |D ]&  }t        |j                  |j                  «      sŒ$|c S  y)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   s3   € ð
 ò 	ˆFÜ! &×"3Ñ"3°W×5IÑ5IÕJØ’ð	ð r   Nc                 ón  — | j                   j                  }|xs |j                  j                  |«      }|r| j	                  ||«      }| j                  |«      }t        |«      D ]¸  }|D ]±  }|D ]ª  }	t        |j                  |	«      sŒt        |	«      }
t        |j                  «      j                  |
j                  kD  rQdj                  |j                  ft        d„ |
j                  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   óF   K  — | ]  \  }}d j                  ||«      –— Œ y­w)z{}={}N)Úformat)Ú.0ÚkeyÚvalues      r   ú	<genexpr>z<DefaultContentNegotiation.select_renderer.<locals>.<genexpr>C   s'   è ø€ ò &"á(2¨¨Uð %,§N¡N°3¸×$>ñ&"ùs   ‚!)Ú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_paramr&   ÚacceptsÚmedia_type_setÚrendererr    Úmedia_type_wrapperÚfull_media_types               r   r   z)DefaultContentNegotiation.select_renderer#   s8  € ð "Ÿ]™]×>Ñ>ÐØÒN '×"6Ñ"6×":Ñ":Ð;MÓ"NˆáØ×-Ñ-¨i¸Ó@ˆIà×&Ñ& wÓ/ˆô 2°'Ó:ò 	8ˆNØ%ò 8�Ø"0ò 8�JÜ)¨(×*=Ñ*=¸zÕJä-7¸
Ó-CÐ*ä& x×':Ñ':Ó;×FÑFØ.×9Ñ9ò:ð
 /2¯h©hØ!)×!4Ñ!4Ð 6Ü %ñ &"à6H×6OÑ6O×6UÑ6UÓ6Wô&"ó !"ñ!"ó/˜Oð $,¨_Ð#<Ö<ð $,¨ZÐ#7Ö7ñ+8ñ8ð	8ô2 ×&Ñ&¸9ÔEÐEr   c                 ó\   — |D �cg c]  }|j                   |k(  r|‘Œ }}|st        ‚|S c c}w )zœ
        If there is a '.json' style format suffix, filter the renderers
        so that we only negotiation against those that accept that format.
        )r&   r   )r   r   r&   r;   s       r   r0   z*DefaultContentNegotiation.filter_renderersP   s?   € ð
 /8ö 3 (Ø Ÿ™¨6Ò1ò ð 3ˆ	ð 3áÜˆMØÐùò	3s   …)c                 óž   — |j                   j                  dd«      }|j                  d«      D �cg c]  }|j                  «       ‘Œ c}S c c}w )zd
        Given the incoming request, return a tokenized list of media
        type strings.
        ÚHTTP_ACCEPTz*/*ú,)ÚMETAr/   ÚsplitÚstrip)r   r   ÚheaderÚtokens       r   r1   z)DefaultContentNegotiation.get_accept_list[   s=   € ð
 —‘×!Ñ! -°Ó7ˆØ+1¯<©<¸Ó+<Ö= %�—‘•Ò=Ð=ùÒ=s   °A
r   )	r   r   r   r   r,   r   r   r0   r1   r   r   r   r   r      s   „ Ø€Hòó+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>rL      s:   ðñõ  å %Ý 0÷ñ ÷
Lñ LôK>Ð 6õ K>r   