Hello community,

here is the log from the commit of package python-castellan for 
openSUSE:Factory checked in at 2020-10-26 16:14:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-castellan (Old)
 and      /work/SRC/openSUSE:Factory/.python-castellan.new.3463 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-castellan"

Mon Oct 26 16:14:35 2020 rev:12 rq:841171 version:3.6.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-castellan/python-castellan.changes        
2020-06-05 20:11:00.017890802 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-castellan.new.3463/python-castellan.changes  
    2020-10-26 16:15:34.342896205 +0100
@@ -1,0 +2,27 @@
+Fri Oct  9 19:12:45 UTC 2020 - [email protected]
+
+- update to version 3.6.0
+  - Remove translation sections from setup.cfg
+  - Bump vault version
+  - Bump default tox env from py37 to py38
+  - add "verify_ssl_path" config for barbican key manager
+  - Fix hacking min version to 3.0.1
+  - Add to_dict and from_dict conversions to managed objects
+  - Update lower-constraints versions
+  - Add py38 package metadata
+  - drop mock from lower-constraints
+  - migrate testing to ubuntu focal
+  - Update hacking for Python3
+  - Add handler for Bad Request error during Vault authentication
+  - Replaces _get_api_version with config option
+  - Add Python3 victoria unit tests
+  - Switch to newer openstackdocstheme and reno versions
+  - Update master for stable/ussuri
+  - Use 'barbican_endpoint_type'config option to get endpoint from catalog
+  - zuul: use the new barbican simple-crypto job
+  - Some Cleanups
+  - Bump bandit version
+  - [goal] Migrate testing to ubuntu focal
+  - Use unittest.mock instead of third party mock
+
+-------------------------------------------------------------------

Old:
----
  castellan-3.0.1.tar.gz

New:
----
  castellan-3.6.0.tar.gz

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

Other differences:
------------------
++++++ python-castellan.spec ++++++
--- /var/tmp/diff_new_pack.d4crcu/_old  2020-10-26 16:15:34.906896724 +0100
+++ /var/tmp/diff_new_pack.d4crcu/_new  2020-10-26 16:15:34.910896728 +0100
@@ -17,16 +17,16 @@
 
 
 Name:           python-castellan
-Version:        3.0.1
+Version:        3.6.0
 Release:        0
 Summary:        Generic Key Manager interface for OpenStack
 License:        Apache-2.0
 Group:          Development/Languages/Python
 URL:            https://launchpad.net/castellan
-Source0:        
https://files.pythonhosted.org/packages/source/c/castellan/castellan-3.0.1.tar.gz
+Source0:        
https://files.pythonhosted.org/packages/source/c/castellan/castellan-3.6.0.tar.gz
 BuildRequires:  openstack-macros
 BuildRequires:  python3-barbicanclient >= 4.5.2
-BuildRequires:  python3-cryptography >= 2.1
+BuildRequires:  python3-cryptography >= 2.7
 BuildRequires:  python3-keystoneauth1 >= 3.4.0
 BuildRequires:  python3-oslo.config >= 6.4.0
 BuildRequires:  python3-oslo.log >= 3.36.0
@@ -44,9 +44,9 @@
 %package -n python3-castellan
 Summary:        Generic Key Manager interface for OpenStack
 Group:          Development/Languages/Python
-Requires:       python3-Babel >= 2.3.4
+Requires:       python3-Babel
 Requires:       python3-barbicanclient >= 4.5.2
-Requires:       python3-cryptography >= 2.1
+Requires:       python3-cryptography >= 2.7
 Requires:       python3-keystoneauth1 >= 3.4.0
 Requires:       python3-oslo.config >= 6.4.0
 Requires:       python3-oslo.context >= 2.19.2
@@ -73,7 +73,7 @@
 This package contains the documentation
 
 %prep
-%autosetup -p1 -n castellan-3.0.1
+%autosetup -p1 -n castellan-3.6.0
 %py_req_cleanup
 
 %build

++++++ _service ++++++
--- /var/tmp/diff_new_pack.d4crcu/_old  2020-10-26 16:15:34.950896764 +0100
+++ /var/tmp/diff_new_pack.d4crcu/_new  2020-10-26 16:15:34.950896764 +0100
@@ -1,8 +1,8 @@
 <services>
   <service mode="disabled" name="renderspec">
-    <param 
name="input-template">https://opendev.org/openstack/rpm-packaging/raw/branch/stable/ussuri/openstack/castellan/castellan.spec.j2</param>
+    <param 
name="input-template">https://opendev.org/openstack/rpm-packaging/raw/branch/stable/victoria/openstack/castellan/castellan.spec.j2</param>
     <param name="output-name">python-castellan.spec</param>
-    <param 
name="requirements">https://opendev.org/openstack/castellan/raw/branch/stable/ussuri/requirements.txt</param>
+    <param 
name="requirements">https://opendev.org/openstack/castellan/raw/branch/stable/victoria/requirements.txt</param>
     <param name="changelog-email">[email protected]</param>
     <param name="changelog-provider">gh,openstack,castellan</param>
   </service>

++++++ castellan-3.0.1.tar.gz -> castellan-3.6.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/.zuul.yaml 
new/castellan-3.6.0/.zuul.yaml
--- old/castellan-3.0.1/.zuul.yaml      2020-04-13 19:08:56.000000000 +0200
+++ new/castellan-3.6.0/.zuul.yaml      2020-09-11 21:26:04.000000000 +0200
@@ -1,6 +1,6 @@
 - job:
     name: castellan-functional-vault
-    parent: openstack-tox-py27
+    parent: openstack-tox-py36
     description: |
       Run tox functional-vault target
     required-projects:
@@ -51,16 +51,16 @@
       jobs:
         - castellan-functional-vault
         - castellan-functional-devstack
-        - barbican-simple-crypto-devstack-tempest-castellan-from-git
+        - barbican-tempest-plugin-simple-crypto-castellan-src
     gate:
       jobs:
         - castellan-functional-vault
         - castellan-functional-devstack
-        - barbican-simple-crypto-devstack-tempest-castellan-from-git
+        - barbican-tempest-plugin-simple-crypto-castellan-src
     templates:
       - check-requirements
       - openstack-lower-constraints-jobs
-      - openstack-python3-ussuri-jobs
+      - openstack-python3-victoria-jobs
       - periodic-stable-jobs
       - publish-openstack-docs-pti
       - release-notes-jobs-python3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/AUTHORS new/castellan-3.6.0/AUTHORS
--- old/castellan-3.0.1/AUTHORS 2020-04-13 19:09:45.000000000 +0200
+++ new/castellan-3.6.0/AUTHORS 2020-09-11 21:27:14.000000000 +0200
@@ -22,7 +22,9 @@
 Fernando Diaz <[email protected]>
 Flavio Percoco <[email protected]>
 Ghanshyam Mann <[email protected]>
+Hervé Beraud <[email protected]>
 Ian Wienand <[email protected]>
+Ivan Kolodyazhny <[email protected]>
 James E. Blair <[email protected]>
 James Page <[email protected]>
 Jamie Lennox <[email protected]>
@@ -35,6 +37,7 @@
 Kaitlin Farr <[email protected]>
 Kiran_totad <[email protected]>
 Le Hou <[email protected]>
+Luigi Toscano <[email protected]>
 Michael McCune <[email protected]>
 Moises Guimaraes de Medeiros <[email protected]>
 Moisés Guimarães de Medeiros <[email protected]>
@@ -45,6 +48,7 @@
 Paul Bourke <[email protected]>
 Pavlo Shchelokovskyy <[email protected]>
 Robert Clark <[email protected]>
+Sean McGinnis <[email protected]>
 Steve Martinelli <[email protected]>
 Sungjin Yook <[email protected]>
 Swapnil Kulkarni (coolsvap) <[email protected]>
@@ -64,6 +68,7 @@
 liujiong <[email protected]>
 melissaml <[email protected]>
 rajat29 <[email protected]>
+ramboman <[email protected]>
 sonu.kumar <[email protected]>
 ting.wang <[email protected]>
 wu.chunyang <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/ChangeLog 
new/castellan-3.6.0/ChangeLog
--- old/castellan-3.0.1/ChangeLog       2020-04-13 19:09:45.000000000 +0200
+++ new/castellan-3.6.0/ChangeLog       2020-09-11 21:27:14.000000000 +0200
@@ -1,10 +1,60 @@
 CHANGES
 =======
 
