3
 [ð]	  ã               @   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 )ÚResponseStreamz¿A 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-build-w1as9q70/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jjdd ƒ t|ƒS )Nz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   x|D ]}| j |ƒ qW 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 )NzI/O operation on closed file)r
   r   )r   r   r   r   Úflush#   s    zResponseStream.flushc             C   s   | j rtdƒ‚dS )NzI/O operation on closed fileF)r
   r   )r   r   r   r   Úisatty'   s    zResponseStream.isattyc             C   s   | j jƒ  ttt| j j ƒƒS )N)r	   r   ÚsumÚmapr   )r   r   r   r   Útell,   s    
zResponseStream.tellc             C   s   | j jS )N)r	   Úcharset)r   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 )ÚResponseStreamMixinzÍMixin 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   -
