Hello community,

here is the log from the commit of package python-oslo.policy for 
openSUSE:Factory checked in at 2017-02-21 13:40:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-oslo.policy (Old)
 and      /work/SRC/openSUSE:Factory/.python-oslo.policy.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-oslo.policy"

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-oslo.policy/python-oslo.policy.changes    
2016-09-30 15:29:26.000000000 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-oslo.policy.new/python-oslo.policy.changes   
    2017-02-21 13:40:11.050332568 +0100
@@ -1,0 +2,33 @@
+Fri Feb 10 15:52:53 UTC 2017 - [email protected]
+
+- update to version 1.18.0:
+  - Add missing parameter description in module _cache_handler
+  - Imported Translations from Zanata
+  - Enable release notes translation
+  - Remove dead code and use default value of argparse.
+  - Remove oslo.utils from requirements
+  - Update reno for stable/newton
+  - Remove references to Python 3.4
+  - Change assertTrue(isinstance()) by optimal assert
+  - Add stevedore to requirements
+  - Show team and repo badges on README
+  - Improved performance of parse_file_contents() method
+  - Doc: declare YAML/JSON support
+  - Remove wrong parameter type for class NotCheck from docstring
+  - Add sphinx extension to build sample policy
+  - Perform basic checks on policy definitions
+  - Update docs on policy sample generator
+  - Fix a code logic while doing cyclical reference check to the policy
+  - doc: Add introduction to index page
+  - Add Constraints support
+  - Changed the home-page link
+  - Fix typo in oslo.policy
+  - Make exception PolicyNotAuthorized more readable
+  - Updated from global requirements
+
+-------------------------------------------------------------------
+Fri Oct 14 13:59:40 UTC 2016 - [email protected]
+
+- switch to stable/newton tarball in _service
+
+-------------------------------------------------------------------

Old:
----
  oslo.policy-1.14.0.tar.gz

New:
----
  oslo.policy-1.18.0.tar.gz

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

Other differences:
------------------
++++++ python-oslo.policy.spec ++++++
--- /var/tmp/diff_new_pack.imR6Ou/_old  2017-02-21 13:40:12.182172897 +0100
+++ /var/tmp/diff_new_pack.imR6Ou/_new  2017-02-21 13:40:12.186172333 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-oslo.policy
 #
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 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
@@ -18,29 +18,27 @@
 
 %global sname oslo.policy
 Name:           python-oslo.policy
-Version:        1.14.0
+Version:        1.18.0
 Release:        0
 Summary:        OpenStack Oslo Policy library
 License:        Apache-2.0
-Group:          Documentation
+Group:          Development/Languages/Python
 Url:            https://launchpad.net/%sname
 Source0:        
https://pypi.io/packages/source/o/%{sname}/%{sname}-%{version}.tar.gz
 BuildRequires:  openstack-macros
-BuildRequires:  python-PyYAML >= 3.1.0
+BuildRequires:  python-PyYAML >= 3.10.0
 BuildRequires:  python-devel
 BuildRequires:  python-oslo.config >= 3.14.0
 BuildRequires:  python-oslo.i18n >= 2.1.0
 BuildRequires:  python-oslo.serialization >= 1.10.0
-BuildRequires:  python-oslo.utils >= 3.16.0
 BuildRequires:  python-oslotest >= 1.10.0
-BuildRequires:  python-pbr >= 1.6
+BuildRequires:  python-pbr >= 1.8
 BuildRequires:  python-requests >= 2.10.0
-BuildRequires:  python-requests-mock >= 1.0
-Requires:       python-PyYAML >= 3.1.0
+BuildRequires:  python-requests-mock >= 1.1
+Requires:       python-PyYAML >= 3.10.0
 Requires:       python-oslo.config >= 3.14.0
 Requires:       python-oslo.i18n >= 2.1.0
 Requires:       python-oslo.serialization >= 1.10.0
-Requires:       python-oslo.utils >= 3.16.0
 Requires:       python-requests >= 2.10.0
 Requires:       python-six >= 1.9.0
 BuildArch:      noarch
@@ -53,13 +51,14 @@
 Summary:        Documentation for the Oslo Policy library
 Group:          Documentation
 BuildRequires:  python-Sphinx
-BuildRequires:  python-oslosphinx >= 2.5.0
+BuildRequires:  python-oslosphinx >= 4.7.0
 
 %description doc
 Documentation for the Oslo Policy library.
 
 %prep
-%setup -q -n %{sname}-%{version}
+%autosetup -n %{sname}-%{version}
+%py_req_cleanup
 
 %build
 %{py2_build}

++++++ _service ++++++
--- /var/tmp/diff_new_pack.imR6Ou/_old  2017-02-21 13:40:12.226166690 +0100
+++ /var/tmp/diff_new_pack.imR6Ou/_new  2017-02-21 13:40:12.226166690 +0100
@@ -1,13 +1,12 @@
 <services>
   <service mode="disabled" name="renderspec">
-    <param 
name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/master/openstack/oslo.policy/oslo.policy.spec.j2</param>
+    <param 
name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/stable/ocata/openstack/oslo.policy/oslo.policy.spec.j2</param>
     <param name="output-name">python-oslo.policy.spec</param>
-    <param 
name="requirements">https://raw.githubusercontent.com/openstack/rpm-packaging/master/global-requirements.txt</param>
+    <param 
name="requirements">https://raw.githubusercontent.com/openstack/rpm-packaging/stable/ocata/global-requirements.txt</param>
+    <param name="changelog-email">[email protected]</param>
+    <param name="changelog-provider">gh,openstack,oslo.policy</param>
   </service>
   <service mode="disabled" name="download_files">
-    <param name="changesgenerate">enable</param>
-  </service>
-  <service name="refresh_patches" mode="disabled">
-    <param name="changesgenerate">enable</param>
   </service>
+  <service name="format_spec_file" mode="disabled"/>
 </services>

++++++ oslo.policy-1.14.0.tar.gz -> oslo.policy-1.18.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/AUTHORS 
new/oslo.policy-1.18.0/AUTHORS
--- old/oslo.policy-1.14.0/AUTHORS      2016-08-10 14:17:48.000000000 +0200
+++ new/oslo.policy-1.18.0/AUTHORS      2017-01-18 15:11:06.000000000 +0100
@@ -23,8 +23,10 @@
 Doug Hellmann <[email protected]>
 Douglas Mendizábal <[email protected]>
 Edan David <[email protected]>
+Eric Brown <[email protected]>
 Eric Windisch <[email protected]>
 Flaper Fesp <[email protected]>
+Flavio Percoco <[email protected]>
 Florent Flament <[email protected]>
 Gary Kotton <[email protected]>
 Haiwei Xu <[email protected]>
@@ -45,6 +47,7 @@
 Kevin L. Mitchell <[email protected]>
 Kirill Bespalov <[email protected]>
 Kseniya Tychkova <[email protected]>
+Luong Anh Tuan <[email protected]>
 Mark McClain <[email protected]>
 Mark McLoughlin <[email protected]>
 Maruti <[email protected]>
@@ -53,23 +56,31 @@
 Nathan Kinder <[email protected]>
 Rodrigo Duarte Sousa <[email protected]>
 Ronald Bradford <[email protected]>
+Sami Makki <[email protected]>
 Sean Dague <[email protected]>
 Sergey Kraynev <[email protected]>
 Sergey Lukjanov <[email protected]>
+Sergey Nikitin <[email protected]>
 ShaoHe Feng <[email protected]>
 Shuangtai Tian <[email protected]>
+Stephen Finucane <[email protected]>
 Steve Martinelli <[email protected]>
 Takashi NATSUME <[email protected]>
 Thiago Paiva <[email protected]>
 Tim Goddard <[email protected]>
 Timothy Symanczyk <[email protected]>
 Tony Breeds <[email protected]>
+Tony Xu <[email protected]>
 Victor Sergeyev <[email protected]>
 Vishvananda Ishaya <[email protected]>
 Wei Li <[email protected]>
+Xu Ao <[email protected]>
 Zhi Yan Liu <[email protected]>
 Zhongyue Luo <[email protected]>
 fujioka yuuichi <[email protected]>
+gecong1973 <[email protected]>
 guohliu <[email protected]>
+howardlee <[email protected]>
+melissaml <[email protected]>
 sonu.kumar <[email protected]>
 vponomaryov <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/ChangeLog 
new/oslo.policy-1.18.0/ChangeLog
--- old/oslo.policy-1.14.0/ChangeLog    2016-08-10 14:17:48.000000000 +0200
+++ new/oslo.policy-1.18.0/ChangeLog    2017-01-18 15:11:06.000000000 +0100
@@ -1,6 +1,53 @@
 CHANGES
 =======
 
