
    NwgO                        d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZmZ dd	lm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mZ ddlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z' ddl(m)Z)m*Z* ddl+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3 d Z4 G d d      Z5 G d de5      Z6 G d de5      Z7 G d de7      Z8 G d de5      Z9 G d  d!e5      Z: G d" d#e:      Z; G d$ d%e5      Z< G d& d'e5      Z= G d( d)e5      Z> G d* d+e5      Z? G d, d-      Z@ G d. d/e@      ZA G d0 d1e@      ZB G d2 d3e5      ZC G d4 d5e5      ZDy)6a  
Renderers are used to serialize a response into specific media types.

They give us a generic way of being able to handle various media types
on the response, such as JSON encoded data or HTML output.

REST framework also provides an HTML renderer that renders the browsable API.
    N)parse)forms)settings)ImproperlyConfigured)Page)enginesloader)NoReverseMatch)	mark_safe)parse_header_parameters)
SafeString)VERSION
exceptionsserializersstatus)INDENT_SEPARATORSLONG_SEPARATORSSHORT_SEPARATORScoreapi
coreschemapygments_cssyaml)
ParseError)is_form_media_typeoverride_method)api_settings)encodersjson)get_breadcrumbs)ClassLookupDictc                     | dk(  rd S | S )Nr    )values    O/var/www/horilla/myenv/lib/python3.12/site-packages/rest_framework/renderers.pyzero_as_noner%   &   s    A:4(5(    c                   (    e Zd ZdZdZdZdZdZddZy)BaseRendererz
    All renderers should extend this class, setting the `media_type`
    and `format` attributes, and override the `.render()` method.
    Nutf-8textc                     t        d      )Nz3Renderer class requires .render() to be implemented)NotImplementedError)selfdataaccepted_media_typerenderer_contexts       r$   renderzBaseRenderer.render4   s    !"WXXr&   NN)	__name__
__module____qualname____doc__
media_typeformatcharsetrender_styler1   r"   r&   r$   r(   r(   *   s#     JFGLYr&   r(   c                       e Zd ZdZdZdZej                  Ze	j                   Ze	j                  Ze	j                  ZdZd ZddZy)JSONRendererz,
    Renderer which serializes to JSON.
    zapplication/jsonr   Nc                    |rft        |      \  }}t        j                  t        t        t
              5  t        t        t        t        |d         d      d            cd d d        S |j                  dd       S # 1 sw Y   xY w)Nindent   r   )r   
contextlibsuppressKeyError
ValueError	TypeErrorr%   maxminintget)r-   r/   r0   base_media_typeparamss        r$   
get_indentzJSONRenderer.get_indentI   s}     '>>Q&R#OV$$Xz9E K#CCx0@,A1(Eq$IJK K  ##Hd33	K Ks   +A;;Bc                 R   |y|xs i }| j                  ||      }|| j                  rt        nt        }nt        }t        j                  || j                  || j                  | j                   |      }|j                  dd      j                  dd      }|j                         S )zB
        Render `data` into JSON, returning a bytestring.
        r&   )clsr>   ensure_ascii	allow_nan
separatorsu    z\u2028u    z\u2029)rK   compactr   r   r   r   dumpsencoder_classrN   strictreplaceencode)r-   r.   r/   r0   r>   rP   rets          r$   r1   zJSONRenderer.renderU   s     <+1r!46FG>-1\\)J*Jjjd(((9(9++o*
 kk(I.66xKzz|r&   r2   )r3   r4   r5   r6   r7   r8   r   JSONEncoderrS   r   UNICODE_JSONrN   COMPACT_JSONrQ   STRICT_JSONrT   r9   rK   r1   r"   r&   r$   r<   r<   8   sS     $JF((M#000L''G%%F G
4r&   r<   c                   H    e Zd ZdZdZdZdZddgZdZddZ	d	 Z
d
 Zd Zd Zy)TemplateHTMLRenderera_  
    An HTML renderer for use with templates.

    The data supplied to the Response object should be a dictionary that will
    be used as context for the template.

    The template name is determined by (in order of preference):

    1. An explicit `.template_name` attribute set on the response.
    2. An explicit `.template_name` attribute set on this class.
    3. The return result of calling `view.get_template_names()`.

    For example:
        data = {'users': User.objects.all()}
        return Response(data, template_name='users.html')

    For pre-rendered HTML, see StaticHTMLRenderer.
    	text/htmlhtmlNz%(status_code)s.htmlzapi_exception.htmlr)   c                 8   |xs i }|d   }|d   }|d   }|j                   r| j                  |      }n#| j                  ||      }| j                  |      }t	        | d      r| j                  |||      }	n| j                  ||      }	|j                  |	|      S )aQ  
        Renders data to HTML, using Django's standard template rendering.

        The template name is determined by (in order of preference):

        1. An explicit .template_name set on the response.
        2. An explicit .template_name set on this class.
        3. The return result of calling view.get_template_names().
        viewrequestresponseresolve_contextrb   )	exceptionget_exception_templateget_template_namesresolve_templatehasattrrd   get_template_contextr1   )
