3
=^                 @   sT   d 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
 G dd deZd	S )
z
The Response class in REST framework is similar to HTTPResponse, except that
it is initialized with unrendered data, instead of a pre-rendered string.

The appropriate renderer is called during Django's template response rendering.
    )unicode_literals)SimpleTemplateResponse)six)	responses)
Serializerc                   sF   e Zd ZdZd fdd	Zedd Zedd	 Z fd
dZ  Z	S )Responsez]
    An HttpResponse that allows its data to be rendered into
    arbitrary media types.
    NFc       
         sj   t t| jd|d t|tr*d}t||| _|| _|| _|| _	|rfxt
j|D ]\}}	|	| |< qRW dS )z
        Alters the init arguments slightly.
        For example, drop 'template_name', and instead use 'data'.

        Setting 'renderer' and 'media_type' will typically be deferred,
        For example being set automatically by the `APIView`.
        N)statusztYou passed a Serializer instance as data, but probably meant to pass serialized `.data` or `.error`. representation.)superr   __init__
isinstancer   AssertionErrordatatemplate_name	exceptioncontent_typer   	iteritems)
selfr   r   r   headersr   r   msgnamevalue)	__class__ F/tmp/pip-build-8app2_gc/djangorestframework/rest_framework/response.pyr
      s    

zResponse.__init__c             C   s   t | dd }t | dd }t | dd }|s0td|s<td|d k	sLtd| |d< |j}|j}| j}|d kr|d k	rdj||}n|d kr|}|| d	< |j| j||}t|t	j
r|std
t|j|S |s| d	= |S )Naccepted_rendereraccepted_media_typerenderer_contextz&.accepted_renderer not set on Responsez(.accepted_media_type not set on Responsez%.renderer_context not set on Responseresponsez{0}; charset={1}zContent-Typez?renderer returned unicode, and did not specify a charset value.)getattrr   
media_typecharsetr   formatrenderr   r   r   	text_typebytesencode)r   Zrendererr   contextr   r    r   retr   r   r   rendered_content3   s.    zResponse.rendered_contentc             C   s   t j| jdS )zw
        Returns reason text corresponding to our HTTP response status code.
        Provided for convenience.
         )r   getstatus_code)r   r   r   r   status_textU   s    zResponse.status_textc                s6   t t| j }xd	D ]}||kr||= qW g |d< |S )
zO
        Remove attributes from the response that shouldn't be cached.
        r   r   resolver_matchclientrequestjsonwsgi_requestZ_closable_objects)r   r   r-   r.   r/   r0   r1   )r	   r   __getstate__)r   statekey)r   r   r   r2   ]   s     
zResponse.__getstate__)NNNNFN)
__name__
__module____qualname____doc__r
   propertyr(   r,   r2   __classcell__r   r   )r   r   r      s     "r   N)r8   
__future__r   Zdjango.template.responser   Zdjango.utilsr   Z"django.utils.six.moves.http_clientr   Zrest_framework.serializersr   r   r   r   r   r   <module>   s   