U
    Aޫ^	                  	   @   s   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 G dd	 d	eZG d
d deZG dd deeee	eeZdS )   )cached_property   )WWWAuthenticateMixin)BaseResponse)CommonResponseDescriptorsMixin)CORSResponseMixin)ETagResponseMixinc                   @   sX   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zedd ZdS )ResponseStreamzA file descriptor like object used by the :class:`ResponseStreamMixin` to
    represent the body of the stream.  It directly pushes into the response
    iterable of the response object.
    zwb+c                 C   s   || _ d| _d S )NF)responseclosed)selfr
    r   >/tmp/pip-unpacked-wheel-74fb410_/werkzeug/wrappers/response.py__init__   s    zResponseStream.__init__c                 C   sB   | j rtd| jjdd | jj| | jjdd  t|S )NI/O operation on closed fileT)ZmutablezContent-Length)r   
ValueErrorr
   _ensure_sequenceappendheaderspoplen)r   valuer   r   r   write   s    zResponseStream.writec                 C   s   |D ]}|  | qd S N)r   )r   seqitemr   r   r   
writelines   s    zResponseStream.writelinesc                 C   s
   d| _ d S )NT)r   r   r   r   r   close!   s    zResponseStream.closec                 C   s   | j rtdd S )Nr   r   r   r   r   r   r   flush$   s    zResponseStream.flushc                 C   s   | j rtddS )Nr   Fr   r   r   r   r   isatty(   s    zResponseStream.isattyc                 C   s   | j   ttt| j j S r   )r
   r   summapr   r   r   r   r   tell-   s    
zResponseStream.tellc                 C   s   | j jS r   )r
   charsetr   r   r   r   encoding1   s    zResponseStream.encodingN)__name__
__module____qualname____doc__moder   r   r   r   r    r!   r$   propertyr&   r   r   r   r   r	   	   s   r	   c                   @   s   e Zd ZdZedd ZdS )ResponseStreamMixinzMixin for :class:`BaseResponse` subclasses.  Classes that inherit from
    this mixin will automatically get a :attr:`stream` property that provides
    a write-only interface to the response iterable.
    c                 C   s   t | S )z+The response iterable as write-only stream.)r	   r   r   r   r   stream<   s    zResponseStreamMixin.streamN)r'   r(   r)   r*   r   r.   r   r   r   r   r-   6   s   r-   c                   @   s   e Zd ZdZdS )Responsea  Full featured response object implementing the following mixins:

    -   :class:`ETagResponseMixin` for etag and cache control handling
    -   :class:`WWWAuthenticateMixin` for HTTP authentication support
    -   :class:`~werkzeug.wrappers.cors.CORSResponseMixin` for Cross
        Origin Resource Sharing headers
    -   :class:`ResponseStreamMixin` to add support for the ``stream``
        property
    -   :class:`CommonResponseDescriptorsMixin` for various HTTP
        descriptors
    N)r'   r(   r)   r*   r   r   r   r   r/   B   s   r/   N)utilsr   authr   Zbase_responser   Zcommon_descriptorsr   Zcorsr   etagr   objectr	   r-   r/   r   r   r   r   <module>   s   -
