
                         b    d dl Z d dlZd dlZd dlZd dlZd dlmZ  G d dej                        Zy)    N)locked_filec                   $    e Zd ZdZdZdZd Zd Zy)_Win32Openerz7Open, lock, and unlock a file using windows primitives.!      c                    | j                   r.t        j                  dj                  | j                              t        j
                         }t        j                  | j                         	 t        | j                  | j                        | _	        	 	 t        j                  | j                  j!                               }t        j"                  |t$        j&                  t$        j(                  z  ddt+        j,                                d| _         y# t        $ rQ}|j                  t        j                  k(  r*t        | j                  | j                        | _	        Y d}~yY d}~d}~ww xY w# t*        j.                  $ r}|dk(  r |d   t0        j2                  k7  r t        j
                         |z
  |k\  r{t        j4                  j7                  d| j                  |       | j                  r| j                  j9                          t        | j                  | j                        | _	        Y d}~yt        j:                  |       Y d}~nd}~ww xY w)a  Open the file and lock it.

        Args:
            timeout: float, How long to try to lock for.
            delay: float, How long to wait between retries

        Raises:
            AlreadyLockedException: if the lock is already acquired.
            IOError: if the open fails.
            CredentialsFileSymbolicLinkError: if the file is a symbolic
                                              link.
        zFile {0} is already lockedNTr     zCould not lock %s in %s seconds)_lockedr   AlreadyLockedExceptionformat	_filenametimevalidate_fileopen_mode_fhIOErrorerrnoEACCES_fallback_mode	win32file_get_osfhandlefileno
LockFileExwin32conLOCKFILE_FAIL_IMMEDIATELYLOCKFILE_EXCLUSIVE_LOCK
pywintypes
OVERLAPPEDerrorr   FILE_IN_USE_ERRORloggerwarnclosesleep)selftimeoutdelay
start_timeehfiles         5lib/third_party/oauth2client/contrib/_win32_opener.pyopen_and_lockz_Win32Opener.open_and_lock$   s    <<44,33DNNCE EYY[
!!$..1	DNNDJJ7DH "!001BC$$77556898))+	-
  $#  	 ww%,,&0C0CD '	$ ## "a< Q4<999 IIK*,8&&++,M,0NNGExx(#DNND4G4GHDH

5!!#" s9   /%D A>E2 	E/AE**E/2IB-I7IIc                    | j                   rX	 t        j                  | j                  j	                               }t        j
                  |ddt        j                                d| _         | j                  r| j                  j                          yy# t        j                  $ r!}|d   t        j                  k7  r Y d}~^d}~ww xY w)z4Close and unlock the file using the win32 primitive.r   r	   NF)r
   r   r   r   r   UnlockFileExr   r   r    r   FILE_ALREADY_UNLOCKED_ERRORr$   )r&   r+   r*   s      r,   unlock_and_closez_Win32Opener.unlock_and_close^   s    <<!001BC&&ua'1'<'<'>@
 88HHNN 	 ## Q4<CCC Ds   AB C'CCN)__name__
__module____qualname____doc__r!   r0   r-   r1        r,   r   r      s     A  #&8"tr7   r   )	r   r   r   r   r   oauth2client.contribr   _Openerr   r6   r7   r,   <module>r:      s-         ,Q;&& Qr7   