r-   r.   r/   r0   ra   rb   rc   templatetemplate_namescontexts
             r$   r1   zTemplateHTMLRenderer.render   s     ,1r'"9-#J/228<H!44XtDN,,^<H4*+**4(CG//6FGGw88r&   c                 ,    t        j                  |      S N)r	   select_template)r-   rm   s     r$   ri   z%TemplateHTMLRenderer.resolve_template   s    %%n55r&   c                 F    |d   }|j                   r|j                  |d<   |S )Nrc   status_code)rf   rs   )r-   r.   r0   rc   s       r$   rk   z)TemplateHTMLRenderer.get_template_context   s*    #J/"*"6"6Dr&   c                     |j                   r|j                   gS | j                   r| j                   gS t        |d      r|j                         S t        |d      r|j                   gS t        d      )Nrh   template_namezaReturned a template response with no `template_name` attribute set on either the view or response)ru   rj   rh   r   )r-   rc   ra   s      r$   rh   z'TemplateHTMLRenderer.get_template_names   su    !!**++&&''T/0**,,T?+&&''"o
 	
r&   c                 $   | j                   D cg c]  }|d|j                  iz   }}	 | j                  |      S c c}w # t        $ rF d|j                  |j                  j                         fz  }t        d   j                  |      }|cY S w xY w)Nrs   z%d %sdjango)exception_template_namesrs   ri   	Exceptionstatus_texttitler   from_string)r-   rc   namerm   bodyrl   s         r$   rg   z+TemplateHTMLRenderer.get_exception_template   s    &*&C&CE" -1E1E!FF E E	((88E  	h22H4H4H4N4N4PQQDx(44T:HO		s   ;A   ABBr2   )r3   r4   r5   r6   r7   r8   ru   rx   r9   r1   ri   rk   rh   rg   r"   r&   r$   r]   r]   q   sF    $ JFM  G986
r&   r]   c                   $    e Zd ZdZdZdZdZddZy)StaticHTMLRendereraV  
    An HTML renderer class that simply returns pre-rendered HTML.

    The data supplied to the Response object should be a string representing
    the pre-rendered HTML content.

    For example:
        data = '<html><body>example</body></html>'
        return Response(data)

    For template rendered HTML, see TemplateHTMLRenderer.
    r^   r_   r)   Nc                    |xs i }|j                  d      }|rg|j                  r[|d   }| j                  |      }t        | d      r| j	                  |||      }n| j                  ||      }|j                  ||      S |S )Nrc   rb   rd   re   )rH   rf   rg   rj   rd   rk   r1   )r-   r.   r/   r0   rc   rb   rl   rn   s           r$   r1   zStaticHTMLRenderer.render   s    +1r#''
3**&y1G228<Ht./..tWhG33D:JK??7G?<<r&   r2   )r3   r4   r5   r6   r7   r8   r9   r1   r"   r&   r$   r   r      s     JFGr&   r   c            
          e Zd ZdZdZdZdZdZdZ e	i e
j                  ddd	e
j                  dd
d	e
j                  ddd	e
j                  ddd	e
j                  ddd	e
j                   ddd	e
j"                  ddd	e
j$                  ddd	e
j&                  ddd	e
j(                  ddie
j*                  ddie
j,                  ddie
j.                  ddie
j0                  ddie
j2                  ddie
j4                  ddie
j6                  ddie
j8                  ddie
j:                  ddie
j<                  ddii      Zd Z ddZ!y)HTMLFormRendererai  
    Renderers serializer data into an HTML form.

    If the serializer was instantiated without an object then this will
    return an HTML form not bound to any object,
    otherwise it will return an HTML form with the appropriate initial data
    populated from the object.

    Note that rendering of field and form errors is not currently supported.
    r^   formr)   zrest_framework/vertical/z	form.htmlz
input.htmlr*   )base_template
input_typeemailurlnumberdatetime-localdatetimefiler   zcheckbox.htmlzselect.htmlzselect_multiple.htmlzfieldset.htmlzlist_fieldset.htmlzlist_field.htmlzdict_field.htmlztextarea.htmlc                 l   t        |j                  t        j                        ry| j                  |   j                         }|j                  |j                         d|vr|j                  d| j                        |d<   | |d<   |j                         }|j                  d      dk(  r:t        |j                  t              r |j                  j                  d      |_        d|v r|d   }n|d   j                  d      dz   |d	   z   }t        j                   |      }||d
}|j#                  |      S )N template_packrendererr   r   Zrl   /r   )fieldstyle)
isinstance_fieldr   HiddenFielddefault_stylecopyupdater   rH   r   as_form_fieldr#   strrstripstripr	   get_templater1   )r-   r   parent_styler   ru   rl   rn   s          r$   render_fieldzHTMLFormRenderer.render_fieldH  s   ellK$;$;<""5)..0U[[!%'%1%5%5otGYGY%ZE/" j ##%99\"&66:ekkSV;W++,,S1EK!*-M!/288=CeOF\\M&&}5!E2w''r&   Nc                    |xs i }|j                   }|j                  di       }d|vr| j                  |d<   | |d<   |d   j                  d      }|dz   | j                  z   }t        j                  |      }||d}	|j                  |	      S )zN
        Render serializer data and return an HTML form, as a string.
        r   r   r   r   )r   r   )
