Hello community,
here is the log from the commit of package python-keyrings.alt for
openSUSE:Factory checked in at 2019-03-04 09:21:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-keyrings.alt (Old)
and /work/SRC/openSUSE:Factory/.python-keyrings.alt.new.28833 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-keyrings.alt"
Mon Mar 4 09:21:40 2019 rev:2 rq:679752 version:3.1.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-keyrings.alt/python-keyrings.alt.changes
2018-12-19 13:49:50.839248928 +0100
+++
/work/SRC/openSUSE:Factory/.python-keyrings.alt.new.28833/python-keyrings.alt.changes
2019-03-04 09:21:41.604586749 +0100
@@ -1,0 +2,11 @@
+Tue Feb 26 13:42:33 UTC 2019 - John Vandenberg <[email protected]>
+
+- Remove unnecessary build dependencies like tox, flake8 and pytest-sugar
+- Activate test suite, and isolate it from python-keyring's test suite
+- Update to v3.1.1
+ * Trap AttributeError in Gnome backend as in some environments
+ it seems that will happen.
+ * Fix issue where a backslash in the service name would cause
+ errors on Registry backend on Windows.
+
+-------------------------------------------------------------------
@@ -4 +15 @@
-- initial version
+- initial version for v3.1
Old:
----
keyrings.alt-3.1.tar.gz
New:
----
keyrings.alt-3.1.1.tar.gz
test_backend.py
util.py
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-keyrings.alt.spec ++++++
--- /var/tmp/diff_new_pack.fFXULR/_old 2019-03-04 09:21:42.476586592 +0100
+++ /var/tmp/diff_new_pack.fFXULR/_new 2019-03-04 09:21:42.476586592 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-keyrings.alt
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,15 +16,21 @@
#
+%define keyring_ver 18.0.0
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-keyrings.alt
-Version: 3.1
+Version: 3.1.1
Release: 0
Summary: Alternate keyring implementations
License: MIT
Group: Development/Languages/Python
URL: https://github.com/jaraco/keyrings.alt
Source:
https://files.pythonhosted.org/packages/source/k/keyrings.alt/keyrings.alt-%{version}.tar.gz
+# The following are normally installed into the runtime environment by package
keyring,
+# however they are removed by openSUSE packaging, and included here so that
these tests
+# dont break whenever keyring changes.
+Source1:
https://raw.githubusercontent.com/jaraco/keyring/18.0.0/keyring/tests/test_backend.py
+Source2:
https://raw.githubusercontent.com/jaraco/keyring/18.0.0/keyring/tests/util.py
BuildRequires: %{python_module setuptools_scm >= 1.15.0}
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
@@ -44,10 +50,7 @@
BuildRequires: %{python_module keyring >= 10.3.1}
BuildRequires: %{python_module pycrypto}
BuildRequires: %{python_module pytest >= 3.5}
-BuildRequires: %{python_module pytest-flake8}
-BuildRequires: %{python_module pytest-sugar >= 0.9.1}
BuildRequires: %{python_module six}
-BuildRequires: %{python_module tox}
BuildRequires: python-backports.unittest_mock
BuildRequires: typelib(GnomeKeyring)
# /SECTION
@@ -59,6 +62,9 @@
%prep
%setup -q -n keyrings.alt-%{version}
+sed -i 's/--flake8//' pytest.ini
+cp %{SOURCE1} %{SOURCE2} tests
+sed -i 's/keyring\.tests/tests/' $(ls tests/*.py | grep -Fv test_backend.py)
%build
%python_build
@@ -67,6 +73,18 @@
%python_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}
+%check
+# setup.py test works except it checks test dependencies which includes
+# lots of non-test related dependencies.
+
+# Three tests fail with AttributeError: 'x' object has no attribute
'get_credential'
+# - CryptedFileKeyringTestCase
+# - EncryptedFileKeyringTestCase
+# - UncryptedFileKeyringTestCase
+%{python_expand py.test-%{$python_bin_suffix} \
+ --ignore=_build.python2 --ignore=_build.python3 -k 'not test_credential'
+}
+
%files %{python_files}
%doc CHANGES.rst README.rst
%license LICENSE
++++++ keyrings.alt-3.1.tar.gz -> keyrings.alt-3.1.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/keyrings.alt-3.1/.flake8
new/keyrings.alt-3.1.1/.flake8
--- old/keyrings.alt-3.1/.flake8 2018-04-26 19:34:58.000000000 +0200
+++ new/keyrings.alt-3.1.1/.flake8 2018-12-16 20:34:43.000000000 +0100
@@ -4,3 +4,5 @@
W191
# W503 violates spec https://github.com/PyCQA/pycodestyle/issues/513
W503
+ # W504 has issues
https://github.com/OCA/maintainer-quality-tools/issues/545
+ W504
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/keyrings.alt-3.1/.travis.yml
new/keyrings.alt-3.1.1/.travis.yml
--- old/keyrings.alt-3.1/.travis.yml 2018-04-26 19:34:58.000000000 +0200
+++ new/keyrings.alt-3.1.1/.travis.yml 2018-12-16 20:34:43.000000000 +0100
@@ -1,10 +1,11 @@
-dist: trusty
+dist: xenial
sudo: false
language: python
python:
- 2.7
-- &latest_py3 3.6
+- 3.6
+- &latest_py3 3.7
jobs:
fast_finish: true
@@ -12,23 +13,22 @@
- stage: deploy
if: tag IS present
python: *latest_py3
- install: skip
- script: skip
- deploy:
- provider: pypi
- on:
- tags: true
- all_branches: true
- user: jaraco
- password:
- secure:
iRtbY9yEN8qwJ7wiycL8N5NdZhRDENT5M8Bkpm7YSN5OiM41LRwFYnHDoQhYpz9L/UdfbovgEvv1XsQX/o8XRTn5efmhXRgS/FY3cA7Ry0GG41hmk2fnAgYuivA8EGoPveS9CnbU71ikL0HjRHv93+7Pz1kyMEYXRUpbMZ16K74o1J1MLOoCdQXXlKWfYjqAV/BglWwjIkwXVmNM2JwGV7U2hJ8zjsX1Bn7XqsZdC2KB6jK1frVjEHDfbv3NLQYIzQYqGw8GMWa+9EGVfFzqPnQmUC3E5GA93rC1SceBUb2RDBfCUpyFkyin3lQ05EvyVJoIaZO56gJ9Py1XzzSinSTjylgTxvFWx4uweowv5oM9OWnV+3SsZDw5+55fW5CYiMjdqjLso83gTkc8jbDHeK73Yh0sju2+QnOejnMzKRaBtCBubUkL+TPjEzoeUYSKLgW+iVHIKNKEKNME/WLzNtEhQwEFbLD5u/0bmHMBFPt40cXv3kSz6tz7NSjCHyJbtsBnyadYWRQTTRoSPnNIt0P716feUY/R5/Am5TIo2ZHKkGbRkuqFcJoJYhKau2M24WkRA4og8uBSyliShovHkrbahe1MpbJ/ZtmIU583FQjxIlGQQtNPN4QTSnQ1fUpvyhQY89GupbSxuek7jlmxmIm9SgAy6w9PUDZ5FKuJzm4=
- distributions: dists
- skip_cleanup: true
- skip_upload_docs: true
+ before_script: skip
+ env:
+ - TWINE_USERNAME=jaraco
+ # TWINE_PASSWORD
+ - secure:
b07jU3S+8CmT8UUnxaq6A5xCPhRVKsl0b3rY3CT8Eldpud+uVNFPV68R/vW+APcAIFqmF01zIwzwC/ZdpKI5omaKfvCIKSDlM/rLlCfSF5NPCjuF4olMJg18/PWaEZ3B5+XRrmJRtd4V5VvImQjuuQWixCp5X+DpcHodEcsTdbi+67zo7JAn2AnfmUF0kIWyCjyP3bzaSi1zFqXbLUoReVVl8/k5zlz7BXDYaL5lr4HGsuqpqfN8kpDGsMtC7rHBD4z8qXDk+Blk2zwskmU9LIVpO2VzvEdwQVOjXaafWDw+O1Xm8bAhF5q2o/mnsOPNdR8S8AK4haMRUYfDcVGb8ZOiHHPbuh0A3NKWWA6Mc9Ut+IIjAUCUnTpn6q14MQhg2ZQo5zr8lZh4m4MhhXkZhO3B3Rqk6SWtNrEtcmHBGmCoYLlOqOJtdgIKiOeV6e17ElsevMrXHl31rsjmE9/o2t9AgOao6dWe7SKohva2Bt7Tuh/liDwPmQr2KU/IuzFVyJ+AeUhNT8/IYQewidJdVGcWBJ4ZwFJwYNSQECVtY80LFM44OSTvdy3NbEumfSWVQ/pe6gs21WQ+SNuQsUfoJZiNt+18Cdr1zm+p8vcW259RQ0b6Lz0yuM5NxZM3YFPCQFAc1yZcDAvqM4DzVlI6+DmolRnIwWU9rFBn1OheWoA=
+ - TOX_TESTENV_PASSENV="TWINE_USERNAME TWINE_PASSWORD"
+ script: tox -e release
cache: pip
install:
- 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/keyrings.alt-3.1/CHANGES.rst
new/keyrings.alt-3.1.1/CHANGES.rst
--- old/keyrings.alt-3.1/CHANGES.rst 2018-04-26 19:34:58.000000000 +0200
+++ new/keyrings.alt-3.1.1/CHANGES.rst 2018-12-16 20:34:43.000000000 +0100
@@ -1,3 +1,13 @@
+3.1.1
+=====
+
+#31: Trap AttributeError in Gnome backend as in some environments
+it seems that will happen.
+
+#30: Fix issue where a backslash in the service name would cause
+errors on Registry backend on Windows.
+
+
3.1
===
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/keyrings.alt-3.1/PKG-INFO
new/keyrings.alt-3.1.1/PKG-INFO
--- old/keyrings.alt-3.1/PKG-INFO 2018-04-26 19:35:35.000000000 +0200
+++ new/keyrings.alt-3.1.1/PKG-INFO 2018-12-16 20:35:16.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: keyrings.alt
-Version: 3.1
+Version: 3.1.1
Summary: Alternate keyring implementations
Home-page: https://github.com/jaraco/keyrings.alt
Author: Jason R. Coombs
@@ -36,5 +36,5 @@
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Requires-Python: >=2.7
-Provides-Extra: docs
Provides-Extra: testing
+Provides-Extra: docs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/keyrings.alt-3.1/docs/conf.py
new/keyrings.alt-3.1.1/docs/conf.py
--- old/keyrings.alt-3.1/docs/conf.py 2018-04-26 19:34:58.000000000 +0200
+++ new/keyrings.alt-3.1.1/docs/conf.py 2018-12-16 20:34:43.000000000 +0100
@@ -1,32 +1,26 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
-extensions = [
- 'sphinx.ext.autodoc',
- 'jaraco.packaging.sphinx',
- 'rst.linker',
-]
+extensions = ["sphinx.ext.autodoc", "jaraco.packaging.sphinx", "rst.linker"]
-master_doc = 'index'
+master_doc = "index"
link_files = {
- '../CHANGES.rst': dict(
- using=dict(
- GH='https://github.com',
- ),
- replace=[
- dict(
- pattern=r'(Issue )?#(?P<issue>\d+)',
- url='{package_url}/issues/{issue}',
- ),
- dict(
-
pattern=r'^(?m)((?P<scm_version>v?\d+(\.\d+){1,2}))\n[-=]+\n',
- with_scm='{text}\n{rev[timestamp]:%d %b %Y}\n',
- ),
- dict(
- pattern=r'PEP[- ](?P<pep_number>\d+)',
-
url='https://www.python.org/dev/peps/pep-{pep_number:0>4}/',
- ),
- ],
- ),
+ "../CHANGES.rst": dict(
+ using=dict(GH="https://github.com"),
+ replace=[
+ dict(
+ pattern=r"(Issue #|\B#)(?P<issue>\d+)",
+ url="{package_url}/issues/{issue}",
+ ),
+ dict(
+ pattern=r"^(?m)((?P<scm_version>v?\d+(\.\d+){1,2}))\n[-=]+\n",
+ with_scm="{text}\n{rev[timestamp]:%d %b %Y}\n",
+ ),
+ dict(
+ pattern=r"PEP[- ](?P<pep_number>\d+)",
+ url="https://www.python.org/dev/peps/pep-{pep_number:0>4}/",
+ ),
+ ],
+ )
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/keyrings.alt-3.1/install-pip-master.py
new/keyrings.alt-3.1.1/install-pip-master.py
--- old/keyrings.alt-3.1/install-pip-master.py 1970-01-01 01:00:00.000000000
+0100
+++ new/keyrings.alt-3.1.1/install-pip-master.py 2018-12-16
20:34:43.000000000 +0100
@@ -0,0 +1,21 @@
+"""
+In order to support installation of pep517 from source,
+pip from master must be installed.
+"""
+
+import subprocess
+import sys
+
+
+def main():
+ cmd = [
+ sys.executable,
+ '-m', 'pip', 'install',
+ 'git+https://github.com/pypa/pip',
+ ]
+ subprocess.run(cmd)
+ cmd[-1:] = sys.argv[1:]
+ subprocess.run(cmd)
+
+
+__name__ == '__main__' and main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/keyrings.alt-3.1/keyrings/alt/Gnome.py
new/keyrings.alt-3.1.1/keyrings/alt/Gnome.py
--- old/keyrings.alt-3.1/keyrings/alt/Gnome.py 2018-04-26 19:34:58.000000000
+0200
+++ new/keyrings.alt-3.1.1/keyrings/alt/Gnome.py 2018-12-16
20:34:43.000000000 +0100
@@ -2,7 +2,7 @@
import gi
gi.require_version('GnomeKeyring', '1.0')
from gi.repository import GnomeKeyring
-except (ImportError, ValueError):
+except (ImportError, ValueError, AttributeError):
pass
import six
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/keyrings.alt-3.1/keyrings/alt/Windows.py
new/keyrings.alt-3.1.1/keyrings/alt/Windows.py
--- old/keyrings.alt-3.1/keyrings/alt/Windows.py 2018-04-26
19:34:58.000000000 +0200
+++ new/keyrings.alt-3.1.1/keyrings/alt/Windows.py 2018-12-16
20:34:43.000000000 +0100
@@ -9,27 +9,9 @@
from . import file_base
try:
- # prefer pywin32-ctypes
- __import__('win32ctypes.pywintypes')
- from win32ctypes import win32cred
- # force demand import to raise ImportError
- win32cred.__name__
+ from six.moves import winreg
except ImportError:
- # fallback to pywin32
- try:
- __import__('pywintypes')
- import win32cred
- except ImportError:
- pass
-
-try:
- import winreg
-except ImportError:
- try:
- # Python 2 compatibility
- import _winreg as winreg
- except ImportError:
- pass
+ pass
try:
from . import _win_crypto
@@ -37,17 +19,6 @@
pass
-def has_pywin32():
- """
- Does this environment have pywin32?
- Should return False even when Mercurial's Demand Import allowed import of
- win32cred.
- """
- with ExceptionRaisedContext() as exc:
- win32cred.__name__
- return not bool(exc)
-
-
def has_wincrypto():
"""
Does this environment have wincrypto?
@@ -107,12 +78,17 @@
raise RuntimeError("Requires ctypes")
return 2
+ @staticmethod
+ def _key_for_service(service):
+ escaped = service.replace('\\', '__0x5c__')
+ return r'Software\{escaped}\Keyring'.format(**locals())
+
def get_password(self, service, username):
"""Get password of the username for the service
"""
try:
# fetch the password
- key = r'Software\%s\Keyring' % service
+ key = self._key_for_service(service)
hkey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, key)
password_saved = winreg.QueryValueEx(hkey, username)[0]
password_base64 = password_saved.encode('ascii')
@@ -135,7 +111,7 @@
password_saved = password_base64.decode('ascii')
# store the password
- key_name = r'Software\%s\Keyring' % service
+ key_name = self._key_for_service(service)
hkey = winreg.CreateKey(winreg.HKEY_CURRENT_USER, key_name)
winreg.SetValueEx(hkey, username, 0, winreg.REG_SZ, password_saved)
@@ -143,7 +119,7 @@
"""Delete the password for the username of the service.
"""
try:
- key_name = r'Software\%s\Keyring' % service
+ key_name = self._key_for_service(service)
hkey = winreg.OpenKey(
winreg.HKEY_CURRENT_USER, key_name, 0,
winreg.KEY_ALL_ACCESS)
@@ -155,7 +131,7 @@
self._delete_key_if_empty(service)
def _delete_key_if_empty(self, service):
- key_name = r'Software\%s\Keyring' % service
+ key_name = self._key_for_service(service)
key = winreg.OpenKey(
winreg.HKEY_CURRENT_USER, key_name, 0,
winreg.KEY_ALL_ACCESS)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/keyrings.alt-3.1/keyrings/alt/file_base.py
new/keyrings.alt-3.1.1/keyrings/alt/file_base.py
--- old/keyrings.alt-3.1/keyrings/alt/file_base.py 2018-04-26
19:34:58.000000000 +0200
+++ new/keyrings.alt-3.1.1/keyrings/alt/file_base.py 2018-12-16
20:34:43.000000000 +0100
@@ -141,8 +141,8 @@
def _generate_assoc(self, service, username):
"""Generate tamper resistant bytestring of associated data
"""
- return (escape_for_ini(service) + '\0' +
- escape_for_ini(username)).encode()
+ return (escape_for_ini(service) + '\0'
+ + escape_for_ini(username)).encode()
def _write_config_value(self, service, key, value):
# ensure the file exists
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/keyrings.alt-3.1/keyrings/alt/pyfs.py
new/keyrings.alt-3.1.1/keyrings/alt/pyfs.py
--- old/keyrings.alt-3.1/keyrings/alt/pyfs.py 2018-04-26 19:34:58.000000000
+0200
+++ new/keyrings.alt-3.1.1/keyrings/alt/pyfs.py 2018-12-16 20:34:43.000000000
+0100
@@ -22,12 +22,12 @@
def has_pyfs():
"""
- Does this environment have pyfs installed?
+ Does this environment have pyfs 1.x installed?
Should return False even when Mercurial's Demand Import allowed import of
fs.*.
"""
with errors.ExceptionRaisedContext() as exc:
- fs.__name__
+ fs.opener.opener
return not bool(exc)
@@ -91,8 +91,8 @@
# NOTE: currently the MemOpener does not split off any filename
# which causes errors on close()
# so we add a dummy name and open it separately
- if (self.filename.startswith('mem://') or
- self.filename.startswith('ram://')):
+ if (self.filename.startswith('mem://')
+ or self.filename.startswith('ram://')):
open_file = fs.opener.fsopendir(self.filename).open('kr.cfg',
mode)
else:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/keyrings.alt-3.1/keyrings.alt.egg-info/PKG-INFO
new/keyrings.alt-3.1.1/keyrings.alt.egg-info/PKG-INFO
--- old/keyrings.alt-3.1/keyrings.alt.egg-info/PKG-INFO 2018-04-26
19:35:34.000000000 +0200
+++ new/keyrings.alt-3.1.1/keyrings.alt.egg-info/PKG-INFO 2018-12-16
20:35:15.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: keyrings.alt
-Version: 3.1
+Version: 3.1.1
Summary: Alternate keyring implementations
Home-page: https://github.com/jaraco/keyrings.alt
Author: Jason R. Coombs
@@ -36,5 +36,5 @@
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Requires-Python: >=2.7
-Provides-Extra: docs
Provides-Extra: testing
+Provides-Extra: docs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/keyrings.alt-3.1/keyrings.alt.egg-info/SOURCES.txt
new/keyrings.alt-3.1.1/keyrings.alt.egg-info/SOURCES.txt
--- old/keyrings.alt-3.1/keyrings.alt.egg-info/SOURCES.txt 2018-04-26
19:35:35.000000000 +0200
+++ new/keyrings.alt-3.1.1/keyrings.alt.egg-info/SOURCES.txt 2018-12-16
20:35:16.000000000 +0100
@@ -7,6 +7,7 @@
README.rst
appveyor.yml
conftest.py
+install-pip-master.py
pyproject.toml
pytest.ini
setup.cfg
@@ -20,7 +21,6 @@
keyrings.alt.egg-info/SOURCES.txt
keyrings.alt.egg-info/dependency_links.txt
keyrings.alt.egg-info/entry_points.txt
-keyrings.alt.egg-info/namespace_packages.txt
keyrings.alt.egg-info/requires.txt
keyrings.alt.egg-info/top_level.txt
keyrings/alt/Gnome.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/keyrings.alt-3.1/keyrings.alt.egg-info/namespace_packages.txt
new/keyrings.alt-3.1.1/keyrings.alt.egg-info/namespace_packages.txt
--- old/keyrings.alt-3.1/keyrings.alt.egg-info/namespace_packages.txt
2018-04-26 19:35:34.000000000 +0200
+++ new/keyrings.alt-3.1.1/keyrings.alt.egg-info/namespace_packages.txt
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/keyrings.alt-3.1/keyrings.alt.egg-info/requires.txt
new/keyrings.alt-3.1.1/keyrings.alt.egg-info/requires.txt
--- old/keyrings.alt-3.1/keyrings.alt.egg-info/requires.txt 2018-04-26
19:35:34.000000000 +0200
+++ new/keyrings.alt-3.1.1/keyrings.alt.egg-info/requires.txt 2018-12-16
20:35:15.000000000 +0100
@@ -6,9 +6,8 @@
rst.linker>=1.9
[testing]
-pytest>=3.5
-pytest-sugar>=0.9.1
-collective.checkdocs
+pytest!=3.7.3,>=3.5
+pytest-checkdocs
pytest-flake8
backports.unittest_mock
keyring[test]>=10.3.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/keyrings.alt-3.1/pyproject.toml
new/keyrings.alt-3.1.1/pyproject.toml
--- old/keyrings.alt-3.1/pyproject.toml 2018-04-26 19:34:58.000000000 +0200
+++ new/keyrings.alt-3.1.1/pyproject.toml 2018-12-16 20:34:43.000000000
+0100
@@ -1,2 +1,3 @@
[build-system]
-requires = ["setuptools", "wheel", "setuptools_scm>=1.15"]
+requires = ["setuptools>=34.4", "wheel", "setuptools_scm>=1.15"]
+build-backend = 'setuptools.build_meta'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/keyrings.alt-3.1/pytest.ini
new/keyrings.alt-3.1.1/pytest.ini
--- old/keyrings.alt-3.1/pytest.ini 2018-04-26 19:34:58.000000000 +0200
+++ new/keyrings.alt-3.1.1/pytest.ini 2018-12-16 20:34:43.000000000 +0100
@@ -2,3 +2,8 @@
norecursedirs=dist build .tox .eggs
addopts=--doctest-modules --flake8
doctest_optionflags=ALLOW_UNICODE ELLIPSIS
+filterwarnings=
+ ignore:Possible nested set::pycodestyle:113
+ ignore:Using or importing the ABCs::flake8:410
+ # workaround for https://sourceforge.net/p/docutils/bugs/348/
+ ignore:'U' mode is deprecated::docutils.io
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/keyrings.alt-3.1/setup.cfg
new/keyrings.alt-3.1.1/setup.cfg
--- old/keyrings.alt-3.1/setup.cfg 2018-04-26 19:35:35.000000000 +0200
+++ new/keyrings.alt-3.1.1/setup.cfg 2018-12-16 20:35:16.000000000 +0100
@@ -1,12 +1,62 @@
-[aliases]
-release = dists upload
-dists = clean --all sdist bdist_wheel
-
[bdist_wheel]
universal = 1
[metadata]
license_file = LICENSE
+name = keyrings.alt
+author = Jason R. Coombs
+author_email = [email protected]
+description = Alternate keyring implementations
+long_description = file:README.rst
+url = https://github.com/jaraco/keyrings.alt
+classifiers =
+ Development Status :: 5 - Production/Stable
+ Intended Audience :: Developers
+ License :: OSI Approved :: MIT License
+ Programming Language :: Python :: 2.7
+ Programming Language :: Python :: 3
+
+[options]
+packages = find:
+include_package_data = true
+python_requires = >=2.7
+install_requires =
+ six
+setup_requires = setuptools_scm >= 1.15.0
+
+[options.packages.find]
+exclude =
+ tests
+
+[options.extras_require]
+testing =
+ pytest >= 3.5, !=3.7.3
+ pytest-checkdocs
+ pytest-flake8
+
+ backports.unittest_mock
+ keyring[test] >= 10.3.1
+
+ fs>=0.5,<2
+ pycrypto; sys_platform!="win32" or python_version=="2.7"
+
+ gdata; python_version=="2.7"
+
+ python-keyczar; python_version=="2.7"
+docs =
+ sphinx
+ jaraco.packaging >= 3.2
+ rst.linker >= 1.9
+
+[options.entry_points]
+keyring.backends =
+ file = keyrings.alt.file
+ Gnome = keyrings.alt.Gnome
+ Google = keyrings.alt.Google
+ keyczar = keyrings.alt.keyczar
+ multi = keyrings.alt.multi
+ pyfs = keyrings.alt.pyfs
+ Windows (alt) = keyrings.alt.Windows
[egg_info]
tag_build =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/keyrings.alt-3.1/setup.py
new/keyrings.alt-3.1.1/setup.py
--- old/keyrings.alt-3.1/setup.py 2018-04-26 19:34:58.000000000 +0200
+++ new/keyrings.alt-3.1.1/setup.py 2018-12-16 20:34:43.000000000 +0100
@@ -2,89 +2,7 @@
# Project skeleton maintained at https://github.com/jaraco/skeleton
-import io
-
import setuptools
-with io.open('README.rst', encoding='utf-8') as readme:
- long_description = readme.read()
-
-name = 'keyrings.alt'
-description = 'Alternate keyring implementations'
-nspkg_technique = 'native'
-"""
-Does this package use "native" namespace packages or
-pkg_resources "managed" namespace packages?
-"""
-
-params = dict(
- name=name,
- use_scm_version=True,
- author="Jason R. Coombs",
- author_email="[email protected]",
- description=description or name,
- long_description=long_description,
- url="https://github.com/jaraco/" + name,
- packages=setuptools.find_packages(exclude=['tests']),
- include_package_data=True,
- namespace_packages=(
- name.split('.')[:-1] if nspkg_technique == 'managed'
- else []
- ),
- python_requires='>=2.7',
- install_requires=[
- 'six',
- ],
- extras_require={
- 'testing': [
- # upstream
- 'pytest>=3.5',
- 'pytest-sugar>=0.9.1',
- 'collective.checkdocs',
- 'pytest-flake8',
-
- # local
- 'backports.unittest_mock',
- 'keyring[test] >= 10.3.1',
-
- 'fs>=0.5,<2',
- 'pycrypto; sys_platform!="win32" or python_version=="2.7"',
-
- # gdata doesn't currently install on Python 3
- # http://code.google.com/p/gdata-python-client/issues/detail?id=229
- 'gdata; python_version=="2.7"',
-
- # keyczar doesn't currently install on Python 3.
- # http://code.google.com/p/keyczar/issues/detail?id=125
- 'python-keyczar; python_version=="2.7"',
- ],
- 'docs': [
- 'sphinx',
- 'jaraco.packaging>=3.2',
- 'rst.linker>=1.9',
- ],
- },
- setup_requires=[
- 'setuptools_scm>=1.15.0',
- ],
- classifiers=[
- "Development Status :: 5 - Production/Stable",
- "Intended Audience :: Developers",
- "License :: OSI Approved :: MIT License",
- "Programming Language :: Python :: 2.7",
- "Programming Language :: Python :: 3",
- ],
- entry_points={
- 'keyring.backends': [
- 'file = keyrings.alt.file',
- 'Gnome = keyrings.alt.Gnome',
- 'Google = keyrings.alt.Google',
- 'keyczar = keyrings.alt.keyczar',
- 'multi = keyrings.alt.multi',
- 'pyfs = keyrings.alt.pyfs',
- 'Windows (alt) = keyrings.alt.Windows',
- ],
- },
-)
-if __name__ == '__main__':
- setuptools.setup(**params)
+if __name__ == "__main__":
+ setuptools.setup(use_scm_version=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/keyrings.alt-3.1/tests/test_Windows.py
new/keyrings.alt-3.1.1/tests/test_Windows.py
--- old/keyrings.alt-3.1/tests/test_Windows.py 2018-04-26 19:34:58.000000000
+0200
+++ new/keyrings.alt-3.1.1/tests/test_Windows.py 2018-12-16
20:34:43.000000000 +0100
@@ -16,18 +16,6 @@
return sys.platform in ['win32'] and sys.getwindowsversion()[-2] == 2
-def is_winvault_supported():
- try:
- __import__('win32cred')
- has_pywin32 = True
- except ImportError:
- has_pywin32 = False
- return (
- sys.platform in ['win32'] and sys.getwindowsversion().major >= 6
- and has_pywin32
- )
-
-
@unittest.skipUnless(is_win32_crypto_supported(),
"Need Windows")
class Win32CryptoKeyringTestCase(FileKeyringTests, unittest.TestCase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/keyrings.alt-3.1/tox.ini
new/keyrings.alt-3.1.1/tox.ini
--- old/keyrings.alt-3.1/tox.ini 2018-04-26 19:34:58.000000000 +0200
+++ new/keyrings.alt-3.1.1/tox.ini 2018-12-16 20:34:43.000000000 +0100
@@ -5,11 +5,8 @@
[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}
- python setup.py checkdocs
+ pytest {posargs}
usedevelop = True
extras = testing
@@ -20,3 +17,18 @@
changedir = docs
commands =
python -m sphinx . {toxinidir}/build/html
+
+[testenv:release]
+skip_install = True
+# workaround for pep517 build support
+install_command = python install-pip-master.py {opts} {packages}
+deps =
+ # pull from feature branch for feature
+ git+https://github.com/pypa/pep517@feature/build-command
+ # workaround for https://github.com/pypa/twine/issues/423
+ git+https://github.com/pypa/twine
+ path.py
+commands =
+ python -c "import path; path.Path('dist').rmtree_p()"
+ python -m pep517.build .
+ python -m twine upload dist/*
++++++ test_backend.py ++++++
# coding: utf-8
"""
Common test functionality for backends.
"""
from __future__ import unicode_literals
import string
import pytest
from .util import random_string
from keyring import errors
__metaclass__ = type
# unicode only characters
# Sourced from The Quick Brown Fox... Pangrams
# http://www.columbia.edu/~fdc/utf8/
UNICODE_CHARS = (
"זהכיףסתםלשמועאיךתנצחקרפדעץטובבגן"
"ξεσκεπάζωτηνψυχοφθόραβδελυγμία"
"Съешьжеещёэтихмягкихфранцузскихбулокдавыпейчаю"
"Жълтатадюлябешещастливачепухъткойтоцъфназамръзнакатогьон"
)
# ensure no-ascii chars slip by - watch your editor!
assert min(ord(char) for char in UNICODE_CHARS) > 127
def is_ascii_printable(s):
return all(32 <= ord(c) < 127 for c in s)
class BackendBasicTests:
"""Test for the keyring's basic functions. password_set and password_get
"""
DIFFICULT_CHARS = string.whitespace + string.punctuation
def setUp(self):
self.keyring = self.init_keyring()
self.credentials_created = set()
def tearDown(self):
for item in self.credentials_created:
self.keyring.delete_password(*item)
def set_password(self, service, username, password):
# set the password and save the result so the test runner can clean
# up after if necessary.
self.keyring.set_password(service, username, password)
self.credentials_created.add((service, username))
def check_set_get(self, service, username, password):
keyring = self.keyring
# for the non-existent password
assert keyring.get_password(service, username) is None
# common usage
self.set_password(service, username, password)
assert keyring.get_password(service, username) == password
# for the empty password
self.set_password(service, username, "")
assert keyring.get_password(service, username) == ""
def test_password_set_get(self):
password = random_string(20)
username = random_string(20)
service = random_string(20)
self.check_set_get(service, username, password)
def test_difficult_chars(self):
password = random_string(20, self.DIFFICULT_CHARS)
username = random_string(20, self.DIFFICULT_CHARS)
service = random_string(20, self.DIFFICULT_CHARS)
self.check_set_get(service, username, password)
def test_delete_present(self):
password = random_string(20, self.DIFFICULT_CHARS)
username = random_string(20, self.DIFFICULT_CHARS)
service = random_string(20, self.DIFFICULT_CHARS)
self.keyring.set_password(service, username, password)
self.keyring.delete_password(service, username)
assert self.keyring.get_password(service, username) is None
def test_delete_not_present(self):
username = random_string(20, self.DIFFICULT_CHARS)
service = random_string(20, self.DIFFICULT_CHARS)
with pytest.raises(errors.PasswordDeleteError):
self.keyring.delete_password(service, username)
def test_delete_one_in_group(self):
username1 = random_string(20, self.DIFFICULT_CHARS)
username2 = random_string(20, self.DIFFICULT_CHARS)
password = random_string(20, self.DIFFICULT_CHARS)
service = random_string(20, self.DIFFICULT_CHARS)
self.keyring.set_password(service, username1, password)
self.set_password(service, username2, password)
self.keyring.delete_password(service, username1)
assert self.keyring.get_password(service, username2) == password
def test_name_property(self):
assert is_ascii_printable(self.keyring.name)
def test_unicode_chars(self):
password = random_string(20, UNICODE_CHARS)
username = random_string(20, UNICODE_CHARS)
service = random_string(20, UNICODE_CHARS)
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))
password = random_string(20, source)
username = random_string(20, source)
service = random_string(20, source)
self.check_set_get(service, username, password)
def test_different_user(self):
"""
Issue #47 reports that WinVault isn't storing passwords for
multiple users. This test exercises that test for each of the
backends.
"""
keyring = self.keyring
self.set_password('service1', 'user1', 'password1')
self.set_password('service1', 'user2', 'password2')
assert keyring.get_password('service1', 'user1') == 'password1'
assert keyring.get_password('service1', 'user2') == 'password2'
self.set_password('service2', 'user3', 'password3')
assert keyring.get_password('service1', 'user1') == 'password1'
def test_credential(self):
keyring = self.keyring
cred = keyring.get_credential('service', None)
assert cred is None
self.set_password('service1', 'user1', 'password1')
self.set_password('service1', 'user2', 'password2')
cred = keyring.get_credential('service1', None)
assert cred is None or (cred.username, cred.password) in (
('user1', 'password1'),
('user2', 'password2'),
)
cred = keyring.get_credential('service1', 'user2')
assert cred is not None
assert (cred.username, cred.password) in (
('user1', 'password1'),
('user2', 'password2'),
)
++++++ util.py ++++++
import contextlib
import os
import sys
import random
import string
__metaclass__ = type
class ImportKiller:
"Context manager to make an import of a given name or names fail."
def __init__(self, *names):
self.names = names
def find_module(self, fullname, path=None):
if fullname in self.names:
return self
def load_module(self, fullname):
assert fullname in self.names
raise ImportError(fullname)
def __enter__(self):
self.original = {}
for name in self.names:
self.original[name] = sys.modules.pop(name, None)
sys.meta_path.insert(0, self)
def __exit__(self, *args):
sys.meta_path.remove(self)
for key, value in self.original.items():
if value is not None:
sys.modules[key] = value
@contextlib.contextmanager
def NoNoneDictMutator(destination, **changes):
"""Helper context manager to make and unmake changes to a dict.
A None is not a valid value for the destination, and so means that the
associated name should be removed."""
original = {}
for key, value in changes.items():
original[key] = destination.get(key)
if value is None:
if key in destination:
del destination[key]
else:
destination[key] = value
yield
for key, value in original.items():
if value is None:
if key in destination:
del destination[key]
else:
destination[key] = value
def Environ(**changes):
"""A context manager to temporarily change the os.environ"""
return NoNoneDictMutator(os.environ, **changes)
ALPHABET = string.ascii_letters + string.digits
def random_string(k, source=ALPHABET):
"""Generate a random string with length <i>k</i>
"""
result = ''
for i in range(0, k):
result += random.choice(source)
return result