U
    (Q^	                     @   sx   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ZdS )   )cached_property   )WWWAuthenticateMixin)BaseResponse)CommonResponseDescriptorsMixin)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-install-bd4o36v9/Werkzeug/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   encoding0   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:`BaseRequest` 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,   5   s   r,   c                   @   s   e Zd ZdZdS )Responseaf  Full featured response object implementing the following mixins:

    - :class:`ETagResponseMixin` for etag and cache control handling
    - :class:`ResponseStreamMixin` to add support for the `stream` property
    - :class:`CommonResponseDescriptorsMixin` for various HTTP descriptors
    - :class:`WWWAuthenticateMixin` for HTTP authentication support
    N)r&   r'   r(   r)   r   r   r   r   r.   A   s   r.   N)utilsr   authr   Zbase_responser   Zcommon_descriptorsr   etagr   objectr   r,   r.   r   r   r   r   <module>   s   -