+1.18.0
+------
+
+* Remove references to Python 3.4
+* Remove dead code and use default value of argparse
+* Add Constraints support
+* Updated from global requirements
+
+1.17.0
+------
+
+* Improved performance of parse_file_contents() method
+* Show team and repo badges on README
+* Remove wrong parameter type for class NotCheck from docstring
+* Fix a code logic while doing cyclical reference check to the policy
+* Updated from global requirements
+* Add missing parameter description in module _cache_handler
+* Fix typo in oslo.policy
+* Updated from global requirements
+* Add stevedore to requirements
+* Imported Translations from Zanata
+* Updated from global requirements
+* Make exception PolicyNotAuthorized more readable
+
+1.16.0
+------
+
+* Change assertTrue(isinstance()) by optimal assert
+* Perform basic checks on policy definitions
+* Enable release notes translation
+* Changed the home-page link
+* Change assertTrue(isinstance()) by optimal assert
+
+1.15.0
+------
+
+* Updated from global requirements
+* Update docs on policy sample generator
+* Updated from global requirements
+* doc: Add introduction to index page
+* Add sphinx extension to build sample policy
+* Updated from global requirements
+* Updated from global requirements
+* Doc: declare YAML/JSON support
+* Remove oslo.utils from requirements
+* Update reno for stable/newton
+
 1.14.0
 ------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/PKG-INFO 
new/oslo.policy-1.18.0/PKG-INFO
--- old/oslo.policy-1.14.0/PKG-INFO     2016-08-10 14:17:49.000000000 +0200
+++ new/oslo.policy-1.18.0/PKG-INFO     2017-01-18 15:11:06.000000000 +0100
@@ -1,12 +1,21 @@
 Metadata-Version: 1.1
 Name: oslo.policy
-Version: 1.14.0
+Version: 1.18.0
 Summary: Oslo Policy library
-Home-page: http://launchpad.net/oslo.policy
+Home-page: http://docs.openstack.org/developer/oslo.policy/
 Author: OpenStack
 Author-email: [email protected]
 License: UNKNOWN
-Description: =============
+Description: ========================
+        Team and repository tags
+        ========================
+        
+        .. image:: http://governance.openstack.org/badges/oslo.policy.svg
+            :target: http://governance.openstack.org/reference/tags/index.html
+        
+        .. Change things from this point on
+        
+        =============
          oslo.policy
         =============
         
@@ -37,5 +46,4 @@
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.4
 Classifier: Programming Language :: Python :: 3.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/README.rst 
new/oslo.policy-1.18.0/README.rst
--- old/oslo.policy-1.14.0/README.rst   2016-08-10 14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/README.rst   2017-01-18 15:09:32.000000000 +0100
@@ -1,3 +1,12 @@
+========================
+Team and repository tags
+========================
+
+.. image:: http://governance.openstack.org/badges/oslo.policy.svg
+    :target: http://governance.openstack.org/reference/tags/index.html
+
+.. Change things from this point on
+
 =============
  oslo.policy
 =============
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/doc/source/index.rst 
new/oslo.policy-1.18.0/doc/source/index.rst
--- old/oslo.policy-1.14.0/doc/source/index.rst 2016-08-10 14:15:46.000000000 
+0200
+++ new/oslo.policy-1.18.0/doc/source/index.rst 2017-01-18 15:09:32.000000000 
+0100
@@ -2,6 +2,9 @@
  oslo.policy
 =============
 
+An OpenStack library providing support for RBAC policy enforcement across all
+OpenStack services.
+
 Contents
 ========
 
@@ -14,6 +17,14 @@
    opts
    cli
    contributing
+   sphinxpolicygen
+
+Release Notes
+=============
+
+.. toctree::
+   :maxdepth: 1
+
    history
 
 Indices and tables
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/doc/source/sphinxpolicygen.rst 
new/oslo.policy-1.18.0/doc/source/sphinxpolicygen.rst
--- old/oslo.policy-1.14.0/doc/source/sphinxpolicygen.rst       1970-01-01 
01:00:00.000000000 +0100
+++ new/oslo.policy-1.18.0/doc/source/sphinxpolicygen.rst       2017-01-18 
15:09:32.000000000 +0100
@@ -0,0 +1,48 @@
+====================================
+Sphinx Oslo Sample Policy Generation
+====================================
+
+.. note::
+  This extension relies on ``oslopolicy-sample-generator``, which requires
+  configuration of policies in code to function. Refer to the :doc:`usage`
+  guide for more information.
+
+oslo.policy includes a sphinx extension to generate a sample policy file at the
+beginning of each sphinx build. This sample policy file can then be included in
+your documents as a raw file, for example, via the ``literalinclude`` 
directive.
+
+To activate the extension add ``oslo_policy.sphinxpolicygen`` to the list of
+extensions in your sphinx ``conf.py``. Once enabled, you need to define two
+options: ``policy_generator_config_file`` and ``sample_policy_basename``. For
+example::
+
+  policy_generator_config_file = '../../etc/nova/nova-policy-generator.conf'
+  sample_policy_basename = '_static/nova'
+
+where:
+
+``policy_generator_config_file``
+  Path to an configuration file used with the ``oslopolicy-sample-generator``
+  utility. This can be an full path or a value relative to the documentation
+  source directory (``app.srcdir``). If this option is not specified or is
+  invalid then the sample policy file generation will be skipped.
+
+``sample_policy_basename``
+  Base name of the output file. This name will be appended with a
+  ``.policy.yaml.sample`` extension to generate the final output file and the
+  path is relative to documentation source directory (``app.srcdir``). As such,
+  using the above example, the policy file will be output to
+  ``_static/nova.policy.yaml.sample``. If this option is not specified, the
+  file will be output to ``sample.policy.yaml``.
+
+Once configured, you can include this configuration file in your source:
+
+.. code:: reST
+
+  =============
+  Sample Policy
+  =============
+
+  Here is a sample policy file.
+
+  .. literalinclude:: _static/nova.policy.yaml.sample
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/doc/source/usage.rst 
new/oslo.policy-1.18.0/doc/source/usage.rst
--- old/oslo.policy-1.14.0/doc/source/usage.rst 2016-08-10 14:15:46.000000000 
+0200
+++ new/oslo.policy-1.18.0/doc/source/usage.rst 2017-01-18 15:09:32.000000000 
+0100
@@ -90,15 +90,14 @@
 
     [entry_points]
     oslo.policy.policies =
-        nova.api = nova.api.opts:list_policies
-        nova.compute.api = nova.compute.api.opts:list_policies
+        nova = nova.policy:list_policies
 
 where list_policies is a method that returns a list of policy.RuleDefault
 objects.
 
 Run the oslopolicy-sample-generator script with some configuration options::
 
-    oslopolicy-sample-generator --namespace nova.api --namespace 
nova.compute.api --output-file policy-sample.yaml
+    oslopolicy-sample-generator --namespace nova --output-file 
policy-sample.yaml
 
 or::
 
@@ -108,10 +107,9 @@
 
     [DEFAULT]
     output_file = policy-sample.yaml
-    namespace = nova.api
-    namespace = nova.compute.api
+    namespace = nova
 
-If output_file is ommitted the sample file will be sent to stdout.
+If output_file is omitted the sample file will be sent to stdout.
 
 Merged file generation
 ----------------------
@@ -145,7 +143,7 @@
     output_file = policy-merged.yaml
     namespace = nova
 
-If output_file is ommitted the file will be sent to stdout.
+If output_file is omitted the file will be sent to stdout.
 
 List of redundant configuration
 -------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/oslo.policy.egg-info/PKG-INFO 
new/oslo.policy-1.18.0/oslo.policy.egg-info/PKG-INFO
--- old/oslo.policy-1.14.0/oslo.policy.egg-info/PKG-INFO        2016-08-10 
14:17:48.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo.policy.egg-info/PKG-INFO        2017-01-18 
15:11:06.000000000 +0100
@@ -1,12 +1,21 @@
 Metadata-Version: 1.1
 Name: oslo.policy
-Version: 1.14.0
+Version: 1.18.0
 Summary: Oslo Policy library
-Home-page: http://launchpad.net/oslo.policy
+Home-page: http://docs.openstack.org/developer/oslo.policy/
 Author: OpenStack
 Author-email: [email protected]
 License: UNKNOWN
-Description: =============
+Description: ========================
+        Team and repository tags
+        ========================
+        
+        .. image:: http://governance.openstack.org/badges/oslo.policy.svg
+            :target: http://governance.openstack.org/reference/tags/index.html
+        
+        .. Change things from this point on
+        
+        =============
          oslo.policy
         =============
         
