Hello community,

here is the log from the commit of package python-keyring for openSUSE:Factory 
checked in at 2018-07-09 13:27:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-keyring (Old)
 and      /work/SRC/openSUSE:Factory/.python-keyring.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-keyring"

Mon Jul  9 13:27:21 2018 rev:29 rq:620965 version:13.0.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-keyring/python-keyring.changes    
2018-01-26 13:38:44.307427495 +0100
+++ /work/SRC/openSUSE:Factory/.python-keyring.new/python-keyring.changes       
2018-07-09 13:27:23.182980100 +0200
@@ -1,0 +2,37 @@
+Sat Jun 23 06:58:48 UTC 2018 - tchva...@suse.com
+
+- Version update to 13.0.0:
+  * #327: In kwallet backend, if the collection or item is
+    locked, a ``KeyringLocked`` exception is raised. Clients
+    expecting a None response from ``get_password`` under
+    this condition will need to catch this exception.
+    Additionally, an ``InitError`` is now raised if the
+    connection cannot be established to the DBus.
+  * #298: In kwallet backend, when checking an existing
+    handle, verify that it is still valid or create a new
+    connection.
+  * Fixed issue in SecretService. Ref #226.
+  * #322: Fix AttributeError when ``escape.__builtins__``
+    is a dict.
+  * Deprecated ``keyring.util.escape`` module. If you use
+    this module or encounter the warning (on the latest
+    release of your packages), please `file a ticket
+    <https://github.com/jaraco/keyring/issues/new>`_.
+  * Unpin SecretStorage on Python 3.5+. Requires that
+    Setuptools 17.1 be used. Note that the special
+    handling will be unnecessary once Pip 9 can be
+    assumed (as it will exclude SecretStorage 3 in
+    non-viable environments).
+  * #310: Keyring now loads all backends through entry
+    points.
+  * #312: Use ``entrypoints`` instead of pkg_resources to
+    avoid performance hit loading pkg_resources. Adds
+    a dependency on ``entrypoints``.
+  * #294: No longer expose ``keyring.__version__`` (added
+    in 8.1) to avoid performance hit loading pkg_resources.
+  * #299: Keyring exceptions are now derived from a base
+    ``keyring.errors.KeyringError``.
+  * #296: Prevent AttributeError on import when Debian has
+    created broken dbus installs.
+
+-------------------------------------------------------------------

Old:
----
  keyring-10.5.0.tar.gz

New:
----
  keyring-13.0.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-keyring.spec ++++++
--- /var/tmp/diff_new_pack.cfTZli/_old  2018-07-09 13:27:23.558979290 +0200
+++ /var/tmp/diff_new_pack.cfTZli/_new  2018-07-09 13:27:23.558979290 +0200
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-keyring
-Version:        10.5.0
+Version:        13.0.0
 Release:        0
 Summary:        Store and access your passwords safely
 License:        Python-2.0 AND MIT
@@ -27,13 +27,17 @@
 Source:         
https://files.pythonhosted.org/packages/source/k/keyring/keyring-%{version}.tar.gz
 BuildRequires:  %{python_module SecretStorage}
 BuildRequires:  %{python_module devel}
+BuildRequires:  %{python_module entrypoints}
 BuildRequires:  %{python_module mock}
-BuildRequires:  %{python_module pytest}
+BuildRequires:  %{python_module pytest >= 3.5}
+BuildRequires:  %{python_module pytest-flake8}
+BuildRequires:  %{python_module pytest-sugar >= 0.9.1}
+BuildRequires:  %{python_module setuptools >= 17.1}
 BuildRequires:  %{python_module setuptools_scm >= 1.15.0}
-BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
 Requires:       python-SecretStorage
+Requires:       python-entrypoints
 Requires:       python-setuptools
 BuildArch:      noarch
 %python_subpackages
@@ -55,11 +59,11 @@
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
 
 %check
-pushd docs
-%{python_expand export PYTHONPATH="%{buildroot}%{$python_sitelib}"
-py.test-%{$python_bin_suffix} --pyargs keyring.tests
-}
-popd
+# remove test expecting the /usr/bin
+rm -rf tests/test_packaging.py
+# sadly most tests need running dbus to communicate with secretstorage/etc
+%{python_expand rm -rf _build*
+py.test-%{$python_bin_suffix}}
 
 %files %{python_files}
 %doc README.rst CHANGES.rst

++++++ keyring-10.5.0.tar.gz -> keyring-13.0.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/.flake8 new/keyring-13.0.0/.flake8
--- old/keyring-10.5.0/.flake8  1970-01-01 01:00:00.000000000 +0100
+++ new/keyring-13.0.0/.flake8  2018-06-17 19:04:41.000000000 +0200
@@ -0,0 +1,4 @@
+[flake8]
+ignore =
+       # W503 violates spec https://github.com/PyCQA/pycodestyle/issues/513
+       W503
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/.travis-macos 
new/keyring-13.0.0/.travis-macos
--- old/keyring-10.5.0/.travis-macos    1970-01-01 01:00:00.000000000 +0100
+++ new/keyring-13.0.0/.travis-macos    2018-06-17 19:04:41.000000000 +0200
@@ -0,0 +1,4 @@
+# Perform the manual steps on osx to install python and activate an environment
+brew update
+brew upgrade python
+export PATH=/usr/local/opt/python/libexec/bin:$PATH
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/.travis-osx 
new/keyring-13.0.0/.travis-osx
--- old/keyring-10.5.0/.travis-osx      2017-11-13 02:12:26.000000000 +0100
+++ new/keyring-13.0.0/.travis-osx      1970-01-01 01:00:00.000000000 +0100
@@ -1,6 +0,0 @@
-# Perform the manual steps on osx to install python3 and activate an 
environment
-brew update
-brew install python3
-rm /usr/local/bin/python
-ln -s python3 /usr/local/bin/python
-python -m pip install --upgrade tox
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/.travis.yml 
new/keyring-13.0.0/.travis.yml
--- old/keyring-10.5.0/.travis.yml      2017-11-13 02:12:26.000000000 +0100
+++ new/keyring-13.0.0/.travis.yml      2018-06-17 19:04:41.000000000 +0200
@@ -4,10 +4,10 @@
   fast_finish: true
   include:
   - python: 2.7
-  - python: 3.3
   - python: &latest_py3 3.6
   - os: osx
     language: generic
+    python: *latest_py3
   - stage: deploy
     if: tag IS present
     python: *latest_py3
@@ -23,14 +23,18 @@
         secure: 
aDqlVdm6FZ8pqLkoDRR2LH3TEz7pBvKH2HhOlSy7OEmopN/36ncql/KvfE0ccpaOES9Xm31a51bUfNjcwb1HVKjfW544C+IoSHctkG1rI5bp3q4rW+4RbQcBZVHUUKR9yQf9ZyikEmoYXi3g+JKcOf9rj+v/32PAfUDzSpFbWik=
       distributions: dists
       skip_cleanup: true