serializerrH   r   r   r   r	   r   r1   )
r-   r.   r/   r0   r   r   r   ru   rl   rn   s
             r$   r1   zHTMLFormRenderer.rendera  s     ,1r $$Wb1%'%)%7%7E/" jo.44S9%+d.@.@@&&}5
 w''r&   r2   )"r3   r4   r5   r6   r7   r8   r9   r   r   r    r   Field
EmailFieldURLFieldIntegerField
FloatFieldDateTimeField	DateField	TimeField	FileFieldBooleanFieldChoiceFieldMultipleChoiceFieldRelatedFieldManyRelatedField
SerializerListSerializer	ListField	DictFieldFilePathField	JSONFieldr   r   r1   r"   r&   r$   r   r      sn   	 JFG.MM# F%) 
F%
 	)!!
F% 	)
F% 	  )"#
F%" 	)"!
#F%* 	!!)*$
+F%2 	)  
3F%: 	)  
;F%B 	)  
CF%J 	  _#
KF%P 	]"
QF%V 	''3*
WF%\ 	  ]#
]F%b 	$$3'
cF%h 	_!
iF%n 	""1%
oF%t 	. 
uF%z 	. 
 	!!]$
 	_ 
GF% FMP(2(r&   r   c                       e Zd ZdZdZdZdZdZdZdZ	e
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d ZddZy)BrowsableAPIRendererz6
    HTML renderer used to self-document the API.
    r^   apizrest_framework/api.htmlz rest_framework/filters/base.htmlemacsr)   c                     |j                   D cg c]  }t        |t              s| }}|D cg c]  }t        |d      s| }}|sy|r
 |d          S  |d          S c c}w c c}w )zs
        Return an instance of the first valid renderer.
        (Don't use another documenting renderer.)
        rh   Nr   )renderer_classes
issubclassr   rj   )r-   ra   r   	renderersnon_template_rendererss        r$   get_default_rendererz)BrowsableAPIRenderer.get_default_renderer  s    
 /3.C.C H(&x1EF  H	 H;D "Rx)0;O)P #+ "R "R #,)!,..y|~H"Rs
   AA#c                     |syd|d<   |j                  |||      }t        |dd      }|dv s
J d|z         |dk(  rd	t        |      z  S t        |t              r|j                  d
      S |S )zm
        Get the content as if it had been rendered by the default
        non-documenting renderer.
        z[No renderers were found]   r>   r:   r*   )r*   binaryz7Expected .render_style "text" or "binary", but got "%s"r   z[%d bytes of binary content]r)   )r1   getattrlenr   bytesdecode)r-   r   r.   r/   r0   contentr:   s          r$   get_contentz BrowsableAPIRenderer.get_content  s     .%&"//$(;=MNx@11 	> 4/1=4> 	>18#1CL@@*4We*Dw~~g&Q'Qr&   c                     ||j                   vry	 |j                  |       ||j                  ||       y# t        j                  $ r Y yw xY w)zI
        Returns True if a form should be shown for this method.
        NFT)allowed_methodscheck_permissionscheck_object_permissionsr   APIException)r-   ra   methodrb   objs        r$   show_form_for_methodz)BrowsableAPIRenderer.show_form_for_method  s\     ---	""7+--gs;  && 		s   %7 AAc                 8    || j                   |d|d<    ||i |S )N)rb   r8   ra   rn   )r8   )r-   serializer_classview_instancerb   argskwargss         r$   _get_serializerz$BrowsableAPIRenderer._get_serializer  s-    kk!
y
  000r&   c                    t        |dd      }|r-t        |dd      s t        |dd      }t        |t              rd}nd}|j                  |k(  r|	 d|j                  i}|}ni }d}t        |||      5 }| j                  ||||      s
	 ddd       y|dv r
	 ddd       yt        |d	d      }	t        |d
d      }
|	s|
rt        d |j                  D              s
	 ddd       y|=t        j                  t              5  | j                  |      cddd       cddd       S |	r,|dv r |j                  dd|i|}nX |j                  di |}nE|dv r" | j                  |j                   ||fd|i|}n | j                  |j                   ||fi |}| j                  |      cddd       S # t
        $ r i }Y _w xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z
        Return a string representing a rendered HTML form, possibly bound to
        either the input or output data.

        In the absence of the View having an associated form then return None.
        r   NmanyFinstancer.   )DELETEOPTIONSTget_serializerr   c              3   F   K   | ]  }t        |j                          y wrp   )r   r7   ).0parsers     r$   	<genexpr>z>BrowsableAPIRenderer.get_rendered_html_form.<locals>.<genexpr>  s     `&*6+<+<=`s   !PUTPATCHr"   )r   r   r   r   r.   r   r   r   anyparser_classesr@   rA   rD   render_form_for_serializerr   r   r   )r-   r.   ra   r   rb   r   r   r   existing_serializerhas_serializerhas_serializer_classs              r$   get_rendered_html_formz+BrowsableAPIRenderer.get_rendered_html_form  s@    T<6