@@ -37,5 +46,4 @@
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.4
 Classifier: Programming Language :: Python :: 3.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/oslo.policy.egg-info/SOURCES.txt 
new/oslo.policy-1.18.0/oslo.policy.egg-info/SOURCES.txt
--- old/oslo.policy-1.14.0/oslo.policy.egg-info/SOURCES.txt     2016-08-10 
14:17:49.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo.policy.egg-info/SOURCES.txt     2017-01-18 
15:11:06.000000000 +0100
@@ -20,6 +20,7 @@
 doc/source/index.rst
 doc/source/installation.rst
 doc/source/opts.rst
+doc/source/sphinxpolicygen.rst
 doc/source/usage.rst
 oslo.policy.egg-info/PKG-INFO
 oslo.policy.egg-info/SOURCES.txt
@@ -39,6 +40,7 @@
 oslo_policy/opts.py
 oslo_policy/policy.py
 oslo_policy/shell.py
+oslo_policy/sphinxpolicygen.py
 oslo_policy/version.py
 oslo_policy/locale/ar/LC_MESSAGES/oslo_policy-log-error.po
 oslo_policy/locale/cs/LC_MESSAGES/oslo_policy-log-error.po
@@ -77,13 +79,18 @@
 oslo_policy/tests/test_opts.py
 oslo_policy/tests/test_parser.py
 oslo_policy/tests/test_policy.py
+oslo_policy/tests/test_sphinxpolicygen.py
 oslo_policy/tests/token_fixture.py
+releasenotes/notes/add-sphinxpolicygen-39e2f8fa24930b0c.yaml
 releasenotes/notes/add_reno-3b4ae0789e9c45b4.yaml
 releasenotes/source/conf.py
 releasenotes/source/index.rst
+releasenotes/source/newton.rst
 releasenotes/source/unreleased.rst
 releasenotes/source/_static/.placeholder
 releasenotes/source/_templates/.placeholder
 releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po
+releasenotes/source/locale/fr/LC_MESSAGES/releasenotes.po
 sample_data/auth_v3_token_admin.json
-sample_data/auth_v3_token_member.json
\ No newline at end of file
+sample_data/auth_v3_token_member.json
+tools/tox_install.sh
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/oslo.policy.egg-info/pbr.json 
new/oslo.policy-1.18.0/oslo.policy.egg-info/pbr.json
--- old/oslo.policy-1.14.0/oslo.policy.egg-info/pbr.json        2016-08-10 
14:17:48.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo.policy.egg-info/pbr.json        2017-01-18 
15:11:06.000000000 +0100
@@ -1 +1 @@
-{"is_release": true, "git_version": "804be59"}
\ No newline at end of file
+{"is_release": true, "git_version": "b0621b4"}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/oslo.policy.egg-info/requires.txt 
new/oslo.policy-1.18.0/oslo.policy.egg-info/requires.txt
--- old/oslo.policy-1.14.0/oslo.policy.egg-info/requires.txt    2016-08-10 
14:17:48.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo.policy.egg-info/requires.txt    2017-01-18 
15:11:06.000000000 +0100
@@ -1,7 +1,7 @@
-requests>=2.10.0
-oslo.config>=3.14.0
+requests!=2.12.2,>=2.10.0
+oslo.config!=3.18.0,>=3.14.0
 oslo.i18n>=2.1.0
 oslo.serialization>=1.10.0
-oslo.utils>=3.16.0
-PyYAML>=3.1.0
+PyYAML>=3.10.0
 six>=1.9.0
+stevedore>=1.17.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/oslo_policy/_cache_handler.py 
new/oslo.policy-1.18.0/oslo_policy/_cache_handler.py
--- old/oslo.policy-1.14.0/oslo_policy/_cache_handler.py        2016-08-10 
14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo_policy/_cache_handler.py        2017-01-18 
15:09:32.000000000 +0100
@@ -22,6 +22,8 @@
 def read_cached_file(cache, filename, force_reload=False):
     """Read from a file if it has been modified.
 
+    :param cache: dictionary to hold opaque cache.
+    :param filename: the file path to read.
     :param force_reload: Whether to reload the file.
     :returns: A tuple with a boolean specifying if the data is fresh
               or not.
@@ -46,6 +48,7 @@
 def delete_cached_file(cache, filename):
     """Delete cached file if present.
 
