Hello community,
here is the log from the commit of package python-lockfile for openSUSE:Factory
checked in at 2019-02-26 22:21:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-lockfile (Old)
and /work/SRC/openSUSE:Factory/.python-lockfile.new.28833 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-lockfile"
Tue Feb 26 22:21:05 2019 rev:15 rq:679178 version:0.12.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-lockfile/python-lockfile.changes
2018-12-24 11:39:19.233562391 +0100
+++
/work/SRC/openSUSE:Factory/.python-lockfile.new.28833/python-lockfile.changes
2019-02-26 22:22:45.290058625 +0100
@@ -1,0 +2,24 @@
+Mon Feb 25 21:54:28 UTC 2019 - John Vandenberg <[email protected]>
+
+- Add AUTHORS, ACKS and ChangeLog to %doc
+- Update to v0.12.2
+ * Add warning to README.rst
+- from 0.12.1
+ * Remove Python 2.6 classifier
+ * Remove python 2.6
+ * Remove two unused variables: fix flake8 F841 warn
+ * Fix flake8 warnings
+ * PBR setup requirement only
+ * Support universal wheels
+- from 0.11.0
+ * Add deprecated warnings to index.rst
+ * Fix PIDLockFile.acquire() may loop indefinitely
+ * Fix failure - from lockfile import *
+ * lockfile.acquire doesn't accept a timeout of 0
+ * Update README format for our release script
+ * Begin moving some of the common code to a shared base
+ * Add pbr to dependency list
+ * The version of sphinx being brought in is broken
+ * Fix Git URLs
+
+-------------------------------------------------------------------
Old:
----
lockfile-0.10.2.tar.gz
New:
----
lockfile-0.12.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-lockfile.spec ++++++
--- /var/tmp/diff_new_pack.L82l7R/_old 2019-02-26 22:22:45.718058473 +0100
+++ /var/tmp/diff_new_pack.L82l7R/_new 2019-02-26 22:22:45.718058473 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-lockfile
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-lockfile
-Version: 0.10.2
+Version: 0.12.2
Release: 0
Summary: Platform-independent file locking module
License: MIT
@@ -60,7 +60,7 @@
%files %{python_files}
%license LICENSE
-%doc README RELEASE-NOTES
+%doc README.rst AUTHORS ACKS RELEASE-NOTES ChangeLog
%{python_sitelib}/lockfile*
%changelog
++++++ lockfile-0.10.2.tar.gz -> lockfile-0.12.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/AUTHORS new/lockfile-0.12.2/AUTHORS
--- old/lockfile-0.10.2/AUTHORS 2014-09-19 14:23:48.000000000 +0200
+++ new/lockfile-0.12.2/AUTHORS 2015-11-25 19:29:29.000000000 +0100
@@ -1,5 +1,12 @@
(no author) <(no author)>
+ChangBo Guo(gcb) <[email protected]>
+Davanum Srinivas <[email protected]>
+Doug Hellmann <[email protected]>
Elmo Todurov <[email protected]>
+Joshua Harlow <[email protected]>
Julien Danjou <[email protected]>
Skip Montanaro <[email protected]>
+Thomas Grainger <[email protected]>
+Thomas Grainger <[email protected]>
+Victor Stinner <[email protected]>
skip.montanaro <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/ChangeLog
new/lockfile-0.12.2/ChangeLog
--- old/lockfile-0.10.2/ChangeLog 2014-09-19 14:23:48.000000000 +0200
+++ new/lockfile-0.12.2/ChangeLog 2015-11-25 19:29:29.000000000 +0100
@@ -1,6 +1,34 @@
CHANGES
=======
+0.12.2
+------
+
+* Add warning to README.rst
+
+0.12.1
+------
+
+* Remove Python 2.6 classifier
+* Remove python 2.6
+* Remove two unused variables: fix flake8 F841 warn
+* Fix flake8 warnings
+* PBR setup requirement only
+* Support universal wheels
+
+0.11.0
+------
+
+* Add deprecated warnings to index.rst
+* Fix PIDLockFile.acquire() may loop indefinitely
+* Fix failure - from lockfile import *
+* lockfile.acquire doesn't accept a timeout of 0
+* Update README format for our release script
+* Begin moving some of the common code to a shared base
+* Add pbr to dependency list
+* The version of sphinx being brought in is broken
+* Fix Git URLs
+
0.10.2
------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/PKG-INFO new/lockfile-0.12.2/PKG-INFO
--- old/lockfile-0.10.2/PKG-INFO 2014-09-19 14:23:48.000000000 +0200
+++ new/lockfile-0.12.2/PKG-INFO 2015-11-25 19:29:29.000000000 +0100
@@ -1,12 +1,18 @@
Metadata-Version: 1.1
Name: lockfile
-Version: 0.10.2
+Version: 0.12.2
Summary: Platform-independent file locking module
Home-page: http://launchpad.net/pylockfile
Author: OpenStack
Author-email: [email protected]
License: UNKNOWN
-Description: The lockfile package exports a LockFile class which provides a
simple API for
+Description: Note: This package is **deprecated**. It is highly preferred that
instead of
+ using this code base that instead `fasteners`_ or `oslo.concurrency`_
is
+ used instead. For any questions or comments or further help needed
+ please email `openstack-dev`_ and prefix your email subject
+ with ``[oslo][pylockfile]`` (for a faster response).
+
+ The lockfile package exports a LockFile class which provides a simple
API for
locking files. Unlike the Windows msvcrt.locking function, the
fcntl.lockf
and flock functions, and the deprecated posixfile module, the API is
identical across both Unix (including Linux and Mac) and Windows
platforms.
@@ -26,14 +32,14 @@
The previous module-level definitions of LinkFileLock, MkdirFileLock
and
SQLiteFileLock will be retained until the 1.0 release.
- Available on GitHub from:
-
- git://github.com/smontanaro/pylockfile.git
-
To install:
python setup.py install
+ * Documentation: http://docs.openstack.org/developer/pylockfile
+ * Source: http://git.openstack.org/cgit/openstack/pylockfile
+ * Bugs: http://bugs.launchpad.net/pylockfile
+
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
@@ -45,7 +51,6 @@
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.3
Classifier: Topic :: Software Development :: Libraries :: Python Modules
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/README new/lockfile-0.12.2/README
--- old/lockfile-0.10.2/README 2014-09-19 14:23:31.000000000 +0200
+++ new/lockfile-0.12.2/README 1970-01-01 01:00:00.000000000 +0100
@@ -1,27 +0,0 @@
-The lockfile package exports a LockFile class which provides a simple API for
-locking files. Unlike the Windows msvcrt.locking function, the fcntl.lockf
-and flock functions, and the deprecated posixfile module, the API is
-identical across both Unix (including Linux and Mac) and Windows platforms.
-The lock mechanism relies on the atomic nature of the link (on Unix) and
-mkdir (on Windows) system calls. An implementation based on SQLite is also
-provided, more as a demonstration of the possibilities it provides than as
-production-quality code.
-
-Note: In version 0.9 the API changed in two significant ways:
-
- * It changed from a module defining several classes to a package containing
- several modules, each defining a single class.
-
- * Where classes had been named SomethingFileLock before the last two words
- have been reversed, so that class is now SomethingLockFile.
-
-The previous module-level definitions of LinkFileLock, MkdirFileLock and
-SQLiteFileLock will be retained until the 1.0 release.
-
-Available on GitHub from:
-
- git://github.com/smontanaro/pylockfile.git
-
-To install:
-
- python setup.py install
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/README.rst
new/lockfile-0.12.2/README.rst
--- old/lockfile-0.10.2/README.rst 1970-01-01 01:00:00.000000000 +0100
+++ new/lockfile-0.12.2/README.rst 2015-11-25 19:29:13.000000000 +0100
@@ -0,0 +1,33 @@
+Note: This package is **deprecated**. It is highly preferred that instead of
+using this code base that instead `fasteners`_ or `oslo.concurrency`_ is
+used instead. For any questions or comments or further help needed
+please email `openstack-dev`_ and prefix your email subject
+with ``[oslo][pylockfile]`` (for a faster response).
+
+The lockfile package exports a LockFile class which provides a simple API for
+locking files. Unlike the Windows msvcrt.locking function, the fcntl.lockf
+and flock functions, and the deprecated posixfile module, the API is
+identical across both Unix (including Linux and Mac) and Windows platforms.
+The lock mechanism relies on the atomic nature of the link (on Unix) and
+mkdir (on Windows) system calls. An implementation based on SQLite is also
+provided, more as a demonstration of the possibilities it provides than as
+production-quality code.
+
+Note: In version 0.9 the API changed in two significant ways:
+
+ * It changed from a module defining several classes to a package containing
+ several modules, each defining a single class.
+
+ * Where classes had been named SomethingFileLock before the last two words
+ have been reversed, so that class is now SomethingLockFile.
+
+The previous module-level definitions of LinkFileLock, MkdirFileLock and
+SQLiteFileLock will be retained until the 1.0 release.
+
+To install:
+
+ python setup.py install
+
+* Documentation: http://docs.openstack.org/developer/pylockfile
+* Source: http://git.openstack.org/cgit/openstack/pylockfile
+* Bugs: http://bugs.launchpad.net/pylockfile
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/doc/source/index.rst
new/lockfile-0.12.2/doc/source/index.rst
--- old/lockfile-0.10.2/doc/source/index.rst 2014-09-19 14:23:32.000000000
+0200
+++ new/lockfile-0.12.2/doc/source/index.rst 2015-11-25 19:29:13.000000000
+0100
@@ -7,6 +7,13 @@
.. moduleauthor:: Skip Montanaro <[email protected]>
.. sectionauthor:: Skip Montanaro <[email protected]>
+.. warning::
+
+ This package is **deprecated**. It is highly preferred that instead of
+ using this code base that instead `fasteners`_ or `oslo.concurrency`_ is
+ used instead. For any questions or comments or further help needed
+ please email `openstack-dev`_ and prefix your email subject
+ with ``[oslo][pylockfile]`` (for a faster response).
.. note::
@@ -273,3 +280,8 @@
If you encounter any problems with ``lockfile``, would like help or want to
submit a patch, check http://launchpad.net/pylockfile
+
+
+.. _fasteners: http://fasteners.readthedocs.org/
+.. _openstack-dev: mailto:[email protected]
+.. _oslo.concurrency: http://docs.openstack.org/developer/oslo.concurrency/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/lockfile/__init__.py
new/lockfile-0.12.2/lockfile/__init__.py
--- old/lockfile-0.10.2/lockfile/__init__.py 2014-09-19 14:23:31.000000000
+0200
+++ new/lockfile-0.12.2/lockfile/__init__.py 2015-11-25 19:29:13.000000000
+0100
@@ -1,3 +1,5 @@
+# -*- coding: utf-8 -*-
+
"""
lockfile.py - Platform-independent advisory file locks.
@@ -51,14 +53,11 @@
from __future__ import absolute_import
-import sys
-import socket
+import functools
import os
+import socket
import threading
-import time
-import urllib
import warnings
-import functools
# Work with PEP8 and non-PEP8 versions of threading module.
if not hasattr(threading, "current_thread"):
@@ -68,9 +67,10 @@
__all__ = ['Error', 'LockError', 'LockTimeout', 'AlreadyLocked',
'LockFailed', 'UnlockError', 'NotLocked', 'NotMyLock',
- 'LinkLockFile', 'MkdirLockFile', 'SQLiteLockFile',
+ 'LinkFileLock', 'MkdirFileLock', 'SQLiteFileLock',
'LockBase', 'locked']
+
class Error(Exception):
"""
Base class for other exceptions.
@@ -82,6 +82,7 @@
"""
pass
+
class LockError(Error):
"""
Base class for error arising from attempts to acquire the lock.
@@ -93,6 +94,7 @@
"""
pass
+
class LockTimeout(LockError):
"""Raised when lock creation fails within a user-defined period of time.
@@ -103,6 +105,7 @@
"""
pass
+
class AlreadyLocked(LockError):
"""Some other thread/process is locking the file.
@@ -113,6 +116,7 @@
"""
pass
+
class LockFailed(LockError):
"""Lock file creation failed for some other reason.
@@ -123,6 +127,7 @@
"""
pass
+
class UnlockError(Error):
"""
Base class for errors arising from attempts to release the lock.
@@ -134,6 +139,7 @@
"""
pass
+
class NotLocked(UnlockError):
"""Raised when an attempt is made to unlock an unlocked file.
@@ -144,6 +150,7 @@
"""
pass
+
class NotMyLock(UnlockError):
"""Raised when an attempt is made to unlock a file someone else locked.
@@ -154,14 +161,60 @@
"""
pass
-class LockBase:
+
+class _SharedBase(object):
+ def __init__(self, path):
+ self.path = path
+
+ def acquire(self, timeout=None):
+ """
+ Acquire the lock.
+
+ * If timeout is omitted (or None), wait forever trying to lock the
+ file.
+
+ * If timeout > 0, try to acquire the lock for that many seconds. If
+ the lock period expires and the file is still locked, raise
+ LockTimeout.
+
+ * If timeout <= 0, raise AlreadyLocked immediately if the file is
+ already locked.
+ """
+ raise NotImplemented("implement in subclass")
+
+ def release(self):
+ """
+ Release the lock.
+
+ If the file is not locked, raise NotLocked.
+ """
+ raise NotImplemented("implement in subclass")
+
+ def __enter__(self):
+ """
+ Context manager support.
+ """
+ self.acquire()
+ return self
+
+ def __exit__(self, *_exc):
+ """
+ Context manager support.
+ """
+ self.release()
+
+ def __repr__(self):
+ return "<%s: %r>" % (self.__class__.__name__, self.path)
+
+
+class LockBase(_SharedBase):
"""Base class for platform-specific lock classes."""
def __init__(self, path, threaded=True, timeout=None):
"""
>>> lock = LockBase('somefile')
>>> lock = LockBase('somefile', threaded=False)
"""
- self.path = path
+ super(LockBase, self).__init__(path)
self.lock_file = os.path.abspath(path) + ".lock"
self.hostname = socket.gethostname()
self.pid = os.getpid()
@@ -189,30 +242,6 @@
hash(self.path)))
self.timeout = timeout
- def acquire(self, timeout=None):
- """
- Acquire the lock.
-
- * If timeout is omitted (or None), wait forever trying to lock the
- file.
-
- * If timeout > 0, try to acquire the lock for that many seconds. If
- the lock period expires and the file is still locked, raise
- LockTimeout.
-
- * If timeout <= 0, raise AlreadyLocked immediately if the file is
- already locked.
- """
- raise NotImplemented("implement in subclass")
-
- def release(self):
- """
- Release the lock.
-
- If the file is not locked, raise NotLocked.
- """
- raise NotImplemented("implement in subclass")
-
def is_locked(self):
"""
Tell whether or not the file is locked.
@@ -231,23 +260,11 @@
"""
raise NotImplemented("implement in subclass")
- def __enter__(self):
- """
- Context manager support.
- """
- self.acquire()
- return self
-
- def __exit__(self, *_exc):
- """
- Context manager support.
- """
- self.release()
-
def __repr__(self):
return "<%s: %r -- %r>" % (self.__class__.__name__, self.unique_name,
self.path)
+
def _fl_helper(cls, mod, *args, **kwds):
warnings.warn("Import from %s module instead of lockfile package" % mod,
DeprecationWarning, stacklevel=2)
@@ -261,6 +278,7 @@
kwds["threaded"] = True
return cls(*args, **kwds)
+
def LinkFileLock(*args, **kwds):
"""Factory function provided for backwards compatibility.
@@ -271,6 +289,7 @@
return _fl_helper(linklockfile.LinkLockFile, "lockfile.linklockfile",
*args, **kwds)
+
def MkdirFileLock(*args, **kwds):
"""Factory function provided for backwards compatibility.
@@ -281,6 +300,7 @@
return _fl_helper(mkdirlockfile.MkdirLockFile, "lockfile.mkdirlockfile",
*args, **kwds)
+
def SQLiteFileLock(*args, **kwds):
"""Factory function provided for backwards compatibility.
@@ -291,6 +311,7 @@
return _fl_helper(sqlitelockfile.SQLiteLockFile, "lockfile.sqlitelockfile",
*args, **kwds)
+
def locked(path, timeout=None):
"""Decorator which enables locks for decorated function.
@@ -315,6 +336,7 @@
return wrapper
return decor
+
if hasattr(os, "link"):
from . import linklockfile as _llf
LockFile = _llf.LinkLockFile
@@ -323,4 +345,3 @@
LockFile = _mlf.MkdirLockFile
FileLock = LockFile
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/lockfile/linklockfile.py
new/lockfile-0.12.2/lockfile/linklockfile.py
--- old/lockfile-0.10.2/lockfile/linklockfile.py 2014-09-19
14:23:31.000000000 +0200
+++ new/lockfile-0.12.2/lockfile/linklockfile.py 2015-11-25
19:29:13.000000000 +0100
@@ -6,6 +6,7 @@
from . import (LockBase, LockFailed, NotLocked, NotMyLock, LockTimeout,
AlreadyLocked)
+
class LinkLockFile(LockBase):
"""Lock access to a file using atomic property of link(2).
@@ -19,7 +20,7 @@
except IOError:
raise LockFailed("failed to create %s" % self.unique_name)
- timeout = timeout is not None and timeout or self.timeout
+ 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
@@ -46,7 +47,7 @@
else:
raise AlreadyLocked("%s is already locked" %
self.path)
- time.sleep(timeout is not None and timeout/10 or 0.1)
+ time.sleep(timeout is not None and timeout / 10 or 0.1)
else:
# Link creation succeeded. We're good to go.
return
@@ -70,4 +71,3 @@
def break_lock(self):
if os.path.exists(self.lock_file):
os.unlink(self.lock_file)
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/lockfile/mkdirlockfile.py
new/lockfile-0.12.2/lockfile/mkdirlockfile.py
--- old/lockfile-0.10.2/lockfile/mkdirlockfile.py 2014-09-19
14:23:31.000000000 +0200
+++ new/lockfile-0.12.2/lockfile/mkdirlockfile.py 2015-11-25
19:29:13.000000000 +0100
@@ -8,6 +8,7 @@
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):
@@ -18,13 +19,13 @@
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))
+ 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 is not None and timeout or self.timeout
+ 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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/lockfile/pidlockfile.py
new/lockfile-0.12.2/lockfile/pidlockfile.py
--- old/lockfile-0.10.2/lockfile/pidlockfile.py 2014-09-19 14:23:31.000000000
+0200
+++ new/lockfile-0.12.2/lockfile/pidlockfile.py 2015-11-25 19:29:13.000000000
+0100
@@ -14,9 +14,8 @@
from __future__ import absolute_import
-import os
-import sys
import errno
+import os
import time
from . import (LockBase, AlreadyLocked, LockFailed, NotLocked, NotMyLock,
@@ -38,8 +37,6 @@
# pid lockfiles don't support threaded operation, so always force
# False as the threaded arg.
LockBase.__init__(self, path, False, timeout)
- dirname = os.path.dirname(self.lock_file)
- basename = os.path.split(self.path)[-1]
self.unique_name = self.path
def read_pid(self):
@@ -70,7 +67,7 @@
the lock could not be acquired.
"""
- timeout = timeout is not None and timeout or self.timeout
+ 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
@@ -81,15 +78,15 @@
except OSError as exc:
if exc.errno == errno.EEXIST:
# The lock creation failed. Maybe sleep a bit.
- if timeout is not None and time.time() > end_time:
- if timeout > 0:
+ if time.time() > end_time:
+ if timeout is not None and timeout > 0:
raise LockTimeout("Timeout waiting to acquire"
" lock for %s" %
self.path)
else:
raise AlreadyLocked("%s is already locked" %
self.path)
- time.sleep(timeout is not None and timeout/10 or 0.1)
+ time.sleep(timeout is not None and timeout / 10 or 0.1)
else:
raise LockFailed("failed to create %s" % self.path)
else:
@@ -117,6 +114,7 @@
"""
remove_existing_pidfile(self.path)
+
def read_pid_from_pidfile(pidfile_path):
""" Read the PID recorded in the named PID file.
@@ -132,10 +130,10 @@
pass
else:
# According to the FHS 2.3 section on PID files in /var/run:
- #
+ #
# The file must consist of the process identifier in
# ASCII-encoded decimal, followed by a newline character.
- #
+ #
# Programs that read PID files should be somewhat flexible
# in what they accept; i.e., they should ignore extra
# whitespace, leading zeroes, absence of the trailing
@@ -171,8 +169,7 @@
# would contain three characters: two, five, and newline.
pid = os.getpid()
- line = "%(pid)d\n" % vars()
- pidfile.write(line)
+ pidfile.write("%s\n" % pid)
pidfile.close()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/lockfile/sqlitelockfile.py
new/lockfile-0.12.2/lockfile/sqlitelockfile.py
--- old/lockfile-0.10.2/lockfile/sqlitelockfile.py 2014-09-19
14:23:31.000000000 +0200
+++ new/lockfile-0.12.2/lockfile/sqlitelockfile.py 2015-11-25
19:29:13.000000000 +0100
@@ -10,6 +10,7 @@
from . import LockBase, NotLocked, NotMyLock, LockTimeout, AlreadyLocked
+
class SQLiteLockFile(LockBase):
"Demonstrate SQL-based locking."
@@ -34,7 +35,7 @@
import sqlite3
self.connection = sqlite3.connect(SQLiteLockFile.testdb)
-
+
c = self.connection.cursor()
try:
c.execute("create table locks"
@@ -50,7 +51,7 @@
atexit.register(os.unlink, SQLiteLockFile.testdb)
def acquire(self, timeout=None):
- timeout = timeout is not None and timeout or self.timeout
+ 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
@@ -97,7 +98,7 @@
if len(rows) == 1:
# We're the locker, so go home.
return
-
+
# Maybe we should wait a bit longer.
if timeout is not None and time.time() > end_time:
if timeout > 0:
@@ -130,7 +131,7 @@
" where lock_file = ?",
(self.lock_file,))
return cursor.fetchone()[0]
-
+
def is_locked(self):
cursor = self.connection.cursor()
cursor.execute("select * from locks"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/lockfile/symlinklockfile.py
new/lockfile-0.12.2/lockfile/symlinklockfile.py
--- old/lockfile-0.10.2/lockfile/symlinklockfile.py 2014-09-19
14:23:31.000000000 +0200
+++ new/lockfile-0.12.2/lockfile/symlinklockfile.py 2015-11-25
19:29:13.000000000 +0100
@@ -1,11 +1,12 @@
from __future__ import absolute_import
-import time
import os
+import time
-from . import (LockBase, LockFailed, NotLocked, NotMyLock, LockTimeout,
+from . import (LockBase, NotLocked, NotMyLock, LockTimeout,
AlreadyLocked)
+
class SymlinkLockFile(LockBase):
"""Lock access to a file using symlink(2)."""
@@ -17,11 +18,11 @@
def acquire(self, timeout=None):
# Hopefully unnecessary for symlink.
- #try:
- # open(self.unique_name, "wb").close()
- #except IOError:
- # raise LockFailed("failed to create %s" % self.unique_name)
- timeout = timeout is not None and timeout or self.timeout
+ # try:
+ # open(self.unique_name, "wb").close()
+ # except IOError:
+ # raise LockFailed("failed to create %s" % self.unique_name)
+ 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
@@ -45,7 +46,7 @@
else:
raise AlreadyLocked("%s is already locked" %
self.path)
- time.sleep(timeout/10 if timeout is not None else 0.1)
+ time.sleep(timeout / 10 if timeout is not None else 0.1)
else:
# Link creation succeeded. We're good to go.
return
@@ -61,8 +62,8 @@
return os.path.islink(self.lock_file)
def i_am_locking(self):
- return os.path.islink(self.lock_file) and \
- os.readlink(self.lock_file) == self.unique_name
+ return (os.path.islink(self.lock_file)
+ and os.readlink(self.lock_file) == self.unique_name)
def break_lock(self):
if os.path.islink(self.lock_file): # exists && link
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/lockfile.egg-info/PKG-INFO
new/lockfile-0.12.2/lockfile.egg-info/PKG-INFO
--- old/lockfile-0.10.2/lockfile.egg-info/PKG-INFO 2014-09-19
14:23:48.000000000 +0200
+++ new/lockfile-0.12.2/lockfile.egg-info/PKG-INFO 2015-11-25
19:29:29.000000000 +0100
@@ -1,12 +1,18 @@
Metadata-Version: 1.1
Name: lockfile
-Version: 0.10.2
+Version: 0.12.2
Summary: Platform-independent file locking module
Home-page: http://launchpad.net/pylockfile
Author: OpenStack
Author-email: [email protected]
License: UNKNOWN
-Description: The lockfile package exports a LockFile class which provides a
simple API for
+Description: Note: This package is **deprecated**. It is highly preferred that
instead of
+ using this code base that instead `fasteners`_ or `oslo.concurrency`_
is
+ used instead. For any questions or comments or further help needed
+ please email `openstack-dev`_ and prefix your email subject
+ with ``[oslo][pylockfile]`` (for a faster response).
+
+ The lockfile package exports a LockFile class which provides a simple
API for
locking files. Unlike the Windows msvcrt.locking function, the
fcntl.lockf
and flock functions, and the deprecated posixfile module, the API is
identical across both Unix (including Linux and Mac) and Windows
platforms.
@@ -26,14 +32,14 @@
The previous module-level definitions of LinkFileLock, MkdirFileLock
and
SQLiteFileLock will be retained until the 1.0 release.
- Available on GitHub from:
-
- git://github.com/smontanaro/pylockfile.git
-
To install:
python setup.py install
+ * Documentation: http://docs.openstack.org/developer/pylockfile
+ * Source: http://git.openstack.org/cgit/openstack/pylockfile
+ * Bugs: http://bugs.launchpad.net/pylockfile
+
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
@@ -45,7 +51,6 @@
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.3
Classifier: Topic :: Software Development :: Libraries :: Python Modules
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/lockfile.egg-info/SOURCES.txt
new/lockfile-0.12.2/lockfile.egg-info/SOURCES.txt
--- old/lockfile-0.10.2/lockfile.egg-info/SOURCES.txt 2014-09-19
14:23:48.000000000 +0200
+++ new/lockfile-0.12.2/lockfile.egg-info/SOURCES.txt 2015-11-25
19:29:29.000000000 +0100
@@ -2,7 +2,7 @@
AUTHORS
ChangeLog
LICENSE
-README
+README.rst
RELEASE-NOTES
setup.cfg
setup.py
@@ -21,6 +21,7 @@
lockfile.egg-info/SOURCES.txt
lockfile.egg-info/dependency_links.txt
lockfile.egg-info/not-zip-safe
+lockfile.egg-info/pbr.json
lockfile.egg-info/top_level.txt
test/compliancetest.py
test/test_lockfile.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/lockfile.egg-info/pbr.json
new/lockfile-0.12.2/lockfile.egg-info/pbr.json
--- old/lockfile-0.10.2/lockfile.egg-info/pbr.json 1970-01-01
01:00:00.000000000 +0100
+++ new/lockfile-0.12.2/lockfile.egg-info/pbr.json 2015-11-25
19:29:29.000000000 +0100
@@ -0,0 +1 @@
+{"git_version": "c8798ce", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/setup.cfg
new/lockfile-0.12.2/setup.cfg
--- old/lockfile-0.10.2/setup.cfg 2014-09-19 14:23:48.000000000 +0200
+++ new/lockfile-0.12.2/setup.cfg 2015-11-25 19:29:29.000000000 +0100
@@ -2,7 +2,7 @@
name = lockfile
summary = Platform-independent file locking module
description-file =
- README
+ README.rst
author = OpenStack
author-email = [email protected]
home-page = http://launchpad.net/pylockfile
@@ -16,7 +16,6 @@
Programming Language :: Python
Programming Language :: Python :: 2
Programming Language :: Python :: 2.7
- Programming Language :: Python :: 2.6
Programming Language :: Python :: 3
Programming Language :: Python :: 3.3
Topic :: Software Development :: Libraries :: Python Modules
@@ -32,8 +31,11 @@
build-dir = doc/build
all_files = 1
+[bdist_wheel]
+universal = 1
+
[egg_info]
-tag_build =
tag_date = 0
tag_svn_revision = 0
+tag_build =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/setup.py new/lockfile-0.12.2/setup.py
--- old/lockfile-0.10.2/setup.py 2014-09-19 14:23:31.000000000 +0200
+++ new/lockfile-0.12.2/setup.py 2015-11-25 19:29:13.000000000 +0100
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,5 +25,5 @@
pass
setuptools.setup(
- setup_requires=['pbr'],
+ setup_requires=['pbr>=1.8'],
pbr=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/test/compliancetest.py
new/lockfile-0.12.2/test/compliancetest.py
--- old/lockfile-0.10.2/test/compliancetest.py 2014-09-19 14:23:31.000000000
+0200
+++ new/lockfile-0.12.2/test/compliancetest.py 2015-11-25 19:29:13.000000000
+0100
@@ -4,6 +4,7 @@
import lockfile
+
class ComplianceTest(object):
def __init__(self):
self.saved_class = lockfile.LockFile
@@ -38,8 +39,8 @@
lock.release()
assert not lock.is_locked()
-## def test_acquire_basic_threaded(self):
-## self._test_acquire_helper(True)
+# def test_acquire_basic_threaded(self):
+# self._test_acquire_helper(True)
def test_acquire_basic_unthreaded(self):
self._test_acquire_helper(False)
@@ -79,11 +80,11 @@
e2.set() # tell thread t to release lock
t.join()
-## def test_acquire_no_timeout_threaded(self):
-## self._test_acquire_no_timeout_helper(True)
+# def test_acquire_no_timeout_threaded(self):
+# self._test_acquire_no_timeout_helper(True)
-## def test_acquire_no_timeout_unthreaded(self):
-## self._test_acquire_no_timeout_helper(False)
+# def test_acquire_no_timeout_unthreaded(self):
+# self._test_acquire_no_timeout_helper(False)
def _test_acquire_timeout_helper(self, tbool):
# Timeout test
@@ -150,27 +151,27 @@
else:
raise AssertionError('erroneously unlocked file')
-## def test_release_basic_threaded(self):
-## self._test_release_basic_helper(True)
+# def test_release_basic_threaded(self):
+# self._test_release_basic_helper(True)
def test_release_basic_unthreaded(self):
self._test_release_basic_helper(False)
-## def test_release_from_thread(self):
-## e1, e2 = threading.Event(), threading.Event()
-## t = _in_thread(self._lock_wait_unlock, e1, e2)
-## e1.wait()
-## lock2 = lockfile.LockFile(self._testfile(), threaded=False)
-## assert not lock2.i_am_locking()
-## try:
-## lock2.release()
-## except lockfile.NotMyLock:
-## pass
-## else:
-## raise AssertionError('erroneously unlocked a file locked'
-## ' by another thread.')
-## e2.set()
-## t.join()
+# def test_release_from_thread(self):
+# e1, e2 = threading.Event(), threading.Event()
+# t = _in_thread(self._lock_wait_unlock, e1, e2)
+# e1.wait()
+# lock2 = lockfile.LockFile(self._testfile(), threaded=False)
+# assert not lock2.i_am_locking()
+# try:
+# lock2.release()
+# except lockfile.NotMyLock:
+# pass
+# else:
+# raise AssertionError('erroneously unlocked a file locked'
+# ' by another thread.')
+# e2.set()
+# t.join()
def _test_is_locked_helper(self, tbool):
lock = lockfile.LockFile(self._testfile(), threaded=tbool)
@@ -179,14 +180,14 @@
lock.release()
assert not lock.is_locked(), "still locked after release!"
-## def test_is_locked_threaded(self):
-## self._test_is_locked_helper(True)
+# def test_is_locked_threaded(self):
+# self._test_is_locked_helper(True)
def test_is_locked_unthreaded(self):
self._test_is_locked_helper(False)
-## def test_i_am_locking_threaded(self):
-## self._test_i_am_locking_helper(True)
+# def test_i_am_locking_threaded(self):
+# self._test_i_am_locking_helper(True)
def test_i_am_locking_unthreaded(self):
self._test_i_am_locking_helper(False)
@@ -219,8 +220,8 @@
else:
raise AssertionError('break lock failed')
-## def test_break_lock_threaded(self):
-## self._test_break_lock_helper(True)
+# def test_break_lock_threaded(self):
+# self._test_break_lock_helper(True)
def test_break_lock_unthreaded(self):
self._test_break_lock_helper(False)
@@ -230,8 +231,8 @@
l = lockfile.LockFile(self._testfile())
l.acquire()
try:
- event1.set() # we're in,
- event2.wait() # wait for boss's permission to leave
+ event1.set() # we're in,
+ event2.wait() # wait for boss's permission to leave
finally:
l.release()
@@ -250,6 +251,7 @@
return a + b
assert func(4, 3) == 7
+
def _in_thread(func, *args, **kwargs):
"""Execute func(*args, **kwargs) after dt seconds. Helper for tests."""
def _f():
@@ -258,4 +260,3 @@
t.setDaemon(True)
t.start()
return t
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/test/test_lockfile.py
new/lockfile-0.12.2/test/test_lockfile.py
--- old/lockfile-0.10.2/test/test_lockfile.py 2014-09-19 14:23:31.000000000
+0200
+++ new/lockfile-0.12.2/test/test_lockfile.py 2015-11-25 19:29:13.000000000
+0100
@@ -1,36 +1,41 @@
-import sys
-
import lockfile.linklockfile
import lockfile.mkdirlockfile
import lockfile.pidlockfile
import lockfile.symlinklockfile
from compliancetest import ComplianceTest
-
+
+
class TestLinkLockFile(ComplianceTest):
class_to_test = lockfile.linklockfile.LinkLockFile
+
class TestSymlinkLockFile(ComplianceTest):
class_to_test = lockfile.symlinklockfile.SymlinkLockFile
+
class TestMkdirLockFile(ComplianceTest):
class_to_test = lockfile.mkdirlockfile.MkdirLockFile
+
class TestPIDLockFile(ComplianceTest):
class_to_test = lockfile.pidlockfile.PIDLockFile
+
# Check backwards compatibility
class TestLinkFileLock(ComplianceTest):
class_to_test = lockfile.LinkFileLock
+
class TestMkdirFileLock(ComplianceTest):
class_to_test = lockfile.MkdirFileLock
try:
- import sqlite3
+ import sqlite3 # noqa
except ImportError:
pass
else:
import lockfile.sqlitelockfile
+
class TestSQLiteLockFile(ComplianceTest):
class_to_test = lockfile.sqlitelockfile.SQLiteLockFile
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/test-requirements.txt
new/lockfile-0.12.2/test-requirements.txt
--- old/lockfile-0.10.2/test-requirements.txt 2014-09-19 14:23:31.000000000
+0200
+++ new/lockfile-0.12.2/test-requirements.txt 2015-11-25 19:29:13.000000000
+0100
@@ -1,2 +1,5 @@
+# The order of packages is significant, because pip processes them in the order
+# of appearance. Changing the order has an impact on the overall integration
+# process, which may cause wedges in the gate later.
nose
-sphinx>=1.1.2,!=1.2.0,<1.3
+sphinx!=1.2.0,!=1.3b1,<1.3,>=1.1.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lockfile-0.10.2/tox.ini new/lockfile-0.12.2/tox.ini
--- old/lockfile-0.10.2/tox.ini 2014-09-19 14:23:32.000000000 +0200
+++ new/lockfile-0.12.2/tox.ini 2015-11-25 19:29:13.000000000 +0100
@@ -1,6 +1,6 @@
# content of: tox.ini , put in same dir as setup.py
[tox]
-envlist = py26,py27,py32,py33,py34
+envlist = py27,py32,py33,py34
[testenv]
deps = -r{toxinidir}/test-requirements.txt
@@ -23,6 +23,5 @@
nosetests --with-coverage --cover-erase --cover-package=lockfile
--cover-inclusive []
[flake8]
-ignore =
E121,E123,E128,E221,E226,E261,E265,E301,E302,E713,F401,F841,W291,W293,W391
exclude=.venv,.git,.tox,dist,doc
show-source = True