+3.6.0
+-----
+
+* [goal] Migrate testing to ubuntu focal
+
+3.5.0
+-----
+
+* zuul: use the new barbican simple-crypto job
+* Use 'barbican\_endpoint\_type'config option to get endpoint from catalog
+* Bump bandit version
+
+3.4.0
+-----
+
+* migrate testing to ubuntu focal
+* Add to\_dict and from\_dict conversions to managed objects
+
+3.3.0
+-----
+
+* Bump vault version
+
+3.2.0
+-----
+
+* Replaces \_get\_api\_version with config option
+
+3.1.1
+-----
+
+* Add handler for Bad Request error during Vault authentication
+* drop mock from lower-constraints
+* Some Cleanups
+* Update lower-constraints versions
+
+3.1.0
+-----
+
+* Fix hacking min version to 3.0.1
+* Switch to newer openstackdocstheme and reno versions
+* Remove translation sections from setup.cfg
+* add "verify\_ssl\_path" config for barbican key manager
+* Bump default tox env from py37 to py38
+* Add py38 package metadata
+* Use unittest.mock instead of third party mock
+* Add Python3 victoria unit tests
+* Update master for stable/ussuri
+
 3.0.1
 -----
 
 * Fix stale references to renamed constant
+* Update hacking for Python3
 
 3.0.0
 -----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/PKG-INFO new/castellan-3.6.0/PKG-INFO
--- old/castellan-3.0.1/PKG-INFO        2020-04-13 19:09:45.000000000 +0200
+++ new/castellan-3.6.0/PKG-INFO        2020-09-11 21:27:14.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: castellan
-Version: 3.0.1
+Version: 3.6.0
 Summary: Generic Key Manager interface for OpenStack
 Home-page: https://docs.openstack.org/castellan/latest/
 Author: OpenStack
@@ -36,6 +36,7 @@
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3 :: Only
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Requires-Python: >=3.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/babel.cfg 
new/castellan-3.6.0/babel.cfg
--- old/castellan-3.0.1/babel.cfg       2020-04-13 19:08:56.000000000 +0200
+++ new/castellan-3.6.0/babel.cfg       1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
-[python: **.py]
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/castellan/common/exception.py 
new/castellan-3.6.0/castellan/common/exception.py
--- old/castellan-3.0.1/castellan/common/exception.py   2020-04-13 
19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/common/exception.py   2020-09-11 
21:26:04.000000000 +0200
@@ -64,6 +64,14 @@
     message = _("Key not found, uuid: %(uuid)s")
 
 
+class InvalidManagedObjectDictError(CastellanException):
+    message = _("Dict has no field '%(field)s'.")
+
+
+class UnknownManagedObjectTypeError(CastellanException):
+    message = _("Type not found, type: %(type)s")
+
+
 class AuthTypeInvalidError(CastellanException):
     message = _("Invalid auth_type was specified, auth_type: %(type)s")
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/castellan/common/objects/__init__.py 
new/castellan-3.6.0/castellan/common/objects/__init__.py
--- old/castellan-3.0.1/castellan/common/objects/__init__.py    2020-04-13 
19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/common/objects/__init__.py    2020-09-11 
21:26:04.000000000 +0200
@@ -0,0 +1,49 @@
+#    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.
+
+from castellan.common import exception
+from castellan.common.objects import opaque_data
+from castellan.common.objects import passphrase
+from castellan.common.objects import private_key
+from castellan.common.objects import public_key
+from castellan.common.objects import symmetric_key
+from castellan.common.objects import x_509
+
+_managed_objects_by_type = {
+    cls.managed_type(): cls for cls in [
+        opaque_data.OpaqueData,
+        passphrase.Passphrase,
+        private_key.PrivateKey,
+        public_key.PublicKey,
+        symmetric_key.SymmetricKey,
+        x_509.X509,
+    ]
+}
+
+
+def from_dict(obj, id=None):
+    try:
+        managed_object_type = obj["type"]
+    except KeyError:
+        raise exception.InvalidManagedObjectDictError(field="type")
+
+    try:
+        cls = _managed_objects_by_type[managed_object_type]
+    except KeyError:
+        raise exception.UnknownManagedObjectTypeError(type=managed_object_type)
+
+    try:
+        managed_object = cls.from_dict(obj, id)
+    except KeyError as e:
+        raise exception.InvalidManagedObjectDictError(field=str(e))
+
+    return managed_object
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/castellan/common/objects/key.py 
new/castellan-3.6.0/castellan/common/objects/key.py
--- old/castellan-3.0.1/castellan/common/objects/key.py 2020-04-13 
19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/common/objects/key.py 2020-09-11 
21:26:04.000000000 +0200
@@ -22,14 +22,17 @@
 """
 
 import abc
+import binascii
 
+from castellan.common.objects import exception
 from castellan.common.objects import managed_object
 
 
 class Key(managed_object.ManagedObject):
     """Base class to represent all keys."""
 
-    @abc.abstractproperty
+    @property
+    @abc.abstractmethod
     def algorithm(self):
         """Returns the key's algorithm.
 
@@ -38,7 +41,8 @@
         """
         pass
 
-    @abc.abstractproperty
+    @property
+    @abc.abstractmethod
     def bit_length(self):
         """Returns the key's bit length.
 
@@ -47,3 +51,33 @@
         the length of the modulus.
         """
         pass
+
+    def to_dict(self):
+        dict_fields = super().to_dict()
+
+        dict_fields["algorithm"] = self.algorithm
+        dict_fields["bit_length"] = self.bit_length
+
+        return dict_fields
+
+    @classmethod
+    def from_dict(cls, dict_fields, id=None, metadata_only=False):
+        try:
+            value = None
+
+            # NOTE(moguimar): the managed object's value is exported as
+            # a hex string. For now, this is a compatibility thing with
+            # the already existent vault_key_manager backend.
+            if not metadata_only and dict_fields["value"] is not None:
+                value = binascii.unhexlify(dict_fields["value"])
+
+            return cls(
+                algorithm=dict_fields["algorithm"],
+                bit_length=dict_fields["bit_length"],
+                key=value,
+                name=dict_fields["name"],
+                created=dict_fields["created"],
+                id=id,
+            )
+        except KeyError as e:
+            raise exception.InvalidManagedObjectDictError(field=str(e))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/common/objects/managed_object.py 
new/castellan-3.6.0/castellan/common/objects/managed_object.py
--- old/castellan-3.0.1/castellan/common/objects/managed_object.py      
2020-04-13 19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/common/objects/managed_object.py      
2020-09-11 21:26:04.000000000 +0200
@@ -19,7 +19,11 @@
 This module defines the ManagedObject class. The ManagedObject class
 is the base class to represent all objects managed by the key manager.
 """
+
 import abc
+import binascii
+
+from castellan.common import exception
 
 
 class ManagedObject(object, metaclass=abc.ABCMeta):
@@ -69,7 +73,8 @@
         """
         return self._created
 
-    @abc.abstractproperty
+    @property
+    @abc.abstractmethod
     def format(self):
         """Returns the encoding format.
 
@@ -78,6 +83,11 @@
         """
         pass
 
+    @property
+    def value(self):
+        """Returns the managed object value."""
+        return self.get_encoded()
+
     @abc.abstractmethod
     def get_encoded(self):
         """Returns the encoded object.
@@ -90,3 +100,63 @@
     def is_metadata_only(self):
         """Returns if the associated object is only metadata or not."""
         return self.get_encoded() is None