gj&%@z:t<H(D)H
 >>V#
(> ',,/ #-F"&T7F3 !	?w,,T67HM!	? !	? ..!	? !	? %T+;TBN#*41CT#J  $,@`DL_L_``!	? !	?  #.((3 P::;NOP P#!	? !	?& --!4!4!4!Qh!Q&!QJ!4!4!4!>v!>J --!5!5!5d6K6KT6="\HP"\TZ"\J "6!5!5d6K6KT6="IAG"IJ 22:>C!	? !	?  0P P#!	? !	?sO   F0 3GG ;G$G?G	G#BG0F?>F?G	GGc                     t        |t        j                        ry t        |d      r|j	                          | j                         }|j                  |j                  | j                  dddii      S )Ninitial_datar   r   zrest_framework/horizontal)	r   r   r   rj   is_validform_renderer_classr1   r.   r/   )r-   r   form_renderers      r$   r   z/BrowsableAPIRenderer.render_form_for_serializer  sj    j+"<"<=:~.!002##OO$$(CDE
 	
r&   c                 `   t        |dd      }|r-t        |dd      s t        |dd      }t        |t              rd}nd}t        |||      5 }| j	                  ||||      s
	 ddd       y|j
                  d   }t        |dd      }t        |d      r|r|d	v r|j                  |
      }n|j                         } |       }	| j                  }
| j                  j                         }d|d<   t        |t        j                        }|r|j                  n|}|j                  j                         }|j                  j!                         D ]2  \  }}t        |t        j"                        s!|j%                  |d       4 |r|gn|}|	j'                  ||
|      j)                         nd|j
                  D cg c]  }|j*                   }}|D cg c]  }||f c}|d    G fddt,        j.                        } |       cddd       S c c}w c c}w # 1 sw Y   yxY w)z
        Returns a form that allows for arbitrary content types to be tunneled
        via standard HTML forms.
        (Which are typically application/x-www-form-urlencoded)
        r   Nr   Fr   r   renderer_classr   r   )r   r   r>   c            	           e Zd Z ej                  dW  W  ej
                  ddi            Z ej                  d ej                  ddi      W d	      Z	y
)BBrowsableAPIRenderer.get_raw_data_form.<locals>.GenericContentFormz
Media typezdata-overridezcontent-type)attrs)labelchoicesinitialwidgetContentr   F)r   r   r   requiredN)
r3   r4   r5   r   r   Select_content_type	CharFieldTextarea_content)r   r   r   s   r$   GenericContentFormr   F  s_     1 1 1&##'5<<.OP	! +5??#)5>>)0LM#"	r&   r  )r   r   r   r   r   r   rj   r   r/   r0   r   r   r   childr.   fieldsitemsr   popr1   r   r7   r   Form)r-   r.   ra   r   rb   r   r   default_parserr   r   acceptedrn   is_list_serializerr}   r   r   media_typesr7   r  r   r   r   s                      @@@r$   get_raw_data_formz&BrowsableAPIRenderer.get_raw_data_form  s(    T<6
gj&%@z:t<H(D)HT7F3 9	(w,,T67HM9	( 9	( "003N$^5EtLNt-.> --!%!4!4h!4!GJ!%!4!4!6J *+33//446$%! &0
K<V<V%W"1CZ--
!++-#-#4#4#:#:#< -KD%!%)@)@At,- "4v"//$'B!..* <@;N;NO6,,OKOBMNJ
J/NG!!nG UZZ  &'s9	( 9	(N PNQ9	( 9	(s8   H$.DH$2AH$HH$H%+H$
H$$H-c                 "    |j                         S rp   )get_view_name)r-   ra   s     r$   get_namezBrowsableAPIRenderer.get_nameV  s    !!##r&   c                 l    |t         j                  t         j                  fv ry|j                  d      S )Nr   T)r_   )r   HTTP_401_UNAUTHORIZEDHTTP_403_FORBIDDENget_view_descriptionr-   ra   rs   s      r$   get_descriptionz$BrowsableAPIRenderer.get_descriptionY  s2    6779R9RSS((d(33r&   c                 .    t        |j                  |      S rp   )r   path)r-   rb   s     r$   r   z$BrowsableAPIRenderer.get_breadcrumbs^  s    w||W55r&   c                     |t         j                  t         j                  fv ry t        |d      sy |j	                         S )Nget_extra_action_url_map)r   r  r  rj   r  r  s      r$   get_extra_actionsz&BrowsableAPIRenderer.get_extra_actionsa  s;    F88&:S:STT9:,,..r&   c                    t        |d      rt        |d      sy t        |dd       }t        |t              rn(||	 |j	                  |       nt        |t              sy |j                         }g }|j                  D ];  }t        |d      s |       j                  |||      }|s+|j                  |       = |sy t        j                  | j                        }	d|i}
|	j                  |
      S # t
        t        f$ r Y y w xY w)Nget_querysetfilter_backends	paginatorto_htmlelements)rj   r   r   listget_resultsrD   rB   r  r  r   appendr	   r   filter_templater1   )r-   r.   ra   rb   r  querysetr!  backendr_   rl   rn   s              r$   get_filter_formz$BrowsableAPIRenderer.get_filter_formi  s
   t^,GDBS4T D+t4	dD!"t'7%%d+ D$'$$&++ 	*Gw	*y(((DAOOD)		* &&t';';<x(w''% x( s   C3 3DDc                 B   |d   }|d   }|d   }| j                  |      }| j                  ||d|      }| j                  ||d|      }	| j                  ||d|      }
|	xs |
}t        t        |j	                                     }d}|r-d|j
                  z  }|j                  r|d	|j                  z  z  }||d
<   t        |dd      r#|j                  j                  r|j                  }nd}t        j                  }t        j                  }|j                  d      r|dd }|j                  dd      }i d| j                  ||||      dt!        | j"                        d|d|d|d|j$                  d| j'                  ||j(                        d| j+                  |      dt,        d|d| j/                  |      d|j0                  d|j2                  D cg c]  }|j4                   c}d|d| j7                  ||d|      d| j7                  ||d|      d| j7                  ||d|      | j7                  ||d|      | j9                  ||j(                        | j;                  |||      |	||
|t=        |j(                  d k7        t>        ||d!S c c}w )"z5
        Returns the context used to render.
        ra   rb   rc   POSTr   r   r   z%sz ;%szContent-Typer  NHTTP_   _-r   
code_styleuserdescriptionr}   versionbreadcrumblistr   available_formatsresponse_headersput_form	post_formdelete_formr   r   i  )options_formextra_actionsfilter_formraw_data_put_formraw_data_post_formraw_data_patch_formraw_data_put_or_patch_formdisplay_edit_formsr   csrf_cookie_namecsrf_header_name) r   r  dictsortedr  r7   r9   r   r  display_page_controlsr   CSRF_COOKIE_NAMECSRF_HEADER_NAME
startswithrU   r   r   r/  r0  r  rs   r  r   r   r   r   r8   r   r  r(  boolr   )r-   r.   r/   r0   ra   rb   rc   r   r=  r<  r>  r?  r5  renderer_content_typer  rA  rB  renderer_clss                     r$   get_contextz BrowsableAPIRenderer.get_context  s&     '"9-#J/,,T2!33D$P 224ugN"44T4'R%6%M:M"x~~'7 89 "$(8+>+>$>!%(2B2B)BB%+@(4d+0T0TII#44#44&&w//3+33C=#
t''$8KM]^#
,t7#
 D#
 w	#

 #
 GLL#
 4//h6J6JK#
 DMM$'#
 w#
 #
 d227;#
 t33#
  $J_J_!`,,"5"5!`#
  0#
  33D$wO!#
" 44T4Q##
$ 466tT8WU%#
& !77dIwW!33D(:N:NO//dGD!2"4#6*D"&x';';s'B"C( 0 0E#
 #	
 "as   JNc                 0   |xs d| _         |xs i | _        t        j                  | j                        }| j                  |||      }|j                  ||d         }|d   }|j                  t        j                  k(  rt        j                  |_        |S )G
        Render the HTML for the browsable API representation.
        r   rb   re   rc   )r/   r0   r	   r   rl   rL  r1   rs   r   HTTP_204_NO_CONTENTHTTP_200_OK)r-   r.   r/   r0   rl   rn   rW   rc   s           r$   r1   zBrowsableAPIRenderer.render  s     $7#<"  0 6B&&t}}5""4)<>NOoog/?	/JoK
 $J/6#=#==#)#5#5H 
r&   r2   )r3   r4   r5   r6   r7   r8   rl   r%  r/  r9   r   r   r   r   r   r   r   r   r  r  r  r   r  r(  rL  r1   r"   r&   r$   r   r   w  sy     JF(H8OJG* R(1>?@
H(T$4
6/(>E
Nr&   r   c                   4     e Zd ZdZdZddZ fdZd Z xZS )AdminRendererzrest_framework/admin.htmladminc                    |xs d| _         |xs i | _        |d   }|d   }| j                  d   }|j                  t        j                  k(  r| j                  |||j                  |      | _        dddj                  |j                  d      | _	        t        ||d	      5 } |j                  |g|j                  i |j                  }d d d        |j                  }t        j                  | j                         }| j#                  |||      }|j%                  ||d   
      }	|j                  t        j&                  k(  r.d|v r*t        j(                  |_        |j+                         |d<   d}	|j                  t        j,                  k(  r2t        j(                  |_        	 | j/                  |      d   d   |d<   d}	|	S # 1 sw Y   xY w# t0        $ r |j2                  |d<   Y *w xY w)Nr   rc   rb   ra   CreateEdit)r*  r   ErrorsGETre   Location   )r/   r0   rs   r   HTTP_400_BAD_REQUESTr   r   
error_formrH   error_titler   r   r   r.   r	   r   rl   rL  r1   HTTP_201_CREATEDHTTP_303_SEE_OTHERbuild_absolute_urirO  r   rB   	full_path)
r-   r.   r/   r0   rc   rb   ra   rl   rn   rW   s
             r$   r1   zAdminRenderer.render  s   #6#<"  0 6B#J/"9-$$V,6#>#>> #99$gnnV]^DO(0@DDW^^U]^D w6 H'#488GGdiiG4;;GH==D&&t}}5""4)<>NOoog/?	/JoK 6#:#::zX?U#)#<#<H #*#=#=#?HZ C6#=#==#)#<#<H 9'+';';G'DR'H'K$ C
1H H&  9'.'8'8$9s   !+G&G GG+*G+c                 R   t         |   |||      }t        |d   dd      }||	 |j                  |      }n|}|i }d}n t        |t              r|r|d   ni }d}n|}d}|D 	cg c]
  }	|	dk7  s	|	 }
}	|D 	cg c]
  }	|	dk7  s	|	 }}	t        |t              r5d|v r1|D ],  }| j                  ||d         }||j                  d|       . ||d<   |
|d	<   ||d
<   ||d<   t        | dd      |d<   t        | dd      |d<   |S # t        t
        f$ r |}Y w xY wc c}	w c c}	w )rN  ra   r  Ndetailr   r"  r   r   columnsdetailsresultsr]  r^  )
superrL  r   r#  rD   rB   r   r"  get_result_url
setdefault)r-   r.   r/   r0   rn   r  rg  headerr   keyre  rf  resultr   	__class__s                 r$   rL  zAdminRenderer.get_context  s    '%%'7
 GFO[$?	 T%5#//5 G?FE&#*WQZFEFE"(93C5L399"(93C5L399gt$3C)C! 2))&'&/B?%%eS12
 !$	$	$	 'lD A!(}d!C= x(  :9s)   D '
D2D<
D$D$DDc                     t        |d      rt        |d      sy|j                  }t        |dd      xs |}	 |||   i}|j                  d|      S # t        t
        f$ r Y yw xY w)z
        Attempt to reverse the result's detail view URL.

        This only works with views that are generic-like (has `.lookup_field`)
        and viewset-like (has `.basename` / `.reverse_action()`).
        reverse_actionlookup_fieldNlookup_url_kwargrd  )r   )rj   rq  r   rp  rB   r
   )r-   rm  ra   rq  rr  r   s         r$   ri  zAdminRenderer.get_result_url<  s}     t-.t^,(("4);TBRl	&|(<=F&&x&??.) 		s   A A$#A$r2   )	r3   r4   r5   rl   r8   r1   rL  ri  __classcell__)rn  s   @r$   rR  rR    s    *HF&P*Xr&   rR  c                   :    e Zd ZdZdZdZdZdZdZg dZ	d Z
dd
Zy	)DocumentationRendererr^   r_   r)   zrest_framework/docs/index.htmlzrest_framework/docs/error.htmlr   )shell
javascriptpythonc                     || j                   | j                   D cg c]  }d|z  	 c}| j                   D cg c]  }d|z  	 c}t        | j                        |dS c c}w c c}w )Nz!rest_framework/docs/langs/%s.htmlz'rest_framework/docs/langs/%s-intro.html)documentlangs
lang_htmlslang_intro_htmlsr/  rb   )	languagesr   r/  )r-   r.   rb   languages       r$   rL  z!DocumentationRenderer.get_contextZ  sc    ^^Z^ZhZhih>Iifjftft uZb!JX!U u&t7
 	
 j us
   AA"
Nc                 j   t        |t        j                        rJt        j                  | j
                        }| j                  ||d         }|j                  ||d         S t        j                  | j                        }||d   |d   t        j                  d}|j                  ||d         S )Nrb   re   rc   )r.   rb   rc   debug)r   r   Documentr	   r   rl   rL  r1   error_templater   DEBUG)r-   r.   r/   r0   rl   rn   s         r$   r1   zDocumentationRenderer.renderd  s    dG,,-**4==9H&&t-=i-HIG??74DY4O?PP**4+>+>?H+I6,Z8!	G ??74DY4O?PPr&   r2   )r3   r4   r5   r7   r8   r9   rl   r  r/  r~  rL  r1   r"   r&   r$   ru  ru  Q  s0    JFG/H5NJ1I
Qr&   ru  c                   $    e Zd ZdZdZdZdZddZy)SchemaJSRendererzapplication/javascriptrw  r)   zrest_framework/schema.jsNc                 ,   t         j                  j                         }t        j                  |j                  |            j                  d      }t        j                  | j                        }dt        |      i}|d   }|j                  ||      S )Nasciischemarb   re   )r   codecsCoreJSONCodecbase64	b64encoderV   r   r	   r   rl   r   r1   )	r-   r.   r/   r0   codecr  rl   rn   rb   s	            r$   r1   zSchemaJSRenderer.renderz  sx    ,,.!!%,,t"45<<WE&&t}}5Yv./"9-w88r&   r2   )r3   r4   r5   r7   r8   r9   rl   r1   r"   r&   r$   r  r  t  s    )JFG)H9r&   r  c                   $    e Zd ZdZdZdZdZddZy)MultiPartRendererz,multipart/form-data; boundary=BoUnDaRyStRiNg	multipartr)   BoUnDaRyStRiNgNc                     ddl m} t        |d      r2|j                         D ]  \  }}t	        |t
              sJ d|z           || j                  |      S )Nr   )encode_multipartr  zTest data contained a dictionary value for key '%s', but multipart uploads do not support nested data. You may want to consider using format='json' in this test case.)django.test.clientr  rj   r  r   rC  BOUNDARY)r-   r.   r/   r0   r  rl  r#   s          r$   r1   zMultiPartRenderer.render  sa    74!"jjl 
U%eT2 ! $''2  t44r&   r2   )r3   r4   r5   r7   r8   r9   r  r1   r"   r&   r$   r  r    s    ?JFGH5r&   r  c                   &    e Zd ZdZdZdZd ZddZy)CoreJSONRendererzapplication/coreapi+jsonNcorejsonc                     t         sJ d       y )Nz7Using CoreJSONRenderer, but `coreapi` is not installed.r   r-   s    r$   __init__zCoreJSONRenderer.__init__  s    QQQwr&   c                     t        |j                  dd            }t        j                  j	                         }|j                  ||      S )Nr>   r   )r>   )rI  rH   r   r  r  dump)r-   r.   r7   r0   r>   r  s         r$   r1   zCoreJSONRenderer.render  s?    &**8Q78,,.zz$vz..r&   r2   r3   r4   r5   r7   r9   r8   r  r1   r"   r&   r$   r  r    s    +JGFR/r&   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)_BaseOpenAPIRendererc                    t         j                  dt         j                  dt         j                  dt         j                  dt         j
                  dt         j                  di}i }|j                  |v r||j                     |d<   |j                  |d<   |j                  |d	<   t        |d
      r|j                  |d
<   |S )Nobjectarrayr   integerstringbooleantyper{   r1  enum)r   ObjectArrayNumberIntegerStringBooleanrn  r{   r1  rj   r  )r-   r   CLASS_TO_TYPENAMEr  s       r$   
get_schemaz_BaseOpenAPIRenderer.get_schema  s    xgx	x	
 !22.x/A/ABF6N"..w ( 4 4}8V$%]]F6Nr&   c                 J   g }|j                   D ]  }|j                  dvr|j                  |j                  d}|j                  rd|d<   |j                  r|j                  |d<   |j
                  r| j                  |j
                        |d<   |j                  |        |S )N)r  query)r}   inTr   r1  r  )r  locationr}   r   r1  r  r  r$  )r-   link
parametersr   	parameters        r$   get_parametersz#_BaseOpenAPIRenderer.get_parameters  s    
[[ 	)E~~%66

nnI ~~(,	*%  +0+<+<	-(||&*ooell&C	(#i(	) r&   c                     |r|d|n|}| j                  |      }d|i}|j                  r|j                  |d<   |j                  r|j                  |d<   |r||d<   |r|g|d<   |S )Nr-  operationIdsummaryr1  r  tags)r  r{   r1  )r-   r  r}   tagoperation_idr  	operations          r$   get_operationz"_BaseOpenAPIRenderer.get_operation  s    03#t,((.
 <
	 ::#'::Ii '+'7'7Im$&0Il#!$Ifr&   c                    i }d }|j                   j                         D ]t  \  }}t        j                  |j                        j
                  }|j                  j                         }|j                  |i        | j                  |||      ||   |<   v |j                  j                         D ]  \  }}|j                   j                         D ]t  \  }}t        j                  |j                        j
                  }|j                  j                         }|j                  |i        | j                  |||      ||   |<   v  |S )N)r  )linksr  r   urlparser   r  actionlowerrj  r  r.   )	r-   rz  pathsr  r}   r  r  r   sections	            r$   	get_pathsz_BaseOpenAPIRenderer.get_paths  s/   "....0 	JJD$>>$((+00D[[&&(FT2&"&"4"4T4S"4"IE$K		J %MM//1 	NLC%mm113 N
d~~dhh/44**,  r*&*&8&8t&8&MdF#	N	N r&   c                 x    dd|j                   |j                  dd|j                  ig| j                  |      dS )Nz3.0.0r   )r2  r{   r1  r   )openapiinfoserversr  )r{   r1  r   r  r-   r.   s     r$   get_structurez"_BaseOpenAPIRenderer.get_structure  sJ    #// txx  ^^D)
 	
r&   N)r3   r4   r5   r  r  r  r  r  r"   r&   r$   r  r    s    &$"&
r&   r  c                   &    e Zd ZdZdZdZd ZddZy)CoreAPIOpenAPIRendererapplication/vnd.oai.openapiNr  c                 8    t         sJ d       t        sJ d       y )Nz=Using CoreAPIOpenAPIRenderer, but `coreapi` is not installed.z<Using CoreAPIOpenAPIRenderer, but `pyyaml` is not installed.)r   r   r  s    r$   r  zCoreAPIOpenAPIRenderer.__init__  s    WWWwSSStr&   c                 n    | j                  |      }t        j                  |d      j                         S )NF)default_flow_style)r  r   r  rV   r-   r.   r7   r0   	structures        r$   r1   zCoreAPIOpenAPIRenderer.render  s,    &&t,	yyu=DDFFr&   r2   r  r"   r&   r$   r  r    s    .JGFTGr&   r  c                   @    e Zd ZdZdZdZej                   Zd Z	ddZ
y)CoreAPIJSONOpenAPIRenderer application/vnd.oai.openapi+jsonNopenapi-jsonc                     t         sJ d       y )NzAUsing CoreAPIJSONOpenAPIRenderer, but `coreapi` is not installed.r  r  s    r$   r  z#CoreAPIJSONOpenAPIRenderer.__init__  s    [[[wr&   c                     | j                  |      }t        j                  |d| j                        j	                  d      S )Nr   )r>   rN   r)   )r  r   rR   rN   rV   r  s        r$   r1   z!CoreAPIJSONOpenAPIRenderer.render  s:    &&t,	zza**,,2F7O	<r&   r2   )r3   r4   r5   r7   r9   r8   r   rY   rN   r  r1   r"   r&   r$   r  r    s*    3JGF#000L\<r&   r  c                   &    e Zd ZdZdZdZd ZddZy)OpenAPIRendererr  Nr  c                     t         sJ d       y )Nz5Using OpenAPIRenderer, but `pyyaml` is not installed.)r   r  s    r$   r  zOpenAPIRenderer.__init__"  s    LLLtr&   c                 4    G d dt         j                        }|j                  t        |j                         |j                  t
        j                  t        j                  j                         t        j                  |dd|      j                  d      S )Nc                       e Zd Zd Zy)&OpenAPIRenderer.render.<locals>.Dumperc                      y)NTr"   r  s     r$   ignore_aliasesz5OpenAPIRenderer.render.<locals>.Dumper.ignore_aliases(  s    r&   N)r3   r4   r5   r  r"   r&   r$   Dumperr  '  s    r&   r  F)r  	sort_keysr  r)   )r   r  add_representerr   represent_strdatetime	timedeltar   CustomScalarrepresent_timedeltar  rV   )r-   r.   r7   r0   r  s        r$   r1   zOpenAPIRenderer.render%  sn    	T[[ 	 	z6+?+?@x1183H3H3\3\]yy%5QWX__`ghhr&   r2   r  r"   r&   r$   r  r    s    .JGFMir&   r  c                   R    e Zd ZdZdZej                  ZdZe	j                   ZddZy)JSONOpenAPIRendererr  Nr  c                 z    t        j                  || j                  d| j                        j	                  d      S )N   )rM   r>   rN   r)   )r   rR   rS   rN   rV   )r-   r.   r7   r0   s       r$   r1   zJSONOpenAPIRenderer.render6  s2    zzd((**,,2F7O	<r&   r2   )r3   r4   r5   r7   r9   r   rX   rS   r8   r   rY   rN   r1   r"   r&   r$   r  r  /  s/    3JG((MF#000L<r&   r  )Er6   r  r@   r  urllibr   rw   r   django.confr   django.core.exceptionsr   django.core.paginatorr   django.templater   r	   django.urlsr
   django.utils.htmlr   django.utils.httpr   django.utils.safestringr   rest_frameworkr   r   r   r   rest_framework.compatr   r   r   r   r   r   r   rest_framework.exceptionsr   rest_framework.requestr   r   rest_framework.settingsr   rest_framework.utilsr   r    rest_framework.utils.breadcrumbsr   "rest_framework.utils.field_mappingr    r%   r(   r<   r]   r   r   r   rR  ru  r  r  r  r  r  r  r  r  r"   r&   r$   <module>r     s;          7 & + & ' 5 . C C   1 F 0 / < >)Y Y6< 6rY< Yz- BE(| E(Pj< jZj( jZ QL  QF9| 9 5 5(/| /V
 V
rG1 G<!5 < il i$
<, 
<r&   