-      skip_upload_docs: true
 
 cache: pip
 
 before_install:
-- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then source .travis-osx; fi
+- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then source .travis-macos; fi
 
 install:
-- pip install tox
+- pip install tox tox-venv
 
+before_script:
+  # Disable IPv6. Ref travis-ci/travis-ci#8361
+  - if [ "${TRAVIS_OS_NAME}" == "linux" ]; then
+      sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6';
+    fi
 script: tox
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/CHANGES.rst 
new/keyring-13.0.0/CHANGES.rst
--- old/keyring-10.5.0/CHANGES.rst      2017-11-13 02:12:26.000000000 +0100
+++ new/keyring-13.0.0/CHANGES.rst      2018-06-17 19:04:41.000000000 +0200
@@ -1,3 +1,89 @@
+13.0.0
+------
+
+* #327: In kwallet backend, if the collection or item is
+  locked, a ``KeyringLocked`` exception is raised. Clients
+  expecting a None response from ``get_password`` under
+  this condition will need to catch this exception.
+  Additionally, an ``InitError`` is now raised if the
+  connection cannot be established to the DBus.
+
+* #298: In kwallet backend, when checking an existing
+  handle, verify that it is still valid or create a new
+  connection.
+
+12.2.1
+------
+
+* Fixed issue in SecretService. Ref #226.
+
+12.2.0
+------
+
+* #322: Fix AttributeError when ``escape.__builtins__``
+  is a dict.
+
+* Deprecated ``keyring.util.escape`` module. If you use
+  this module or encounter the warning (on the latest
+  release of your packages), please `file a ticket
+  <https://github.com/jaraco/keyring/issues/new>`_.
+
+12.1.0
+------
+
+* Unpin SecretStorage on Python 3.5+. Requires that
+  Setuptools 17.1 be used. Note that the special
+  handling will be unnecessary once Pip 9 can be
+  assumed (as it will exclude SecretStorage 3 in
+  non-viable environments).
+
+12.0.2
+------
+
+* Pin SecretStorage to 2.x.
+
+12.0.1
+------
+
+* #314: No changes except to rebuild.
+
+12.0.0
+------
+
+* #310: Keyring now loads all backends through entry
+  points.
+
+For most users, this release will be fully compatible. Some
+users may experience compatibility issues if entrypoints is
+not installed (as declared) or the metadata on which entrypoints
+relies is unavailable. For that reason, the package is released
+with a major version bump.
+
+11.1.0
+------
+
+* #312: Use ``entrypoints`` instead of pkg_resources to
+  avoid performance hit loading pkg_resources. Adds
+  a dependency on ``entrypoints``.
+
+11.0.0
+------
+
+* #294: No longer expose ``keyring.__version__`` (added
+  in 8.1) to avoid performance hit loading pkg_resources.
+
+10.6.0
+------
+
+* #299: Keyring exceptions are now derived from a base
+  ``keyring.errors.KeyringError``.
+
+10.5.1
+------
+
+* #296: Prevent AttributeError on import when Debian has
+  created broken dbus installs.
+
 10.5.0
 ------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/PKG-INFO new/keyring-13.0.0/PKG-INFO
--- old/keyring-10.5.0/PKG-INFO 2017-11-13 02:12:50.000000000 +0100
+++ new/keyring-13.0.0/PKG-INFO 2018-06-17 19:05:09.000000000 +0200
@@ -1,22 +1,26 @@
-Metadata-Version: 1.2
+Metadata-Version: 2.1
 Name: keyring
-Version: 10.5.0
+Version: 13.0.0
 Summary: Store and access your passwords safely.
 Home-page: https://github.com/jaraco/keyring
-Author: Jason R. Coombs
-Author-email: jar...@jaraco.com
+Author: Kang Zhang
+Author-email: jobo...@gmail.com
+Maintainer: Jason R. Coombs
+Maintainer-email: jar...@jaraco.com
 License: UNKNOWN
-Description-Content-Type: UNKNOWN
 Description: .. image:: https://img.shields.io/pypi/v/keyring.svg
            :target: https://pypi.org/project/keyring
         
         .. image:: https://img.shields.io/pypi/pyversions/keyring.svg
         
         .. image:: https://img.shields.io/travis/jaraco/keyring/master.svg
-           :target: http://travis-ci.org/jaraco/keyring
+           :target: https://travis-ci.org/jaraco/keyring
+        
+        .. .. image:: 
https://img.shields.io/appveyor/ci/jaraco/keyring/master.svg
+        ..    :target: 
https://ci.appveyor.com/project/jaraco/keyring/branch/master
         
         .. image:: 
https://readthedocs.org/projects/keyring/badge/?version=latest
-           :target: http://keyring.readthedocs.io/en/latest/?badge=latest
+           :target: https://keyring.readthedocs.io/en/latest/?badge=latest
         
         =======================================
         Installing and Using Python Keyring Lib
@@ -36,17 +40,17 @@
         
         These recommended keyring backends are supported by the Python keyring 
lib:
         
-        * Mac OS X `Keychain
+        * macOS `Keychain
           <https://en.wikipedia.org/wiki/Keychain_%28software%29>`_
         * Freedesktop `Secret Service
-          <http://standards.freedesktop.org/secret-service/>`_ (requires
-          `secretstorage <https://pypi.python.org/pypi/secretstorage>`_)
-        * `KWallet <https://en.wikipedia.org/wiki/KWallet>`_
+          <http://standards.freedesktop.org/secret-service/>`_ supports many 
DE including 
+          GNOME (requires `secretstorage 
<https://pypi.python.org/pypi/secretstorage>`_)
+        * KDE4 & KDE5 `KWallet <https://en.wikipedia.org/wiki/KWallet>`_
           (requires `dbus <https://pypi.python.org/pypi/dbus-python>`_)
         * `Windows Credential Locker
           
<https://docs.microsoft.com/en-us/windows/uwp/security/credential-locker>`_
         
-        Other keyring implementations are provided in the `keyrings.alt 
package`_.
+        Other keyring implementations are available through `Third-Party 
Backends`_.
         
         -------------------------
         Installation Instructions
@@ -159,12 +163,17 @@
         are additional keyring backend implementations available for other
         use-cases. Simply install them to make them available:
         
-        - `keyrings.alt <https://pypi.org/project/keyrings.alt>`_ - 
"alternate",
-          less common backends, originally part of the core package, but now
-          available for opt-in.
-        - `keyring_jeepney <https://pypi.python.org/pypi/keyring_jeepney>`__ - 
a
+        - `keyrings.cryptfile <https://pypi.org/project/keyrings.cryptfile>`_
+          - Encrypted text file storage.
+        - `keyring_jeepney <https://pypi.org/project/keyring_jeepney>`__ - a
           pure Python backend using the secret service DBus API for desktop
           Linux.
