ó
Õ²[Uc           @   sU  d  d l  Z  d  d l Z d  d l Z d  d l Z d g Z y d  d l Z WnY e k
 r¤ y d  d l Z Wn e k
 rˆ e d ƒ ‚ qÆ Xe Z	 d „  Z
 d „  Z n" Xe Z	 d „  Z d „  Z
 d „  Z e j ƒ  Z e j ƒ  Z d	 „  Z d
 „  Z d e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   iÿÿÿÿNt	   lock_files7   Platform not supported (failed to import fcntl, msvcrt)c         C   s=   y$ t  j |  j ƒ  t  j d ƒ t SWn t k
 r8 t SXd  S(   Ni   (   t   msvcrtt   lockingt   filenot   LK_NBLCKt   Truet   IOErrort   False(   t   file_(    (    s.   lib/python2.7/site-packages/locket/__init__.pyt   _lock_file_non_blocking   s
    c         C   s    t  j |  j ƒ  t  j d ƒ d  S(   Ni   (   R   R   R   t   LK_UNLCK(   R   (    (    s.   lib/python2.7/site-packages/locket/__init__.pyt   _unlock_file   s    c         C   s   t  j |  j ƒ  t  j ƒ d  S(   N(   t   fcntlt   flockR   t   LOCK_EX(   R   (    (    s.   lib/python2.7/site-packages/locket/__init__.pyt   _lock_file_blocking    s    c         C   sd   y( t  j |  j ƒ  t  j t  j Bƒ t SWn5 t k
 r_ } | j t j t j	 g k rY t
 S‚  n Xd  S(   N(   R   R   R   R   t   LOCK_NBR   R   t   errnot   EACCESt   EAGAINR   (   R   t   error(    (    s.   lib/python2.7/site-packages/locket/__init__.pyR	   #   s     c         C   s   t  j |  j ƒ  t  j ƒ d  S(   N(   R   R   R   t   LOCK_UN(   R   (    (    s.   lib/python2.7/site-packages/locket/__init__.pyR   -   s    c         K   s[   t  j ƒ  z? t j |  ƒ } | d  k rD t |  |  } | t |  <n  | SWd  t  j ƒ  Xd  S(   N(   t   _locks_lockt   acquiret   _lockst   gett   Nonet   _create_lock_filet   release(   t   patht   kwargst   lock(    (    s.   lib/python2.7/site-packages/locket/__init__.pyR    5   s    
c         K   s.   t  |  |  } t |  |  } t | | g ƒ S(   N(   t   _ThreadLockt	   _LockFilet   _LockSet(   R   R   t   thread_lockt	   file_lock(    (    s.   lib/python2.7/site-packages/locket/__init__.pyR   A   s    t	   LockErrorc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s.   lib/python2.7/site-packages/locket/__init__.pyR%   G   s   c         C   sŒ   | d  k r d } n  t j ƒ  } xd t r‡ |  ƒ  } | r= d  S| d  k	 rw t j ƒ  | | k rw t d j | ƒ ƒ ‚ q$ t j | ƒ q$ Wd  S(   Ngš™™™™™©?s   Couldn't lock {0}(   R   t   timeR   R%   t   formatt   sleep(   R   t   timeoutt   retry_periodR   t
   start_timet   success(    (    s.   lib/python2.7/site-packages/locket/__init__.pyt   _acquire_non_blockingK   s    			R"   c           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   R   (   t   selft   locks(    (    s.   lib/python2.7/site-packages/locket/__init__.pyt   __init__\   s    c         C   sg   g  } y/ x( |  j  D] } | j ƒ  | j | ƒ q WWn+ x t | ƒ D] } | j ƒ  qH W‚  n Xd  S(   N(   R   R   t   appendt   reversedR   (   R0   t   acquired_locksR   t   acquired_lock(    (    s.   lib/python2.7/site-packages/locket/__init__.pyR   _   s    
c         C   s(   x! t  |  j ƒ D] } | j ƒ  q Wd  S(   N(   R4   R   R   (   R0   R   (    (    s.   lib/python2.7/site-packages/locket/__init__.pyR   k   s    c         C   s   |  j  ƒ  |  S(   N(   R   (   R0   (    (    s.   lib/python2.7/site-packages/locket/__init__.pyt	   __enter__p   s    
c         G   s   |  j  ƒ  d  S(   N(   R   (   R0   t   args(    (    s.   lib/python2.7/site-packages/locket/__init__.pyt   __exit__t   s    (   R&   R'   R2   R   R   R7   R9   (    (    (    s.   lib/python2.7/site-packages/locket/__init__.pyR"   [   s
   				R    c           B   s)   e  Z d d d  „ Z d „  Z d „  Z RS(   c         C   s.   | |  _  | |  _ | |  _ t j ƒ  |  _ d  S(   N(   t   _patht   _timeoutt   _retry_periodt	   threadingt   Lockt   _lock(   R0   R   R+   R,   (    (    s.   lib/python2.7/site-packages/locket/__init__.pyR2   y   s    			c      	      sT   ˆ  j  d  k r ˆ  j j ƒ  n1 t d ‡  f d †  d ˆ  j  d ˆ  j d ˆ  j ƒ d  S(   NR   c              s   ˆ  j  j t ƒ S(   N(   R?   R   R   (    (   R0   (    s.   lib/python2.7/site-packages/locket/__init__.pyt   <lambda>„   s    R+   R,   R   (   R;   R   R?   R   R/   R<   R:   (   R0   (    (   R0   s.   lib/python2.7/site-packages/locket/__init__.pyR      s    		c         C   s   |  j  j ƒ  d  S(   N(   R?   R   (   R0   (    (    s.   lib/python2.7/site-packages/locket/__init__.pyR   Š   s    N(   R&   R'   R   R2   R   R   (    (    (    s.   lib/python2.7/site-packages/locket/__init__.pyR    x   s   	R!   c           B   s)   e  Z d d d  „ Z d „  Z d „  Z RS(   c         C   s7   | |  _  | |  _ | |  _ d  |  _ t j ƒ  |  _ d  S(   N(   R:   R;   R<   R   t   _fileR=   R>   t   _thread_lock(   R0   R   R+   R,   (    (    s.   lib/python2.7/site-packages/locket/__init__.pyR2      s
    				c      	      s   ˆ  j  d  k r' t ˆ  j d ƒ ˆ  _  n  ˆ  j d  k rL t rL t ˆ  j  ƒ n1 t d ‡  f d †  d ˆ  j d ˆ  j d ˆ  j ƒ d  S(   Nt   wR   c              s   t  ˆ  j ƒ S(   N(   R	   RA   (    (   R0   (    s.   lib/python2.7/site-packages/locket/__init__.pyR@      s    R+   R,   R   (	   RA   R   t   openR:   R;   t   _lock_file_blocking_availableR   R/   R<   (   R0   (    (   R0   s.   lib/python2.7/site-packages/locket/__init__.pyR   –   s    		c         C   s'   t  |  j ƒ |  j j ƒ  d  |  _ d  S(   N(   R   RA   t   closeR   (   R0   (    (    s.   lib/python2.7/site-packages/locket/__init__.pyR   £   s    N(   R&   R'   R   R2   R   R   (    (    (    s.   lib/python2.7/site-packages/locket/__init__.pyR!   Ž   s   	(   R(   R   R=   t   weakreft   __all__R   t   ImportErrorR   R   RE   R	   R   R   R   R>   R   t   WeakValueDictionaryR   R    R   t	   ExceptionR%   R/   t   objectR"   R    R!   (    (    (    s.   lib/python2.7/site-packages/locket/__init__.pyt   <module>   s6   				
				