+
+    @classmethod
+    @abc.abstractmethod
+    def managed_type(cls):
+        """Returns the managed object type identifier.
+
+        Returns the object's type identifier for serialization purpose.
+        """
+        pass
+
+    @classmethod
+    def from_dict(cls, dict_fields, id=None, metadata_only=False):
+        """Returns an instance of this class based on a dict object.
+
+        :param dict_fields: The dictionary containing all necessary params
+                            to create one instance.
+        :param id: The optional param 'id' to be passed to the constructor.
+        :param metadata_only: A switch to create an instance with metadata
+                              only, without the secret itself.
+        """
+        try:
+            value = None
+
+            # NOTE(moguimar): the managed object's value is exported as
+            # a hex string. For now, this is a compatibility thing with
+            # the already existent vault_key_manager backend.
+            if not metadata_only and dict_fields["value"] is not None:
+                value = binascii.unhexlify(dict_fields["value"])
+
+            return cls(
+                value,
+                name=dict_fields["name"],
+                created=dict_fields["created"],
+                id=id,
+            )
+        except KeyError as e:
+            raise exception.InvalidManagedObjectDictError(field=str(e))
+
+    def to_dict(self, metadata_only=False):
+        """Returns a dict that can be used with the from_dict() method.
+
+        :param metadata_only: A switch to create an dictionary with metadata
+                              only, without the secret itself.
+
+        :rtype: dict
+        """
+        value = None
+
+        # NOTE(moguimar): the managed object's value is exported as
+        # a hex string. For now, this is a compatibility thing with
+        # the already existent vault_key_manager backend.
+        if not metadata_only and self.value is not None:
+            value = binascii.hexlify(self.value).decode("utf-8")
+
+        return {
+            "type": self.managed_type(),
+            "name": self.name,
+            "created": self.created,
+            "value": value,
+        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/common/objects/opaque_data.py 
new/castellan-3.6.0/castellan/common/objects/opaque_data.py
--- old/castellan-3.0.1/castellan/common/objects/opaque_data.py 2020-04-13 
19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/common/objects/opaque_data.py 2020-09-11 
21:26:04.000000000 +0200
@@ -31,15 +31,17 @@
         Expected type for data is a bytestring.
         """
         self._data = data
-        super(OpaqueData, self).__init__(name=name, created=created, id=id)
+        super().__init__(name=name, created=created, id=id)
+
+    @classmethod
+    def managed_type(cls):
+        return "opaque"
 
     @property
     def format(self):
-        """This method returns 'Opaque'."""
         return "Opaque"
 
     def get_encoded(self):
-        """Returns the data in its original format."""
         return self._data
 
     def __eq__(self, other):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/common/objects/passphrase.py 
new/castellan-3.6.0/castellan/common/objects/passphrase.py
--- old/castellan-3.0.1/castellan/common/objects/passphrase.py  2020-04-13 
19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/common/objects/passphrase.py  2020-09-11 
21:26:04.000000000 +0200
@@ -31,15 +31,17 @@
         The expected type for the passphrase is a bytestring.
         """
         self._passphrase = passphrase
-        super(Passphrase, self).__init__(name=name, created=created, id=id)
+        super().__init__(name=name, created=created, id=id)
+
+    @classmethod
+    def managed_type(cls):
+        return "passphrase"
 
     @property
     def format(self):
-        """This method returns 'RAW'."""
         return "RAW"
 
     def get_encoded(self):
-        """Returns the data in a bytestring."""
         return self._passphrase
 
     def __eq__(self, other):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/common/objects/private_key.py 
new/castellan-3.6.0/castellan/common/objects/private_key.py
--- old/castellan-3.0.1/castellan/common/objects/private_key.py 2020-04-13 
19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/common/objects/private_key.py 2020-09-11 
21:26:04.000000000 +0200
@@ -35,25 +35,25 @@
         self._alg = algorithm
         self._bit_length = bit_length
         self._key = key
-        super(PrivateKey, self).__init__(name=name, created=created, id=id)
+        super().__init__(name=name, created=created, id=id)
+
+    @classmethod
+    def managed_type(cls):
+        return "private"
 
     @property
     def algorithm(self):
-        """Returns the algorithm for asymmetric encryption."""
         return self._alg
 
     @property
     def format(self):
-        """This method returns 'PKCS8'."""
         return "PKCS8"
 
     @property
     def bit_length(self):
-        """Returns the key length."""
         return self._bit_length
 
     def get_encoded(self):
-        """Returns the key in DER encoded format."""
         return self._key
 
     def __eq__(self, other):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/common/objects/public_key.py 
new/castellan-3.6.0/castellan/common/objects/public_key.py
--- old/castellan-3.0.1/castellan/common/objects/public_key.py  2020-04-13 
19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/common/objects/public_key.py  2020-09-11 
21:26:04.000000000 +0200
@@ -36,25 +36,25 @@
         self._alg = algorithm
         self._bit_length = bit_length
         self._key = key
-        super(PublicKey, self).__init__(name=name, created=created, id=id)
+        super().__init__(name=name, created=created, id=id)
+
+    @classmethod
+    def managed_type(cls):
+        return "public"
 
     @property
     def algorithm(self):
-        """Returns the algorithm for asymmetric encryption."""
         return self._alg
 
     @property
     def format(self):
-        """This method returns 'SubjectPublicKeyInfo'."""
         return "SubjectPublicKeyInfo"
 
     def get_encoded(self):
-        """Returns the key in its encoded format."""
         return self._key
 
     @property
     def bit_length(self):
-        """Returns the key length."""
         return self._bit_length
 
     def __eq__(self, other):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/common/objects/symmetric_key.py 
new/castellan-3.6.0/castellan/common/objects/symmetric_key.py
--- old/castellan-3.0.1/castellan/common/objects/symmetric_key.py       
2020-04-13 19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/common/objects/symmetric_key.py       
2020-09-11 21:26:04.000000000 +0200
@@ -35,25 +35,25 @@
         self._alg = algorithm
         self._bit_length = bit_length
         self._key = key
-        super(SymmetricKey, self).__init__(name=name, created=created, id=id)
+        super().__init__(name=name, created=created, id=id)
+
+    @classmethod
+    def managed_type(cls):
+        return "symmetric"
 
     @property
     def algorithm(self):
-        """Returns the algorithm for symmetric encryption."""
         return self._alg
 
     @property
     def format(self):
-        """This method returns 'RAW'."""
         return "RAW"
 
     def get_encoded(self):
-        """Returns the key in its encoded format."""
         return self._key
 
     @property
     def bit_length(self):
-        """Returns the key length."""
         return self._bit_length
 
     def __eq__(self, other):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/castellan/common/objects/x_509.py 
new/castellan-3.6.0/castellan/common/objects/x_509.py
--- old/castellan-3.0.1/castellan/common/objects/x_509.py       2020-04-13 
19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/common/objects/x_509.py       2020-09-11 
21:26:04.000000000 +0200
@@ -31,15 +31,17 @@
         The data should be in a bytestring.
         """
         self._data = data
-        super(X509, self).__init__(name=name, created=created, id=id)
+        super().__init__(name=name, created=created, id=id)
+
+    @classmethod
+    def managed_type(cls):
+        return "certificate"
 
     @property
     def format(self):
-        """This method returns 'X.509'."""
         return "X.509"
 
     def get_encoded(self):
-        """Returns the data in its encoded format."""
         return self._data
 
     def __eq__(self, other):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/key_manager/barbican_key_manager.py 
new/castellan-3.6.0/castellan/key_manager/barbican_key_manager.py
--- old/castellan-3.0.1/castellan/key_manager/barbican_key_manager.py   
2020-04-13 19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/key_manager/barbican_key_manager.py   
2020-09-11 21:26:04.000000000 +0200
@@ -64,7 +64,14 @@
     cfg.BoolOpt('verify_ssl',
                 default=True,
                 help='Specifies if insecure TLS (https) requests. If False, '
-                     'the server\'s certificate will not be validated'),
+                     'the server\'s certificate will not be validated, if '
+                     'True, we can set the verify_ssl_path config meanwhile.'),
+    cfg.StrOpt('verify_ssl_path',
+               default=None,
+               help='A path to a bundle or CA certs to check against, or '
+                    'None for requests to attempt to locate and use '
+                    'certificates which verify_ssh is True. If verify_ssl '
+                    'is False, this is ignored.'),
     cfg.StrOpt('barbican_endpoint_type',
                default='public',
                choices=['public', 'internal', 'admin'],
@@ -109,8 +116,10 @@
 
         try:
             auth = self._get_keystone_auth(context)
-            sess = session.Session(auth=auth,
-                                   verify=self.conf.barbican.verify_ssl)
+            verify_ssl = self.conf.barbican.verify_ssl
+            verify_ssl_path = self.conf.barbican.verify_ssl_path
+            verify = verify_ssl and verify_ssl_path or verify_ssl
+            sess = session.Session(auth=auth, verify=verify)
 
             self._barbican_endpoint = self._get_barbican_endpoint(auth, sess)
             self._barbican_client = barbican_client_import.Client(
@@ -184,7 +193,8 @@
             return barbican.barbican_endpoint
         elif getattr(auth, 'service_catalog', None):
             endpoint_data = auth.service_catalog.endpoint_data_for(
-                service_type='key-manager')
+                service_type='key-manager',
+                interface=barbican.barbican_endpoint_type)
             return endpoint_data.url
         else:
             service_parameters = {'service_type': 'key-manager',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/key_manager/vault_key_manager.py 
new/castellan-3.6.0/castellan/key_manager/vault_key_manager.py
--- old/castellan-3.0.1/castellan/key_manager/vault_key_manager.py      
2020-04-13 19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/key_manager/vault_key_manager.py      
2020-09-11 21:26:04.000000000 +0200
@@ -41,6 +41,7 @@
 
 _DEFAULT_VAULT_URL = "http://127.0.0.1:8200";
 _DEFAULT_MOUNTPOINT = "secret"
+_DEFAULT_VERSION = 2
 
 _vault_opts = [
     cfg.StrOpt('root_token_id',
@@ -53,6 +54,10 @@
                default=_DEFAULT_MOUNTPOINT,
                help='Mountpoint of KV store in Vault to use, for example: '
                     '{}'.format(_DEFAULT_MOUNTPOINT)),
+    cfg.IntOpt('kv_version',
+               default=_DEFAULT_VERSION,
+               help='Version of KV store in Vault to use, for example: '
+                    '{}'.format(_DEFAULT_VERSION)),
     cfg.StrOpt('vault_url',
                default=_DEFAULT_VAULT_URL,
                help='Use this endpoint to connect to Vault, for example: '
@@ -92,41 +97,24 @@
         self._approle_token_ttl = None
         self._approle_token_issue = None
         self._kv_mountpoint = self._conf.vault.kv_mountpoint
+        self._kv_version = self._conf.vault.kv_version
         self._vault_url = self._conf.vault.vault_url
         if self._vault_url.startswith("https://";):
             self._verify_server = self._conf.vault.ssl_ca_crt_file or True
         else:
             self._verify_server = False
-        self._vault_kv_version = None
 
     def _get_url(self):
         if not self._vault_url.endswith('/'):
             self._vault_url += '/'
         return self._vault_url
 
-    def _get_api_version(self):
-        if self._vault_kv_version:
-            return self._vault_kv_version
-
-        resource_url = '{}v1/sys/internal/ui/mounts/{}'.format(
-            self._get_url(),
-            self._kv_mountpoint
-        )
-        resp = self._do_http_request(self._session.get, resource_url)
-
-        if resp.status_code == requests.codes['not_found']:
-            self._vault_kv_version = '1'
-        else:
-            self._vault_kv_version = resp.json()['data']['options']['version']
-
-        return self._vault_kv_version
-
     def _get_resource_url(self, key_id=None):
         return '{}v1/{}/{}{}'.format(
             self._get_url(),
             self._kv_mountpoint,
 
-            '' if self._get_api_version() == '1' else
+            '' if self._kv_version == 1 else
             'data/' if key_id else
             'metadata/',  # no key_id is for listing and 'data/' doesn't works
 
@@ -173,10 +161,14 @@
             if resp.status_code == requests.codes['forbidden']:
                 raise exception.Forbidden()
 
-            resp = resp.json()
-            self._cached_approle_token_id = resp['auth']['client_token']
+            resp_data = resp.json()
+
+            if resp.status_code == requests.codes['bad_request']:
+                raise exception.KeyManagerError(', '.join(resp_data['errors']))
+
+            self._cached_approle_token_id = resp_data['auth']['client_token']
             self._approle_token_issue = token_issue_utc
-            self._approle_token_ttl = resp['auth']['lease_duration']
+            self._approle_token_ttl = resp_data['auth']['lease_duration']
             return {'X-Vault-Token': self._approle_token_id}
 
         return {}
@@ -264,7 +256,7 @@
             'name': value.name,
             'created': value.created
         }
-        if self._get_api_version() != '1':
+        if self._kv_version > 1:
             record = {'data': record}
 
         self._do_http_request(self._session.post,
@@ -309,7 +301,7 @@
             raise exception.ManagedObjectNotFoundError(uuid=key_id)
 
         record = resp.json()['data']
-        if self._get_api_version() != '1':
+        if self._kv_version > 1:
             record = record['data']
 
         key = None if metadata_only else binascii.unhexlify(record['value'])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/castellan/options.py 
new/castellan-3.6.0/castellan/options.py
--- old/castellan-3.0.1/castellan/options.py    2020-04-13 19:08:56.000000000 
+0200
+++ new/castellan-3.6.0/castellan/options.py    2020-09-11 21:26:04.000000000 
+0200
@@ -41,6 +41,7 @@
 def set_defaults(conf, backend=None, barbican_endpoint=None,
                  barbican_api_version=None, auth_endpoint=None,
                  retry_delay=None, number_of_retries=None, verify_ssl=None,
+                 verify_ssl_path=None,
                  api_class=None, vault_root_token_id=None,
                  vault_approle_role_id=None, vault_approle_secret_id=None,
                  vault_kv_mountpoint=None, vault_url=None,
@@ -57,6 +58,7 @@
     :param retry_delay: Use this attribute to set retry delay.
     :param number_of_retries: Use this attribute to set number of retries.
     :param verify_ssl: Use this to specify if ssl should be verified.
+    :param verify_ssl_path: Use this to specify the CA path.
     :param vault_root_token_id: Use this for the root token id for vault.
     :param vault_approle_role_id: Use this for the approle role_id for vault.
     :param vault_approle_secret_id: Use this for the approle secret_id
@@ -103,6 +105,9 @@
         if verify_ssl is not None:
             conf.set_default('verify_ssl', verify_ssl,
                              group=bkm._BARBICAN_OPT_GROUP)
+        if verify_ssl_path is not None:
+            conf.set_default('verify_ssl_path', verify_ssl_path,
+                             group=bkm._BARBICAN_OPT_GROUP)
         if barbican_endpoint_type is not None:
             conf.set_default('barbican_endpoint_type', barbican_endpoint_type,
                              group=bkm._BARBICAN_OPT_GROUP)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/tests/unit/credentials/test_keystone_password.py 
new/castellan-3.6.0/castellan/tests/unit/credentials/test_keystone_password.py
--- 
old/castellan-3.0.1/castellan/tests/unit/credentials/test_keystone_password.py  
    2020-04-13 19:08:56.000000000 +0200
+++ 
new/castellan-3.6.0/castellan/tests/unit/credentials/test_keystone_password.py  
    2020-09-11 21:26:04.000000000 +0200
@@ -117,7 +117,7 @@
                         self.ks_password_credential)
 
         self.assertFalse(self.ks_password_credential is None)
-        self.assertFalse(None == self.ks_password_credential)
+        self.assertFalse(None == self.ks_password_credential)  # noqa: E711
 
         other_ks_password_credential = keystone_password.KeystonePassword(
             self.password,
@@ -140,7 +140,7 @@
 
     def test___ne___none(self):
         self.assertTrue(self.ks_password_credential is not None)
-        self.assertTrue(None != self.ks_password_credential)
+        self.assertTrue(None != self.ks_password_credential)  # noqa: E711
 
     def test___ne___password(self):
         other_password = "wheresmyCat??"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/tests/unit/credentials/test_keystone_token.py 
new/castellan-3.6.0/castellan/tests/unit/credentials/test_keystone_token.py
--- old/castellan-3.0.1/castellan/tests/unit/credentials/test_keystone_token.py 
2020-04-13 19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/tests/unit/credentials/test_keystone_token.py 
2020-09-11 21:26:04.000000000 +0200
@@ -93,7 +93,7 @@
                         self.ks_token_credential)
 
         self.assertFalse(self.ks_token_credential is None)
-        self.assertFalse(None == self.ks_token_credential)
+        self.assertFalse(None == self.ks_token_credential)  # noqa: E711
 
         other_ks_token_credential = keystone_token.KeystoneToken(
             self.token,
@@ -112,7 +112,7 @@
 
     def test___ne___none(self):
         self.assertTrue(self.ks_token_credential is not None)
-        self.assertTrue(None != self.ks_token_credential)
+        self.assertTrue(None != self.ks_token_credential)  # noqa: E711
 
     def test___ne___token(self):
         other_token = "5c59e3217d3d4dd297589b297aee2a6f"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/tests/unit/credentials/test_password.py 
new/castellan-3.6.0/castellan/tests/unit/credentials/test_password.py
--- old/castellan-3.0.1/castellan/tests/unit/credentials/test_password.py       
2020-04-13 19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/tests/unit/credentials/test_password.py       
2020-09-11 21:26:04.000000000 +0200
@@ -46,7 +46,7 @@
         self.assertTrue(self.password_credential is self.password_credential)
 
         self.assertFalse(self.password_credential is None)
-        self.assertFalse(None == self.password_credential)
+        self.assertFalse(None == self.password_credential)  # noqa: E711
 
         other_password_credential = password.Password(self.username,
                                                       self.password)
@@ -55,7 +55,7 @@
 
     def test___ne___none(self):
         self.assertTrue(self.password_credential is not None)
-        self.assertTrue(None != self.password_credential)
+        self.assertTrue(None != self.password_credential)  # noqa: E711
 
     def test___ne___username(self):
         other_username = "service"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/tests/unit/credentials/test_token.py 
new/castellan-3.6.0/castellan/tests/unit/credentials/test_token.py
--- old/castellan-3.0.1/castellan/tests/unit/credentials/test_token.py  
2020-04-13 19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/tests/unit/credentials/test_token.py  
2020-09-11 21:26:04.000000000 +0200
@@ -39,7 +39,7 @@
         self.assertTrue(self.token_credential is self.token_credential)
 
         self.assertFalse(self.token_credential is None)
-        self.assertFalse(None == self.token_credential)
+        self.assertFalse(None == self.token_credential)  # noqa: E711
 
         other_token_credential = token.Token(self.token)
         self.assertTrue(self.token_credential == other_token_credential)
@@ -47,7 +47,7 @@
 
     def test___ne___none(self):
         self.assertTrue(self.token_credential is not None)
-        self.assertTrue(None != self.token_credential)
+        self.assertTrue(None != self.token_credential)  # noqa: E711
 
     def test___ne___token(self):
         other_token = "fe32af1fe47e4744a48254e60ae80012"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/tests/unit/key_manager/test_barbican_key_manager.py
 
new/castellan-3.6.0/castellan/tests/unit/key_manager/test_barbican_key_manager.py
--- 
old/castellan-3.0.1/castellan/tests/unit/key_manager/test_barbican_key_manager.py
   2020-04-13 19:08:56.000000000 +0200
+++ 
new/castellan-3.6.0/castellan/tests/unit/key_manager/test_barbican_key_manager.py
   2020-09-11 21:26:04.000000000 +0200
@@ -17,9 +17,9 @@
 Test cases for the barbican key manager.
 """
 import calendar
+from unittest import mock
 
 from barbicanclient import exceptions as barbican_exceptions
-import mock
 from oslo_utils import timeutils
 
 from castellan.common import exception
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/tests/unit/key_manager/test_migration_key_manager.py
 
new/castellan-3.6.0/castellan/tests/unit/key_manager/test_migration_key_manager.py
--- 
old/castellan-3.0.1/castellan/tests/unit/key_manager/test_migration_key_manager.py
  2020-04-13 19:08:56.000000000 +0200
+++ 
new/castellan-3.6.0/castellan/tests/unit/key_manager/test_migration_key_manager.py
  2020-09-11 21:26:04.000000000 +0200
@@ -18,7 +18,7 @@
 """
 
 import binascii
-import mock
+from unittest import mock
 
 from oslo_config import cfg
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/tests/unit/objects/__init__.py 
new/castellan-3.6.0/castellan/tests/unit/objects/__init__.py
--- old/castellan-3.0.1/castellan/tests/unit/objects/__init__.py        
2020-04-13 19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/tests/unit/objects/__init__.py        
2020-09-11 21:26:04.000000000 +0200
@@ -0,0 +1,37 @@
+# Copyright 2020 Red Hat, Inc.
+# All Rights Reserved.
+#
+#    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.
+
+"""
+Test cases for Managed Objects.
+"""
+from castellan.common import exception
+from castellan.common import objects
+from castellan.tests import base
+
+
+class ManagedObjectFromDictTestCase(base.TestCase):
+    def test_invalid_dict(self):
+        self.assertRaises(
+            exception.InvalidManagedObjectDictError,
+            objects.from_dict,
+            {},
+        )
+
+    def test_unknown_type(self):
+        self.assertRaises(
+            exception.UnknownManagedObjectTypeError,
+            objects.from_dict,
+            {"type": "non-existing-managed-object-type"},
+        )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/tests/unit/objects/test_opaque.py 
new/castellan-3.6.0/castellan/tests/unit/objects/test_opaque.py
--- old/castellan-3.0.1/castellan/tests/unit/objects/test_opaque.py     
2020-04-13 19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/tests/unit/objects/test_opaque.py     
2020-09-11 21:26:04.000000000 +0200
@@ -16,6 +16,7 @@
 """
 Test cases for the opaque data class.
 """
+from castellan.common import objects
 from castellan.common.objects import opaque_data
 from castellan.tests import base
 
@@ -67,7 +68,7 @@
         self.assertTrue(self.opaque_data is self.opaque_data)
 
         self.assertFalse(self.opaque_data is None)
-        self.assertFalse(None == self.opaque_data)
+        self.assertFalse(None == self.opaque_data)  # noqa: E711
 
         other_opaque_data = opaque_data.OpaqueData(self.data)
         self.assertTrue(self.opaque_data == other_opaque_data)
@@ -75,8 +76,12 @@
 
     def test___ne___none(self):
         self.assertTrue(self.opaque_data is not None)
-        self.assertTrue(None != self.opaque_data)
+        self.assertTrue(None != self.opaque_data)  # noqa: E711
 
     def test___ne___data(self):
         other_opaque = opaque_data.OpaqueData(b'other data', self.name)
         self.assertTrue(self.opaque_data != other_opaque)
+
+    def test_to_and_from_dict(self):
+        other = objects.from_dict(self.opaque_data.to_dict())
+        self.assertEqual(self.opaque_data, other)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/tests/unit/objects/test_passphrase.py 
new/castellan-3.6.0/castellan/tests/unit/objects/test_passphrase.py
--- old/castellan-3.0.1/castellan/tests/unit/objects/test_passphrase.py 
2020-04-13 19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/tests/unit/objects/test_passphrase.py 
2020-09-11 21:26:04.000000000 +0200
@@ -16,6 +16,7 @@
 """
 Test cases for the passphrase class.
 """
+from castellan.common import objects
 from castellan.common.objects import passphrase
 from castellan.tests import base
 
@@ -67,7 +68,7 @@
         self.assertTrue(self.passphrase is self.passphrase)
 
         self.assertFalse(self.passphrase is None)
-        self.assertFalse(None == self.passphrase)
+        self.assertFalse(None == self.passphrase)  # noqa: E711
 
         other_passphrase = passphrase.Passphrase(self.passphrase_data)
         self.assertTrue(self.passphrase == other_passphrase)
@@ -75,8 +76,12 @@
 
     def test___ne___none(self):
         self.assertTrue(self.passphrase is not None)
-        self.assertTrue(None != self.passphrase)
+        self.assertTrue(None != self.passphrase)  # noqa: E711
 
     def test___ne___data(self):
         other_phrase = passphrase.Passphrase(b"other passphrase", self.name)
         self.assertTrue(self.passphrase != other_phrase)
+
+    def test_to_and_from_dict(self):
+        other = objects.from_dict(self.passphrase.to_dict())
+        self.assertEqual(self.passphrase, other)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/tests/unit/objects/test_private_key.py 
new/castellan-3.6.0/castellan/tests/unit/objects/test_private_key.py
--- old/castellan-3.0.1/castellan/tests/unit/objects/test_private_key.py        
2020-04-13 19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/tests/unit/objects/test_private_key.py        
2020-09-11 21:26:04.000000000 +0200
@@ -16,6 +16,7 @@
 """
 Test cases for the private key class.
 """
+from castellan.common import objects
 from castellan.common.objects import private_key
 from castellan.tests import base
 from castellan.tests import utils
@@ -83,7 +84,7 @@
         self.assertTrue(self.key is self.key)
 
         self.assertFalse(self.key is None)
-        self.assertFalse(None == self.key)
+        self.assertFalse(None == self.key)  # noqa: E711
 
         other_key = private_key.PrivateKey(self.algorithm,
                                            self.bit_length,
@@ -93,7 +94,7 @@
 
     def test___ne___none(self):
         self.assertTrue(self.key is not None)
-        self.assertTrue(None != self.key)
+        self.assertTrue(None != self.key)  # noqa: E711
 
     def test___ne___algorithm(self):
         other_key = private_key.PrivateKey('DSA',
@@ -116,3 +117,7 @@
                                            different_encoded,
                                            self.name)
         self.assertTrue(self.key != other_key)
+
+    def test_to_and_from_dict(self):
+        other = objects.from_dict(self.key.to_dict())
+        self.assertEqual(self.key, other)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/tests/unit/objects/test_public_key.py 
new/castellan-3.6.0/castellan/tests/unit/objects/test_public_key.py
--- old/castellan-3.0.1/castellan/tests/unit/objects/test_public_key.py 
2020-04-13 19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/tests/unit/objects/test_public_key.py 
2020-09-11 21:26:04.000000000 +0200
@@ -16,6 +16,7 @@
 """
 Test cases for the public key class.
 """
+from castellan.common import objects
 from castellan.common.objects import public_key
 from castellan.tests import base
 from castellan.tests import utils
@@ -83,7 +84,7 @@
         self.assertTrue(self.key is self.key)
 
         self.assertFalse(self.key is None)
-        self.assertFalse(None == self.key)
+        self.assertFalse(None == self.key)  # noqa: E711
 
         other_key = public_key.PublicKey(self.algorithm,
                                          self.bit_length,
@@ -93,7 +94,7 @@
 
     def test___ne___none(self):
         self.assertTrue(self.key is not None)
-        self.assertTrue(None != self.key)
+        self.assertTrue(None != self.key)  # noqa: E711
 
     def test___ne___algorithm(self):
         other_key = public_key.PublicKey('DSA',
@@ -116,3 +117,7 @@
                                          different_encoded,
                                          self.name)
         self.assertTrue(self.key != other_key)
+
+    def test_to_and_from_dict(self):
+        other = objects.from_dict(self.key.to_dict())
+        self.assertEqual(self.key, other)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/tests/unit/objects/test_symmetric_key.py 
new/castellan-3.6.0/castellan/tests/unit/objects/test_symmetric_key.py
--- old/castellan-3.0.1/castellan/tests/unit/objects/test_symmetric_key.py      
2020-04-13 19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/tests/unit/objects/test_symmetric_key.py      
2020-09-11 21:26:04.000000000 +0200
@@ -16,6 +16,7 @@
 """
 Test cases for the symmetric key class.
 """
+from castellan.common import objects
 from castellan.common.objects import symmetric_key as sym_key
 from castellan.tests import base
 
@@ -82,7 +83,7 @@
         self.assertTrue(self.key is self.key)
 
         self.assertFalse(self.key is None)
-        self.assertFalse(None == self.key)
+        self.assertFalse(None == self.key)  # noqa: E711
 
         other_key = sym_key.SymmetricKey(self.algorithm,
                                          self.bit_length,
@@ -92,7 +93,7 @@
 
     def test___ne___none(self):
         self.assertTrue(self.key is not None)
-        self.assertTrue(None != self.key)
+        self.assertTrue(None != self.key)  # noqa: E711
 
     def test___ne___algorithm(self):
         other_key = sym_key.SymmetricKey('DES',
@@ -115,3 +116,7 @@
                                          different_encoded,
                                          self.name)
         self.assertTrue(self.key != other_key)
+
+    def test_to_and_from_dict(self):
+        other = objects.from_dict(self.key.to_dict())
+        self.assertEqual(self.key, other)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/castellan/tests/unit/objects/test_x_509.py 
new/castellan-3.6.0/castellan/tests/unit/objects/test_x_509.py
--- old/castellan-3.0.1/castellan/tests/unit/objects/test_x_509.py      
2020-04-13 19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/tests/unit/objects/test_x_509.py      
2020-09-11 21:26:04.000000000 +0200
@@ -16,6 +16,7 @@
 """
 Test cases for the X.509 certificate class.
 """
+from castellan.common import objects
 from castellan.common.objects import x_509
 from castellan.tests import base
 from castellan.tests import utils
@@ -67,7 +68,7 @@
         self.assertTrue(self.cert is self.cert)
 
         self.assertFalse(self.cert is None)
-        self.assertFalse(None == self.cert)
+        self.assertFalse(None == self.cert)  # noqa: E711
 
         other_x_509 = x_509.X509(self.data)
         self.assertTrue(self.cert == other_x_509)
@@ -75,8 +76,12 @@
 
     def test___ne___none(self):
         self.assertTrue(self.cert is not None)
-        self.assertTrue(None != self.cert)
+        self.assertTrue(None != self.cert)  # noqa: E711
 
     def test___ne___data(self):
         other_x509 = x_509.X509(b'\x00\x00\x00', self.name)
         self.assertTrue(self.cert != other_x509)
+
+    def test_to_and_from_dict(self):
+        other = objects.from_dict(self.cert.to_dict())
+        self.assertEqual(self.cert, other)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/castellan/tests/unit/test_options.py 
new/castellan-3.6.0/castellan/tests/unit/test_options.py
--- old/castellan-3.0.1/castellan/tests/unit/test_options.py    2020-04-13 
19:08:56.000000000 +0200
+++ new/castellan-3.6.0/castellan/tests/unit/test_options.py    2020-09-11 
21:26:04.000000000 +0200
@@ -62,11 +62,16 @@
         self.assertEqual(number_of_retries,
                          conf.barbican.number_of_retries)
 
-        verify_ssl = True
-        options.set_defaults(conf, verify_ssl=True)
+        verify_ssl = False
+        options.set_defaults(conf, verify_ssl=False)
         self.assertEqual(verify_ssl,
                          conf.barbican.verify_ssl)
 
+        verify_ssl_path = '/mnt'
+        options.set_defaults(conf, verify_ssl_path='/mnt')
+        self.assertEqual(verify_ssl_path,
+                         conf.barbican.verify_ssl_path)
+
         barbican_endpoint_type = 'internal'
         options.set_defaults(conf, barbican_endpoint_type='internal')
         result_type = conf.barbican.barbican_endpoint_type
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/castellan.egg-info/PKG-INFO 
new/castellan-3.6.0/castellan.egg-info/PKG-INFO
--- old/castellan-3.0.1/castellan.egg-info/PKG-INFO     2020-04-13 
19:09:45.000000000 +0200
+++ new/castellan-3.6.0/castellan.egg-info/PKG-INFO     2020-09-11 
21:27:14.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: castellan
-Version: 3.0.1
+Version: 3.6.0
 Summary: Generic Key Manager interface for OpenStack
 Home-page: https://docs.openstack.org/castellan/latest/
 Author: OpenStack
@@ -36,6 +36,7 @@
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3 :: Only
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Requires-Python: >=3.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/castellan.egg-info/SOURCES.txt 
new/castellan-3.6.0/castellan.egg-info/SOURCES.txt
--- old/castellan-3.0.1/castellan.egg-info/SOURCES.txt  2020-04-13 
19:09:45.000000000 +0200
+++ new/castellan-3.6.0/castellan.egg-info/SOURCES.txt  2020-09-11 
21:27:14.000000000 +0200
@@ -8,7 +8,6 @@
 HACKING.rst
 LICENSE
 README.rst
-babel.cfg
 bindep.txt
 lower-constraints.txt
 requirements.txt
@@ -102,12 +101,16 @@
 playbooks/devstack/post.yaml
 playbooks/devstack/pre.yaml
 playbooks/devstack/run.yaml
+releasenotes/notes/add-to-dict-and-from-dict-conversions-to-managed-objects-95a9f0fdbd371a87.yaml
 releasenotes/notes/add-vault-provider-29a4c19fe67ab51f.yaml
+releasenotes/notes/bug-1876102-7c7288fb6e90b11d.yaml
 releasenotes/notes/deprecate-auth-endpoint-b91a3e67b5c7263f.yaml
 releasenotes/notes/drop-python-2-7-73d3113c69d724d6.yaml
 releasenotes/notes/fix-vault-create-key-b4340a3067cbd93c.yaml
+releasenotes/notes/fix-vault-flaky-kv-api-version-b0cd9d62a39d2907.yaml
 releasenotes/notes/implements-keymanager-option-discovery-13a46c1dfc036a3f.yaml
 releasenotes/notes/support-legacy-fixed-key-id-9fa897b547111610.yaml
+releasenotes/notes/use-barbican-endpoint-type-config-option-e583d30930cc22ba.yaml
 releasenotes/notes/vault-approle-support-5ea04daea07a152f.yaml
 releasenotes/notes/vault-kv-mountpoint-919eb547764a0c74.yaml
 releasenotes/source/conf.py
@@ -118,6 +121,7 @@
 releasenotes/source/stein.rst
 releasenotes/source/train.rst
 releasenotes/source/unreleased.rst
+releasenotes/source/ussuri.rst
 releasenotes/source/_static/.placeholder
 releasenotes/source/_templates/.placeholder
 tools/setup-vault-env.sh
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/castellan.egg-info/pbr.json 
new/castellan-3.6.0/castellan.egg-info/pbr.json
--- old/castellan-3.0.1/castellan.egg-info/pbr.json     2020-04-13 
19:09:45.000000000 +0200
+++ new/castellan-3.6.0/castellan.egg-info/pbr.json     2020-09-11 
21:27:14.000000000 +0200
@@ -1 +1 @@
-{"git_version": "f8bcee0", "is_release": true}
\ No newline at end of file
+{"git_version": "a10ed81", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/castellan.egg-info/requires.txt 
new/castellan-3.6.0/castellan.egg-info/requires.txt
--- old/castellan-3.0.1/castellan.egg-info/requires.txt 2020-04-13 
19:09:45.000000000 +0200
+++ new/castellan-3.6.0/castellan.egg-info/requires.txt 2020-09-11 
21:27:14.000000000 +0200
@@ -1,12 +1,11 @@
-pbr!=2.1.0,>=2.0.0
-Babel!=2.4.0,>=2.3.4
-cryptography>=2.1
-python-barbicanclient>=4.5.2
+cryptography>=2.7
+keystoneauth1>=3.4.0
 oslo.config>=6.4.0
 oslo.context>=2.19.2
 oslo.i18n>=3.15.3
 oslo.log>=3.36.0
 oslo.utils>=3.33.0
-stevedore>=1.20.0
-keystoneauth1>=3.4.0
+pbr!=2.1.0,>=2.0.0
+python-barbicanclient>=4.5.2
 requests!=2.20.0,>=2.18.0
+stevedore>=1.20.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/doc/requirements.txt 
new/castellan-3.6.0/doc/requirements.txt
--- old/castellan-3.0.1/doc/requirements.txt    2020-04-13 19:08:56.000000000 
+0200
+++ new/castellan-3.6.0/doc/requirements.txt    2020-09-11 21:26:04.000000000 
+0200
@@ -1,4 +1,4 @@
-sphinx>=1.8.0,!=2.1.0  # BSD
+sphinx>=2.0.0,!=2.1.0 # BSD
 sphinxcontrib-svg2pdfconverter>=0.1.0 # BSD
-reno>=2.5.0 # Apache-2.0
-openstackdocstheme>=1.18.1 # Apache-2.0
+reno>=3.1.0 # Apache-2.0
+openstackdocstheme>=2.2.1 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/doc/source/conf.py 
new/castellan-3.6.0/doc/source/conf.py
--- old/castellan-3.0.1/doc/source/conf.py      2020-04-13 19:08:56.000000000 
+0200
+++ new/castellan-3.6.0/doc/source/conf.py      2020-09-11 21:26:04.000000000 
+0200
@@ -48,7 +48,7 @@
 add_module_names = True
 
 # The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
+pygments_style = 'native'
 
 # -- Options for HTML output --------------------------------------------------
 
@@ -60,11 +60,6 @@
 # Output file base name for HTML help builder.
 htmlhelp_basename = '%sdoc' % project
 
-# 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'
-
 # Add any paths that contain "extra" files, such as .htaccess or
 # robots.txt.
 html_extra_path = ['_extra']
@@ -90,6 +85,8 @@
 #intersphinx_mapping = {'https://docs.python.org/3/': None}
 
 # -- Options for openstackdocstheme -------------------------------------------
-repository_name = 'openstack/castellan'
-bug_project = 'castellan'
-bug_tag = ''
+openstackdocs_repo_name = 'openstack/castellan'
+openstackdocs_pdf_link = True
+openstackdocs_auto_name = False
+openstackdocs_bug_project = 'castellan'
+openstackdocs_bug_tag = ''
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/lower-constraints.txt 
new/castellan-3.6.0/lower-constraints.txt
--- old/castellan-3.0.1/lower-constraints.txt   2020-04-13 19:08:56.000000000 
+0200
+++ new/castellan-3.6.0/lower-constraints.txt   2020-09-11 21:26:04.000000000 
+0200
@@ -1,31 +1,23 @@
-alabaster==0.7.10
 appdirs==1.3.0
 asn1crypto==0.23.0
-Babel==2.3.4
-bandit==1.1.0
-cffi==1.7.0
+certifi==2020.4.5.2
+cffi==1.14.0
+chardet==3.0.4
 cliff==2.8.0
 cmd2==0.8.0
 coverage==4.0
-cryptography==2.1
+cryptography==2.7
 debtcollector==1.2.0
-docutils==0.11
-dulwich==0.15.0
+entrypoints==0.3
 extras==1.0.0
 fixtures==3.0.0
-flake8==2.5.5
+future==0.18.2
 gitdb==0.6.4
 GitPython==1.0.1
-hacking==0.12.0
 idna==2.5
-imagesize==0.7.1
 iso8601==0.1.11
-Jinja2==2.10
 keystoneauth1==3.4.0
 linecache2==1.0.0
-MarkupSafe==1.0
-mccabe==0.2.1
-mock==2.0.0
 monotonic==0.6
 mox3==0.20.0
 msgpack-python==0.4.0
@@ -40,12 +32,9 @@
 oslo.utils==3.33.0
 oslotest==3.2.0
 pbr==2.0.0
-pep8==1.5.7
 pifpaf==0.10.0
 prettytable==0.7.2
 pycparser==2.18
-pyflakes==0.8.1
-Pygments==2.2.0
 pyinotify==0.9.6
 pyparsing==2.1.0
 pyperclip==1.5.27
@@ -54,17 +43,20 @@
 python-mimeparse==1.6.0
 python-subunit==1.0.0
 pytz==2013.6
-PyYAML==3.12
+PyYAML==3.13
 requests==2.18.0
 requestsexceptions==1.2.0
 rfc3986==0.3.1
+six==1.15.0
 smmap==0.9.0
-snowballstemmer==1.2.1
-stevedore==1.20.0
 stestr==2.0.0
+stevedore==1.20.0
+testrepository==0.0.20
 testscenarios==0.4
 testtools==2.2.0
 traceback2==1.4.0
 unittest2==1.1.0
+urllib3==1.21.1
+voluptuous==0.11.7
 wrapt==1.7.0
 xattr==0.9.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/releasenotes/notes/add-to-dict-and-from-dict-conversions-to-managed-objects-95a9f0fdbd371a87.yaml
 
new/castellan-3.6.0/releasenotes/notes/add-to-dict-and-from-dict-conversions-to-managed-objects-95a9f0fdbd371a87.yaml
--- 
old/castellan-3.0.1/releasenotes/notes/add-to-dict-and-from-dict-conversions-to-managed-objects-95a9f0fdbd371a87.yaml
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/castellan-3.6.0/releasenotes/notes/add-to-dict-and-from-dict-conversions-to-managed-objects-95a9f0fdbd371a87.yaml
       2020-09-11 21:26:04.000000000 +0200
@@ -0,0 +1,10 @@
+---
+features:
+  - |
+    Historically, the vault key manager backend converts its managed objects
+    to dictionaries in order to send them as a json object.  To promote
+    cross-backend compatibility, suck feature should be migrated to managed
+    objects.  Methods from_dict() and to_dict() added to class ManagedObject.
+    The Method from_dict() is a class method to create instances based on a
+    dictionary while the method to_dict() is an instance method to translate
+    an instance to a dictionary.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/releasenotes/notes/bug-1876102-7c7288fb6e90b11d.yaml 
new/castellan-3.6.0/releasenotes/notes/bug-1876102-7c7288fb6e90b11d.yaml
--- old/castellan-3.0.1/releasenotes/notes/bug-1876102-7c7288fb6e90b11d.yaml    
1970-01-01 01:00:00.000000000 +0100
+++ new/castellan-3.6.0/releasenotes/notes/bug-1876102-7c7288fb6e90b11d.yaml    
2020-09-11 21:26:04.000000000 +0200
@@ -0,0 +1,6 @@
+---
+fixes:
+  - |
+    Add a new parameter, ``verify_ssl_path``, that can be used to
+    configure the path to CA certs when verifying requests to
+    Barbican.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/releasenotes/notes/fix-vault-flaky-kv-api-version-b0cd9d62a39d2907.yaml
 
new/castellan-3.6.0/releasenotes/notes/fix-vault-flaky-kv-api-version-b0cd9d62a39d2907.yaml
--- 
old/castellan-3.0.1/releasenotes/notes/fix-vault-flaky-kv-api-version-b0cd9d62a39d2907.yaml
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/castellan-3.6.0/releasenotes/notes/fix-vault-flaky-kv-api-version-b0cd9d62a39d2907.yaml
 2020-09-11 21:26:04.000000000 +0200
@@ -0,0 +1,10 @@
+---
+fixes:
+  - |
+    In some situations, vault will not provide KV API version in the options
+    structure. Vault documentation [1] doesn't cover cases when KV API version
+    is not provided. A new configuration option, with default value equivalent
+    to the latest KV API version available (kv_version=2) was added to allow
+    precise configuration of the KV API being used.
+
+    [1] https://learn.hashicorp.com/vault/secrets-management/sm-versioned-kv
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/castellan-3.0.1/releasenotes/notes/use-barbican-endpoint-type-config-option-e583d30930cc22ba.yaml
 
new/castellan-3.6.0/releasenotes/notes/use-barbican-endpoint-type-config-option-e583d30930cc22ba.yaml
--- 
old/castellan-3.0.1/releasenotes/notes/use-barbican-endpoint-type-config-option-e583d30930cc22ba.yaml
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/castellan-3.6.0/releasenotes/notes/use-barbican-endpoint-type-config-option-e583d30930cc22ba.yaml
       2020-09-11 21:26:04.000000000 +0200
@@ -0,0 +1,6 @@
+---
+fixes:
+  - |
+    ``barbican_endpoint_type`` is now used to retrieve Barbican endpoint URL
+    from service catalog. This config option is set to 'public' by default so
+    it will not change the current behaviour.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/releasenotes/source/conf.py 
new/castellan-3.6.0/releasenotes/source/conf.py
--- old/castellan-3.0.1/releasenotes/source/conf.py     2020-04-13 
19:08:56.000000000 +0200
+++ new/castellan-3.6.0/releasenotes/source/conf.py     2020-09-11 
21:26:04.000000000 +0200
@@ -52,9 +52,10 @@
 master_doc = 'index'
 
 # General information about the project.
-repository_name = 'openstack/castellan'
-bug_project = 'castellan'
-bug_tag = 'doc'
+openstackdocs_repo_name = 'openstack/castellan'
+openstackdocs_auto_name = False
+openstackdocs_bug_project = 'castellan'
+openstackdocs_bug_tag = 'doc'
 project = u'Castellan Release Notes'
 copyright = u'2017, Castellan Developers'
 
@@ -95,7 +96,7 @@
 # show_authors = False
 
 # The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
+pygments_style = 'native'
 
 # A list of ignored prefixes for module index sorting.
 # modindex_common_prefix = []
@@ -144,10 +145,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 = '%Y-%m-%d %H:%M'
-
 # If true, SmartyPants will be used to convert quotes and dashes to
 # typographically correct entities.
 # html_use_smartypants = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/releasenotes/source/index.rst 
new/castellan-3.6.0/releasenotes/source/index.rst
--- old/castellan-3.0.1/releasenotes/source/index.rst   2020-04-13 
19:08:56.000000000 +0200
+++ new/castellan-3.6.0/releasenotes/source/index.rst   2020-09-11 
21:26:04.000000000 +0200
@@ -6,6 +6,7 @@
    :maxdepth: 1
 
    unreleased
+   ussuri
    train
    stein
    rocky
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/releasenotes/source/ussuri.rst 
new/castellan-3.6.0/releasenotes/source/ussuri.rst
--- old/castellan-3.0.1/releasenotes/source/ussuri.rst  1970-01-01 
01:00:00.000000000 +0100
+++ new/castellan-3.6.0/releasenotes/source/ussuri.rst  2020-09-11 
21:26:04.000000000 +0200
@@ -0,0 +1,6 @@
+===========================
+Ussuri Series Release Notes
+===========================
+
+.. release-notes::
+   :branch: stable/ussuri
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/requirements.txt 
new/castellan-3.6.0/requirements.txt
--- old/castellan-3.0.1/requirements.txt        2020-04-13 19:08:56.000000000 
+0200
+++ new/castellan-3.6.0/requirements.txt        2020-09-11 21:26:04.000000000 
+0200
@@ -3,8 +3,7 @@
 # process, which may cause wedges in the gate later.
 
 pbr!=2.1.0,>=2.0.0 # Apache-2.0
-Babel!=2.4.0,>=2.3.4 # BSD
-cryptography>=2.1 # BSD/Apache-2.0
+cryptography>=2.7 # BSD/Apache-2.0
 python-barbicanclient>=4.5.2 # Apache-2.0
 oslo.config>=6.4.0 # Apache-2.0
 oslo.context>=2.19.2 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/setup.cfg 
new/castellan-3.6.0/setup.cfg
--- old/castellan-3.0.1/setup.cfg       2020-04-13 19:09:45.000000000 +0200
+++ new/castellan-3.6.0/setup.cfg       2020-09-11 21:27:14.000000000 +0200
@@ -17,6 +17,7 @@
        Programming Language :: Python :: 3
        Programming Language :: Python :: 3.6
        Programming Language :: Python :: 3.7
+       Programming Language :: Python :: 3.8
        Programming Language :: Python :: 3 :: Only
        Programming Language :: Python :: Implementation :: CPython
 
@@ -34,20 +35,6 @@
        barbican = castellan.key_manager.barbican_key_manager:BarbicanKeyManager
        vault = castellan.key_manager.vault_key_manager:VaultKeyManager
 
-[compile_catalog]
-directory = castellan/locale
-domain = castellan
-
-[update_catalog]
-domain = castellan
-output_dir = castellan/locale
-input_file = castellan/locale/castellan.pot
-
-[extract_messages]
-keywords = _ gettext ngettext l_ lazy_gettext
-mapping_file = babel.cfg
-output_file = castellan/locale/castellan.pot
-
 [egg_info]
 tag_build = 
 tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/setup.py new/castellan-3.6.0/setup.py
--- old/castellan-3.0.1/setup.py        2020-04-13 19:08:56.000000000 +0200
+++ new/castellan-3.6.0/setup.py        2020-09-11 21:26:04.000000000 +0200
@@ -13,17 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT
 import setuptools
 
-# In python < 2.7.4, a lazy loading of package `pbr` will break
-# setuptools if some other modules registered functions in `atexit`.
-# solution from: http://bugs.python.org/issue15881#msg170215
-try:
-    import multiprocessing  # noqa
-except ImportError:
-    pass
-
 setuptools.setup(
     setup_requires=['pbr>=2.0.0'],
     pbr=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/test-requirements.txt 
new/castellan-3.6.0/test-requirements.txt
--- old/castellan-3.0.1/test-requirements.txt   2020-04-13 19:08:56.000000000 
+0200
+++ new/castellan-3.6.0/test-requirements.txt   2020-09-11 21:26:04.000000000 
+0200
@@ -1,7 +1,11 @@
 # The order of packages is significant, because pip processes them in the order
 # of appearance. Changing the order has an impact on the overall integration
 # process, which may cause wedges in the gate later.
-hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0
+hacking>=3.0.1,<3.1.0 # Apache-2.0
+# remove this pyflakes from here once you bump the
+# hacking to 3.2.0 or above. hacking 3.2.0 takes
+# care of pyflakes version compatibilty.
+pyflakes>=2.1.1
 
 coverage!=4.4,>=4.0 # Apache-2.0
 python-barbicanclient>=4.5.2 # Apache-2.0
@@ -11,5 +15,5 @@
 fixtures>=3.0.0 # Apache-2.0/BSD
 testscenarios>=0.4 # Apache-2.0/BSD
 testtools>=2.2.0 # MIT
-bandit>=1.1.0,<1.6.0 # Apache-2.0
+bandit>=1.6.0,<1.7.0 # Apache-2.0
 pifpaf>=0.10.0 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/tools/setup-vault-env.sh 
new/castellan-3.6.0/tools/setup-vault-env.sh
--- old/castellan-3.0.1/tools/setup-vault-env.sh        2020-04-13 
19:08:56.000000000 +0200
+++ new/castellan-3.6.0/tools/setup-vault-env.sh        2020-09-11 
21:26:04.000000000 +0200
@@ -1,7 +1,7 @@
 #!/bin/bash
 set -eux
 if [ -z "$(which vault)" ]; then
-    VAULT_VERSION=0.10.4
+    VAULT_VERSION=1.4.2
     SUFFIX=zip
     case `uname -s` in
         Darwin)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/castellan-3.0.1/tox.ini new/castellan-3.6.0/tox.ini
--- old/castellan-3.0.1/tox.ini 2020-04-13 19:08:56.000000000 +0200
+++ new/castellan-3.6.0/tox.ini 2020-09-11 21:26:04.000000000 +0200
@@ -1,6 +1,6 @@
 [tox]
 minversion = 3.1.1
-envlist = py37,pep8
+envlist = py38,pep8
 ignore_basepython_conflict = True
 skipsdist = True
 
@@ -11,7 +11,7 @@
    VIRTUAL_ENV={envdir}
    OS_TEST_PATH=./castellan/tests/unit
 deps =
-       
-c{env:UPPER_CONSTRAINTS_FILE:https://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt}
+       
-c{env:TOX_CONSTRAINTS_FILE:https://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt}
        -r{toxinidir}/requirements.txt
        -r{toxinidir}/test-requirements.txt
 commands = stestr run --slowest {posargs}
@@ -78,7 +78,6 @@
 
 [testenv:functional]
 usedevelop = True
-install_command = pip install -U {opts} {packages}
 setenv =
     VIRTUAL_ENV={envdir}
     OS_TEST_PATH=./castellan/tests/functional
@@ -87,7 +86,6 @@
 [testenv:functional-vault]
 passenv = HOME
 usedevelop = True
-install_command = pip install -U {opts} {packages}
 setenv =
     VIRTUAL_ENV={envdir}
     OS_TEST_PATH=./castellan/tests/functional


Reply via email to