Hello community,
here is the log from the commit of package python-portalocker for openSUSE:Factory checked in at 2019-02-15 10:02:12
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-portalocker (Old)
and /work/SRC/openSUSE:Factory/.python-portalocker.new.28833 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-portalocker"
Fri Feb 15 10:02:12 2019 rev:3 rq:674951 version:1.4.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-portalocker/python-portalocker.changes 2018-05-29 10:30:03.789404593 +0200
+++ /work/SRC/openSUSE:Factory/.python-portalocker.new.28833/python-portalocker.changes 2019-02-15 10:02:17.895627757 +0100
@@ -1,0 +2,7 @@
+Thu Feb 14 12:13:23 UTC 2019 - Tomáš Chvátal
+
+- Update to 1.4.0:
+ * no upstream changelog
+- Drop patch portalocker-1.2.1-old-Sphinx.patch
+
+-------------------------------------------------------------------
Old:
----
portalocker-1.2.1-old-Sphinx.patch
portalocker-1.2.1.tar.gz
New:
----
portalocker-1.4.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-portalocker.spec ++++++
--- /var/tmp/diff_new_pack.dqJhsj/_old 2019-02-15 10:02:18.279627633 +0100
+++ /var/tmp/diff_new_pack.dqJhsj/_new 2019-02-15 10:02:18.283627632 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-portalocker
#
-# 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
@@ -12,29 +12,25 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-portalocker
-Version: 1.2.1
+Version: 1.4.0
Release: 0
Summary: Locking library for Python
License: Python-2.0
Group: Development/Languages/Python
URL: https://github.com/WoLpH/portalocker
Source: https://files.pythonhosted.org/packages/source/p/portalocker/portalocker-%{version}.tar.gz
-Patch0: portalocker-1.2.1-old-Sphinx.patch
-BuildRequires: %{python_module setuptools}
+BuildRequires: %{python_module Sphinx >= 1.7.1}
+BuildRequires: %{python_module pytest >= 3.4.0}
+BuildRequires: %{python_module setuptools >= 38.3.0}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
BuildArch: noarch
-BuildRequires: %{python_module Sphinx >= 1.6.5}
-BuildRequires: %{python_module flake8 >= 3.5.0}
-BuildRequires: %{python_module pytest >= 3.4.0}
-BuildRequires: %{python_module pytest-cache >= 1.0}
-
%python_subpackages
%description
@@ -47,7 +43,6 @@
%prep
%setup -q -n portalocker-%{version}
-%patch0 -p1
%build
%python_build
@@ -55,9 +50,10 @@
%install
%python_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}
+%python_expand rm -rf %{buildroot}%{$python_sitelib}/tests/
%check
-%python_exec setup.py test
+%python_expand PYTHONPATH=%{buildroot}%{$python_sitelib} py.test-%{$python_bin_suffix} tests/t*.py
%files %{python_files}
%license LICENSE
++++++ portalocker-1.2.1.tar.gz -> portalocker-1.4.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/portalocker-1.2.1/PKG-INFO new/portalocker-1.4.0/PKG-INFO
--- old/portalocker-1.2.1/PKG-INFO 2018-05-01 15:20:39.000000000 +0200
+++ new/portalocker-1.4.0/PKG-INFO 2019-02-11 13:42:56.000000000 +0100
@@ -1,12 +1,11 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: portalocker
-Version: 1.2.1
+Version: 1.4.0
Summary: Wraps the portalocker recipe for easy usage
Home-page: https://github.com/WoLpH/portalocker
Author: Rick van Hattem
Author-email: wolph@wol.ph
License: PSF
-Description-Content-Type: UNKNOWN
Description: ############################################
portalocker - Cross-platform locking library
############################################
@@ -41,6 +40,21 @@
The project resides at https://github.com/WoLpH/portalocker . Bugs and feature
requests can be submitted there. Patches are also very welcome.
+ Tips
+ ----
+
+ On some networked filesystems it might be needed to force a `os.fsync()` before closing the file so it's actually written before another client reads the file. Effectively this comes down to:
+
+ ::
+
+ with portalocker.Lock('some_file', 'rb+', timeout=60) as fh:
+ # do what you need to do
+ ...
+
+ # flush and sync to filesystem
+ fh.flush()
+ os.fsync(fh.fileno())
+
Links
-----
@@ -107,3 +121,5 @@
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
+Provides-Extra: docs
+Provides-Extra: tests
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/portalocker-1.2.1/README.rst new/portalocker-1.4.0/README.rst
--- old/portalocker-1.2.1/README.rst 2016-09-27 22:37:07.000000000 +0200
+++ new/portalocker-1.4.0/README.rst 2018-12-17 03:08:17.000000000 +0100
@@ -32,6 +32,21 @@
The project resides at https://github.com/WoLpH/portalocker . Bugs and feature
requests can be submitted there. Patches are also very welcome.
+Tips
+----
+
+On some networked filesystems it might be needed to force a `os.fsync()` before closing the file so it's actually written before another client reads the file. Effectively this comes down to:
+
+::
+
+ with portalocker.Lock('some_file', 'rb+', timeout=60) as fh:
+ # do what you need to do
+ ...
+
+ # flush and sync to filesystem
+ fh.flush()
+ os.fsync(fh.fileno())
+
Links
-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/portalocker-1.2.1/portalocker/__about__.py new/portalocker-1.4.0/portalocker/__about__.py
--- old/portalocker-1.2.1/portalocker/__about__.py 2018-05-01 15:18:30.000000000 +0200
+++ new/portalocker-1.4.0/portalocker/__about__.py 2019-02-11 13:42:34.000000000 +0100
@@ -1,7 +1,7 @@
__package_name__ = 'portalocker'
__author__ = 'Rick van Hattem'
__email__ = 'wolph@wol.ph'
-__version__ = '1.2.1'
+__version__ = '1.4.0'
__description__ = '''Wraps the portalocker recipe for easy usage'''
__url__ = 'https://github.com/WoLpH/portalocker'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/portalocker-1.2.1/portalocker/__init__.py new/portalocker-1.4.0/portalocker/__init__.py
--- old/portalocker-1.2.1/portalocker/__init__.py 2018-05-01 15:18:30.000000000 +0200
+++ new/portalocker-1.4.0/portalocker/__init__.py 2019-02-11 13:42:34.000000000 +0100
@@ -11,7 +11,7 @@
#: Current author's email address
__email__ = __about__.__email__
#: Version number
-__version__ = '1.2.1'
+__version__ = '1.4.0'
#: Package description for Pypi
__description__ = __about__.__description__
#: Package homepage
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/portalocker-1.2.1/portalocker/constants.py new/portalocker-1.4.0/portalocker/constants.py
--- old/portalocker-1.2.1/portalocker/constants.py 2018-03-08 00:11:11.000000000 +0100
+++ new/portalocker-1.4.0/portalocker/constants.py 2018-12-17 03:06:37.000000000 +0100
@@ -1,3 +1,19 @@
+'''
+Locking constants
+
+Lock types:
+
+- `LOCK_EX` exclusive lock
+- `LOCK_SH` shared lock
+
+Lock flags:
+
+- `LOCK_NB` non-blocking
+
+Manually unlock, only needed internally
+
+- `LOCK_UN` unlock
+'''
import os
# The actual tests will execute the code anyhow so the following code can
@@ -5,18 +21,18 @@
if os.name == 'nt': # pragma: no cover
import msvcrt
- LOCK_EX = 0x1
- LOCK_SH = 0x2
- LOCK_NB = 0x4
- LOCK_UN = msvcrt.LK_UNLCK
+ LOCK_EX = 0x1 #: exclusive lock
+ LOCK_SH = 0x2 #: shared lock
+ LOCK_NB = 0x4 #: non-blocking
+ LOCK_UN = msvcrt.LK_UNLCK #: unlock
elif os.name == 'posix': # pragma: no cover
import fcntl
- LOCK_EX = fcntl.LOCK_EX
- LOCK_SH = fcntl.LOCK_SH
- LOCK_NB = fcntl.LOCK_NB
- LOCK_UN = fcntl.LOCK_UN
+ LOCK_EX = fcntl.LOCK_EX #: exclusive lock
+ LOCK_SH = fcntl.LOCK_SH #: shared lock
+ LOCK_NB = fcntl.LOCK_NB #: non-blocking
+ LOCK_UN = fcntl.LOCK_UN #: unlock
else: # pragma: no cover
raise RuntimeError('PortaLocker only defined for nt and posix platforms')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/portalocker-1.2.1/portalocker/exceptions.py new/portalocker-1.4.0/portalocker/exceptions.py
--- old/portalocker-1.2.1/portalocker/exceptions.py 2017-02-06 15:42:28.000000000 +0100
+++ new/portalocker-1.4.0/portalocker/exceptions.py 2018-12-17 03:08:17.000000000 +0100
@@ -2,6 +2,10 @@
# Error codes:
LOCK_FAILED = 1
+ def __init__(self, *args, **kwargs):
+ self.fh = kwargs.pop('fh', None)
+ Exception.__init__(self, *args, **kwargs)
+
class LockException(BaseLockException):
pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/portalocker-1.2.1/portalocker/portalocker.py new/portalocker-1.4.0/portalocker/portalocker.py
--- old/portalocker-1.2.1/portalocker/portalocker.py 2018-03-08 04:18:17.000000000 +0100
+++ new/portalocker-1.4.0/portalocker/portalocker.py 2018-12-17 03:08:17.000000000 +0100
@@ -41,7 +41,8 @@
if exc_value.winerror == winerror.ERROR_LOCK_VIOLATION:
raise exceptions.LockException(
exceptions.LockException.LOCK_FAILED,
- exc_value.strerror)
+ exc_value.strerror,
+ fh=file_)
else:
# Q: Are there exceptions/codes we should be dealing with
# here?
@@ -74,13 +75,15 @@
# [ ] be more specific here
raise exceptions.LockException(
exceptions.LockException.LOCK_FAILED,
- exc_value.strerror)
+ exc_value.strerror,
+ fh=file_)
finally:
if savepos:
file_.seek(savepos)
except IOError as exc_value:
raise exceptions.LockException(
- exceptions.LockException.LOCK_FAILED, exc_value.strerror)
+ exceptions.LockException.LOCK_FAILED, exc_value.strerror,
+ fh=file_)
def unlock(file_):
try:
@@ -110,13 +113,15 @@
else:
raise exceptions.LockException(
exceptions.LockException.LOCK_FAILED,
- exc_value.strerror)
+ exc_value.strerror,
+ fh=file_)
finally:
if savepos:
file_.seek(savepos)
except IOError as exc_value:
raise exceptions.LockException(
- exceptions.LockException.LOCK_FAILED, exc_value.strerror)
+ exceptions.LockException.LOCK_FAILED, exc_value.strerror,
+ fh=file_)
elif os.name == 'posix': # pragma: no cover
import fcntl
@@ -133,7 +138,7 @@
except locking_exceptions as exc_value:
# The exception code varies on different systems so we'll catch
# every IO error
- raise exceptions.LockException(exc_value)
+ raise exceptions.LockException(exc_value, fh=file_)
def unlock(file_):
fcntl.flock(file_.fileno(), constants.LOCK_UN)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/portalocker-1.2.1/portalocker/utils.py new/portalocker-1.4.0/portalocker/utils.py
--- old/portalocker-1.2.1/portalocker/utils.py 2018-03-07 19:30:29.000000000 +0100
+++ new/portalocker-1.4.0/portalocker/utils.py 2019-02-11 13:42:34.000000000 +0100
@@ -68,7 +68,7 @@
def __init__(
self, filename, mode='a', timeout=DEFAULT_TIMEOUT,
check_interval=DEFAULT_CHECK_INTERVAL, fail_when_locked=False,
- flags=LOCK_METHOD):
+ flags=LOCK_METHOD, **file_open_kwargs):
'''Lock manager with build-in timeout
filename -- filename
@@ -79,6 +79,7 @@
check_interval -- check interval while waiting
fail_when_locked -- after the initial lock failed, return an error
or lock the file
+ **file_open_kwargs -- The kwargs for the `open(...)` call
fail_when_locked is useful when multiple threads/processes can race
when creating a file. If set to true than the system will wait till
@@ -102,6 +103,7 @@
self.check_interval = check_interval
self.fail_when_locked = fail_when_locked
self.flags = flags
+ self.file_open_kwargs = file_open_kwargs
def acquire(
self, timeout=None, check_interval=None, fail_when_locked=None):
@@ -168,7 +170,7 @@
def _get_fh(self):
'''Get a new filehandle'''
- return open(self.filename, self.mode)
+ return open(self.filename, self.mode, **self.file_open_kwargs)
def _get_lock(self, fh):
'''
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/portalocker-1.2.1/portalocker.egg-info/PKG-INFO new/portalocker-1.4.0/portalocker.egg-info/PKG-INFO
--- old/portalocker-1.2.1/portalocker.egg-info/PKG-INFO 2018-05-01 15:20:39.000000000 +0200
+++ new/portalocker-1.4.0/portalocker.egg-info/PKG-INFO 2019-02-11 13:42:56.000000000 +0100
@@ -1,12 +1,11 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: portalocker
-Version: 1.2.1
+Version: 1.4.0
Summary: Wraps the portalocker recipe for easy usage
Home-page: https://github.com/WoLpH/portalocker
Author: Rick van Hattem
Author-email: wolph@wol.ph
License: PSF
-Description-Content-Type: UNKNOWN
Description: ############################################
portalocker - Cross-platform locking library
############################################
@@ -41,6 +40,21 @@
The project resides at https://github.com/WoLpH/portalocker . Bugs and feature
requests can be submitted there. Patches are also very welcome.
+ Tips
+ ----
+
+ On some networked filesystems it might be needed to force a `os.fsync()` before closing the file so it's actually written before another client reads the file. Effectively this comes down to:
+
+ ::
+
+ with portalocker.Lock('some_file', 'rb+', timeout=60) as fh:
+ # do what you need to do
+ ...
+
+ # flush and sync to filesystem
+ fh.flush()
+ os.fsync(fh.fileno())
+
Links
-----
@@ -107,3 +121,5 @@
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
+Provides-Extra: docs
+Provides-Extra: tests
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/portalocker-1.2.1/portalocker.egg-info/SOURCES.txt new/portalocker-1.4.0/portalocker.egg-info/SOURCES.txt
--- old/portalocker-1.2.1/portalocker.egg-info/SOURCES.txt 2018-05-01 15:20:39.000000000 +0200
+++ new/portalocker-1.4.0/portalocker.egg-info/SOURCES.txt 2019-02-11 13:42:56.000000000 +0100
@@ -14,6 +14,7 @@
portalocker.egg-info/dependency_links.txt
portalocker.egg-info/requires.txt
portalocker.egg-info/top_level.txt
+tests/__init__.py
tests/conftest.py
tests/temporary_file_lock.py
tests/test_combined.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/portalocker-1.2.1/portalocker.egg-info/top_level.txt new/portalocker-1.4.0/portalocker.egg-info/top_level.txt
--- old/portalocker-1.2.1/portalocker.egg-info/top_level.txt 2018-05-01 15:20:39.000000000 +0200
+++ new/portalocker-1.4.0/portalocker.egg-info/top_level.txt 2019-02-11 13:42:56.000000000 +0100
@@ -1 +1,2 @@
portalocker
+tests