Hello community,

here is the log from the commit of package python-keystoneclient for 
openSUSE:Factory checked in at 2019-12-04 13:48:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-keystoneclient (Old)
 and      /work/SRC/openSUSE:Factory/.python-keystoneclient.new.4691 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-keystoneclient"

Wed Dec  4 13:48:37 2019 rev:31 rq:736656 version:3.21.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-keystoneclient/python-keystoneclient.changes  
    2019-05-03 22:41:01.707064857 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-keystoneclient.new.4691/python-keystoneclient.changes
    2019-12-04 14:18:52.586362426 +0100
@@ -1,0 +2,21 @@
+Wed Oct  9 13:01:26 UTC 2019 - [email protected]
+
+- update to version 3.21.0
+  - Bump the openstackdocstheme extension to 1.20
+  - Generate pdf documentation
+  - Update master for stable/stein
+  - Add parent project filter for listing projects
+  - Blacklist bandit 1.6.0 & cap sphinx for 2.7
+  - Update json module to jsonutils
+  - Add support for app cred access rules header
+  - Follow bandit B105: hardcoded_password_string
+  - Drop py35 jobs
+  - Update the min version of tox
+  - OpenDev Migration Patch
+  - Replace git.openstack.org URLs with opendev.org URLs
+  - Make tests pass in 2020
+  - Add Python 3 Train unit tests
+  - Update the constraints url
+  - Fix unit tests broken by requests-mock
+
+-------------------------------------------------------------------

Old:
----
  python-keystoneclient-3.19.0.tar.gz

New:
----
  python-keystoneclient-3.21.0.tar.gz

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

Other differences:
------------------
++++++ python-keystoneclient.spec ++++++
--- /var/tmp/diff_new_pack.sPNKUB/_old  2019-12-04 14:18:53.542362889 +0100
+++ /var/tmp/diff_new_pack.sPNKUB/_new  2019-12-04 14:18:53.546362892 +0100
@@ -17,16 +17,15 @@
 
 
 Name:           python-keystoneclient
-Version:        3.19.0
+Version:        3.21.0
 Release:        0
 Summary:        Client library for OpenStack Identity API
 License:        Apache-2.0
 Group:          Development/Languages/Python
 URL:            https://launchpad.net/python-keystoneclient
-Source0:        
https://files.pythonhosted.org/packages/source/p/python-keystoneclient/python-keystoneclient-3.19.0.tar.gz
+Source0:        
https://files.pythonhosted.org/packages/source/p/python-keystoneclient/python-keystoneclient-3.21.0.tar.gz
 BuildRequires:  openssl
 BuildRequires:  openstack-macros
-BuildRequires:  python-devel
 BuildRequires:  python2-debtcollector >= 1.2.0
 BuildRequires:  python2-keystoneauth1 >= 3.4.0
 BuildRequires:  python2-lxml
@@ -43,7 +42,6 @@
 BuildRequires:  python2-testresources
 BuildRequires:  python2-testscenarios
 BuildRequires:  python3-debtcollector >= 1.2.0
-BuildRequires:  python3-devel
 BuildRequires:  python3-keystoneauth1 >= 3.4.0
 BuildRequires:  python3-lxml
 BuildRequires:  python3-mock
@@ -76,15 +74,15 @@
 %package -n python-keystoneclient-doc
 Summary:        Documentation for OpenStack Identity API Client
 Group:          Documentation/HTML
-BuildRequires:  python-Sphinx
-BuildRequires:  python-openstackdocstheme
+BuildRequires:  python3-Sphinx
+BuildRequires:  python3-openstackdocstheme
 
 %description -n python-keystoneclient-doc
 Documentation for the client library for interacting with Openstack
 Identity API.
 
 %prep
-%autosetup -p1 -n python-keystoneclient-3.19.0
+%autosetup -p1 -n python-keystoneclient-3.21.0
 %py_req_cleanup
 # disable intersphinx - no network access during build
 echo "intersphinx_mapping = {}" >> doc/source/conf.py
@@ -93,7 +91,7 @@
 %{python_build}
 
 # Build HTML docs and man page
-%{__python2} setup.py build_sphinx
+PBR_VERSION=%{version} %sphinx_build -b html doc/source doc/build/html
 
 %install
 %{python_install}
@@ -110,8 +108,8 @@
 %files %{python_files}
 %doc README.rst
 %license LICENSE