+    :param cache: dictionary to hold opaque cache.
     :param filename: filename to delete
     """
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.policy-1.14.0/oslo_policy/locale/cs/LC_MESSAGES/oslo_policy.po 
new/oslo.policy-1.18.0/oslo_policy/locale/cs/LC_MESSAGES/oslo_policy.po
--- old/oslo.policy-1.14.0/oslo_policy/locale/cs/LC_MESSAGES/oslo_policy.po     
2016-08-10 14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo_policy/locale/cs/LC_MESSAGES/oslo_policy.po     
2017-01-18 15:09:32.000000000 +0100
@@ -1,9 +1,9 @@
 # OpenStack Infra <[email protected]>, 2015. #zanata
 msgid ""
 msgstr ""
-"Project-Id-Version: oslo.policy 1.5.1.dev7\n"
+"Project-Id-Version: oslo.policy 1.16.1.dev1\n"
 "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n";
-"POT-Creation-Date: 2016-04-24 22:21+0000\n"
+"POT-Creation-Date: 2016-10-23 20:40+0000\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -33,6 +33,3 @@
 msgid "Rules must be an instance of dict or Rules, got %s instead"
 msgstr ""
 "Pravidla musí být instancí slovníku nebo Pravidel, místo toho předáno %s"
-
-msgid "The JSON file that defines policies."
-msgstr "Soubor JSON určující zásady."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.policy-1.14.0/oslo_policy/locale/de/LC_MESSAGES/oslo_policy.po 
new/oslo.policy-1.18.0/oslo_policy/locale/de/LC_MESSAGES/oslo_policy.po
--- old/oslo.policy-1.14.0/oslo_policy/locale/de/LC_MESSAGES/oslo_policy.po     
2016-08-10 14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo_policy/locale/de/LC_MESSAGES/oslo_policy.po     
2017-01-18 15:09:32.000000000 +0100
@@ -2,9 +2,9 @@
 # Tom Cocozzello <[email protected]>, 2015. #zanata
 msgid ""
 msgstr ""
-"Project-Id-Version: oslo.policy 1.5.1.dev7\n"
+"Project-Id-Version: oslo.policy 1.16.1.dev1\n"
 "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n";
-"POT-Creation-Date: 2016-04-24 22:21+0000\n"
+"POT-Creation-Date: 2016-10-23 20:40+0000\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -37,6 +37,3 @@
 msgstr ""
 "Die Regeln müssen eine Instanz eines Verzeichnisses oder von Regeln sein, "
 "anstatt dessen wurde %s zurückgemeldet."
-
-msgid "The JSON file that defines policies."
-msgstr "Die JSON Datei, welche die Richtlinien definiert."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.policy-1.14.0/oslo_policy/locale/en_GB/LC_MESSAGES/oslo_policy.po 
new/oslo.policy-1.18.0/oslo_policy/locale/en_GB/LC_MESSAGES/oslo_policy.po
--- old/oslo.policy-1.14.0/oslo_policy/locale/en_GB/LC_MESSAGES/oslo_policy.po  
2016-08-10 14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo_policy/locale/en_GB/LC_MESSAGES/oslo_policy.po  
2017-01-18 15:09:32.000000000 +0100
@@ -2,9 +2,9 @@
 # Andi Chandler <[email protected]>, 2016. #zanata
 msgid ""
 msgstr ""
-"Project-Id-Version: oslo.policy 1.8.1.dev10\n"
+"Project-Id-Version: oslo.policy 1.16.1.dev1\n"
 "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n";
-"POT-Creation-Date: 2016-06-04 04:38+0000\n"
+"POT-Creation-Date: 2016-10-23 20:40+0000\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -44,6 +44,3 @@
 #, python-format
 msgid "Rules must be an instance of dict or Rules, got %s instead"
 msgstr "Rules must be an instance of dict or Rules, got %s instead"
-
-msgid "The JSON file that defines policies."
-msgstr "The JSON file that defines policies."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.policy-1.14.0/oslo_policy/locale/es/LC_MESSAGES/oslo_policy.po 
new/oslo.policy-1.18.0/oslo_policy/locale/es/LC_MESSAGES/oslo_policy.po
--- old/oslo.policy-1.14.0/oslo_policy/locale/es/LC_MESSAGES/oslo_policy.po     
2016-08-10 14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo_policy/locale/es/LC_MESSAGES/oslo_policy.po     
2017-01-18 15:09:32.000000000 +0100
@@ -1,15 +1,14 @@
 # OpenStack Infra <[email protected]>, 2015. #zanata
-# Alex Eng <[email protected]>, 2016. #zanata
 msgid ""
 msgstr ""
-"Project-Id-Version: oslo.policy 1.8.1.dev10\n"
+"Project-Id-Version: oslo.policy 1.16.1.dev1\n"
 "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n";
-"POT-Creation-Date: 2016-06-04 04:38+0000\n"
+"POT-Creation-Date: 2016-10-23 20:40+0000\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2016-06-03 05:56+0000\n"
-"Last-Translator: Alex Eng <[email protected]>\n"
+"PO-Revision-Date: \n"
+"Last-Translator: \n"
 "Language-Team: Spanish\n"
 "Language: es\n"
 "X-Generator: Zanata 3.7.3\n"
@@ -36,6 +35,3 @@
 msgstr ""
 "Reglas deben ser una instancia del diccionario o Reglas, obtenido %s en "
 "lugar de"
-
-msgid "The JSON file that defines policies."
-msgstr "El archivo JSON que define políticas."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.policy-1.14.0/oslo_policy/locale/fr/LC_MESSAGES/oslo_policy.po 
new/oslo.policy-1.18.0/oslo_policy/locale/fr/LC_MESSAGES/oslo_policy.po
--- old/oslo.policy-1.14.0/oslo_policy/locale/fr/LC_MESSAGES/oslo_policy.po     
2016-08-10 14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo_policy/locale/fr/LC_MESSAGES/oslo_policy.po     
2017-01-18 15:09:32.000000000 +0100
@@ -2,9 +2,9 @@
 # Tom Cocozzello <[email protected]>, 2015. #zanata
 msgid ""
 msgstr ""
-"Project-Id-Version: oslo.policy 1.5.1.dev7\n"
+"Project-Id-Version: oslo.policy 1.16.1.dev1\n"
 "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n";
-"POT-Creation-Date: 2016-04-24 22:21+0000\n"
+"POT-Creation-Date: 2016-10-23 20:40+0000\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -37,6 +37,3 @@
 msgstr ""
 "Les Règles doivent être une instance d'un dict ou une Règle, pris %s à la "
 "place"
-
-msgid "The JSON file that defines policies."
-msgstr "Le fichier JSON qui définit les stratégies."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.policy-1.14.0/oslo_policy/locale/it/LC_MESSAGES/oslo_policy.po 
new/oslo.policy-1.18.0/oslo_policy/locale/it/LC_MESSAGES/oslo_policy.po
--- old/oslo.policy-1.14.0/oslo_policy/locale/it/LC_MESSAGES/oslo_policy.po     
2016-08-10 14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo_policy/locale/it/LC_MESSAGES/oslo_policy.po     
2017-01-18 15:09:32.000000000 +0100
@@ -1,9 +1,9 @@
 # Tom Cocozzello <[email protected]>, 2015. #zanata
 msgid ""
 msgstr ""
-"Project-Id-Version: oslo.policy 1.5.1.dev7\n"
+"Project-Id-Version: oslo.policy 1.16.1.dev1\n"
 "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n";
-"POT-Creation-Date: 2016-04-24 22:21+0000\n"
+"POT-Creation-Date: 2016-10-23 20:40+0000\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -35,6 +35,3 @@
 msgid "Rules must be an instance of dict or Rules, got %s instead"
 msgstr ""
 "le regole devono essere un'istanza di dict o Rules, si è ottenuto invece %s"
-
-msgid "The JSON file that defines policies."
-msgstr "Il file JSON che definisce le politiche"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.policy-1.14.0/oslo_policy/locale/ja/LC_MESSAGES/oslo_policy.po 
new/oslo.policy-1.18.0/oslo_policy/locale/ja/LC_MESSAGES/oslo_policy.po
--- old/oslo.policy-1.14.0/oslo_policy/locale/ja/LC_MESSAGES/oslo_policy.po     
2016-08-10 14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo_policy/locale/ja/LC_MESSAGES/oslo_policy.po     
2017-01-18 15:09:32.000000000 +0100
@@ -2,9 +2,9 @@
 # KATO Tomoyuki <[email protected]>, 2016. #zanata
 msgid ""
 msgstr ""
-"Project-Id-Version: oslo.policy 1.9.1.dev3\n"
+"Project-Id-Version: oslo.policy 1.16.1.dev1\n"
 "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n";
-"POT-Creation-Date: 2016-06-11 00:26+0000\n"
+"POT-Creation-Date: 2016-10-23 20:40+0000\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -43,6 +43,3 @@
 msgstr ""
 "ルールは辞書型または Rules のインスタンスでなければいけませんが、%s が渡され"
 "ました。"
-
-msgid "The JSON file that defines policies."
-msgstr "ポリシーを定義した JSON ファイル。"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.policy-1.14.0/oslo_policy/locale/ko_KR/LC_MESSAGES/oslo_policy.po 
new/oslo.policy-1.18.0/oslo_policy/locale/ko_KR/LC_MESSAGES/oslo_policy.po
--- old/oslo.policy-1.14.0/oslo_policy/locale/ko_KR/LC_MESSAGES/oslo_policy.po  
2016-08-10 14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo_policy/locale/ko_KR/LC_MESSAGES/oslo_policy.po  
2017-01-18 15:09:32.000000000 +0100
@@ -2,9 +2,9 @@
 # OpenStack Infra <[email protected]>, 2015. #zanata
 msgid ""
 msgstr ""
-"Project-Id-Version: oslo.policy 1.5.1.dev7\n"
+"Project-Id-Version: oslo.policy 1.16.1.dev1\n"
 "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n";
-"POT-Creation-Date: 2016-04-24 22:21+0000\n"
+"POT-Creation-Date: 2016-10-23 20:40+0000\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -33,6 +33,3 @@
 msgid "Rules must be an instance of dict or Rules, got %s instead"
 msgstr ""
 "규칙은 사전의 인스턴스이거나 규칙 그 자체여야 하지만 %s을(를) 가져왔습니다"
-
-msgid "The JSON file that defines policies."
-msgstr "JSON 파일로 정책을 정의합니다."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.policy-1.14.0/oslo_policy/locale/pt_BR/LC_MESSAGES/oslo_policy.po 
new/oslo.policy-1.18.0/oslo_policy/locale/pt_BR/LC_MESSAGES/oslo_policy.po
--- old/oslo.policy-1.14.0/oslo_policy/locale/pt_BR/LC_MESSAGES/oslo_policy.po  
2016-08-10 14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo_policy/locale/pt_BR/LC_MESSAGES/oslo_policy.po  
2017-01-18 15:09:32.000000000 +0100
@@ -2,9 +2,9 @@
 # OpenStack Infra <[email protected]>, 2015. #zanata
 msgid ""
 msgstr ""
-"Project-Id-Version: oslo.policy 1.5.1.dev7\n"
+"Project-Id-Version: oslo.policy 1.16.1.dev1\n"
 "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n";
-"POT-Creation-Date: 2016-04-24 22:21+0000\n"
+"POT-Creation-Date: 2016-10-23 20:40+0000\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -34,6 +34,3 @@
 msgid "Rules must be an instance of dict or Rules, got %s instead"
 msgstr ""
 "Regras devem ser uma instância de dict ou Rules, recebeu %s em seu lugar"
-
-msgid "The JSON file that defines policies."
-msgstr "O arquivo JSON que define as políticas."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.policy-1.14.0/oslo_policy/locale/ru/LC_MESSAGES/oslo_policy.po 
new/oslo.policy-1.18.0/oslo_policy/locale/ru/LC_MESSAGES/oslo_policy.po
--- old/oslo.policy-1.14.0/oslo_policy/locale/ru/LC_MESSAGES/oslo_policy.po     
2016-08-10 14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo_policy/locale/ru/LC_MESSAGES/oslo_policy.po     
2017-01-18 15:09:32.000000000 +0100
@@ -2,9 +2,9 @@
 # OpenStack Infra <[email protected]>, 2015. #zanata
 msgid ""
 msgstr ""
-"Project-Id-Version: oslo.policy 1.5.1.dev7\n"
+"Project-Id-Version: oslo.policy 1.16.1.dev1\n"
 "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n";
-"POT-Creation-Date: 2016-04-24 22:21+0000\n"
+"POT-Creation-Date: 2016-10-23 20:40+0000\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -36,6 +36,3 @@
 #, python-format
 msgid "Rules must be an instance of dict or Rules, got %s instead"
 msgstr "Rules должно быть экземпляром dict или Rules, получено %s"
-
-msgid "The JSON file that defines policies."
-msgstr "JSON файл определяющий политики."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.policy-1.14.0/oslo_policy/locale/tr_TR/LC_MESSAGES/oslo_policy.po 
new/oslo.policy-1.18.0/oslo_policy/locale/tr_TR/LC_MESSAGES/oslo_policy.po
--- old/oslo.policy-1.14.0/oslo_policy/locale/tr_TR/LC_MESSAGES/oslo_policy.po  
2016-08-10 14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo_policy/locale/tr_TR/LC_MESSAGES/oslo_policy.po  
2017-01-18 15:09:32.000000000 +0100
@@ -1,9 +1,9 @@
 # OpenStack Infra <[email protected]>, 2015. #zanata
 msgid ""
 msgstr ""
-"Project-Id-Version: oslo.policy 1.5.1.dev7\n"
+"Project-Id-Version: oslo.policy 1.16.1.dev1\n"
 "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n";
-"POT-Creation-Date: 2016-04-24 22:21+0000\n"
+"POT-Creation-Date: 2016-10-23 20:40+0000\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -31,6 +31,3 @@
 #, python-format
 msgid "Rules must be an instance of dict or Rules, got %s instead"
 msgstr "Kurallar bir dict ya da Rules örneği olmalıdır, ama %s alındı"
-
-msgid "The JSON file that defines policies."
-msgstr "İlkeleri tanımlayan JSON dosyası."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.policy-1.14.0/oslo_policy/locale/zh_CN/LC_MESSAGES/oslo_policy.po 
new/oslo.policy-1.18.0/oslo_policy/locale/zh_CN/LC_MESSAGES/oslo_policy.po
--- old/oslo.policy-1.14.0/oslo_policy/locale/zh_CN/LC_MESSAGES/oslo_policy.po  
2016-08-10 14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo_policy/locale/zh_CN/LC_MESSAGES/oslo_policy.po  
2017-01-18 15:09:32.000000000 +0100
@@ -2,9 +2,9 @@
 # liujunpeng <[email protected]>, 2015. #zanata
 msgid ""
 msgstr ""
-"Project-Id-Version: oslo.policy 1.5.1.dev7\n"
+"Project-Id-Version: oslo.policy 1.16.1.dev1\n"
 "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n";
-"POT-Creation-Date: 2016-04-24 22:21+0000\n"
+"POT-Creation-Date: 2016-10-23 20:40+0000\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -31,6 +31,3 @@
 #, python-format
 msgid "Rules must be an instance of dict or Rules, got %s instead"
 msgstr "规则必须是字典或者规则的实例化对像,获取 %s 取代"
-
-msgid "The JSON file that defines policies."
-msgstr "定义策略的JSON文件。"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.policy-1.14.0/oslo_policy/locale/zh_TW/LC_MESSAGES/oslo_policy.po 
new/oslo.policy-1.18.0/oslo_policy/locale/zh_TW/LC_MESSAGES/oslo_policy.po
--- old/oslo.policy-1.14.0/oslo_policy/locale/zh_TW/LC_MESSAGES/oslo_policy.po  
2016-08-10 14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo_policy/locale/zh_TW/LC_MESSAGES/oslo_policy.po  
2017-01-18 15:09:32.000000000 +0100
@@ -2,9 +2,9 @@
 # OpenStack Infra <[email protected]>, 2015. #zanata
 msgid ""
 msgstr ""
-"Project-Id-Version: oslo.policy 1.5.1.dev7\n"
+"Project-Id-Version: oslo.policy 1.16.1.dev1\n"
 "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n";
-"POT-Creation-Date: 2016-04-24 22:21+0000\n"
+"POT-Creation-Date: 2016-10-23 20:40+0000\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -31,6 +31,3 @@
 #, python-format
 msgid "Rules must be an instance of dict or Rules, got %s instead"
 msgstr "規則必須是已規範的實例或是規則內的實例,已使用 %s 來代替"
-
-msgid "The JSON file that defines policies."
-msgstr "定義了政策的 JSON 檔案。"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/oslo_policy/opts.py 
new/oslo.policy-1.18.0/oslo_policy/opts.py
--- old/oslo.policy-1.14.0/oslo_policy/opts.py  2016-08-10 14:15:46.000000000 
+0200
+++ new/oslo.policy-1.18.0/oslo_policy/opts.py  2017-01-18 15:09:32.000000000 
+0100
@@ -27,7 +27,7 @@
 _options = [
     cfg.StrOpt('policy_file',
                default='policy.json',
-               help=_('The JSON file that defines policies.'),
+               help=_('The file that defines policies.'),
                deprecated_group='DEFAULT'),
     cfg.StrOpt('policy_default_rule',
                default='default',
@@ -84,7 +84,7 @@
     :param conf: Configuration object, managed by the caller.
     :type conf: oslo.config.cfg.ConfigOpts
 
-    :param policy_file: The base filename for the JSON file that
+    :param policy_file: The base filename for the file that
                         defines policies.
     :type policy_file: unicode
     """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/oslo_policy/policy.py 
