ó
;t/Uc           @   s4  d  Z  d d l Z d d l Z e j d ƒ Z d Z y d d l Z d Z Wn_ y d d l	 Z	 d Z Wq« y. d d l
 Z
 d d l Z d d l Z d Z Wq§ q§ Xq« Xn Xe d k rð e
 j Z d Z e
 j Z e j ƒ  Z d „  Z d	 „  Z nž e d k r,e	 j Z e	 j Z e	 j Z d
 „  Z d „  Z nb e j ƒ  d k rNe j d ƒ n e d k rje j d ƒ n  d Z d Z d Z d „  Z d „  Z d e f d „  ƒ  YZ d „  Z d „  Z e d k r0d d l Z e d d d ƒZ e j  d ƒ e j! ƒ  e d d d ƒZ e j" j  e j# ƒ  d ƒ e j! ƒ  n  d S(   sà  
Cross-platform (posix/nt) API for flock-style file locking.

Synopsis::

   import portalocker
   file = open("somefile", "r+")
   portalocker.lock(file, portalocker.LOCK_EX)
   file.seek(12)
   file.write("foo")
   file.close()

If you know what you're doing, you may choose to::

   portalocker.unlock(file)

before closing the file, but why?

Methods::

   lock( file, flags )
   unlock( file )

Constants::

   LOCK_EX
   LOCK_SH
   LOCK_NB

I learned the win32 technique for locking files from sample code
provided by John Nielsen <nielsenjf@my-deja.com> in the documentation
that accompanies the win32 modules.

Author: Jonathan Feinberg <jdf@pobox.com>
Version: $Id: portalocker.py,v 1.3 2001/05/29 18:47:55 Administrator Exp $
iÿÿÿÿNt   web2pyt   gaet   posixt   windowsi    c         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(    (    sV   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/contrib/portalocker.pyt   lockG   s    c         C   s/   t  j |  j ƒ  ƒ } t  j | d d t ƒ d  S(   Ni    i  ÿ(   R   R   R   t   UnlockFileExR   (   R	   R   (    (    sV   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/contrib/portalocker.pyt   unlockK   s    c         C   s   t  j |  j ƒ  | ƒ d  S(   N(   t   fcntlt   flockR   (   R	   R
   (    (    sV   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/contrib/portalocker.pyR   U   s    c         C   s   t  j |  j ƒ  t  j ƒ d  S(   N(   R   R   R   t   LOCK_UN(   R	   (    (    sV   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/contrib/portalocker.pyR   X   s    t   Windowssk   no file locking, you must install the win32 extensions from: http://sourceforge.net/projects/pywin32/files/s)   no file locking, this will cause problemsc         C   s   d  S(   N(    (   R	   R
   (    (    sV   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/contrib/portalocker.pyR   f   s    c         C   s   d  S(   N(    (   R	   (    (    sV   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/contrib/portalocker.pyR   i   s    t
   LockedFilec           B   sM   e  Z d  d „ Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(	   t   rbc         C   sÑ   | |  _  | |  _ d  |  _ d | k rL t | | ƒ |  _ t |  j t ƒ n d | k sd d | k rÁ t | | j d d ƒ ƒ |  _ t |  j t ƒ d | k rÍ |  j j	 d ƒ |  j j
 ƒ  qÍ n t d ƒ ‚ d  S(   Nt   rt   wt   ai    s   invalid LockedFile(...,mode)(   t   filenamet   modet   NoneR	   t   openR   t   LOCK_SHt   replacet   LOCK_EXt   seekt   truncatet   RuntimeError(   t   selfR   R   (    (    sV   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/contrib/portalocker.pyt   __init__n   s    			c         C   s)   | d  k r |  j j ƒ  S|  j j | ƒ S(   N(   R   R	   t   read(   R"   t   size(    (    sV   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/contrib/portalocker.pyR$   ~   s    c         C   s   |  j  j ƒ  S(   N(   R	   t   readline(   R"   (    (    sV   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/contrib/portalocker.pyR&      s    c         C   s   |  j  j ƒ  S(   N(   R	   t	   readlines(   R"   (    (    sV   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/contrib/portalocker.pyR'   „   s    c         C   s!   |  j  j | ƒ |  j  j ƒ  d  S(   N(   R	   t   writet   flush(   R"   t   data(    (    sV   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/contrib/portalocker.pyR(   ‡   s    c         C   s9   |  j  d  k	 r5 t |  j  ƒ |  j  j ƒ  d  |  _  n  d  S(   N(   R	   R   R   t   close(   R"   (    (    sV   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/contrib/portalocker.pyR+   ‹   s    c         C   s    |  j  d  k	 r |  j ƒ  n  d  S(   N(   R	   R   R+   (   R"   (    (    sV   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/contrib/portalocker.pyt   __del__‘   s    N(
   t   __name__t
   __module__R#   R   R$   R&   R'   R(   R+   R,   (    (    (    sV   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/contrib/portalocker.pyR   m   s   				c         C   s)   t  |  d ƒ } | j ƒ  } | j ƒ  | S(   NR   (   R   R$   R+   (   R   t   fpR*   (    (    sV   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/contrib/portalocker.pyt   read_locked–   s    
c         C   s,   t  |  d ƒ } | j | ƒ } | j ƒ  d  S(   NR   (   R   R(   R+   (   R   R*   R/   (    (    sV   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/contrib/portalocker.pyt   write_locked   s    t   __main__s   test.txtR   t   wbs   test okR   s   
($   t   __doc__t   loggingt   platformt	   getLoggert   loggerR   t
   os_lockingt   google.appenginet   googleR   t   win32conR   t
   pywintypest   LOCKFILE_EXCLUSIVE_LOCKR   R   t   LOCKFILE_FAIL_IMMEDIATELYt   LOCK_NBt
   OVERLAPPEDR   R   R   t   systemt   errort   debugt   objectR   R0   R1   R-   t   syst   fR(   R+   t   stdoutR$   (    (    (    sV   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/contrib/portalocker.pyt   <module>'   sh   


									)		