+        - `keyrings.alt <https://pypi.org/project/keyrings.alt>`_ - 
"alternate",
+          possibly-insecure backends, originally part of the core package, but
+          available for opt-in.
+        - `gsheet-keyring <https://pypi.org/project/gsheet-keyring>`_
+          - a backend that stores secrets in a Google Sheet. For use with
+          `ipython-secrets <https://pypi.org/project/ipython-secrets>`_.
         
         Write your own keyring backend
         ==============================
@@ -296,6 +305,17 @@
         decoded to text. Some backends may accept ``bytes`` for these 
parameters,
         but such usage is discouraged.
         
+        
+        Exceptions
+        ==========
+        
+        The keyring lib raises following exceptions:
+        
+        * ``keyring.errors.KeyringError``: Base Error class for all exceptions 
in keyring lib.
+        * ``keyring.errors.InitError``: Raised when the keyring can't be 
initialized.
+        * ``keyring.errors.PasswordSetError``: Raise when password can't be 
set in the keyring.
+        * ``keyring.errors.PasswordDeleteError``: Raised when the password 
can't be deleted in the keyring.
+        
         ------------
         Get involved
         ------------
@@ -364,3 +384,5 @@
 Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Requires-Python: >=2.7
+Provides-Extra: testing
+Provides-Extra: docs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/README.rst 
new/keyring-13.0.0/README.rst
--- old/keyring-10.5.0/README.rst       2017-11-13 02:12:26.000000000 +0100
+++ new/keyring-13.0.0/README.rst       2018-06-17 19:04:41.000000000 +0200
@@ -4,10 +4,13 @@
 .. image:: https://img.shields.io/pypi/pyversions/keyring.svg
 
 .. image:: https://img.shields.io/travis/jaraco/keyring/master.svg
-   :target: http://travis-ci.org/jaraco/keyring
+   :target: https://travis-ci.org/jaraco/keyring
+
+.. .. image:: https://img.shields.io/appveyor/ci/jaraco/keyring/master.svg
+..    :target: https://ci.appveyor.com/project/jaraco/keyring/branch/master
 
 .. image:: https://readthedocs.org/projects/keyring/badge/?version=latest
-   :target: http://keyring.readthedocs.io/en/latest/?badge=latest
+   :target: https://keyring.readthedocs.io/en/latest/?badge=latest
 
 =======================================
 Installing and Using Python Keyring Lib
@@ -27,17 +30,17 @@
 
 These recommended keyring backends are supported by the Python keyring lib:
 
-* Mac OS X `Keychain
+* macOS `Keychain
   <https://en.wikipedia.org/wiki/Keychain_%28software%29>`_
 * Freedesktop `Secret Service
-  <http://standards.freedesktop.org/secret-service/>`_ (requires
-  `secretstorage <https://pypi.python.org/pypi/secretstorage>`_)
-* `KWallet <https://en.wikipedia.org/wiki/KWallet>`_
+  <http://standards.freedesktop.org/secret-service/>`_ supports many DE 
including 
+  GNOME (requires `secretstorage 
<https://pypi.python.org/pypi/secretstorage>`_)
+* KDE4 & KDE5 `KWallet <https://en.wikipedia.org/wiki/KWallet>`_
   (requires `dbus <https://pypi.python.org/pypi/dbus-python>`_)
 * `Windows Credential Locker
   <https://docs.microsoft.com/en-us/windows/uwp/security/credential-locker>`_
 
-Other keyring implementations are provided in the `keyrings.alt package`_.
+Other keyring implementations are available through `Third-Party Backends`_.
 
 -------------------------
 Installation Instructions
@@ -150,12 +153,17 @@
 are additional keyring backend implementations available for other
 use-cases. Simply install them to make them available:
 
-- `keyrings.alt <https://pypi.org/project/keyrings.alt>`_ - "alternate",
-  less common backends, originally part of the core package, but now
-  available for opt-in.
-- `keyring_jeepney <https://pypi.python.org/pypi/keyring_jeepney>`__ - a
+- `keyrings.cryptfile <https://pypi.org/project/keyrings.cryptfile>`_
+  - Encrypted text file storage.
+- `keyring_jeepney <https://pypi.org/project/keyring_jeepney>`__ - a
   pure Python backend using the secret service DBus API for desktop
   Linux.
+- `keyrings.alt <https://pypi.org/project/keyrings.alt>`_ - "alternate",
+  possibly-insecure backends, originally part of the core package, but
+  available for opt-in.
+- `gsheet-keyring <https://pypi.org/project/gsheet-keyring>`_
+  - a backend that stores secrets in a Google Sheet. For use with
+  `ipython-secrets <https://pypi.org/project/ipython-secrets>`_.
 
 Write your own keyring backend
 ==============================
@@ -287,6 +295,17 @@
 decoded to text. Some backends may accept ``bytes`` for these parameters,
 but such usage is discouraged.
 
+
+Exceptions
+==========
+
+The keyring lib raises following exceptions:
+
+* ``keyring.errors.KeyringError``: Base Error class for all exceptions in 
keyring lib.
+* ``keyring.errors.InitError``: Raised when the keyring can't be initialized.
+* ``keyring.errors.PasswordSetError``: Raise when password can't be set in the 
keyring.
+* ``keyring.errors.PasswordDeleteError``: Raised when the password can't be 
deleted in the keyring.
+
 ------------
 Get involved
 ------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/appveyor.yml 
new/keyring-13.0.0/appveyor.yml
--- old/keyring-10.5.0/appveyor.yml     2017-11-13 02:12:26.000000000 +0100
+++ new/keyring-13.0.0/appveyor.yml     2018-06-17 19:04:41.000000000 +0200
@@ -14,8 +14,11 @@
 
 build: off
 
+cache:
+  - '%LOCALAPPDATA%\pip\Cache'
+
 test_script:
-  - "python -m pip install tox"
+  - "python -m pip install tox tox-venv"
   - "tox"
 
 version: '{build}'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/docs/conf.py 
new/keyring-13.0.0/docs/conf.py
--- old/keyring-10.5.0/docs/conf.py     2017-11-13 02:12:26.000000000 +0100
+++ new/keyring-13.0.0/docs/conf.py     2018-06-17 19:04:41.000000000 +0200
@@ -1,10 +1,11 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
+# flake8: noqa
 
 extensions = [
-    'sphinx.ext.autodoc',
-    'jaraco.packaging.sphinx',
-    'rst.linker',
+       'sphinx.ext.autodoc',
+       'jaraco.packaging.sphinx',
+       'rst.linker',
 ]
 
 master_doc = 'index'
