ó
O'—^c           @@  sÐ  d  Z  d d l m Z d d l m Z m Z d d l Z d d l Z d d l Z d d l	 Z	 d d l
 m Z d d l m Z d d l m Z m Z d d	 l m Z d d
 l m Z m Z d Z d j e e e ƒ ƒ Z e j d k rBd d l Z d d l Z d d l Z e j Z  d Z! e j" Z# e j$ ƒ  Z% d „  Z& d „  Z' nX e j d k rŽd d l( Z( d d l( m  Z  m! Z! m# Z# d „  Z& d „  Z' n e) d ƒ ‚ d e j* f d „  ƒ  YZ* d e j+ f d „  ƒ  YZ+ d S(   so   
kombu.transport.filesystem
==========================

Transport using the file system as the message store.

i    (   t   absolute_import(   t   loadst   dumpsNi   (   t   virtual(   t   ChannelError(   t   Emptyt	   monotonic(   t   cached_property(   t   bytes_to_strt   str_to_bytest   .t   ntc         C@  s2   t  j |  j ƒ  ƒ } t  j | | d d t ƒ d  S(   Ni    I  ÿÿ    (   t	   win32filet   _get_osfhandlet   filenot
   LockFileExt   __overlapped(   t   filet   flagst   hfile(    (    s<   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/filesystem.pyt   lock'   s    c         C@  s/   t  j |  j ƒ  ƒ } t  j | d d t ƒ d  S(   Ni    I  ÿÿ    (   R   R   R   t   UnlockFileExR   (   R   R   (    (    s<   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/filesystem.pyt   unlock+   s    t   posix(   t   LOCK_EXt   LOCK_SHt   LOCK_NBc         C@  s   t  j |  j ƒ  | ƒ d  S(   N(   t   fcntlt   flockR   (   R   R   (    (    s<   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/filesystem.pyR   4   s    c         C@  s   t  j |  j ƒ  t  j ƒ d  S(   N(   R   R   R   t   LOCK_UN(   R   (    (    s<   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/filesystem.pyR   7   s    s9   Filesystem plugin only defined for NT and POSIX platformst   Channelc           B@  sw   e  Z d  „  Z d „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 e d „  ƒ Z e d „  ƒ Z RS(	   c         K@  sÌ   d t  t t ƒ  d ƒ ƒ t j ƒ  | f } t j j |  j | ƒ } zl y9 t	 | d ƒ } t
 | t ƒ | j t t | ƒ ƒ ƒ Wn, t t f k
 r® t d j | ƒ ƒ ‚ n XWd t | ƒ | j ƒ  Xd S(   s   Put `message` onto `queue`.s   %s_%s.%s.msgiè  t   wbs"   Cannot add file {0!r} to directoryN(   t   intt   roundR   t   uuidt   uuid4t   ost   patht   joint   data_folder_outt   openR   R   t   writeR	   R   t   IOErrort   OSErrorR   t   formatR   t   close(   t   selft   queuet   payloadt   kwargst   filenamet   f(    (    s<   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/filesystem.pyt   _put@   s     
c         C@  sj  d | d } t  j |  j ƒ } t | ƒ } x.t | ƒ d k r\| j d ƒ } | j | ƒ d k  rk q/ n  |  j r€ |  j } n t	 j
 ƒ  } y& t j t  j j |  j | ƒ | ƒ Wn t k
 rÅ n Xt  j j | | ƒ } yB t | d ƒ } | j ƒ  } | j ƒ  |  j st  j | ƒ n  Wn, t t f k
 rKt d j | ƒ ƒ ‚ n Xt t | ƒ ƒ SWt ƒ  ‚ d S(   s   Get next message from `queue`.R
   s   .msgi    t   rbs"   Cannot read file {0!r} from queue.N(   R$   t   listdirt   data_folder_int   sortedt   lent   popt   findt   store_processedt   processed_foldert   tempfilet
   gettempdirt   shutilt   moveR%   R&   R*   R(   t   readR-   t   removeR+   R   R,   R   R   R   (   R.   R/   t
   queue_findt   folderR2   R=   R3   R0   (    (    s<   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/filesystem.pyt   _getR   s6    	
	c         C@  s±   d } d | d } t  j |  j ƒ } x„ t | ƒ d k r¬ | j ƒ  } yN | j | ƒ d k  re w) n  t  j j |  j | ƒ } t  j | ƒ | d 7} Wq) t	 k
 r¨ q) Xq) W| S(   s!   Remove all messages from `queue`.i    R
   s   .msgi   (
   R$   R6   R7   R9   R:   R;   R%   R&   RC   R+   (   R.   R/   t   countRD   RE   R2   (    (    s<   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/filesystem.pyt   _purgez   s    c         C@  su   d } d j  | ƒ } t j |  j ƒ } xG t | ƒ d k rp | j ƒ  } | j | ƒ d k  rc q* n  | d 7} q* W| S(   s<   Return the number of messages in `queue` as an :class:`int`.i    s   .{0}.msgi   (   R,   R$   R6   R7   R9   R:   R;   (   R.   R/   RG   RD   RE   R2   (    (    s<   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/filesystem.pyt   _size“   s    c         C@  s   |  j  j j S(   N(   t
   connectiont   clientt   transport_options(   R.   (    (    s<   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/filesystem.pyRL   ¤   s    c         C@  s   |  j  j d d ƒ S(   NR7   t   data_in(   RL   t   get(   R.   (    (    s<   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/filesystem.pyR7   ¨   s    c         C@  s   |  j  j d d ƒ S(   NR'   t   data_out(   RL   RN   (   R.   (    (    s<   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/filesystem.pyR'   ¬   s    c         C@  s   |  j  j d t ƒ S(   NR<   (   RL   RN   t   False(   R.   (    (    s<   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/filesystem.pyR<   °   s    c         C@  s   |  j  j d d ƒ S(   NR=   t	   processed(   RL   RN   (   R.   (    (    s<   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/filesystem.pyR=   ´   s    (   t   __name__t
   __module__R4   RF   RH   RI   t   propertyRL   R   R7   R'   R<   R=   (    (    (    s<   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/filesystem.pyR   >   s   		(		t	   Transportc           B@  s)   e  Z e Z d  Z d Z d Z d „  Z RS(   i    t
   filesystemc         C@  s   d S(   Ns   N/A(    (   R.   (    (    s<   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/filesystem.pyt   driver_versionÀ   s    (   RR   RS   R   t   default_portt   driver_typet   driver_nameRW   (    (    (    s<   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/filesystem.pyRU   ¹   s
   (   i   i    i    (,   t   __doc__t
   __future__R    t   anyjsonR   R   R$   R@   R"   R>   t    R   t   kombu.exceptionsR   t
   kombu.fiveR   R   t   kombu.utilsR   t   kombu.utils.encodingR   R	   t   VERSIONR&   t   mapt   strt   __version__t   namet   win32conR   t
   pywintypest   LOCKFILE_EXCLUSIVE_LOCKR   R   t   LOCKFILE_FAIL_IMMEDIATELYR   t
   OVERLAPPEDR   R   R   R   t   RuntimeErrorR   RU   (    (    (    s<   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/filesystem.pyt   <module>   s@   					{