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