404

[ Avaa Bypassed ]




Upload:

Command:

elspacio@3.137.187.44: ~ $
from __future__ import absolute_import, division

import time
import os
import sys
import errno

from . import (LockBase, LockFailed, NotLocked, NotMyLock, LockTimeout,
               AlreadyLocked)


class MkdirLockFile(LockBase):
    """Lock file by creating a directory."""
    def __init__(self, path, threaded=True, timeout=None):
        """
        >>> lock = MkdirLockFile('somefile')
        >>> lock = MkdirLockFile('somefile', threaded=False)
        """
        LockBase.__init__(self, path, threaded, timeout)
        # Lock file itself is a directory.  Place the unique file name into
        # it.
        self.unique_name = os.path.join(self.lock_file,
                                        "%s.%s%s" % (self.hostname,
                                                     self.tname,
                                                     self.pid))

    def acquire(self, timeout=None):
        timeout = timeout if timeout is not None else self.timeout
        end_time = time.time()
        if timeout is not None and timeout > 0:
            end_time += timeout

        if timeout is None:
            wait = 0.1
        else:
            wait = max(0, timeout / 10)

        while True:
            try:
                os.mkdir(self.lock_file)
            except OSError:
                err = sys.exc_info()[1]
                if err.errno == errno.EEXIST:
                    # Already locked.
                    if os.path.exists(self.unique_name):
                        # Already locked by me.
                        return
                    if timeout is not None and time.time() > end_time:
                        if timeout > 0:
                            raise LockTimeout("Timeout waiting to acquire"
                                              " lock for %s" %
                                              self.path)
                        else:
                            # Someone else has the lock.
                            raise AlreadyLocked("%s is already locked" %
                                                self.path)
                    time.sleep(wait)
                else:
                    # Couldn't create the lock for some other reason
                    raise LockFailed("failed to create %s" % self.lock_file)
            else:
                open(self.unique_name, "wb").close()
                return

    def release(self):
        if not self.is_locked():
            raise NotLocked("%s is not locked" % self.path)
        elif not os.path.exists(self.unique_name):
            raise NotMyLock("%s is locked, but not by me" % self.path)
        os.unlink(self.unique_name)
        os.rmdir(self.lock_file)

    def is_locked(self):
        return os.path.exists(self.lock_file)

    def i_am_locking(self):
        return (self.is_locked() and
                os.path.exists(self.unique_name))

    def break_lock(self):
        if os.path.exists(self.lock_file):
            for name in os.listdir(self.lock_file):
                os.unlink(os.path.join(self.lock_file, name))
            os.rmdir(self.lock_file)

Filemanager

Name Type Size Permission Actions
__init__.py File 9.15 KB 0644
__init__.pyc File 11.83 KB 0644
__init__.pyo File 11.83 KB 0644
linklockfile.py File 2.59 KB 0644
linklockfile.pyc File 2.84 KB 0644
linklockfile.pyo File 2.84 KB 0644
mkdirlockfile.py File 3.02 KB 0644
mkdirlockfile.pyc File 3.35 KB 0644
mkdirlockfile.pyo File 3.35 KB 0644
pidlockfile.py File 5.95 KB 0644
pidlockfile.pyc File 5.77 KB 0644
pidlockfile.pyo File 5.77 KB 0644
sqlitelockfile.py File 5.38 KB 0644
sqlitelockfile.pyc File 4.59 KB 0644
sqlitelockfile.pyo File 4.59 KB 0644
symlinklockfile.py File 2.55 KB 0644
symlinklockfile.pyc File 2.76 KB 0644
symlinklockfile.pyo File 2.76 KB 0644