@@ -16,7 +17,7 @@
                ),
                replace=[
                        dict(
-                               pattern=r'(Issue )?#(?P<issue>\d+)',
+                               pattern=r'(Issue #|\B#)(?P<issue>\d+)',
                                url='{package_url}/issues/{issue}',
                        ),
                        dict(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/hook-keyring.backend.py 
new/keyring-13.0.0/hook-keyring.backend.py
--- old/keyring-10.5.0/hook-keyring.backend.py  2017-11-13 02:12:26.000000000 
+0100
+++ new/keyring-13.0.0/hook-keyring.backend.py  2018-06-17 19:04:41.000000000 
+0200
@@ -1,16 +1,9 @@
 # Used by pyinstaller to expose hidden imports
 
-# TODO: can this be loaded from keyring.backend directly?
-_backend_mod_names = 'kwallet', 'OS_X', 'SecretService', 'Windows'
+import entrypoints
 
-hiddenimports = [
-    'keyring.backends.' + mod_name
-    for mod_name in _backend_mod_names
-]
-
-import pkg_resources
 
-hiddenimports.extend(
+hiddenimports = [
     ep.module_name
-    for ep in pkg_resources.iter_entry_points('keyring.backends')
-)
+    for ep in entrypoints.get_group_all('keyring.backends')
+]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring/__init__.py 
new/keyring-13.0.0/keyring/__init__.py
--- old/keyring-10.5.0/keyring/__init__.py      2017-11-13 02:12:26.000000000 
+0100
+++ new/keyring-13.0.0/keyring/__init__.py      2018-06-17 19:04:41.000000000 
+0200
@@ -4,12 +4,6 @@
                    delete_password)
 from .getpassbackend import get_password as get_pass_get_password
 
-try:
-    import pkg_resources
-    __version__ = pkg_resources.get_distribution('keyring').version
-except Exception:
-    __version__ = 'unknown'
-
 __all__ = (
     'set_keyring', 'get_keyring', 'set_password', 'get_password',
     'delete_password', 'get_pass_get_password',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring/backend.py 
new/keyring-13.0.0/keyring/backend.py
--- old/keyring-10.5.0/keyring/backend.py       2017-11-13 02:12:26.000000000 
+0100
+++ new/keyring-13.0.0/keyring/backend.py       2018-06-17 19:04:41.000000000 
+0200
@@ -6,15 +6,10 @@
 
 import abc
 import logging
-import importlib
 
-try:
-    import pkg_resources
-except ImportError:
-    pass
+import entrypoints
 
 from . import errors, util
-from . import backends
 from .util import properties
 from .py27compat import add_metaclass, filter
 
@@ -42,7 +37,7 @@
     this interface.
     """
 
-    #@abc.abstractproperty
+    # @abc.abstractproperty
     def priority(cls):
         """
         Each backend class must supply a priority, a number (float or integer)
@@ -92,7 +87,7 @@
 
     # for backward-compatibility, don't require a backend to implement
     #  delete_password
-    #@abc.abstractmethod
+    # @abc.abstractmethod
     def delete_password(self, service, username):
         """Delete the password for the username of the service.
         """
@@ -127,22 +122,6 @@
         return value
 
 
-def _load_backend(name):
-    "Load a backend by name"
-    package = backends.__package__ or backends.__name__
-    mod = importlib.import_module('.' + name, package)
-    # invoke __name__ on each module to ensure it's loaded in demand-import
-    # environments
-    mod.__name__
-
-
-def _load_backends():
-    "ensure that native keyring backends are loaded"
-    backends = 'kwallet', 'OS_X', 'SecretService', 'Windows'
-    list(map(_load_backend, backends))
-    _load_plugins()
-
-
 def _load_plugins():
     """
     Locate all setuptools entry points by the name 'keyring backends'
@@ -161,10 +140,8 @@
 
     `initialize_func` is optional, but will be invoked if callable.
     """
-    if 'pkg_resources' not in globals():
-        return
     group = 'keyring.backends'
-    entry_points = pkg_resources.iter_entry_points(group=group)
+    entry_points = entrypoints.get_group_all(group=group)
     for ep in entry_points:
         try:
             log.info('Loading %s', ep.name)
@@ -181,7 +158,7 @@
     Return a list of all implemented keyrings that can be constructed without
     parameters.
     """
-    _load_backends()
+    _load_plugins()
 
     def is_class_viable(keyring_cls):
         try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring/backends/OS_X.py 
new/keyring-13.0.0/keyring/backends/OS_X.py
--- old/keyring-10.5.0/keyring/backends/OS_X.py 2017-11-13 02:12:26.000000000 
+0100
+++ new/keyring-13.0.0/keyring/backends/OS_X.py 2018-06-17 19:04:41.000000000 
+0200
@@ -12,7 +12,7 @@
 
 
 class Keyring(KeyringBackend):
-    """Mac OS X Keychain"""
+    """macOS Keychain"""
 
     keychain = None
     "Pathname to keychain filename, overriding default keychain."
@@ -21,10 +21,10 @@
     @classmethod
     def priority(cls):
         """
-        Preferred for all OS X environments.
+        Preferred for all macOS environments.
         """
         if platform.system() != 'Darwin':
-            raise RuntimeError("OS X required")
+            raise RuntimeError("macOS required")
         return 5
 
     def set_password(self, service, username, password):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring/backends/SecretService.py 
new/keyring-13.0.0/keyring/backends/SecretService.py
--- old/keyring-10.5.0/keyring/backends/SecretService.py        2017-11-13 
02:12:26.000000000 +0100
+++ new/keyring-13.0.0/keyring/backends/SecretService.py        2018-06-17 
19:04:41.000000000 +0200
@@ -6,13 +6,16 @@
 from ..util import properties
 from ..backend import KeyringBackend
 from ..errors import (InitError, PasswordDeleteError,
-                      ExceptionRaisedContext)
+                      ExceptionRaisedContext, KeyringLocked)
 
 try:
     import secretstorage
     import secretstorage.exceptions as exceptions
 except ImportError:
     pass
+except AttributeError:
+    # See https://github.com/jaraco/keyring/issues/296
+    pass
 
 log = logging.getLogger(__name__)
 
@@ -33,14 +36,15 @@
         try:
             bus = secretstorage.dbus_init()
             list(secretstorage.get_all_collections(bus))
-        except exceptions.SecretServiceNotAvailableException as e:
+        except exceptions.SecretStorageException as e:
             raise RuntimeError(
                 "Unable to initialize SecretService: %s" % e)
         return 5
 
     def get_preferred_collection(self):
-        """If self.preferred_collection contains a D-Bus path, the collection
-        at that address is returned. Otherwise, the default collection is 
returned.
+        """If self.preferred_collection contains a D-Bus path,
+        the collection at that address is returned. Otherwise,
+        the default collection is returned.
         """
         bus = secretstorage.dbus_init()
         try:
@@ -54,7 +58,7 @@
         if collection.is_locked():
             collection.unlock()
             if collection.is_locked():  # User dismissed the prompt
-                raise InitError("Failed to unlock the collection!")
+                raise KeyringLocked("Failed to unlock the collection!")
         return collection
 
     def get_password(self, service, username):
@@ -65,8 +69,9 @@
             {"username": username, "service": service})
         for item in items:
             if hasattr(item, 'unlock'):
-                if item.is_locked() and item.unlock()[0]:
-                    raise InitError('failed to unlock item')
+                item.unlock()
+            if item.is_locked():  # User dismissed the prompt
+                raise KeyringLocked('Failed to unlock the item!')
             return item.get_secret().decode('utf-8')
 
     def set_password(self, service, username, password):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring/backends/Windows.py 
new/keyring-13.0.0/keyring/backends/Windows.py
--- old/keyring-10.5.0/keyring/backends/Windows.py      2017-11-13 
02:12:26.000000000 +0100
+++ new/keyring-13.0.0/keyring/backends/Windows.py      2018-06-17 
19:04:41.000000000 +0200
@@ -9,8 +9,8 @@
 
 try:
     # prefer pywin32-ctypes
-    from win32ctypes import pywintypes
-    from win32ctypes import win32cred
+    from win32ctypes.pywin32 import pywintypes
+    from win32ctypes.pywin32 import win32cred
     # force demand import to raise ImportError
     win32cred.__name__
 except ImportError:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring/backends/_OS_X_API.py 
new/keyring-13.0.0/keyring/backends/_OS_X_API.py
--- old/keyring-10.5.0/keyring/backends/_OS_X_API.py    2017-11-13 
02:12:26.000000000 +0100
+++ new/keyring-13.0.0/keyring/backends/_OS_X_API.py    2018-06-17 
19:04:41.000000000 +0200
@@ -291,7 +291,8 @@
         NotFound.raise_for_status(status, "Unable to set password")
 
 
-SecKeychainItemModifyAttributesAndData = 
_sec.SecKeychainItemModifyAttributesAndData
+SecKeychainItemModifyAttributesAndData = (
+    _sec.SecKeychainItemModifyAttributesAndData)
 SecKeychainItemModifyAttributesAndData.argtypes = (
     sec_keychain_item_ref, c_void_p, c_uint32, c_void_p,
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring/backends/fail.py 
new/keyring-13.0.0/keyring/backends/fail.py
--- old/keyring-10.5.0/keyring/backends/fail.py 2017-11-13 02:12:26.000000000 
+0100
+++ new/keyring-13.0.0/keyring/backends/fail.py 2018-06-17 19:04:41.000000000 
+0200
@@ -22,4 +22,4 @@
         )
         raise RuntimeError(msg)
 
-    set_password = delete_pasword = get_password
+    set_password = delete_password = get_password
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring/backends/kwallet.py 
new/keyring-13.0.0/keyring/backends/kwallet.py
--- old/keyring-10.5.0/keyring/backends/kwallet.py      2017-11-13 
02:12:26.000000000 +0100
+++ new/keyring-13.0.0/keyring/backends/kwallet.py      2018-06-17 
19:04:41.000000000 +0200
@@ -5,7 +5,7 @@
 
 from ..backend import KeyringBackend
 from ..errors import PasswordDeleteError
-from ..errors import PasswordSetError
+from ..errors import PasswordSetError, InitError, KeyringLocked
 from ..util import properties
 
 try:
@@ -13,6 +13,9 @@
     from dbus.mainloop.glib import DBusGMainLoop
 except ImportError:
     pass
+except AttributeError:
+    # See https://github.com/jaraco/keyring/issues/296
+    pass
 
 
 class DBusKeyring(KeyringBackend):
@@ -40,6 +43,8 @@
             tmpl = 'cannot connect to {bus_name}'
             msg = tmpl.format(bus_name=cls.bus_name)
             raise RuntimeError(msg)
+        if "KDE" in os.getenv("XDG_CURRENT_DESKTOP", "").split(":"):
+            return 5.1
         return 4.9
 
     def __init__(self, *arg, **kw):
@@ -71,7 +76,9 @@
 
     def connected(self, service):
         if self.handle >= 0:
-            return True
+            if self.iface.isOpen(self.handle):
+                return True
+
         bus = dbus.SessionBus(mainloop=DBusGMainLoop())
         wId = 0
         try:
@@ -79,8 +86,9 @@
             self.iface = dbus.Interface(remote_obj, 'org.kde.KWallet')
             self.handle = self.iface.open(
                 self.iface.networkWallet(), wId, self.appid)
-        except dbus.DBusException:
-            self.handle = -1
+        except dbus.DBusException as e:
+            raise InitError('Failed to open keyring: %s.' % e)
+
         if self.handle < 0:
             return False
         self._migrate(service)
@@ -91,7 +99,7 @@
         """
         if not self.connected(service):
             # the user pressed "cancel" when prompted to unlock their keyring.
-            return None
+            raise KeyringLocked("Failed to unlock the keyring!")
         if not self.iface.hasEntry(self.handle, service, username, self.appid):
             return None
         password = self.iface.readPassword(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring/cli.py 
new/keyring-13.0.0/keyring/cli.py
--- old/keyring-10.5.0/keyring/cli.py   2017-11-13 02:12:26.000000000 +0100
+++ new/keyring-13.0.0/keyring/cli.py   2018-06-17 19:04:41.000000000 +0200
@@ -9,7 +9,7 @@
 
 from . import core
 from . import backend
-from . import get_keyring, set_keyring, get_password, set_password, 
delete_password
+from . import set_keyring, get_password, set_password, delete_password
 
 
 class CommandLineTool(object):
@@ -73,8 +73,10 @@
             return 0
 
         elif kind == 'del':
-            password = self.input_password("Deleting password for '%s' in 
'%s': " %
-                                           (username, service))
+            password = self.input_password(
+                "Deleting password for '%s' in '%s': " %
+                (username, service),
+            )
             delete_password(service, username)
             return 0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring/core.py 
new/keyring-13.0.0/keyring/core.py
--- old/keyring-10.5.0/keyring/core.py  2017-11-13 02:12:26.000000000 +0100
+++ new/keyring-13.0.0/keyring/core.py  2018-06-17 19:04:41.000000000 +0200
@@ -53,7 +53,8 @@
     _keyring_backend.delete_password(service_name, username)
 
 
-def recommended(backend): return backend.priority >= 1
+def recommended(backend):
+    return backend.priority >= 1
 
 
 by_priority = operator.attrgetter('priority')
@@ -133,8 +134,8 @@
 
     except (configparser.NoOptionError, ImportError):
         logger = logging.getLogger('keyring')
-        logger.warning("Keyring config file contains incorrect values.\n" +
-                       "Config file: %s" % keyring_cfg)
+        logger.warning("Keyring config file contains incorrect values.\n"
+                       + "Config file: %s" % keyring_cfg)
         return
 
     return load_keyring(keyring_name)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring/errors.py 
new/keyring-13.0.0/keyring/errors.py
--- old/keyring-10.5.0/keyring/errors.py        2017-11-13 02:12:26.000000000 
+0100
+++ new/keyring-13.0.0/keyring/errors.py        2018-06-17 19:04:41.000000000 
+0200
@@ -1,17 +1,27 @@
 import sys
 
 
-class PasswordSetError(Exception):
+class KeyringError(Exception):
+    """Base class for exceptions in keyring
+    """
+
+
+class PasswordSetError(KeyringError):
     """Raised when the password can't be set.
     """
 
 
-class PasswordDeleteError(Exception):
+class PasswordDeleteError(KeyringError):
     """Raised when the password can't be deleted.
     """
 
 
-class InitError(Exception):
+class InitError(KeyringError):
+    """Raised when the keyring could not be initialised
+    """
+
+
+class KeyringLocked(KeyringError):
     """Raised when the keyring could not be initialised
     """
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring/py27compat.py 
new/keyring-13.0.0/keyring/py27compat.py
--- old/keyring-10.5.0/keyring/py27compat.py    2017-11-13 02:12:26.000000000 
+0100
+++ new/keyring-13.0.0/keyring/py27compat.py    2018-06-17 19:04:41.000000000 
+0200
@@ -5,7 +5,7 @@
 try:
     import configparser
 except ImportError:
-    import ConfigParser as configparser
+    import ConfigParser as configparser  # noqa
 
 try:
     input = raw_input
@@ -22,7 +22,7 @@
 try:
     import cPickle as pickle
 except ImportError:
-    import pickle
+    import pickle  # noqa
 
 try:
     from itertools import ifilter as filter
@@ -47,4 +47,4 @@
 try:
     import builtins
 except ImportError:
-    import __builtin__ as builtins
+    import __builtin__ as builtins  # noqa
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring/tests/backends/test_OS_X.py 
new/keyring-13.0.0/keyring/tests/backends/test_OS_X.py
--- old/keyring-10.5.0/keyring/tests/backends/test_OS_X.py      2017-11-13 
02:12:26.000000000 +0100
+++ new/keyring-13.0.0/keyring/tests/backends/test_OS_X.py      2018-06-17 
19:04:41.000000000 +0200
@@ -10,7 +10,7 @@
 
 
 @unittest.skipUnless(is_osx_keychain_supported(),
-                     "Need OS X")
+                     "Need macOS")
 class OSXKeychainTestCase(BackendBasicTests, unittest.TestCase):
 
     def init_keyring(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keyring-10.5.0/keyring/tests/backends/test_SecretService.py 
new/keyring-13.0.0/keyring/tests/backends/test_SecretService.py
--- old/keyring-10.5.0/keyring/tests/backends/test_SecretService.py     
2017-11-13 02:12:26.000000000 +0100
+++ new/keyring-13.0.0/keyring/tests/backends/test_SecretService.py     
2018-06-17 19:04:41.000000000 +0200
@@ -5,8 +5,9 @@
 from .. import util
 
 
-@unittest.skipUnless(SecretService.Keyring.viable,
-                     "SecretStorage package is needed for 
SecretServiceKeyring")
+@unittest.skipUnless(
+    SecretService.Keyring.viable,
+    "SecretStorage package is needed for SecretServiceKeyring")
 class SecretServiceKeyringTestCase(BackendBasicTests, unittest.TestCase):
     __test__ = True
 
@@ -14,7 +15,9 @@
         print("Testing SecretServiceKeyring; the following "
               "password prompts are for this keyring")
         keyring = SecretService.Keyring()
-        keyring.preferred_collection = 
'/org/freedesktop/secrets/collection/session'
+        keyring.preferred_collection = (
+            '/org/freedesktop/secrets/collection/session'
+        )
         return keyring
 
 
@@ -23,5 +26,6 @@
         """
         SecretService Keyring is not viable if secretstorage can't be imported.
         """
-        with util.NoNoneDictMutator(SecretService.__dict__, 
secretstorage=None):
+        with util.NoNoneDictMutator(
+                SecretService.__dict__, secretstorage=None):
             self.assertFalse(SecretService.Keyring.viable)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keyring-10.5.0/keyring/tests/backends/test_kwallet.py 
new/keyring-13.0.0/keyring/tests/backends/test_kwallet.py
--- old/keyring-10.5.0/keyring/tests/backends/test_kwallet.py   2017-11-13 
02:12:26.000000000 +0100
+++ new/keyring-13.0.0/keyring/tests/backends/test_kwallet.py   2018-06-17 
19:04:41.000000000 +0200
@@ -54,7 +54,8 @@
         ret_password = keyring.get_password(service, username)
         self.assertEqual(
             ret_password, password,
-            "Incorrect password for username: '%s' on service: '%s'. '%s' != 
'%s'"
+            "Incorrect password for username: '%s' "
+            "on service: '%s'. '%s' != '%s'"
             % (service, username, ret_password, password))
 
         # for the empty password
@@ -64,12 +65,15 @@
         ret_password = keyring.get_password(service, username)
         self.assertEqual(
             ret_password, "",
-            "Incorrect password for username: '%s' on service: '%s'. '%s' != 
'%s'"
+            "Incorrect password for username: '%s' "
+            "on service: '%s'. '%s' != '%s'"
             % (service, username, ret_password, ""))
         ret_password = keyring.get_password('Python', username + '@' + service)
         self.assertEqual(
             ret_password, None,
-            "Not 'None' password returned for username: '%s' on service: '%s'. 
'%s' != '%s'. Passwords from old folder should be deleted during migration."
+            "Not 'None' password returned for username: '%s' "
+            "on service: '%s'. '%s' != '%s'. Passwords from old "
+            "folder should be deleted during migration."
             % (service, username, ret_password, None))
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring/tests/test_backend.py 
new/keyring-13.0.0/keyring/tests/test_backend.py
--- old/keyring-10.5.0/keyring/tests/test_backend.py    2017-11-13 
02:12:26.000000000 +0100
+++ new/keyring-13.0.0/keyring/tests/test_backend.py    2018-06-17 
19:04:41.000000000 +0200
@@ -111,8 +111,8 @@
         self.check_set_get(service, username, password)
 
     def test_unicode_and_ascii_chars(self):
-        source = (random_string(10, UNICODE_CHARS) + random_string(10) +
-                  random_string(10, self.DIFFICULT_CHARS))
+        source = (random_string(10, UNICODE_CHARS) + random_string(10)
+                  + random_string(10, self.DIFFICULT_CHARS))
         password = random_string(20, source)
         username = random_string(20, source)
         service = random_string(20, source)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring/util/escape.py 
new/keyring-13.0.0/keyring/util/escape.py
--- old/keyring-10.5.0/keyring/util/escape.py   2017-11-13 02:12:26.000000000 
+0100
+++ new/keyring-13.0.0/keyring/util/escape.py   2018-06-17 19:04:41.000000000 
+0200
@@ -6,6 +6,12 @@
 import re
 import string
 import sys
+import warnings
+
+warnings.warn(
+    "escape is deprecated and will be removed",
+    DeprecationWarning,
+)
 
 # True if we are running on Python 3.
 # taken from six.py
@@ -15,15 +21,11 @@
 if PY3:
     def u(s):
         return s
-
-    def _unichr(c):
-        return chr(c)
 else:
     def u(s):
         return s.decode('utf-8')
 
-    def _unichr(c):
-        return unichr(c)
+_unichr = chr if PY3 else unichr  # noqa: F821
 
 LEGAL_CHARS = (
     getattr(string, 'letters', None)  # Python 2
@@ -50,17 +52,15 @@
 
 def _unescape_code(regex_match):
     ordinal = int(regex_match.group('code'), 16)
-    if sys.version_info >= (3,):
-        return bytes([ordinal])
-    return chr(ordinal)
+    return bytes([ordinal]) if PY3 else chr(ordinal)
 
 
 def unescape(value):
     """
     Inverse of escape.
     """
-    re_esc = re.compile(
-        # the pattern must be bytes to operate on bytes
-        ESCAPE_FMT.replace('%02X', '(?P<code>[0-9A-Fa-f]{2})').encode('ascii')
-    )
+    pattern = ESCAPE_FMT.replace('%02X', '(?P<code>[0-9A-Fa-f]{2})')
+    # the pattern must be bytes to operate on bytes
+    pattern_bytes = pattern.encode('ascii')
+    re_esc = re.compile(pattern_bytes)
     return re_esc.sub(_unescape_code, value.encode('ascii')).decode('utf-8')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring/util/platform_.py 
new/keyring-13.0.0/keyring/util/platform_.py
--- old/keyring-10.5.0/keyring/util/platform_.py        2017-11-13 
02:12:26.000000000 +0100
+++ new/keyring-13.0.0/keyring/util/platform_.py        2018-06-17 
19:04:41.000000000 +0200
@@ -65,6 +65,5 @@
 # by default, use Unix convention
 data_root = globals().get('_data_root_' + platform.system(), _data_root_Linux)
 config_root = globals().get(
-    '_config_root' +
-    platform.system(),
+    '_config_root' + platform.system(),
     _config_root_Linux)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring.egg-info/PKG-INFO 
new/keyring-13.0.0/keyring.egg-info/PKG-INFO
--- old/keyring-10.5.0/keyring.egg-info/PKG-INFO        2017-11-13 
02:12:50.000000000 +0100
+++ new/keyring-13.0.0/keyring.egg-info/PKG-INFO        2018-06-17 
19:05:09.000000000 +0200
@@ -1,22 +1,26 @@
-Metadata-Version: 1.2
+Metadata-Version: 2.1
 Name: keyring
-Version: 10.5.0
+Version: 13.0.0
 Summary: Store and access your passwords safely.
 Home-page: https://github.com/jaraco/keyring
-Author: Jason R. Coombs
-Author-email: jar...@jaraco.com
+Author: Kang Zhang
+Author-email: jobo...@gmail.com
+Maintainer: Jason R. Coombs
+Maintainer-email: jar...@jaraco.com
 License: UNKNOWN
-Description-Content-Type: UNKNOWN
 Description: .. image:: https://img.shields.io/pypi/v/keyring.svg
            :target: https://pypi.org/project/keyring
         
         .. image:: https://img.shields.io/pypi/pyversions/keyring.svg
         
         .. image:: https://img.shields.io/travis/jaraco/keyring/master.svg
-           :target: http://travis-ci.org/jaraco/keyring
+           :target: https://travis-ci.org/jaraco/keyring
+        
+        .. .. image:: 
https://img.shields.io/appveyor/ci/jaraco/keyring/master.svg
+        ..    :target: 
https://ci.appveyor.com/project/jaraco/keyring/branch/master
         
         .. image:: 
https://readthedocs.org/projects/keyring/badge/?version=latest
-           :target: http://keyring.readthedocs.io/en/latest/?badge=latest
+           :target: https://keyring.readthedocs.io/en/latest/?badge=latest
         
         =======================================
         Installing and Using Python Keyring Lib
@@ -36,17 +40,17 @@
         
         These recommended keyring backends are supported by the Python keyring 
lib:
         
-        * Mac OS X `Keychain
+        * macOS `Keychain
           <https://en.wikipedia.org/wiki/Keychain_%28software%29>`_
         * Freedesktop `Secret Service
-          <http://standards.freedesktop.org/secret-service/>`_ (requires
-          `secretstorage <https://pypi.python.org/pypi/secretstorage>`_)
-        * `KWallet <https://en.wikipedia.org/wiki/KWallet>`_
+          <http://standards.freedesktop.org/secret-service/>`_ supports many 
DE including 
+          GNOME (requires `secretstorage 
<https://pypi.python.org/pypi/secretstorage>`_)
+        * KDE4 & KDE5 `KWallet <https://en.wikipedia.org/wiki/KWallet>`_
           (requires `dbus <https://pypi.python.org/pypi/dbus-python>`_)
         * `Windows Credential Locker
           
<https://docs.microsoft.com/en-us/windows/uwp/security/credential-locker>`_
         
-        Other keyring implementations are provided in the `keyrings.alt 
package`_.
+        Other keyring implementations are available through `Third-Party 
Backends`_.
         
         -------------------------
         Installation Instructions
@@ -159,12 +163,17 @@
         are additional keyring backend implementations available for other
         use-cases. Simply install them to make them available:
         
-        - `keyrings.alt <https://pypi.org/project/keyrings.alt>`_ - 
"alternate",
-          less common backends, originally part of the core package, but now
-          available for opt-in.
-        - `keyring_jeepney <https://pypi.python.org/pypi/keyring_jeepney>`__ - 
a
+        - `keyrings.cryptfile <https://pypi.org/project/keyrings.cryptfile>`_
+          - Encrypted text file storage.
+        - `keyring_jeepney <https://pypi.org/project/keyring_jeepney>`__ - a
           pure Python backend using the secret service DBus API for desktop
           Linux.
+        - `keyrings.alt <https://pypi.org/project/keyrings.alt>`_ - 
"alternate",
+          possibly-insecure backends, originally part of the core package, but
+          available for opt-in.
+        - `gsheet-keyring <https://pypi.org/project/gsheet-keyring>`_
+          - a backend that stores secrets in a Google Sheet. For use with
+          `ipython-secrets <https://pypi.org/project/ipython-secrets>`_.
         
         Write your own keyring backend
         ==============================
@@ -296,6 +305,17 @@
         decoded to text. Some backends may accept ``bytes`` for these 
parameters,
         but such usage is discouraged.
         
+        
+        Exceptions
+        ==========
+        
+        The keyring lib raises following exceptions:
+        
+        * ``keyring.errors.KeyringError``: Base Error class for all exceptions 
in keyring lib.
+        * ``keyring.errors.InitError``: Raised when the keyring can't be 
initialized.
+        * ``keyring.errors.PasswordSetError``: Raise when password can't be 
set in the keyring.
+        * ``keyring.errors.PasswordDeleteError``: Raised when the password 
can't be deleted in the keyring.
+        
         ------------
         Get involved
         ------------
@@ -364,3 +384,5 @@
 Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Requires-Python: >=2.7
+Provides-Extra: testing
+Provides-Extra: docs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring.egg-info/SOURCES.txt 
new/keyring-13.0.0/keyring.egg-info/SOURCES.txt
--- old/keyring-10.5.0/keyring.egg-info/SOURCES.txt     2017-11-13 
02:12:50.000000000 +0100
+++ new/keyring-13.0.0/keyring.egg-info/SOURCES.txt     2018-06-17 
19:05:09.000000000 +0200
@@ -1,6 +1,7 @@
+.flake8
 .gitignore
 .readthedocs.yml
-.travis-osx
+.travis-macos
 .travis.yml
 CHANGES.rst
 LICENSE
@@ -8,6 +9,7 @@
 appveyor.yml
 conftest.py
 hook-keyring.backend.py
+pyproject.toml
 pytest.ini
 setup.cfg
 setup.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring.egg-info/entry_points.txt 
new/keyring-13.0.0/keyring.egg-info/entry_points.txt
--- old/keyring-10.5.0/keyring.egg-info/entry_points.txt        2017-11-13 
02:12:50.000000000 +0100
+++ new/keyring-13.0.0/keyring.egg-info/entry_points.txt        2018-06-17 
19:05:09.000000000 +0200
@@ -4,3 +4,9 @@
 [devpi_client]
 keyring = keyring.devpi_client
 
+[keyring.backends]
+SecretService = keyring.backends.SecretService
+kwallet = keyring.backends.kwallet
+macOS = keyring.backends.OS_X
+windows = keyring.backends.Windows
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/keyring.egg-info/requires.txt 
new/keyring-13.0.0/keyring.egg-info/requires.txt
--- old/keyring-10.5.0/keyring.egg-info/requires.txt    2017-11-13 
02:12:50.000000000 +0100
+++ new/keyring-13.0.0/keyring.egg-info/requires.txt    2018-06-17 
19:05:09.000000000 +0200
@@ -1,5 +1,9 @@
+entrypoints
 
-[:sys_platform=="linux2" or sys_platform=="linux"]
+[:(sys_platform=="linux2" or sys_platform=="linux") and python_version<"3.5"]
+secretstorage<3
+
+[:sys_platform=="linux" and python_version>="3.5"]
 secretstorage
 
 [:sys_platform=="win32"]
@@ -11,6 +15,7 @@
 rst.linker>=1.9
 
 [testing]
-pytest>=2.8
-pytest-sugar
+pytest>=3.5
+pytest-sugar>=0.9.1
 collective.checkdocs
+pytest-flake8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/pyproject.toml 
new/keyring-13.0.0/pyproject.toml
--- old/keyring-10.5.0/pyproject.toml   1970-01-01 01:00:00.000000000 +0100
+++ new/keyring-13.0.0/pyproject.toml   2018-06-17 19:04:41.000000000 +0200
@@ -0,0 +1,2 @@
+[build-system]
+requires = ["setuptools", "wheel", "setuptools_scm>=1.15"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/pytest.ini 
new/keyring-13.0.0/pytest.ini
--- old/keyring-10.5.0/pytest.ini       2017-11-13 02:12:26.000000000 +0100
+++ new/keyring-13.0.0/pytest.ini       2018-06-17 19:04:41.000000000 +0200
@@ -1,4 +1,4 @@
 [pytest]
-norecursedirs=dist build .tox
-addopts=--doctest-modules
+norecursedirs=dist build .tox .eggs
+addopts=--doctest-modules --flake8
 doctest_optionflags=ALLOW_UNICODE ELLIPSIS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/setup.cfg new/keyring-13.0.0/setup.cfg
--- old/keyring-10.5.0/setup.cfg        2017-11-13 02:12:50.000000000 +0100
+++ new/keyring-13.0.0/setup.cfg        2018-06-17 19:05:09.000000000 +0200
@@ -5,6 +5,9 @@
 [bdist_wheel]
 universal = 1
 
+[metadata]
+license_file = LICENSE
+
 [egg_info]
 tag_build = 
 tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/setup.py new/keyring-13.0.0/setup.py
--- old/keyring-10.5.0/setup.py 2017-11-13 02:12:26.000000000 +0100
+++ new/keyring-13.0.0/setup.py 2018-06-17 19:04:41.000000000 +0200
@@ -35,23 +35,35 @@
     ),
     python_requires='>=2.7',
     install_requires=[
+        'entrypoints',
     ],
     extras_require={
-        ':sys_platform=="win32"': [
-            'pywin32-ctypes!=0.1.0,!=0.1.1',
-        ],
-        ':sys_platform=="linux2" or sys_platform=="linux"': [
-            "secretstorage",
-        ],
         'testing': [
-            'pytest>=2.8',
-            'pytest-sugar',
+            # upstream
+            'pytest>=3.5',
+            'pytest-sugar>=0.9.1',
             'collective.checkdocs',
+            'pytest-flake8',
+
+            # local
         ],
         'docs': [
+            # upstream
             'sphinx',
             'jaraco.packaging>=3.2',
             'rst.linker>=1.9',
+
+            # local
+        ],
+        ':sys_platform=="win32"': [
+            'pywin32-ctypes!=0.1.0,!=0.1.1',
+        ],
+        ':sys_platform=="linux" and python_version>="3.5"': [
+            "secretstorage",
+        ],
+        ':(sys_platform=="linux2" or sys_platform=="linux")'
+        ' and python_version<"3.5"': [
+            "secretstorage<3",
         ],
     },
     setup_requires=[
@@ -75,6 +87,12 @@
         'devpi_client': [
             'keyring = keyring.devpi_client',
         ],
+        'keyring.backends': [
+            'windows = keyring.backends.Windows',
+            'macOS = keyring.backends.OS_X',
+            'SecretService = keyring.backends.SecretService',
+            'kwallet = keyring.backends.kwallet',
+        ],
     },
 )
 if __name__ == '__main__':
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keyring-10.5.0/tox.ini new/keyring-13.0.0/tox.ini
--- old/keyring-10.5.0/tox.ini  2017-11-13 02:12:26.000000000 +0100
+++ new/keyring-13.0.0/tox.ini  2018-06-17 19:04:41.000000000 +0200
@@ -1,9 +1,22 @@
 [tox]
+envlist = python
 minversion = 2.4
 
 [testenv]
+deps =
+       setuptools>=31.0.1
+       # workaround for yaml/pyyaml#126
+       # 
git+https://github.com/yaml/pyyaml@master#egg=pyyaml;python_version=="3.7";
 commands =
-       py.test {posargs}
+       pytest {posargs}
        python setup.py checkdocs
 usedevelop = True
 extras = testing
+
+[testenv:build-docs]
+extras =
+    docs
+    testing
+changedir = docs
+commands =
+    python -m sphinx . {toxinidir}/build/html


Reply via email to