new/oslo.policy-1.18.0/oslo_policy/policy.py
--- old/oslo.policy-1.14.0/oslo_policy/policy.py        2016-08-10 
14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo_policy/policy.py        2017-01-18 
15:09:32.000000000 +0100
@@ -232,6 +232,7 @@
 from oslo_policy import _cache_handler
 from oslo_policy import _checks
 from oslo_policy._i18n import _
+from oslo_policy._i18n import _LW
 from oslo_policy import _parser
 from oslo_policy import opts
 
@@ -274,7 +275,6 @@
 A policy check that inverts the result of another policy check.
 
 :param rule: The rule to negate.
-:type rule: oslo_policy.policy.Check
 
 """
 
@@ -296,7 +296,8 @@
     """Default exception raised for policy enforcement failure."""
 
     def __init__(self, rule, target, creds):
-        msg = (_('%(rule)s on %(target)s by %(creds)s disallowed by policy') %
+        msg = (_('%(target)s is disallowed by policy rule %(rule)s '
+                 'with %(creds)s ') %
                {'rule': rule, 'target': target, 'creds': creds})
         super(PolicyNotAuthorized, self).__init__(msg)
 
@@ -324,11 +325,19 @@
                                      'policy_name2': 'policy2,...}
     """
     try:
-        parsed = yaml.safe_load(data)
-    except yaml.YAMLError as e:
-        # For backwards-compatibility, convert yaml error to ValueError,
-        # which is what JSON loader raised.
-        raise ValueError(six.text_type(e))
+        # NOTE(snikitin): jsonutils.loads() is much faster than
+        # yaml.safe_load(). However jsonutils.loads() parses only JSON while
+        # yaml.safe_load() parses JSON and YAML. So here we try to parse data
+        # by jsonutils.loads() first. In case of failure yaml.safe_load()
+        # will be used instead.
+        parsed = jsonutils.loads(data)
+    except ValueError:
+        try:
+            parsed = yaml.safe_load(data)
+        except yaml.YAMLError as e:
+            # For backwards-compatibility, convert yaml error to ValueError,
+            # which is what JSON loader raised.
+            raise ValueError(six.text_type(e))
     return parsed
 
 
@@ -529,6 +538,79 @@
                 if default.name not in self.rules:
                     self.rules[default.name] = default.check
 
+            # Detect and log obvious incorrect rule definitions
+            self.check_rules()
+
+    def check_rules(self):
+        """Look for rule definitions that are obviously incorrect."""
+        undefined_checks = []
+        cyclic_checks = []
+        violation = False
+        for name, check in self.rules.items():
+            if self._undefined_check(check):
+                undefined_checks.append(name)
+                violation = True
+            if self._cycle_check(check):
+                cyclic_checks.append(name)
+                violation = True
+
+        if undefined_checks:
+            LOG.warning(_LW('Policies %(names)s reference a rule that is not '
+                        'defined.'), {'names': undefined_checks})
+        if cyclic_checks:
+            LOG.warning(_LW('Policies %(names)s are part of a cyclical '
+                        'reference.'), {'names': cyclic_checks})
+
+        return not violation
+
+    def _undefined_check(self, check):
+        '''Check if a RuleCheck references an undefined rule.'''
+        if isinstance(check, RuleCheck):
+            if check.match not in self.rules:
+                # Undefined rule
+                return True
+
+        # An AndCheck or OrCheck is composed of multiple rules so check
+        # each of those.
+        rules = getattr(check, 'rules', None)
+        if rules:
+            for rule in rules:
+                if self._undefined_check(rule):
+                    return True
+        return False
+
+    def _cycle_check(self, check, seen=None):
+        '''Check if RuleChecks cycle.
+
+        Looking for something like:
+        "foo": "rule:bar"
+        "bar": "rule:foo"
+        '''
+        if seen is None:
+            seen = set()
+
+        if isinstance(check, RuleCheck):
+            if check.match in seen:
+                # Cycle found
+                return True
+            seen.add(check.match)
+            if check.match in self.rules:
+                # There can only be a cycle if the referenced rule is defined.
+                if self._cycle_check(self.rules[check.match], seen):
+                    return True
+
+        # An AndCheck or OrCheck is composed of multiple rules so check
+        # each of those.
+        rules = getattr(check, 'rules', None)
+        if rules:
+            for rule in rules:
+                # As there being an OrCheck or AndCheck, a copy of the father's
+                # seen should be called here. In order that the checks in
+                # different branchs are seperated.
+                if self._cycle_check(rule, seen.copy()):
+                    return True
+        return False
+
     @staticmethod
     def _is_directory_updated(cache, path):
         # Get the current modified time and compare it to what is in
