
Á«‘_Ü	  ã            	   @   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 Gd d	 „  d	 e ƒ Z Gd
 d „  d e ƒ Z Gd d „  d e e e e	 e e ƒ Z d S)é   )Úcached_propertyé   )ÚWWWAuthenticateMixin)ÚBaseResponse)ÚCommonResponseDescriptorsMixin)ÚCORSResponseMixin)ÚETagResponseMixinc               @   s‚   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-5gj8f0j9/Werkzeug/werkzeug/wrappers/response.pyÚ__init__   s    	zResponseStream.__init__c             C   s[   |  j  r t d ƒ ‚ |  j j d d ƒ |  j j j | ƒ |  j j j d d  ƒ t | ƒ S)NzI/O operation on closed fileZmutableTz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 Wd  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   Ú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)ÚResponseStreamMixinzÎMixin 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   -