-%{python2_sitelib}/keystoneclient
-%{python2_sitelib}/*.egg-info
+%{python_sitelib}/keystoneclient
+%{python_sitelib}/*.egg-info
 
 %files -n python-keystoneclient-doc
 %doc doc/build/html

++++++ _service ++++++
--- /var/tmp/diff_new_pack.sPNKUB/_old  2019-12-04 14:18:53.586362925 +0100
+++ /var/tmp/diff_new_pack.sPNKUB/_new  2019-12-04 14:18:53.586362925 +0100
@@ -1,8 +1,8 @@
 <services>
   <service mode="disabled" name="renderspec">
-    <param 
name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/stable/stein/openstack/python-keystoneclient/python-keystoneclient.spec.j2</param>
+    <param 
name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/stable/train/openstack/python-keystoneclient/python-keystoneclient.spec.j2</param>
     <param name="output-name">python-keystoneclient.spec</param>
-    <param 
name="requirements">https://raw.githubusercontent.com/openstack/python-keystoneclient/stable/stein/requirements.txt</param>
+    <param 
name="requirements">https://raw.githubusercontent.com/openstack/python-keystoneclient/stable/train/requirements.txt</param>
     <param name="changelog-email">[email protected]</param>
     <param name="changelog-provider">gh,openstack,python-keystoneclient</param>
   </service>

++++++ python-keystoneclient-3.19.0.tar.gz -> 
python-keystoneclient-3.21.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-keystoneclient-3.19.0/.zuul.yaml 
new/python-keystoneclient-3.21.0/.zuul.yaml
--- old/python-keystoneclient-3.19.0/.zuul.yaml 2019-02-28 19:17:12.000000000 
+0100
+++ new/python-keystoneclient-3.21.0/.zuul.yaml 2019-09-12 11:31:50.000000000 
+0200
@@ -9,20 +9,18 @@
     post-run: playbooks/tox-post.yaml
     vars:
       devstack_localrc:
-        USE_PYTHON3: True
+        USE_PYTHON3: true
       devstack_services:
         key: true
       tox_envlist: functional
-      zuul_work_dir: src/git.openstack.org/openstack/python-keystoneclient
+      zuul_work_dir: src/opendev.org/openstack/python-keystoneclient
 
 - project:
     templates:
       - openstack-cover-jobs
       - openstack-lower-constraints-jobs
       - openstack-python-jobs
-      - openstack-python35-jobs
-      - openstack-python36-jobs
-      - openstack-python37-jobs
+      - openstack-python3-train-jobs
       - publish-openstack-docs-pti
       - check-requirements
       - lib-forward-testing
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-keystoneclient-3.19.0/AUTHORS 
new/python-keystoneclient-3.21.0/AUTHORS
--- old/python-keystoneclient-3.19.0/AUTHORS    2019-02-28 19:18:43.000000000 
+0100
+++ new/python-keystoneclient-3.21.0/AUTHORS    2019-09-12 11:33:04.000000000 
+0200
@@ -201,6 +201,7 @@
 Stuart McLaren <[email protected]>
 Sushil Kumar <[email protected]>
 THOMAS J. COCOZZELLO <[email protected]>
+Takashi Kajinami <[email protected]>
 Tang Chen <[email protected]>
 Thiago Paiva Brito <[email protected]>
 Thierry Carrez <[email protected]>
@@ -245,6 +246,7 @@
 Zhongyue Luo <[email protected]>
 Ziad Sawalha <[email protected]>
 ankitagrawal <[email protected]>
+cao.yuan <[email protected]>
 chenaidong1 <[email protected]>
 chenxiao <[email protected]>
 chenxing <[email protected]>
@@ -256,6 +258,7 @@
 hgangwx <[email protected]>
 howardlee <[email protected]>
 huangtianhua <[email protected]>
+jacky06 <[email protected]>
 jakedahn <[email protected]>
 ji-xuepeng <[email protected]>
 jun xie <[email protected]>
@@ -273,6 +276,7 @@
 nachiappan-veerappan-nachiappan <[email protected]>
 openstack <[email protected]>
 pawnesh.kumar <[email protected]>
+pengyuesheng <[email protected]>
 qingszhao <[email protected]>
 rajiv <[email protected]>
 root <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-keystoneclient-3.19.0/ChangeLog 
new/python-keystoneclient-3.21.0/ChangeLog
--- old/python-keystoneclient-3.19.0/ChangeLog  2019-02-28 19:18:43.000000000 
+0100
+++ new/python-keystoneclient-3.21.0/ChangeLog  2019-09-12 11:33:04.000000000 
+0200
@@ -1,6 +1,30 @@
 CHANGES
 =======
 
+3.21.0
+------
+
+* Fix unit tests broken by requests-mock
+* Generate pdf documentation
+* Add parent project filter for listing projects
+* Bump the openstackdocstheme extension to 1.20
+
+3.20.0
+------
+
+* Blacklist bandit 1.6.0 & cap sphinx for 2.7
+* Update the constraints url
+* Add Python 3 Train unit tests
+* Follow bandit B105: hardcoded\_password\_string
+* Replace git.openstack.org URLs with opendev.org URLs
+* OpenDev Migration Patch
+* Update the min version of tox
+* Update master for stable/stein
+* Drop py35 jobs
+* Make tests pass in 2020
+* Update json module to jsonutils
+* Add support for app cred access rules header
+
 3.19.0
 ------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-keystoneclient-3.19.0/PKG-INFO 
new/python-keystoneclient-3.21.0/PKG-INFO
--- old/python-keystoneclient-3.19.0/PKG-INFO   2019-02-28 19:18:44.000000000 
+0100
+++ new/python-keystoneclient-3.21.0/PKG-INFO   2019-09-12 11:33:05.000000000 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: python-keystoneclient
-Version: 3.19.0
+Version: 3.21.0
 Summary: Client Library for OpenStack Identity
 Home-page: https://docs.openstack.org/python-keystoneclient/latest/
 Author: OpenStack
@@ -42,7 +42,7 @@
         .. _Launchpad project: https://launchpad.net/python-keystoneclient
         .. _Blueprints: https://blueprints.launchpad.net/python-keystoneclient
         .. _Bugs: https://bugs.launchpad.net/python-keystoneclient
-        .. _Source: 
https://git.openstack.org/cgit/openstack/python-keystoneclient
+        .. _Source: https://opendev.org/openstack/python-keystoneclient
         .. _OpenStackClient: https://pypi.org/project/python-openstackclient
         .. _How to Contribute: 
https://docs.openstack.org/infra/manual/developers.html
         .. _Specs: https://specs.openstack.org/openstack/keystone-specs/
@@ -80,5 +80,5 @@
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-keystoneclient-3.19.0/README.rst 
new/python-keystoneclient-3.21.0/README.rst
--- old/python-keystoneclient-3.19.0/README.rst 2019-02-28 19:17:12.000000000 
+0100
+++ new/python-keystoneclient-3.21.0/README.rst 2019-09-12 11:31:50.000000000 
+0200
@@ -34,7 +34,7 @@
 .. _Launchpad project: https://launchpad.net/python-keystoneclient
 .. _Blueprints: https://blueprints.launchpad.net/python-keystoneclient
 .. _Bugs: https://bugs.launchpad.net/python-keystoneclient
-.. _Source: https://git.openstack.org/cgit/openstack/python-keystoneclient
+.. _Source: https://opendev.org/openstack/python-keystoneclient
 .. _OpenStackClient: https://pypi.org/project/python-openstackclient
 .. _How to Contribute: https://docs.openstack.org/infra/manual/developers.html
 .. _Specs: https://specs.openstack.org/openstack/keystone-specs/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-keystoneclient-3.19.0/doc/requirements.txt 
new/python-keystoneclient-3.21.0/doc/requirements.txt
--- old/python-keystoneclient-3.19.0/doc/requirements.txt       2019-02-28 
19:17:12.000000000 +0100
+++ new/python-keystoneclient-3.21.0/doc/requirements.txt       2019-09-12 
11:31:50.000000000 +0200
@@ -3,8 +3,9 @@
 # process, which may cause wedges in the gate later.
 
 # These are needed for docs generation
-openstackdocstheme>=1.18.1 # Apache-2.0
-sphinx!=1.6.6,!=1.6.7,>=1.6.2 # BSD
+openstackdocstheme>=1.20.0 # Apache-2.0
+sphinx!=1.6.6,!=1.6.7,>=1.6.2,<2.0.0;python_version=='2.7'  # BSD
+sphinx!=1.6.6,!=1.6.7,>=1.6.2;python_version>='3.4'  # BSD
 reno>=2.5.0 # Apache-2.0
 lxml!=3.7.0,>=3.4.1 # BSD
 fixtures>=3.0.0 # Apache-2.0/BSD
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-keystoneclient-3.19.0/doc/source/conf.py 
new/python-keystoneclient-3.21.0/doc/source/conf.py
--- old/python-keystoneclient-3.19.0/doc/source/conf.py 2019-02-28 
19:17:12.000000000 +0100
+++ new/python-keystoneclient-3.21.0/doc/source/conf.py 2019-09-12 
11:31:50.000000000 +0200
@@ -15,8 +15,6 @@
 import os
 import sys
 
-import pbr.version
-
 
 sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__),
                 '..', '..')))
@@ -53,18 +51,8 @@
 master_doc = 'index'
 
 # General information about the project.
-project = 'python-keystoneclient'
 copyright = 'OpenStack Contributors'
 
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-version_info = pbr.version.VersionInfo('python-keystoneclient')
-# The short X.Y version.
-version = version_info.version_string()
-# The full version, including alpha/beta/rc tags.
-release = version_info.release_string()
-
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
 #language = None
@@ -145,10 +133,6 @@
 # so a file named "default.css" will overwrite the builtin "default.css".
 #html_static_path = ['static']
 
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-html_last_updated_fmt = '%Y-%m-%d %H:%M'
-
 # If true, SmartyPants will be used to convert quotes and dashes to
 # typographically correct entities.
 #html_use_smartypants = True
@@ -196,10 +180,9 @@
 # (source start file, target name, title, author, documentclass [howto/manual])
 # .
 latex_documents = [
-    ('index', 'python-keystoneclient.tex',
-     'python-keystoneclient Documentation',
-     'Nebula Inc, based on work by Rackspace and Jacob Kaplan-Moss',
-     'manual'),
+    ('index', 'doc-python-keystoneclient.tex',
+     u'python-keystoneclient Documentation',
+     u'OpenStack', 'manual'),
 ]
 
 # The name of an image file (relative to this directory) to place at the top of
@@ -219,6 +202,18 @@
 # If false, no module index is generated.
 #latex_use_modindex = True
 
+# Disable usage of xindy https://bugzilla.redhat.com/show_bug.cgi?id=1643664
+latex_use_xindy = False
+
+latex_domain_indices = False
+
+latex_elements = {
+    'makeindex': '',
+    'printindex': '',
+    'preamble': r'\setcounter{tocdepth}{3}',
+    'maxlistdepth': 10,
+}
+
 keystoneauth_url = 'https://docs.openstack.org/keystoneauth/latest/'
 intersphinx_mapping = {
     'python': ('https://docs.python.org/', None),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/examples/pki/gen_cmsz.py 
new/python-keystoneclient-3.21.0/examples/pki/gen_cmsz.py
--- old/python-keystoneclient-3.19.0/examples/pki/gen_cmsz.py   2019-02-28 
19:17:12.000000000 +0100
+++ new/python-keystoneclient-3.21.0/examples/pki/gen_cmsz.py   2019-09-12 
11:31:50.000000000 +0200
@@ -12,9 +12,10 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 
-import json
 import os
 
+from oslo_serialization import jsonutils
+
 from keystoneclient.common import cms
 from keystoneclient import utils
 
@@ -44,7 +45,7 @@
                 'id': id,
                 "expires": "2112-08-14T17:58:48Z"
             })
-    revoked_json = json.dumps({"revoked": revoked_list})
+    revoked_json = jsonutils.dumps({"revoked": revoked_list})
     with open(make_filename('cms', 'revocation_list.json'), 'w') as f:
         f.write(revoked_json)
     encoded = cms.pkiz_sign(revoked_json,
@@ -91,12 +92,12 @@
 
     # validate the JSON
     try:
-        token_data = json.loads(string_data)
+        token_data = jsonutils.loads(string_data)
     except ValueError as v:
         raise SystemExit('%s while processing token data from %s: %s' %
                          (v, json_file, string_data))
 
-    text = json.dumps(token_data).encode('utf-8')
+    text = jsonutils.dumps(token_data).encode('utf-8')
 
     # Uncomment to record the token uncompressed,
     # useful for debugging
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/keystoneclient/auth/identity/v3/base.py 
new/python-keystoneclient-3.21.0/keystoneclient/auth/identity/v3/base.py
--- old/python-keystoneclient-3.19.0/keystoneclient/auth/identity/v3/base.py    
2019-02-28 19:17:12.000000000 +0100
+++ new/python-keystoneclient-3.21.0/keystoneclient/auth/identity/v3/base.py    
2019-09-12 11:31:50.000000000 +0200
@@ -11,10 +11,10 @@
 # under the License.
 
 import abc
-import json
 import logging
 
 from oslo_config import cfg
+from oslo_serialization import jsonutils
 import six
 
 from keystoneclient import access
@@ -189,7 +189,7 @@
                             authenticated=False, log=False, **rkwargs)
 
         try:
-            _logger.debug(json.dumps(resp.json()))
+            _logger.debug(jsonutils.dumps(resp.json()))
             resp_data = resp.json()['token']
         except (KeyError, ValueError):
             raise exceptions.InvalidResponse(response=resp)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/keystoneclient/common/cms.py 
new/python-keystoneclient-3.21.0/keystoneclient/common/cms.py
--- old/python-keystoneclient-3.19.0/keystoneclient/common/cms.py       
2019-02-28 19:17:12.000000000 +0100
+++ new/python-keystoneclient-3.21.0/keystoneclient/common/cms.py       
2019-09-12 11:31:50.000000000 +0200
@@ -38,7 +38,8 @@
 PKIZ_PREFIX = 'PKIZ_'
 PKIZ_CMS_FORM = 'DER'
 PKI_ASN1_FORM = 'PEM'
-DEFAULT_TOKEN_DIGEST_ALGORITHM = 'sha256'
+# Adding nosec since this fails bandit B105, 'Possible hardcoded password'.
+DEFAULT_TOKEN_DIGEST_ALGORITHM = 'sha256'  # nosec
 
 
 # The openssl cms command exits with these status codes.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/keystoneclient/tests/functional/v3/test_projects.py
 
new/python-keystoneclient-3.21.0/keystoneclient/tests/functional/v3/test_projects.py
--- 
old/python-keystoneclient-3.19.0/keystoneclient/tests/functional/v3/test_projects.py
        2019-02-28 19:17:12.000000000 +0100
+++ 
new/python-keystoneclient-3.21.0/keystoneclient/tests/functional/v3/test_projects.py
        2019-09-12 11:31:50.000000000 +0200
@@ -157,6 +157,30 @@
         self.assertIn(project_one.entity, projects)
         self.assertIn(project_two.entity, projects)
 
+    def test_list_subprojects(self):
+        parent_project = fixtures.Project(self.client, self.test_domain.id)
+        self.useFixture(parent_project)
+
+        child_project_one = fixtures.Project(self.client, self.test_domain.id,
+                                             parent=parent_project.id)
+        self.useFixture(child_project_one)
+
+        child_project_two = fixtures.Project(self.client, self.test_domain.id,
+                                             parent=parent_project.id)
+        self.useFixture(child_project_two)
+
+        projects = self.client.projects.list(parent=parent_project.id)
+
+        # All projects are valid
+        for project in projects:
+            self.check_project(project)
+
+        self.assertIn(child_project_one.entity, projects)
+        self.assertIn(child_project_two.entity, projects)
+
+        # Parent project should not be included in the result
+        self.assertNotIn(parent_project.entity, projects)
+
     def test_update_project(self):
         project = fixtures.Project(self.client, self.test_domain.id)
         self.useFixture(project)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/auth/test_identity_v2.py
 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/auth/test_identity_v2.py
--- 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/auth/test_identity_v2.py
 2019-02-28 19:17:12.000000000 +0100
+++ 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/auth/test_identity_v2.py
 2019-09-12 11:31:50.000000000 +0200
@@ -84,7 +84,7 @@
         self.TEST_RESPONSE_DICT = {
             "access": {
                 "token": {
-                    "expires": "2020-01-01T00:00:10.000123Z",
+                    "expires": "2999-01-01T00:00:10.000123Z",
                     "id": self.TEST_TOKEN,
                     "tenant": {
                         "id": self.TEST_TENANT_ID
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/auth/test_identity_v3.py
 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/auth/test_identity_v3.py
--- 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/auth/test_identity_v3.py
 2019-02-28 19:17:12.000000000 +0100
+++ 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/auth/test_identity_v3.py
 2019-09-12 11:31:50.000000000 +0200
@@ -129,7 +129,7 @@
                     "password"
                 ],
 
-                "expires_at": "2020-01-01T00:00:10.000123Z",
+                "expires_at": "2999-01-01T00:00:10.000123Z",
                 "project": {
                     "domain": {
                         "id": self.TEST_DOMAIN_ID,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/client_fixtures.py 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/client_fixtures.py
--- 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/client_fixtures.py   
    2019-02-28 19:17:12.000000000 +0100
+++ 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/client_fixtures.py   
    2019-09-12 11:31:50.000000000 +0200
@@ -399,7 +399,7 @@
                 'access': {
                     'token': {
                         'id': self.UUID_TOKEN_DEFAULT,
-                        'expires': '2020-01-01T00:00:10.000123Z',
+                        'expires': '2999-01-01T00:00:10.000123Z',
                         'tenant': {
                             'id': 'tenant_id1',
                             'name': 'tenant_name1',
@@ -420,7 +420,7 @@
                 'access': {
                     'token': {
                         'id': self.VALID_DIABLO_TOKEN,
-                        'expires': '2020-01-01T00:00:10.000123Z',
+                        'expires': '2999-01-01T00:00:10.000123Z',
                         'tenantId': 'tenant_id1',
                     },
                     'user': {
@@ -437,7 +437,7 @@
                 'access': {
                     'token': {
                         'id': self.UUID_TOKEN_UNSCOPED,
-                        'expires': '2020-01-01T00:00:10.000123Z',
+                        'expires': '2999-01-01T00:00:10.000123Z',
                     },
                     'user': {
                         'id': 'user_id1',
@@ -453,7 +453,7 @@
                 'access': {
                     'token': {
                         'id': 'valid-token',
-                        'expires': '2020-01-01T00:00:10.000123Z',
+                        'expires': '2999-01-01T00:00:10.000123Z',
                         'tenant': {
                             'id': 'tenant_id1',
                             'name': 'tenant_name1',
@@ -474,7 +474,7 @@
                     'token': {
                         'bind': {'kerberos': self.KERBEROS_BIND},
                         'id': self.UUID_TOKEN_BIND,
-                        'expires': '2020-01-01T00:00:10.000123Z',
+                        'expires': '2999-01-01T00:00:10.000123Z',
                         'tenant': {
                             'id': 'tenant_id1',
                             'name': 'tenant_name1',
@@ -496,7 +496,7 @@
                     'token': {
                         'bind': {'FOO': 'BAR'},
                         'id': self.UUID_TOKEN_UNKNOWN_BIND,
-                        'expires': '2020-01-01T00:00:10.000123Z',
+                        'expires': '2999-01-01T00:00:10.000123Z',
                         'tenant': {
                             'id': 'tenant_id1',
                             'name': 'tenant_name1',
@@ -515,7 +515,7 @@
             },
             self.v3_UUID_TOKEN_DEFAULT: {
                 'token': {
-                    'expires_at': '2020-01-01T00:00:10.000123Z',
+                    'expires_at': '2999-01-01T00:00:10.000123Z',
                     'methods': ['password'],
                     'user': {
                         'id': 'user_id1',
@@ -542,7 +542,7 @@
             },
             self.v3_UUID_TOKEN_UNSCOPED: {
                 'token': {
-                    'expires_at': '2020-01-01T00:00:10.000123Z',
+                    'expires_at': '2999-01-01T00:00:10.000123Z',
                     'methods': ['password'],
                     'user': {
                         'id': 'user_id1',
@@ -556,7 +556,7 @@
             },
             self.v3_UUID_TOKEN_DOMAIN_SCOPED: {
                 'token': {
-                    'expires_at': '2020-01-01T00:00:10.000123Z',
+                    'expires_at': '2999-01-01T00:00:10.000123Z',
                     'methods': ['password'],
                     'user': {
                         'id': 'user_id1',
@@ -581,7 +581,7 @@
                 'access': {
                     'token': {
                         'id': self.SIGNED_TOKEN_SCOPED_KEY,
-                        'expires': '2020-01-01T00:00:10.000123Z',
+                        'expires': '2999-01-01T00:00:10.000123Z',
                     },
                     'user': {
                         'id': 'user_id1',
@@ -599,7 +599,7 @@
                 'access': {
                     'token': {
                         'id': self.SIGNED_TOKEN_UNSCOPED_KEY,
-                        'expires': '2020-01-01T00:00:10.000123Z',
+                        'expires': '2999-01-01T00:00:10.000123Z',
                     },
                     'user': {
                         'id': 'user_id1',
@@ -613,7 +613,7 @@
             },
             self.SIGNED_v3_TOKEN_SCOPED_KEY: {
                 'token': {
-                    'expires_at': '2020-01-01T00:00:10.000123Z',
+                    'expires_at': '2999-01-01T00:00:10.000123Z',
                     'methods': ['password'],
                     'user': {
                         'id': 'user_id1',
@@ -642,7 +642,7 @@
                 'token': {
                     'bind': {'kerberos': self.KERBEROS_BIND},
                     'methods': ['password'],
-                    'expires_at': '2020-01-01T00:00:10.000123Z',
+                    'expires_at': '2999-01-01T00:00:10.000123Z',
                     'user': {
                         'id': 'user_id1',
                         'name': 'user_name1',
@@ -669,7 +669,7 @@
             self.v3_UUID_TOKEN_UNKNOWN_BIND: {
                 'token': {
                     'bind': {'FOO': 'BAR'},
-                    'expires_at': '2020-01-01T00:00:10.000123Z',
+                    'expires_at': '2999-01-01T00:00:10.000123Z',
                     'methods': ['password'],
                     'user': {
                         'id': 'user_id1',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/test_discovery.py 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/test_discovery.py
--- 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/test_discovery.py    
    2019-02-28 19:17:12.000000000 +0100
+++ 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/test_discovery.py    
    2019-09-12 11:31:50.000000000 +0200
@@ -87,7 +87,7 @@
 V2_AUTH_RESPONSE = jsonutils.dumps({
     "access": {
         "token": {
-            "expires": "2020-01-01T00:00:10.000123Z",
+            "expires": "2999-01-01T00:00:10.000123Z",
             "id": 'fakeToken',
             "tenant": {
                 "id": '1'
@@ -113,7 +113,7 @@
             "password"
         ],
 
-        "expires_at": "2020-01-01T00:00:10.000123Z",
+        "expires_at": "2999-01-01T00:00:10.000123Z",
         "project": {
             "domain": {
                 "id": '1',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/test_session.py 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/test_session.py
--- old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/test_session.py  
2019-02-28 19:17:12.000000000 +0100
+++ new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/test_session.py  
2019-09-12 11:31:50.000000000 +0200
@@ -828,7 +828,6 @@
         self.assertIn(list(response.keys())[0], output)
         self.assertIn(list(response.values())[0], output)
 
-        self.assertNotIn(self.TEST_URL, self.logger.output)
         self.assertNotIn(list(response.keys())[0], self.logger.output)
         self.assertNotIn(list(response.values())[0], self.logger.output)
 
@@ -1026,7 +1025,6 @@
         self.assertIn(list(response.keys())[0], output)
         self.assertIn(list(response.values())[0], output)
 
-        self.assertNotIn(self.TEST_URL, self.logger.output)
         self.assertNotIn(list(response.keys())[0], self.logger.output)
         self.assertNotIn(list(response.values())[0], self.logger.output)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/v2_0/test_auth.py 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/v2_0/test_auth.py
--- 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/v2_0/test_auth.py    
    2019-02-28 19:17:12.000000000 +0100
+++ 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/v2_0/test_auth.py    
    2019-09-12 11:31:50.000000000 +0200
@@ -28,7 +28,7 @@
         self.TEST_RESPONSE_DICT = {
             "access": {
                 "token": {
-                    "expires": "2020-01-01T00:00:10.000123Z",
+                    "expires": "2999-01-01T00:00:10.000123Z",
                     "id": self.TEST_TOKEN,
                     "tenant": {
                         "id": self.TEST_TENANT_ID
@@ -61,7 +61,7 @@
 
         # Build a new response
         TEST_TOKEN = "abcdef"
-        resp_b['access']['token']['expires'] = '2020-01-01T00:00:10.000123Z'
+        resp_b['access']['token']['expires'] = '2999-01-01T00:00:10.000123Z'
         resp_b['access']['token']['id'] = TEST_TOKEN
 
         # return expired first, and then the new response
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/v2_0/test_client.py 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/v2_0/test_client.py
--- 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/v2_0/test_client.py  
    2019-02-28 19:17:12.000000000 +0100
+++ 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/v2_0/test_client.py  
    2019-09-12 11:31:50.000000000 +0200
@@ -10,9 +10,10 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import uuid
 
+from oslo_serialization import jsonutils
+
 from keystoneauth1 import fixture
 
 from keystoneauth1 import session as auth_session
@@ -75,10 +76,10 @@
                                password='password',
                                project_name='exampleproject',
                                auth_url=self.TEST_URL)
-        cache = json.dumps(cl.auth_ref)
+        cache = jsonutils.dumps(cl.auth_ref)
         # Creating a HTTPClient not using session is deprecated.
         with self.deprecations.expect_deprecations_here():
-            new_client = client.Client(auth_ref=json.loads(cache))
+            new_client = client.Client(auth_ref=jsonutils.loads(cache))
         self.assertIsNotNone(new_client.auth_ref)
         with self.deprecations.expect_deprecations_here():
             self.assertTrue(new_client.auth_ref.scoped)
@@ -100,11 +101,11 @@
                                password='password',
                                project_name='exampleproject',
                                auth_url=self.TEST_URL)
-        cache = json.dumps(cl.auth_ref)
+        cache = jsonutils.dumps(cl.auth_ref)
         new_auth_url = "http://new-public:5000/v2.0";
         # Creating a HTTPClient not using session is deprecated.
         with self.deprecations.expect_deprecations_here():
-            new_client = client.Client(auth_ref=json.loads(cache),
+            new_client = client.Client(auth_ref=jsonutils.loads(cache),
                                        auth_url=new_auth_url)
         self.assertIsNotNone(new_client.auth_ref)
         with self.deprecations.expect_deprecations_here():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/v3/test_auth.py 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/v3/test_auth.py
--- old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/v3/test_auth.py  
2019-02-28 19:17:12.000000000 +0100
+++ new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/v3/test_auth.py  
2019-09-12 11:31:50.000000000 +0200
@@ -28,7 +28,7 @@
                     "password"
                 ],
 
-                "expires_at": "2020-01-01T00:00:10.000123Z",
+                "expires_at": "2999-01-01T00:00:10.000123Z",
                 "project": {
                     "domain": {
                         "id": self.TEST_DOMAIN_ID,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/v3/test_client.py 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/v3/test_client.py
--- 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/v3/test_client.py    
    2019-02-28 19:17:12.000000000 +0100
+++ 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/v3/test_client.py    
    2019-09-12 11:31:50.000000000 +0200
@@ -11,9 +11,9 @@
 #    under the License.
 
 import copy
-import json
 import uuid
 
+from oslo_serialization import jsonutils
 
 from keystoneauth1 import session as auth_session
 from keystoneclient.auth import token_endpoint
@@ -90,10 +90,10 @@
                               password='password',
                               project_id=token.project_id,
                               auth_url=self.TEST_URL)
-        cache = json.dumps(c.auth_ref)
+        cache = jsonutils.dumps(c.auth_ref)
         # Creating a HTTPClient not using session is deprecated.
         with self.deprecations.expect_deprecations_here():
-            new_client = client.Client(auth_ref=json.loads(cache))
+            new_client = client.Client(auth_ref=jsonutils.loads(cache))
         self.assertIsNotNone(new_client.auth_ref)
         self.assertFalse(new_client.auth_ref.domain_scoped)
         self.assertTrue(new_client.auth_ref.project_scoped)
@@ -124,10 +124,10 @@
                               password='password',
                               project_id=project_id,
                               auth_url=self.TEST_URL)
-        cache = json.dumps(c.auth_ref)
+        cache = jsonutils.dumps(c.auth_ref)
         # Creating a HTTPClient not using session is deprecated.
         with self.deprecations.expect_deprecations_here():
-            new_client = client.Client(auth_ref=json.loads(cache),
+            new_client = client.Client(auth_ref=jsonutils.loads(cache),
                                        auth_url=new_auth_url)
         self.assertIsNotNone(new_client.auth_ref)
         self.assertFalse(new_client.auth_ref.domain_scoped)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/v3/test_projects.py 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/v3/test_projects.py
--- 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/v3/test_projects.py  
    2019-02-28 19:17:12.000000000 +0100
+++ 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/v3/test_projects.py  
    2019-09-12 11:31:50.000000000 +0200
@@ -55,8 +55,7 @@
         ref_list = [self.new_ref(), self.new_ref()]
         domain_id = uuid.uuid4().hex
 
-        self.stub_entity('GET', [self.collection_key],
-                         entity=ref_list)
+        self.stub_entity('GET', [self.collection_key], entity=ref_list)
 
         returned_list = self.manager.list(domain=domain_id)
         self.assertEqual(len(ref_list), len(returned_list))
@@ -64,6 +63,18 @@
 
         self.assertQueryStringIs('domain_id=%s' % domain_id)
 
+    def test_list_projects_for_parent(self):
+        ref_list = [self.new_ref(), self.new_ref()]
+        parent_id = uuid.uuid4().hex
+
+        self.stub_entity('GET', [self.collection_key], entity=ref_list)
+
+        returned_list = self.manager.list(parent=parent_id)
+        self.assertEqual(len(ref_list), len(returned_list))
+        [self.assertIsInstance(r, self.model) for r in returned_list]
+
+        self.assertQueryStringIs('parent_id=%s' % parent_id)
+
     def test_create_with_parent(self):
         parent_ref = self.new_ref()
         parent_ref['parent_id'] = uuid.uuid4().hex
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/v3/test_role_assignments.py
 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/v3/test_role_assignments.py
--- 
old/python-keystoneclient-3.19.0/keystoneclient/tests/unit/v3/test_role_assignments.py
      2019-02-28 19:17:12.000000000 +0100
+++ 
new/python-keystoneclient-3.21.0/keystoneclient/tests/unit/v3/test_role_assignments.py
      2019-09-12 11:31:50.000000000 +0200
@@ -265,7 +265,7 @@
         ref_list = self.TEST_ALL_RESPONSE_LIST
         self.stub_entity('GET',
                          [self.collection_key,
-                          '?include_names'],
+                          '?include_names=True'],
                          entity=ref_list)
 
         returned_list = self.manager.list(include_names=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/keystoneclient/v3/projects.py 
new/python-keystoneclient-3.21.0/keystoneclient/v3/projects.py
--- old/python-keystoneclient-3.19.0/keystoneclient/v3/projects.py      
2019-02-28 19:17:12.000000000 +0100
+++ new/python-keystoneclient-3.21.0/keystoneclient/v3/projects.py      
2019-09-12 11:31:50.000000000 +0200
@@ -112,7 +112,7 @@
             enabled=enabled,
             **kwargs)
 
-    def list(self, domain=None, user=None, **kwargs):
+    def list(self, domain=None, user=None, parent=None, **kwargs):
         """List projects.
 
         :param domain: the domain of the projects to be filtered on.
@@ -120,6 +120,9 @@
         :param user: filter in projects the specified user has role
                      assignments on.
         :type user: str or :class:`keystoneclient.v3.users.User`
+        :param parent: filter in projects the specified project is a parent
+                       for
+        :type parent: str or :class:`keystoneclient.v3.projects.Project`
         :param kwargs: any other attribute provided will filter projects on.
                        Project tags filter keyword: ``tags``, ``tags_any``,
                        ``not_tags``, and ``not_tags_any``. tag attribute type
@@ -134,6 +137,7 @@
         projects = super(ProjectManager, self).list(
             base_url=base_url,
             domain_id=base.getid(domain),
+            parent_id=base.getid(parent),
             fallback_to_auth=True,
             **kwargs)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/keystoneclient/v3/tokens.py 
new/python-keystoneclient-3.21.0/keystoneclient/v3/tokens.py
--- old/python-keystoneclient-3.19.0/keystoneclient/v3/tokens.py        
2019-02-28 19:17:12.000000000 +0100
+++ new/python-keystoneclient-3.21.0/keystoneclient/v3/tokens.py        
2019-09-12 11:31:50.000000000 +0200
@@ -57,7 +57,8 @@
         resp, body = self._client.get(path)
         return body
 
-    def get_token_data(self, token, include_catalog=True, allow_expired=False):
+    def get_token_data(self, token, include_catalog=True, allow_expired=False,
+                       access_rules_support=None):
         """Fetch the data about a token from the identity server.
 
         :param str token: The ID of the token to be fetched.
@@ -65,11 +66,18 @@
                                      included in the response.
         :param allow_expired: If True the token will be validated and returned
                               if it has already expired.
+        :param access_rules_support: Version number indicating that the client
+                                     is capable of enforcing keystone
+                                     access rules, if unset this client
+                                     does not support access rules.
+        :type access_rules_support: float
 
         :rtype: dict
 
         """
         headers = {'X-Subject-Token': token}
+        if access_rules_support:
+            headers['OpenStack-Identity-Access-Rules'] = access_rules_support
         flags = []
 
         url = '/auth/tokens'
@@ -85,7 +93,8 @@
         resp, body = self._client.get(url, headers=headers)
         return body
 
-    def validate(self, token, include_catalog=True, allow_expired=False):
+    def validate(self, token, include_catalog=True, allow_expired=False,
+                 access_rules_support=None):
         """Validate a token.
 
         :param token: The token to be validated.
@@ -95,6 +104,11 @@
         :param allow_expired: If True the token will be validated and returned
                               if it has already expired.
         :type allow_expired: bool
+        :param access_rules_support: Version number indicating that the client
+                                     is capable of enforcing keystone
+                                     access rules, if unset this client
+                                     does not support access rules.
+        :type access_rules_support: float
 
         :rtype: :class:`keystoneclient.access.AccessInfoV3`
 
@@ -102,5 +116,6 @@
         token_id = _calc_id(token)
         body = self.get_token_data(token_id,
                                    include_catalog=include_catalog,
-                                   allow_expired=allow_expired)
+                                   allow_expired=allow_expired,
+                                   access_rules_support=access_rules_support)
         return access.AccessInfo.factory(auth_token=token_id, body=body)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/python_keystoneclient.egg-info/PKG-INFO 
new/python-keystoneclient-3.21.0/python_keystoneclient.egg-info/PKG-INFO
--- old/python-keystoneclient-3.19.0/python_keystoneclient.egg-info/PKG-INFO    
2019-02-28 19:18:43.000000000 +0100
+++ new/python-keystoneclient-3.21.0/python_keystoneclient.egg-info/PKG-INFO    
2019-09-12 11:33:05.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: python-keystoneclient
-Version: 3.19.0
+Version: 3.21.0
 Summary: Client Library for OpenStack Identity
 Home-page: https://docs.openstack.org/python-keystoneclient/latest/
 Author: OpenStack
@@ -42,7 +42,7 @@
         .. _Launchpad project: https://launchpad.net/python-keystoneclient
         .. _Blueprints: https://blueprints.launchpad.net/python-keystoneclient
         .. _Bugs: https://bugs.launchpad.net/python-keystoneclient
-        .. _Source: 
https://git.openstack.org/cgit/openstack/python-keystoneclient
+        .. _Source: https://opendev.org/openstack/python-keystoneclient
         .. _OpenStackClient: https://pypi.org/project/python-openstackclient
         .. _How to Contribute: 
https://docs.openstack.org/infra/manual/developers.html
         .. _Specs: https://specs.openstack.org/openstack/keystone-specs/
@@ -80,5 +80,5 @@
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/python_keystoneclient.egg-info/SOURCES.txt 
new/python-keystoneclient-3.21.0/python_keystoneclient.egg-info/SOURCES.txt
--- old/python-keystoneclient-3.19.0/python_keystoneclient.egg-info/SOURCES.txt 
2019-02-28 19:18:43.000000000 +0100
+++ new/python-keystoneclient-3.21.0/python_keystoneclient.egg-info/SOURCES.txt 
2019-09-12 11:33:05.000000000 +0200
@@ -293,6 +293,7 @@
 releasenotes/notes/deprecated_auth-d2a2bf537bdb88d3.yaml
 releasenotes/notes/implied_roles-ea39d3c3d998d482.yaml
 releasenotes/notes/ksc_2.1.0-739ded9c4c3f8aaa.yaml
+releasenotes/notes/list_projects_filtered_by_the_parent_project-a873974f197c1e37.yaml
 releasenotes/notes/list_role_assignment_names-7e1b7eb8c2d22d7c.yaml
 releasenotes/notes/project-tags-1f8a32d389951e7a.yaml
 releasenotes/notes/remove-credentials-data-46ab3c3c248047cf.yaml
@@ -310,6 +311,7 @@
 releasenotes/source/pike.rst
 releasenotes/source/queens.rst
 releasenotes/source/rocky.rst
+releasenotes/source/stein.rst
 releasenotes/source/unreleased.rst
 releasenotes/source/_static/.placeholder
 releasenotes/source/_templates/.placeholder
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/python_keystoneclient.egg-info/pbr.json 
new/python-keystoneclient-3.21.0/python_keystoneclient.egg-info/pbr.json
--- old/python-keystoneclient-3.19.0/python_keystoneclient.egg-info/pbr.json    
2019-02-28 19:18:43.000000000 +0100
+++ new/python-keystoneclient-3.21.0/python_keystoneclient.egg-info/pbr.json    
2019-09-12 11:33:05.000000000 +0200
@@ -1 +1 @@
-{"git_version": "6c4bb8b", "is_release": true}
\ No newline at end of file
+{"git_version": "79f150f", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/releasenotes/notes/list_projects_filtered_by_the_parent_project-a873974f197c1e37.yaml
 
new/python-keystoneclient-3.21.0/releasenotes/notes/list_projects_filtered_by_the_parent_project-a873974f197c1e37.yaml
--- 
old/python-keystoneclient-3.19.0/releasenotes/notes/list_projects_filtered_by_the_parent_project-a873974f197c1e37.yaml
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-keystoneclient-3.21.0/releasenotes/notes/list_projects_filtered_by_the_parent_project-a873974f197c1e37.yaml
      2019-09-12 11:31:50.000000000 +0200
@@ -0,0 +1,5 @@
+---
+features:
+  - |
+    Now keystone client supports to list projects which belongs to the given
+    parent project.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/releasenotes/source/conf.py 
new/python-keystoneclient-3.21.0/releasenotes/source/conf.py
--- old/python-keystoneclient-3.19.0/releasenotes/source/conf.py        
2019-02-28 19:17:12.000000000 +0100
+++ new/python-keystoneclient-3.21.0/releasenotes/source/conf.py        
2019-09-12 11:31:50.000000000 +0200
@@ -54,7 +54,6 @@
 master_doc = 'index'
 
 # General information about the project.
-project = u'keystoneclient Release Notes'
 copyright = u'2015, Keystone Developers'
 
 # Release notes are version independent.
@@ -142,11 +141,6 @@
 # directly to the root of the documentation.
 # html_extra_path = []
 
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-# html_last_updated_fmt = '%b %d, %Y'
-html_last_updated_fmt = '%Y-%m-%d %H:%M'
-
 # If true, SmartyPants will be used to convert quotes and dashes to
 # typographically correct entities.
 # html_use_smartypants = True
@@ -190,17 +184,6 @@
 
 # -- Options for LaTeX output ---------------------------------------------
 
-latex_elements = {
-    # The paper size ('letterpaper' or 'a4paper').
-    # 'papersize': 'letterpaper',
-
-    # The font size ('10pt', '11pt' or '12pt').
-    # 'pointsize': '10pt',
-
-    # Additional stuff for the LaTeX preamble.
-    # 'preamble': '',
-}
-
 # Grouping the document tree into LaTeX files. List of tuples
 # (source start file, target name, title,
 #  author, documentclass [howto, manual, or own class]).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/releasenotes/source/index.rst 
new/python-keystoneclient-3.21.0/releasenotes/source/index.rst
--- old/python-keystoneclient-3.19.0/releasenotes/source/index.rst      
2019-02-28 19:17:12.000000000 +0100
+++ new/python-keystoneclient-3.21.0/releasenotes/source/index.rst      
2019-09-12 11:31:50.000000000 +0200
@@ -6,6 +6,7 @@
    :maxdepth: 1
 
    unreleased
+   stein
    rocky
    queens
    pike
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-keystoneclient-3.19.0/releasenotes/source/stein.rst 
new/python-keystoneclient-3.21.0/releasenotes/source/stein.rst
--- old/python-keystoneclient-3.19.0/releasenotes/source/stein.rst      
1970-01-01 01:00:00.000000000 +0100
+++ new/python-keystoneclient-3.21.0/releasenotes/source/stein.rst      
2019-09-12 11:31:50.000000000 +0200
@@ -0,0 +1,6 @@
+===================================
+ Stein Series Release Notes
+===================================
+
+.. release-notes::
+   :branch: stable/stein
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-keystoneclient-3.19.0/setup.cfg 
new/python-keystoneclient-3.21.0/setup.cfg
--- old/python-keystoneclient-3.19.0/setup.cfg  2019-02-28 19:18:44.000000000 
+0100
+++ new/python-keystoneclient-3.21.0/setup.cfg  2019-09-12 11:33:05.000000000 
+0200
@@ -16,8 +16,8 @@
        Programming Language :: Python :: 2
        Programming Language :: Python :: 2.7
        Programming Language :: Python :: 3
-       Programming Language :: Python :: 3.5
        Programming Language :: Python :: 3.6
+       Programming Language :: Python :: 3.7
 
 [files]
 packages = 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-keystoneclient-3.19.0/test-requirements.txt 
new/python-keystoneclient-3.21.0/test-requirements.txt
--- old/python-keystoneclient-3.19.0/test-requirements.txt      2019-02-28 
19:17:12.000000000 +0100
+++ new/python-keystoneclient-3.21.0/test-requirements.txt      2019-09-12 
11:31:50.000000000 +0200
@@ -7,7 +7,8 @@
 
 coverage!=4.4,>=4.0 # Apache-2.0
 fixtures>=3.0.0 # Apache-2.0/BSD
-keyring>=5.5.1 # MIT/PSF
+keyring>=5.5.1,<19.0.0;python_version=='2.7'  # MIT/PSF
+keyring>=5.5.1;python_version>='3.4'  # MIT/PSF
 lxml!=3.7.0,>=3.4.1 # BSD
 mock>=2.0.0 # BSD
 oauthlib>=0.6.2 # BSD
@@ -20,4 +21,4 @@
 testtools>=2.2.0 # MIT
 
 # Bandit security code scanner
-bandit>=1.1.0 # Apache-2.0
+bandit!=1.6.0,>=1.1.0 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-keystoneclient-3.19.0/tox.ini 
new/python-keystoneclient-3.21.0/tox.ini
--- old/python-keystoneclient-3.19.0/tox.ini    2019-02-28 19:17:12.000000000 
+0100
+++ new/python-keystoneclient-3.21.0/tox.ini    2019-09-12 11:31:50.000000000 
+0200
@@ -1,7 +1,7 @@
 [tox]
-minversion = 2.0
+minversion = 2.5.0
 skipsdist = True
-envlist = py36,py35,py27,pep8,releasenotes
+envlist = py27,py37,pep8,releasenotes
 
 [testenv]
 usedevelop = True
@@ -11,7 +11,7 @@
          OS_STDERR_NOCAPTURE=False
 
 deps =
-       
-c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt}
+       
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
        -r{toxinidir}/requirements.txt
        -r{toxinidir}/test-requirements.txt
 commands = find . -type f -name "*.pyc" -delete
@@ -71,6 +71,18 @@
 commands = python setup.py build_sphinx
 deps = -r{toxinidir}/doc/requirements.txt
 
+[testenv:pdf-docs]
+basepython = python3
+envdir = {toxworkdir}/docs
+deps = {[testenv:docs]deps}
+whitelist_externals =
+  make
+  rm
+commands =
+  rm -rf doc/build/pdf
+  sphinx-build -W -b latex doc/source doc/build/pdf
+  make -C doc/build/pdf
+
 [testenv:releasenotes]
 basepython = python3
 commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html 
releasenotes/source releasenotes/build/html


Reply via email to