@@ -584,7 +666,7 @@
             LOG.debug('Reloaded policy file: %(path)s', {'path': path})
 
     def _get_policy_path(self, path):
-        """Locate the policy JSON data file/path.
+        """Locate the policy YAML/JSON data file/path.
 
         :param path: It's value can be a full path or related path. When
                      full path specified, this function just returns the full
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/oslo_policy/shell.py 
new/oslo.policy-1.18.0/oslo_policy/shell.py
--- old/oslo.policy-1.14.0/oslo_policy/shell.py 2016-08-10 14:15:46.000000000 
+0200
+++ new/oslo.policy-1.18.0/oslo_policy/shell.py 2017-01-18 15:09:32.000000000 
+0100
@@ -56,14 +56,10 @@
         return
     for key, rule in rules.items():
         if ":" in key:
-            if apply_rule:
-                if (apply_rule == key):
-                    _try_rule(key, rule, target, access_data, o)
-            else:
-                _try_rule(key, rule, target, access_data, o)
+            _try_rule(key, rule, target, access_data, o)
 
 
-def main(argv=sys.argv[1:]):
+def main():
     parser = argparse.ArgumentParser(sys.argv[0])
     parser.add_argument(
         '--policy',
@@ -86,15 +82,11 @@
 
     args = parser.parse_args()
     try:
-        apply_rule = args.rule
-    except Exception:
-        apply_rule = None
-    try:
         is_admin = args.is_admin.lower() == "true"
     except Exception:
         is_admin = False
-    tool(args.policy, args.access, apply_rule, is_admin)
+    tool(args.policy, args.access, args.rule, is_admin)
 
 
 if __name__ == "__main__":
-    sys.exit(main(sys.argv[1:]))
+    sys.exit(main())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/oslo_policy/sphinxpolicygen.py 
new/oslo.policy-1.18.0/oslo_policy/sphinxpolicygen.py
--- old/oslo.policy-1.14.0/oslo_policy/sphinxpolicygen.py       1970-01-01 
01:00:00.000000000 +0100
+++ new/oslo.policy-1.18.0/oslo_policy/sphinxpolicygen.py       2017-01-18 
15:09:32.000000000 +0100
@@ -0,0 +1,73 @@
+# Copyright 2015 Hewlett-Packard Development Company, L.P.
+# Copyright 2016 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+"""Generate a sample policy file."""
+
+import os
+
+from oslo_policy import generator
+
+
+def generate_sample(app):
+    """Generate a sample policy file."""
+
+    if not app.config.policy_generator_config_file:
+        app.warn("No policy_generator_config_file is specified, "
+                 "skipping sample policy generation")
+        return
+
+    _generate_sample(app,
+                     app.config.policy_generator_config_file,
+                     app.config.sample_policy_basename)
+
+
+def _generate_sample(app, policy_file, base_name):
+
+    def info(msg):
+        app.info('[%s] %s' % (__name__, msg))
+
+    # If we are given a file that isn't an absolute path, look for it
+    # in the source directory if it doesn't exist.
+    candidates = [
+        policy_file,
+        os.path.join(app.srcdir, policy_file,),
+    ]
+    for c in candidates:
+        if os.path.isfile(c):
+            info('reading config generator instructions from %s' % c)
+            config_path = c
+            break
+    else:
+        raise ValueError(
+            "Could not find policy_generator_config_file %r" %
+            app.config.policy_generator_config_file)
+
+    if base_name:
+        out_file = os.path.join(app.srcdir, base_name) + '.policy.yaml.sample'
+        if not os.path.isdir(os.path.dirname(os.path.abspath(out_file))):
+            os.mkdir(os.path.dirname(os.path.abspath(out_file)))
+    else:
+        file_name = 'sample.policy.yaml'
+        out_file = os.path.join(app.srcdir, file_name)
+
+    info('writing sample policy to %s' % out_file)
+    generator.generate_sample(args=['--config-file', config_path,
+                                    '--output-file', out_file])
+
+
+def setup(app):
+    app.add_config_value('policy_generator_config_file', None, 'env')
+    app.add_config_value('sample_policy_basename', None, 'env')
+    app.connect('builder-inited', generate_sample)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/oslo_policy/tests/test_parser.py 
new/oslo.policy-1.18.0/oslo_policy/tests/test_parser.py
--- old/oslo.policy-1.14.0/oslo_policy/tests/test_parser.py     2016-08-10 
14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo_policy/tests/test_parser.py     2017-01-18 
15:09:32.000000000 +0100
@@ -26,23 +26,23 @@
     def test_false(self):
         result = _parser._parse_check('!')
 
-        self.assertTrue(isinstance(result, _checks.FalseCheck))
+        self.assertIsInstance(result, _checks.FalseCheck)
 
     def test_true(self):
         result = _parser._parse_check('@')
 
-        self.assertTrue(isinstance(result, _checks.TrueCheck))
+        self.assertIsInstance(result, _checks.TrueCheck)
 
     def test_bad_rule(self):
         result = _parser._parse_check('foobar')
 
-        self.assertTrue(isinstance(result, _checks.FalseCheck))
+        self.assertIsInstance(result, _checks.FalseCheck)
 
     @mock.patch.object(_checks, 'registered_checks', {})
     def test_no_handler(self):
         result = _parser._parse_check('no:handler')
 
-        self.assertTrue(isinstance(result, _checks.FalseCheck))
+        self.assertIsInstance(result, _checks.FalseCheck)
 
     @mock.patch.object(_checks, 'registered_checks', {
         'spam': mock.Mock(return_value='spam_check'),
@@ -71,21 +71,21 @@
     def test_empty(self):
         result = _parser._parse_list_rule([])
 
-        self.assertTrue(isinstance(result, _checks.TrueCheck))
+        self.assertIsInstance(result, _checks.TrueCheck)
         self.assertEqual('@', str(result))
 
     @mock.patch.object(_parser, '_parse_check', base.FakeCheck)
     def test_oneele_zeroele(self):
         result = _parser._parse_list_rule([[]])
 
-        self.assertTrue(isinstance(result, _checks.FalseCheck))
+        self.assertIsInstance(result, _checks.FalseCheck)
         self.assertEqual('!', str(result))
 
     @mock.patch.object(_parser, '_parse_check', base.FakeCheck)
     def test_oneele_bare(self):
         result = _parser._parse_list_rule(['rule'])
 
-        self.assertTrue(isinstance(result, base.FakeCheck))
+        self.assertIsInstance(result, base.FakeCheck)
         self.assertEqual('rule', result.result)
         self.assertEqual('rule', str(result))
 
@@ -93,7 +93,7 @@
     def test_oneele_oneele(self):
         result = _parser._parse_list_rule([['rule']])
 
-        self.assertTrue(isinstance(result, base.FakeCheck))
+        self.assertIsInstance(result, base.FakeCheck)
         self.assertEqual('rule', result.result)
         self.assertEqual('rule', str(result))
 
@@ -101,10 +101,10 @@
     def test_oneele_multi(self):
         result = _parser._parse_list_rule([['rule1', 'rule2']])
 
-        self.assertTrue(isinstance(result, _checks.AndCheck))
+        self.assertIsInstance(result, _checks.AndCheck)
         self.assertEqual(2, len(result.rules))
         for i, value in enumerate(['rule1', 'rule2']):
-            self.assertTrue(isinstance(result.rules[i], base.FakeCheck))
+            self.assertIsInstance(result.rules[i], base.FakeCheck)
             self.assertEqual(value, result.rules[i].result)
         self.assertEqual('(rule1 and rule2)', str(result))
 
@@ -112,10 +112,10 @@
     def test_multi_oneele(self):
         result = _parser._parse_list_rule([['rule1'], ['rule2']])
 
-        self.assertTrue(isinstance(result, _checks.OrCheck))
+        self.assertIsInstance(result, _checks.OrCheck)
         self.assertEqual(2, len(result.rules))
         for i, value in enumerate(['rule1', 'rule2']):
-            self.assertTrue(isinstance(result.rules[i], base.FakeCheck))
+            self.assertIsInstance(result.rules[i], base.FakeCheck)
             self.assertEqual(value, result.rules[i].result)
         self.assertEqual('(rule1 or rule2)', str(result))
 
@@ -124,14 +124,14 @@
         result = _parser._parse_list_rule([['rule1', 'rule2'],
                                           ['rule3', 'rule4']])
 
-        self.assertTrue(isinstance(result, _checks.OrCheck))
+        self.assertIsInstance(result, _checks.OrCheck)
         self.assertEqual(2, len(result.rules))
         for i, values in enumerate([['rule1', 'rule2'], ['rule3', 'rule4']]):
-            self.assertTrue(isinstance(result.rules[i], _checks.AndCheck))
+            self.assertIsInstance(result.rules[i], _checks.AndCheck)
             self.assertEqual(2, len(result.rules[i].rules))
             for j, value in enumerate(values):
-                self.assertTrue(isinstance(result.rules[i].rules[j],
-                                           base.FakeCheck))
+                self.assertIsInstance(result.rules[i].rules[j],
+                                      base.FakeCheck)
                 self.assertEqual(value, result.rules[i].rules[j].result)
         self.assertEqual('((rule1 and rule2) or (rule3 and rule4))',
                          str(result))
@@ -360,7 +360,7 @@
     def test_empty(self):
         result = _parser._parse_text_rule('')
 
-        self.assertTrue(isinstance(result, _checks.TrueCheck))
+        self.assertIsInstance(result, _checks.TrueCheck)
 
     @mock.patch.object(_parser, '_parse_tokenize',
                        return_value=[('tok1', 'val1'), ('tok2', 'val2')])
@@ -378,7 +378,7 @@
     def test_fail(self, mock_parse_tokenize):
         result = _parser._parse_text_rule('test rule')
 
-        self.assertTrue(isinstance(result, _checks.FalseCheck))
+        self.assertIsInstance(result, _checks.FalseCheck)
         mock_parse_tokenize.assert_called_once_with('test rule')
 
     def test_A_or_B_or_C(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/oslo_policy/tests/test_policy.py 
new/oslo.policy-1.18.0/oslo_policy/tests/test_policy.py
--- old/oslo.policy-1.14.0/oslo_policy/tests/test_policy.py     2016-08-10 
14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/oslo_policy/tests/test_policy.py     2017-01-18 
15:09:32.000000000 +0100
@@ -772,7 +772,7 @@
 class RuleDefaultTestCase(base.PolicyBaseTestCase):
     def test_rule_is_parsed(self):
         opt = policy.RuleDefault(name='foo', check_str='rule:foo')
-        self.assertTrue(isinstance(opt.check, _checks.BaseCheck))
+        self.assertIsInstance(opt.check, _checks.BaseCheck)
         self.assertEqual('rule:foo', str(opt.check))
 
     def test_str(self):
@@ -832,3 +832,45 @@
         opt1 = policy.RuleDefault(name='foo', check_str='rule:foo')
         opt2 = RuleDefaultSub(name='bar', check_str='rule:foo')
         self.assertNotEqual(opt1, opt2)
+
+
+class EnforcerCheckRulesTest(base.PolicyBaseTestCase):
+    def setUp(self):
+        super(EnforcerCheckRulesTest, self).setUp()
+
+    def test_no_violations(self):
+        self.create_config_file('policy.json', POLICY_JSON_CONTENTS)
+        self.enforcer.load_rules(True)
+        self.assertTrue(self.enforcer.check_rules())
+
+    def test_undefined_rule(self):
+        rules = jsonutils.dumps({'foo': 'rule:bar'})
+        self.create_config_file('policy.json', rules)
+        self.enforcer.load_rules(True)
+
+        self.assertFalse(self.enforcer.check_rules())
+
+    def test_cyclical_rules(self):
+        rules = jsonutils.dumps({'foo': 'rule:bar', 'bar': 'rule:foo'})
+        self.create_config_file('policy.json', rules)
+        self.enforcer.load_rules(True)
+
+        self.assertFalse(self.enforcer.check_rules())
+
+    def test_complex_cyclical_rules_false(self):
+        rules = jsonutils.dumps({'foo': 'rule:bar',
+                                 'bar': 'rule:baz and role:admin',
+                                 'baz': 'rule:foo or role:user'})
+        self.create_config_file('policy.json', rules)
+        self.enforcer.load_rules(True)
+
+        self.assertFalse(self.enforcer.check_rules())
+
+    def test_complex_cyclical_rules_true(self):
+        rules = jsonutils.dumps({'foo': 'rule:bar or rule:baz',
+                                 'bar': 'role:admin',
+                                 'baz': 'rule:bar or role:user'})
+        self.create_config_file('policy.json', rules)
+        self.enforcer.load_rules(True)
+
+        self.assertTrue(self.enforcer.check_rules())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.policy-1.14.0/oslo_policy/tests/test_sphinxpolicygen.py 
new/oslo.policy-1.18.0/oslo_policy/tests/test_sphinxpolicygen.py
--- old/oslo.policy-1.14.0/oslo_policy/tests/test_sphinxpolicygen.py    
1970-01-01 01:00:00.000000000 +0100
+++ new/oslo.policy-1.18.0/oslo_policy/tests/test_sphinxpolicygen.py    
2017-01-18 15:09:32.000000000 +0100
@@ -0,0 +1,52 @@
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import mock
+from oslotest import base
+
+from oslo_policy import sphinxpolicygen
+
+
+class SingleSampleGenerationTest(base.BaseTestCase):
+
+    @mock.patch('os.path.isdir')
+    @mock.patch('os.path.isfile')
+    @mock.patch('oslo_policy.generator.generate_sample')
+    def test_sample_gen_with_single_config_file(self, sample, isfile, isdir):
+        isfile.side_effect = [False, True]
+        isdir.return_value = True
+
+        config = mock.Mock(policy_generator_config_file='nova.conf',
+                           sample_policy_basename='nova')
+        app = mock.Mock(srcdir='/opt/nova', config=config)
+        sphinxpolicygen.generate_sample(app)
+
+        sample.assert_called_once_with(args=[
+            '--config-file', '/opt/nova/nova.conf',
+            '--output-file', '/opt/nova/nova.policy.yaml.sample'])
+
+    @mock.patch('os.path.isdir')
+    @mock.patch('os.path.isfile')
+    @mock.patch('oslo_policy.generator.generate_sample')
+    def test_sample_gen_with_single_config_file_no_base(self, sample, isfile,
+                                                        isdir):
+        isfile.side_effect = [False, True]
+        isdir.return_value = True
+
+        config = mock.Mock(policy_generator_config_file='nova.conf',
+                           sample_policy_basename=None)
+        app = mock.Mock(srcdir='/opt/nova', config=config)
+        sphinxpolicygen.generate_sample(app)
+
+        sample.assert_called_once_with(args=[
+            '--config-file', '/opt/nova/nova.conf',
+            '--output-file', '/opt/nova/sample.policy.yaml'])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.policy-1.14.0/releasenotes/notes/add-sphinxpolicygen-39e2f8fa24930b0c.yaml
 
new/oslo.policy-1.18.0/releasenotes/notes/add-sphinxpolicygen-39e2f8fa24930b0c.yaml
--- 
old/oslo.policy-1.14.0/releasenotes/notes/add-sphinxpolicygen-39e2f8fa24930b0c.yaml
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/oslo.policy-1.18.0/releasenotes/notes/add-sphinxpolicygen-39e2f8fa24930b0c.yaml
 2017-01-18 15:09:32.000000000 +0100
@@ -0,0 +1,5 @@
+---
+features:
+  - |
+    Add ``sphinxpolicygen`` Sphinx plugin, which can be used to generate a
+    sample policy file for use in documentation.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/releasenotes/source/conf.py 
new/oslo.policy-1.18.0/releasenotes/source/conf.py
--- old/oslo.policy-1.14.0/releasenotes/source/conf.py  2016-08-10 
14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/releasenotes/source/conf.py  2017-01-18 
15:09:32.000000000 +0100
@@ -271,3 +271,6 @@
 
 # If true, do not generate a @detailmenu in the "Top" node's menu.
 # texinfo_no_detailmenu = False
+
+# -- Options for Internationalization output ------------------------------
+locale_dirs = ['locale/']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/releasenotes/source/index.rst 
new/oslo.policy-1.18.0/releasenotes/source/index.rst
--- old/oslo.policy-1.14.0/releasenotes/source/index.rst        2016-08-10 
14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/releasenotes/source/index.rst        2017-01-18 
15:09:32.000000000 +0100
@@ -1,8 +1,9 @@
-=============================
+===========================
  oslo.policy Release Notes
-=============================
+===========================
 
  .. toctree::
     :maxdepth: 1
 
     unreleased
+    newton
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.policy-1.14.0/releasenotes/source/locale/fr/LC_MESSAGES/releasenotes.po
 
new/oslo.policy-1.18.0/releasenotes/source/locale/fr/LC_MESSAGES/releasenotes.po
--- 
old/oslo.policy-1.14.0/releasenotes/source/locale/fr/LC_MESSAGES/releasenotes.po
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/oslo.policy-1.18.0/releasenotes/source/locale/fr/LC_MESSAGES/releasenotes.po
    2017-01-18 15:09:32.000000000 +0100
@@ -0,0 +1,39 @@
+# Gérald LONLAS <[email protected]>, 2016. #zanata
+msgid ""
+msgstr ""
+"Project-Id-Version: oslo.policy Release Notes 1.16.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-10-23 20:40+0000\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2016-10-22 06:02+0000\n"
+"Last-Translator: Gérald LONLAS <[email protected]>\n"
+"Language-Team: French\n"
+"Language: fr\n"
+"X-Generator: Zanata 3.7.3\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+
+msgid "1.15.0"
+msgstr "1.15.0"
+
+msgid "1.9.0"
+msgstr "1.9.0"
+
+msgid "New Features"
+msgstr "Nouvelles fonctionnalités"
+
+msgid "Newton Series Release Notes"
+msgstr "Note de release pour Newton"
+
+msgid "Other Notes"
+msgstr "Autres notes"
+
+msgid "Switch to reno for managing release notes."
+msgstr "Commence à utiliser reno pour la gestion des notes de release"
+
+msgid "Unreleased Release Notes"
+msgstr "Note de release pour les changements non déployées"
+
+msgid "oslo.policy Release Notes"
+msgstr "Note de release pour oslo.policy"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/releasenotes/source/newton.rst 
new/oslo.policy-1.18.0/releasenotes/source/newton.rst
--- old/oslo.policy-1.14.0/releasenotes/source/newton.rst       1970-01-01 
01:00:00.000000000 +0100
+++ new/oslo.policy-1.18.0/releasenotes/source/newton.rst       2017-01-18 
15:09:32.000000000 +0100
@@ -0,0 +1,6 @@
+=============================
+ Newton Series Release Notes
+=============================
+
+.. release-notes::
+   :branch: origin/stable/newton
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/requirements.txt 
new/oslo.policy-1.18.0/requirements.txt
--- old/oslo.policy-1.14.0/requirements.txt     2016-08-10 14:15:46.000000000 
+0200
+++ new/oslo.policy-1.18.0/requirements.txt     2017-01-18 15:09:32.000000000 
+0100
@@ -2,10 +2,10 @@
 # of appearance. Changing the order has an impact on the overall integration
 # process, which may cause wedges in the gate later.
 
-requests>=2.10.0 # Apache-2.0
-oslo.config>=3.14.0 # Apache-2.0
+requests!=2.12.2,>=2.10.0 # Apache-2.0
+oslo.config!=3.18.0,>=3.14.0 # Apache-2.0
 oslo.i18n>=2.1.0 # Apache-2.0
 oslo.serialization>=1.10.0 # Apache-2.0
-oslo.utils>=3.16.0 # Apache-2.0
-PyYAML>=3.1.0 # MIT
+PyYAML>=3.10.0 # MIT
 six>=1.9.0 # MIT
+stevedore>=1.17.1 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/setup.cfg 
new/oslo.policy-1.18.0/setup.cfg
--- old/oslo.policy-1.14.0/setup.cfg    2016-08-10 14:17:49.000000000 +0200
+++ new/oslo.policy-1.18.0/setup.cfg    2017-01-18 15:11:06.000000000 +0100
@@ -5,7 +5,7 @@
        README.rst
 author = OpenStack
 author-email = [email protected]
-home-page = http://launchpad.net/oslo.policy
+home-page = http://docs.openstack.org/developer/oslo.policy/
 classifier = 
        Environment :: OpenStack
        Intended Audience :: Information Technology
@@ -16,7 +16,6 @@
        Programming Language :: Python :: 2
        Programming Language :: Python :: 2.7
        Programming Language :: Python :: 3
-       Programming Language :: Python :: 3.4
        Programming Language :: Python :: 3.5
 
 [files]
@@ -64,5 +63,4 @@
 [egg_info]
 tag_build = 
 tag_date = 0
-tag_svn_revision = 0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/test-requirements.txt 
new/oslo.policy-1.18.0/test-requirements.txt
--- old/oslo.policy-1.14.0/test-requirements.txt        2016-08-10 
14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/test-requirements.txt        2017-01-18 
15:09:32.000000000 +0100
@@ -4,13 +4,13 @@
 
 hacking<0.11,>=0.10.0
 oslotest>=1.10.0 # Apache-2.0
-requests-mock>=1.0 # Apache-2.0
+requests-mock>=1.1 # Apache-2.0
 
 # computes code coverage percentages
-coverage>=3.6 # Apache-2.0
+coverage>=4.0 # Apache-2.0
 
 # These are needed for docs generation
-oslosphinx!=3.4.0,>=2.5.0 # Apache-2.0
-sphinx!=1.3b1,<1.3,>=1.2.1 # BSD
+oslosphinx>=4.7.0 # Apache-2.0
+sphinx!=1.3b1,<1.4,>=1.2.1 # BSD
 
-reno>=1.8.0 # Apache2
+reno>=1.8.0 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/tools/tox_install.sh 
new/oslo.policy-1.18.0/tools/tox_install.sh
--- old/oslo.policy-1.14.0/tools/tox_install.sh 1970-01-01 01:00:00.000000000 
+0100
+++ new/oslo.policy-1.18.0/tools/tox_install.sh 2017-01-18 15:09:32.000000000 
+0100
@@ -0,0 +1,30 @@
+#!/usr/bin/env bash
+
+# Client constraint file contains this client version pin that is in conflict
+# with installing the client from source. We should remove the version pin in
+# the constraints file before applying it for from-source installation.
+
+CONSTRAINTS_FILE="$1"
+shift 1
+
+set -e
+
+# NOTE(tonyb): Place this in the tox enviroment's log dir so it will get
+# published to logs.openstack.org for easy debugging.
+localfile="$VIRTUAL_ENV/log/upper-constraints.txt"
+
+if [[ "$CONSTRAINTS_FILE" != http* ]]; then
+    CONSTRAINTS_FILE="file://$CONSTRAINTS_FILE"
+fi
+# NOTE(tonyb): need to add curl to bindep.txt if the project supports bindep
+curl "$CONSTRAINTS_FILE" --insecure --progress-bar --output "$localfile"
+
+pip install -c"$localfile" openstack-requirements
+
+# This is the main purpose of the script: Allow local installation of
+# the current repo. It is listed in constraints file and thus any
+# install will be constrained and we need to unconstrain it.
+edit-constraints "$localfile" -- "$CLIENT_NAME"
+
+pip install -c"$localfile" -U "$@"
+exit $?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.policy-1.14.0/tox.ini 
new/oslo.policy-1.18.0/tox.ini
--- old/oslo.policy-1.14.0/tox.ini      2016-08-10 14:15:46.000000000 +0200
+++ new/oslo.policy-1.18.0/tox.ini      2017-01-18 15:09:32.000000000 +0100
@@ -1,8 +1,13 @@
 [tox]
-minversion = 1.6
-envlist = py35,py34,py27,pep8,docs
+minversion = 2.0
+envlist = py35,py27,pep8,docs
 
 [testenv]
+setenv =
+    VIRTUAL_ENV={envdir}
+    BRANCH_NAME=master
+    CLIENT_NAME=oslo.policy
+install_command = {toxinidir}/tools/tox_install.sh 
{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt}
 {opts} {packages}
 deps = -r{toxinidir}/test-requirements.txt
 commands = python setup.py testr --slowest --testr-args='{posargs}'
 


Reply via email to