Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package oci-cli for openSUSE:Factory checked 
in at 2022-12-02 15:47:32
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/oci-cli (Old)
 and      /work/SRC/openSUSE:Factory/.oci-cli.new.1835 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "oci-cli"

Fri Dec  2 15:47:32 2022 rev:31 rq:1039555 version:3.20.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/oci-cli/oci-cli.changes  2022-11-24 
12:23:23.953362356 +0100
+++ /work/SRC/openSUSE:Factory/.oci-cli.new.1835/oci-cli.changes        
2022-12-02 15:47:36.296629271 +0100
@@ -1,0 +2,10 @@
+Thu Dec  1 10:15:23 UTC 2022 - John Paul Adrian Glaubitz 
<adrian.glaub...@suse.com>
+
+- Update to version 3.20.3
+  * Upgraded the cryptography version to (>=3.2.1,<39.0.0)
+    to fix the `OpenSSL Security bug
+    <https://www.openssl.org/blog/blog/2022/11/01/email-address-overflows/>`_
+- Refresh patches for new version
+  + oc_relax-python-depends.patch
+
+-------------------------------------------------------------------

Old:
----
  oci-cli-3.20.2.tar.gz

New:
----
  oci-cli-3.20.3.tar.gz

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

Other differences:
------------------
++++++ oci-cli.spec ++++++
--- /var/tmp/diff_new_pack.maUrcO/_old  2022-12-02 15:47:36.844632342 +0100
+++ /var/tmp/diff_new_pack.maUrcO/_new  2022-12-02 15:47:36.852632387 +0100
@@ -28,7 +28,7 @@
 %bcond_with test
 %endif
 Name:           oci-cli%{psuffix}
-Version:        3.20.2
+Version:        3.20.3
 Release:        0
 Summary:        Oracle Cloud Infrastructure CLI
 License:        Apache-2.0
@@ -46,7 +46,7 @@
 BuildRequires:  python3-cryptography >= 3.2.1
 BuildRequires:  python3-devel
 BuildRequires:  python3-jmespath >= 0.10.0
-BuildRequires:  python3-oci-sdk >= 2.88.1
+BuildRequires:  python3-oci-sdk >= 2.88.2
 BuildRequires:  python3-pyOpenSSL >= 19.1.0
 BuildRequires:  python3-python-dateutil >= 2.5.3
 BuildRequires:  python3-pytz >= 2016.10
@@ -82,7 +82,7 @@
 Requires:       python3-click >= 8.0.4
 Requires:       python3-cryptography >= 3.2.1
 Requires:       python3-jmespath >= 0.10.0
-Requires:       python3-oci-sdk >= 2.88.1
+Requires:       python3-oci-sdk >= 2.88.2
 Requires:       python3-prompt_toolkit >= 3.0.29
 Requires:       python3-pyOpenSSL >= 19.1.0
 Requires:       python3-python-dateutil >= 2.5.3

++++++ oc_relax-python-depends.patch ++++++
--- /var/tmp/diff_new_pack.maUrcO/_old  2022-12-02 15:47:36.900632656 +0100
+++ /var/tmp/diff_new_pack.maUrcO/_new  2022-12-02 15:47:36.904632678 +0100
@@ -1,6 +1,6 @@
-diff -Nru oci-cli-3.20.2.orig/requirements.txt oci-cli-3.20.2/requirements.txt
---- oci-cli-3.20.2.orig/requirements.txt       2022-11-15 12:28:19.000000000 
+0100
-+++ oci-cli-3.20.2/requirements.txt    2022-11-22 16:02:52.530811470 +0100
+diff -Nru oci-cli-3.20.3.orig/requirements.txt oci-cli-3.20.3/requirements.txt
+--- oci-cli-3.20.3.orig/requirements.txt       2022-11-22 22:03:48.000000000 
+0100
++++ oci-cli-3.20.3/requirements.txt    2022-12-01 11:14:31.153750252 +0100
 @@ -2,41 +2,41 @@
  # 
(https://pip.pypa.io/en/stable/reference/pip_install/#requirements-file-format),
  # you may need to use the --extra-index-url option instead.
@@ -12,13 +12,13 @@
  cffi>=1.9.1
 -click==7.1.2
 -coverage==4.5.2
--cryptography>=3.2.1,<=37.0.2
+-cryptography>=3.2.1,<39.0.0
 -httpsig-cffi==15.0.0
 -Jinja2==3.0.3
 -jmespath==0.10.0
 -ndg-httpsclient==0.4.2
 -mock==2.0.0
--oci==2.88.1
+-oci==2.88.2
 -packaging==20.2
 -pluggy==0.13.0
 -py==1.10.0
@@ -37,7 +37,7 @@
 +jmespath>=0.10.0
 +ndg-httpsclient>=0.4.2
 +mock>=2.0.0
-+oci>=2.88.1
++oci>=2.88.2
 +packaging>=20.2
 +pluggy>=0.13.0
 +py>=1.10.0
@@ -75,19 +75,19 @@
 +PyYAML>=5.4
 +docutils>=0.15.2
 +prompt-toolkit>=3.0.29
-diff -Nru oci-cli-3.20.2.orig/setup.py oci-cli-3.20.2/setup.py
---- oci-cli-3.20.2.orig/setup.py       2022-11-15 12:28:19.000000000 +0100
-+++ oci-cli-3.20.2/setup.py    2022-11-22 16:01:12.485722400 +0100
+diff -Nru oci-cli-3.20.3.orig/setup.py oci-cli-3.20.3/setup.py
+--- oci-cli-3.20.3.orig/setup.py       2022-11-22 22:03:48.000000000 +0100
++++ oci-cli-3.20.3/setup.py    2022-12-01 11:15:06.389051934 +0100
 @@ -29,23 +29,23 @@
      readme = f.read()
  
  requires = [
--    'oci==2.88.1',
-+    'oci>=2.88.1',
+-    'oci==2.88.2',
++    'oci>=2.88.2',
      'arrow>=1.0.0',
      'certifi',
 -    'click==7.1.2',
--    'cryptography>=3.2.1,<=37.0.2',
+-    'cryptography>=3.2.1,<39.0.0',
 -    'jmespath==0.10.0',
 -    'python-dateutil>=2.5.3,<3.0.0',
 +    'click>=7.1.2',
@@ -112,116 +112,4 @@
  }
  
  fips_libcrypto_file = os.getenv("OCI_CLI_FIPS_LIBCRYPTO_FILE")
-diff -Nru oci-cli-3.20.2.orig/setup.py~ oci-cli-3.20.2/setup.py~
---- oci-cli-3.20.2.orig/setup.py~      1970-01-01 01:00:00.000000000 +0100
-+++ oci-cli-3.20.2/setup.py~   2022-11-15 12:28:19.000000000 +0100
-@@ -0,0 +1,108 @@
-+# coding: utf-8
-+# Copyright (c) 2016, 2021, Oracle and/or its affiliates.  All rights 
reserved.
-+# This software is dual-licensed to you under the Universal Permissive 
License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache 
License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may 
choose either license.
-+
-+import io
-+import os
-+import re
-+from setuptools import setup, find_packages
-+
-+
-+def open_relative(*path):
-+    """
-+    Opens files in read-only with a fixed utf-8 encoding.
-+
-+    All locations are relative to this setup.py file.
-+    """
-+    here = os.path.abspath(os.path.dirname(__file__))
-+    filename = os.path.join(here, *path)
-+    return io.open(filename, mode="r", encoding="utf-8")
-+
-+with open_relative("src", "oci_cli", "version.py") as fd:
-+    version = re.search(
-+        r"^__version__\s*=\s*['\"]([^'\"]*)['\"]",
-+        fd.read(), re.MULTILINE).group(1)
-+    if not version:
-+        raise RuntimeError("Cannot find version information")
-+
-+with open_relative("README.rst") as f:
-+    readme = f.read()
-+
-+requires = [
-+    'oci==2.88.1',
-+    'arrow>=1.0.0',
-+    'certifi',
-+    'click==7.1.2',
-+    'cryptography>=3.2.1,<=37.0.2',
-+    'jmespath==0.10.0',
-+    'python-dateutil>=2.5.3,<3.0.0',
-+    'pytz>=2016.10',
-+    'six>=1.15.0',
-+    'terminaltables==3.1.0',
-+    'pyOpenSSL>=17.5.0,<=22.0.0',
-+    'PyYAML>=5.4,<6',
-+    'prompt-toolkit==3.0.29'
-+]
-+
-+extras = {
-+    'db': ['cx_Oracle==8.3']
-+}
-+
-+fips_libcrypto_file = os.getenv("OCI_CLI_FIPS_LIBCRYPTO_FILE")
-+if fips_libcrypto_file:
-+    from setuptools.command.easy_install import ScriptWriter
-+    with open('src/oci_cli/oci_template.py', 'r') as template_file:
-+        template = template_file.read()
-+        ScriptWriter.template = template
-+
-+ALL_SERVICES_DIR = "services"
-+package_dirs = {"": "src"}
-+all_packages = find_packages(where="src")
-+package_dirs[ALL_SERVICES_DIR] = os.path.join('.', ALL_SERVICES_DIR)
-+all_packages.extend([ALL_SERVICES_DIR])
-+
-+# Populating package_dirs and all_packages from directories under services
-+packages = find_packages(where=".")
-+service_packages = []
-+for package in packages:
-+    if package.startswith("services"):
-+        service_packages.append(package)
-+        package_path = "."
-+        for pkg in package.split("."):
-+            package_dirs[package] = os.path.join(package_path, pkg)
-+            package_path = os.path.join(package_path, pkg)
-+all_packages.extend(service_packages)
-+
-+setup(
-+    name='oci-cli',
-+    
url='https://docs.cloud.oracle.com/iaas/Content/API/Concepts/cliconcepts.htm',
-+    version=version,
-+    author='Oracle',
-+    author_email='joe.l...@oracle.com',
-+    description='Oracle Cloud Infrastructure CLI',
-+    long_description=readme,
-+    entry_points={
-+        'console_scripts': ["oci=oci_cli.cli:cli",
-+                            
"create_backup_from_onprem=oci_cli.scripts.database.dbaas:create_backup_from_onprem"]
-+    },
-+    install_requires=requires,
-+    extras_require=extras,
-+    packages=all_packages,
-+    package_dir=package_dirs,
-+    include_package_data=True,
-+    python_requires='>=3.6',
-+    license="Universal Permissive License 1.0 or Apache License 2.0",
-+    classifiers=[
-+        "Development Status :: 5 - Production/Stable",
-+        "Environment :: Console",
-+        "Intended Audience :: Information Technology",
-+        "Intended Audience :: Developers",
-+        "License :: OSI Approved :: Apache Software License",
-+        "License :: OSI Approved :: Universal Permissive License (UPL)",
-+        "Programming Language :: Python :: 3 :: Only",
-+        "Programming Language :: Python :: 3.6",
-+        "Programming Language :: Python :: 3.7",
-+        "Programming Language :: Python :: 3.8",
-+        "Programming Language :: Python :: 3.9"
-+    ]
-+)
 

++++++ oci-cli-3.20.2.tar.gz -> oci-cli-3.20.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oci-cli-3.20.2/CHANGELOG.rst 
new/oci-cli-3.20.3/CHANGELOG.rst
--- old/oci-cli-3.20.2/CHANGELOG.rst    2022-11-15 12:28:19.000000000 +0100
+++ new/oci-cli-3.20.3/CHANGELOG.rst    2022-11-22 22:03:48.000000000 +0100
@@ -6,9 +6,15 @@
 
 The format is based on `Keep a Changelog <http://keepachangelog.com/>`__.
 
-3.20.2 - 2022-11-15
+3.20.3 - 2022-11-22
 --------------------
+Fixed
+~~~~~
+
+* Upgraded the cryptography version to (>=3.2.1,<39.0.0) to fix the `OpenSSL 
Security bug 
<https://www.openssl.org/blog/blog/2022/11/01/email-address-overflows/>`_
 
+3.20.2 - 2022-11-15
+--------------------
 Added
 ~~~~~
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oci-cli-3.20.2/THIRD_PARTY_LICENSES.txt 
new/oci-cli-3.20.3/THIRD_PARTY_LICENSES.txt
--- old/oci-cli-3.20.2/THIRD_PARTY_LICENSES.txt 2022-11-15 12:28:19.000000000 
+0100
+++ new/oci-cli-3.20.3/THIRD_PARTY_LICENSES.txt 2022-11-22 22:03:48.000000000 
+0100
@@ -1,5 +1,9 @@
+======================== Third Party Components ========================
+
 arrow
 =============
+LICENSE: https://github.com/arrow-py/arrow/blob/master/LICENSE
+
                                  Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
@@ -202,32 +206,21 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 
+========================================================================
+
+
 certifi
 =============
-Author: Kenneth Reitz and contributors.
+LICENSE: https://github.com/certifi/python-certifi/blob/master/LICENSE
 
-Licensed under the Mozilla Public 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
-
-    https://www.mozilla.org/en-US/MPL/2.0/
-
-Covered Software is provided under this License on an "as is"
-basis, without warranty of any kind, either expressed, implied, or
-statutory, including, without limitation, warranties that the
-Covered Software is free of defects, merchantable, fit for a
-particular purpose or non-infringing. The entire risk as to the
-quality and performance of the Covered Software is with You.
-Should any Covered Software prove defective in any respect, You
-(not any Contributor) assume the cost of any necessary servicing,
-repair, or correction. This disclaimer of warranty constitutes an
-essential part of this License. No use of any Covered Software is
-authorized under this License except under this disclaimer.
+This Source Code Form is subject to the terms of the Mozilla Public License,
+v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain
+one at http://mozilla.org/MPL/2.0/.
 
 ___________________________________________________________________________
 from https://www.mozilla.org/media/MPL/2.0/index.815ca599c9df.txt:
 
-Mozilla Public License Version 2.0 
+Mozilla Public License Version 2.0
 ==================================
 
 1. Definitions
@@ -264,7 +257,7 @@
     means any form of the work other than Source Code Form.
 
 1.7. "Larger Work"
-    means a work that combines Covered Software with other material, in 
+    means a work that combines Covered Software with other material, in
     a separate file or files, that is not Covered Software.
 
 1.8. "License"
@@ -601,10 +594,13 @@
   This Source Code Form is "Incompatible With Secondary Licenses", as
   defined by the Mozilla Public License, v. 2.0.
 
+========================================================================
 
 
 click
 =============
+LICENSE: https://github.com/pallets/click/blob/main/LICENSE.rst
+
 Copyright 2014 Pallets
 
 Redistribution and use in source and binary forms, with or without 
modification, are permitted provided that the following conditions are met:
@@ -615,6 +611,9 @@
 
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+===============================================================================
+
+
 cryptography
 =============
 LICENSE: https://github.com/pyca/cryptography/blob/3.2.x/LICENSE
@@ -623,8 +622,8 @@
 found in LICENSE.APACHE or LICENSE.BSD. Contributions to cryptography are made
 under the terms of *both* these licenses.
 
-The code used in the OpenSSL locking callback and OS random engine is derived
-from CPython, and is licensed under the terms of the PSF License Agreement.
+The code used in the OS random engine is derived from CPython, and is licensed
+under the terms of the PSF License Agreement.
 ___________________________________________________________________________
 
 LICENSE.APACHE: https://github.com/pyca/cryptography/blob/3.2.x/LICENSE.APACHE
@@ -864,90 +863,13 @@
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-=============================================================================================
-
-Fourth-party dependencies:
-
-six LICENSE - MIT:  https://github.com/benjaminp/six/blob/1.15.0/LICENSE
-
-Copyright (c) 2010-2020 Benjamin Peterson
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 
of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-___________________________________________________________________________________________
-
-cffi LICENSE - MIT: 
https://github.com/python-cffi/release-doc/blob/master/LICENSE
-
-MIT License
-
-Copyright (c) 2020 CFFI, Python's C Foreign Function Interface
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-___________________________________________________________________________________________
-
-pycparser LICENSE: https://github.com/eliben/pycparser/blob/master/LICENSE
-
-pycparser -- A C parser in Python
-
-Copyright (c) 2008-2017, Eli Bendersky
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without 
modification,
-are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice, this
-  list of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice,
-  this list of conditions and the following disclaimer in the documentation
-  and/or other materials provided with the distribution.
-* Neither the name of Eli Bendersky nor the names of its contributors may
-  be used to endorse or promote products derived from this software without
-  specific prior written permission.
+===============================================================================
 
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
-GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 cx_Oracle
 =============
+LICENSE: https://github.com/oracle/python-cx_Oracle/blob/main/LICENSE.txt
+
 Copyright 2016, 2019, Oracle and/or its affiliates. All rights reserved.
 
 Portions Copyright 2007-2015, Anthony Tuininga. All rights reserved.
@@ -984,8 +906,13 @@
 
 Computronix is a registered trademark of Computronix (Canada) Ltd.
 
+===============================================================================
+
+
 jmespath
 =============
+LICENSE: https://github.com/jmespath/jmespath.py/blob/develop/LICENSE.txt
+
 Copyright (c) 2013 Amazon.com, Inc. or its affiliates.  All Rights Reserved
 
 Permission is hereby granted, free of charge, to any person obtaining a
@@ -1007,8 +934,13 @@
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 IN THE SOFTWARE.
 
+===============================================================================
+
+
 python-dateutil
 ===============
+LICENSE: https://github.com/dateutil/dateutil/blob/master/LICENSE
+
 Copyright 2017- Paul Ganssle <p...@ganssle.io>
 Copyright 2017- dateutil contributors (see AUTHORS file)
 
@@ -1064,17 +996,40 @@
 
 The above BSD License Applies to all code, even that also covered by Apache 
2.0.
 
+===============================================================================
+
+
 pytz
 =============
-Author: Stuart Bishop
-MIT license.
+LICENSE: https://github.com/stub42/pytz/blob/master/LICENSE.txt
+
+Copyright (c) 2003-2019 Stuart Bishop <stu...@stuartbishop.net>
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
 
-This code is also available as part of Zope 3 under the Zope Public License, 
Version 2.1 (ZPL).
+===============================================================================
 
-I’m happy to relicense this code if necessary for inclusion in other open 
source projects.
 
 retrying
 =============
+LICENSE: https://github.com/rholder/retrying/blob/master/LICENSE
+
                                  Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
@@ -1277,31 +1232,39 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 
+===============================================================================
+
+
 six
 =============
+LICENSE: https://github.com/benjaminp/six/blob/master/LICENSE
 
 Copyright (c) 2010-2020 Benjamin Peterson
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 
of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+===============================================================================
+
 
 terminaltables
 ==============
+LICENSE: https://github.com/Robpol86/terminaltables/blob/master/LICENSE
+
 MIT License
 
 Copyright (c) 2017 Robpol86
@@ -1324,88 +1287,34 @@
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
+===============================================================================
+
+
 idna
 =============
-Copyright (c) 2013-2018, Kim Davies. All rights reserved.
+LICENSE: https://github.com/kjd/idna/blob/master/LICENSE.md
 
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
+BSD 3-Clause License
+
+Copyright (c) 2013-2021, Kim Davies All rights reserved.
 
-#. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
+Redistribution and use in source and binary forms, with or without 
modification, are permitted provided that the following conditions are met:
+
+    1. Redistributions of source code must retain the above copyright notice, 
this list of conditions and the following disclaimer.
+
+    2. Redistributions in binary form must reproduce the above copyright 
notice, this list of conditions and the following disclaimer in the 
documentation and/or other materials provided with the distribution.
+
+    3. Neither the name of the copyright holder nor the names of its 
contributors may be used to endorse or promote products derived from this 
software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+===============================================================================
 
-#. Redistributions in binary form must reproduce the above
-   copyright notice, this list of conditions and the following
-   disclaimer in the documentation and/or other materials provided with
-   the distribution.
-
-#. Neither the name of the copyright holder nor the names of the
-   contributors may be used to endorse or promote products derived
-   from this software without specific prior written permission.
-
-#. THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS "AS IS" AND ANY
-   EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-   PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
-   USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-   DAMAGE.
-
-Portions of the codec implementation and unit tests are derived from the
-Python standard library, which carries the `Python Software Foundation
-License <https://docs.python.org/2/license.html>`_:
-
-   Copyright (c) 2001-2014 Python Software Foundation; All Rights Reserved
-
-Portions of the unit tests are derived from the Unicode standard, which
-is subject to the Unicode, Inc. License Agreement:
-
-   Copyright (c) 1991-2014 Unicode, Inc. All rights reserved.
-   Distributed under the Terms of Use in
-   <http://www.unicode.org/copyright.html>.
-
-   Permission is hereby granted, free of charge, to any person obtaining
-   a copy of the Unicode data files and any associated documentation
-   (the "Data Files") or Unicode software and any associated documentation
-   (the "Software") to deal in the Data Files or Software
-   without restriction, including without limitation the rights to use,
-   copy, modify, merge, publish, distribute, and/or sell copies of
-   the Data Files or Software, and to permit persons to whom the Data Files
-   or Software are furnished to do so, provided that
-
-   (a) this copyright and permission notice appear with all copies
-   of the Data Files or Software,
-
-   (b) this copyright and permission notice appear in associated
-   documentation, and
-
-   (c) there is clear notice in each modified Data File or in the Software
-   as well as in the documentation associated with the Data File(s) or
-   Software that the data or software has been modified.
-
-   THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
-   ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-   WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-   NONINFRINGEMENT OF THIRD PARTY RIGHTS.
-   IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
-   NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
-   DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-   DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-   TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-   PERFORMANCE OF THE DATA FILES OR SOFTWARE.
-
-   Except as contained in this notice, the name of a copyright holder
-   shall not be used in advertising or otherwise to promote the sale,
-   use or other dealings in these Data Files or Software without prior
-   written authorization of the copyright holder.
 
 pyOpenSSL
 =============
+LICENSE: https://github.com/pyca/pyopenssl/blob/main/LICENSE
+
 Copyright 2001 The pyOpenSSL developers
 
 
@@ -1611,8 +1520,13 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 
+===============================================================================
+
+
 PyYAML
 =============
+LICENSE: https://github.com/yaml/pyyaml/blob/master/LICENSE
+
 Copyright (c) 2017-2021 Ingy döt Net
 Copyright (c) 2006-2016 Kirill Simonov
 
@@ -1632,4 +1546,160 @@
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
\ No newline at end of file
+SOFTWARE.
+
+===============================================================================
+
+
+prompt-toolkit
+=============
+LICENSE: 
https://github.com/prompt-toolkit/python-prompt-toolkit/blob/master/LICENSE
+
+Copyright (c) 2014, Jonathan Slenders
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without 
modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice, 
this
+  list of conditions and the following disclaimer in the documentation and/or
+  other materials provided with the distribution.
+
+* Neither the name of the {organization} nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 
FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+===============================================================================
+
+
+======================== Fourth Party Dependencies ========================
+
+
+cffi
+=============
+LICENSE: https://github.com/python-cffi/release-doc/blob/master/LICENSE
+
+MIT License
+
+Copyright (c) 2020 CFFI, Python's C Foreign Function Interface
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.SOFTWARE.
+
+===============================================================================
+
+
+circuitbreaker
+=============
+LICENSE: https://github.com/fabfuel/circuitbreaker/blob/develop/LICENSE.rst
+
+Copyright (c) 2016-2020, Fabian Fuelling opensou...@fabfuel.de. All rights 
reserved.
+
+Redistribution and use in source and binary forms, with or without 
modification, are permitted provided that the following conditions are met:
+
+    Redistributions of source code must retain the above copyright notice, 
this list of conditions and the following disclaimer.
+    Redistributions in binary form must reproduce the above copyright notice, 
this list of conditions and the following disclaimer in the documentation 
and/or other materials provided with the distribution.
+    Neither the name of Fabian Fuelling nor the names of his contributors may 
be used to endorse or promote products derived from this software without 
specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+===============================================================================
+
+
+pycparser
+=============
+LICENSE: https://github.com/eliben/pycparser/blob/master/LICENSE
+
+pycparser -- A C parser in Python
+
+Copyright (c) 2008-2017, Eli Bendersky
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without 
modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Eli Bendersky nor the names of its contributors may
+  be used to endorse or promote products derived from this software without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+===============================================================================
+
+
+wcwidth
+=============
+LICENSE: https://github.com/jquast/wcwidth/blob/master/LICENSE
+
+The MIT License (MIT)
+
+Copyright (c) 2014 Jeff Quast <cont...@jeffquast.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+Markus Kuhn -- 2007-05-26 (Unicode 5.0)
+
+Permission to use, copy, modify, and distribute this software
+for any purpose and without fee is hereby granted. The author
+disclaims all warranties with regard to this software.
+
+===============================================================================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oci-cli-3.20.2/requirements.txt 
new/oci-cli-3.20.3/requirements.txt
--- old/oci-cli-3.20.2/requirements.txt 2022-11-15 12:28:19.000000000 +0100
+++ new/oci-cli-3.20.3/requirements.txt 2022-11-22 22:03:48.000000000 +0100
@@ -8,13 +8,13 @@
 cffi>=1.9.1
 click==7.1.2
 coverage==4.5.2
-cryptography>=3.2.1,<=37.0.2
+cryptography>=3.2.1,<39.0.0
 httpsig-cffi==15.0.0
 Jinja2==3.0.3
 jmespath==0.10.0
 ndg-httpsclient==0.4.2
 mock==2.0.0
-oci==2.88.1
+oci==2.88.2
 packaging==20.2
 pluggy==0.13.0
 py==1.10.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oci-cli-3.20.2/scripts/install/install.py 
new/oci-cli-3.20.3/scripts/install/install.py
--- old/oci-cli-3.20.2/scripts/install/install.py       2022-11-15 
12:28:19.000000000 +0100
+++ new/oci-cli-3.20.3/scripts/install/install.py       2022-11-22 
22:03:48.000000000 +0100
@@ -304,13 +304,12 @@
     # Check if we should install a local full-install bundle.
     oci_cli_whl_files = glob.glob(match_wheel)
     if os.path.exists('./' + dependency_dir) and len(oci_cli_whl_files) > 0:
+        dependency_dir = DEFAULT_DEPENDENCY_DIR + 
'/python{}{}.html'.format(sys.version_info.major, sys.version_info.minor)
         print_status("Installing {} from local 
resources.".format(oci_cli_whl_files[0]))
         cmd = [path_to_pip, 'install', '--cache-dir', tmp_dir, 
oci_cli_whl_files[0], '--upgrade', '--find-links', dependency_dir]
 
     elif OFFLINE_INSTALL:
-        # # Since cffi is a 4th party library which cryptography uses, it 
needs to be installed first in the offline installation
-        # cmd = [path_to_pip, 'install', 'cffi', '--find-links', 
dependency_dir, '--no-index']
-        # exec_command(cmd, env=env)
+        dependency_dir = DEFAULT_DEPENDENCY_DIR + 
'/python{}{}.html'.format(sys.version_info.major, sys.version_info.minor)
         cmd = [path_to_pip, 'install', cli_package_name, '--find-links', 
dependency_dir, '--no-index', '--ignore-requires-python']
     else:
         cmd = [path_to_pip, 'install', '--cache-dir', tmp_dir, 
cli_package_name, '--upgrade']
@@ -626,9 +625,7 @@
     global OFFLINE_INSTALL
     OFFLINE_INSTALL = args.offline_install
     dependency_dir = args.dependency_dir
-    if dependency_dir is None and OFFLINE_INSTALL:
-        dependency_dir = DEFAULT_DEPENDENCY_DIR + 
'/python{}{}'.format(sys.version_info.major, sys.version_info.minor)
-    elif dependency_dir is None:
+    if dependency_dir is None:
         dependency_dir = DEFAULT_DEPENDENCY_DIR
     global DRY_RUN
     DRY_RUN = args.dry_run
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oci-cli-3.20.2/services/object_storage/tests/common/util.py 
new/oci-cli-3.20.3/services/object_storage/tests/common/util.py
--- old/oci-cli-3.20.2/services/object_storage/tests/common/util.py     
1970-01-01 01:00:00.000000000 +0100
+++ new/oci-cli-3.20.3/services/object_storage/tests/common/util.py     
2022-11-22 22:03:48.000000000 +0100
@@ -0,0 +1,10 @@
+# coding: utf-8
+# Copyright (c) 2016, 2022, Oracle and/or its affiliates. All rights reserved.
+
+import os
+import shutil
+
+
+def remove_dir_at_path(path):
+    if os.path.exists(path):
+        shutil.rmtree(path)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oci-cli-3.20.2/services/object_storage/tests/integ/test_object_storage_sync_download.py
 
new/oci-cli-3.20.3/services/object_storage/tests/integ/test_object_storage_sync_download.py
--- 
old/oci-cli-3.20.2/services/object_storage/tests/integ/test_object_storage_sync_download.py
 2022-11-15 12:28:19.000000000 +0100
+++ 
new/oci-cli-3.20.3/services/object_storage/tests/integ/test_object_storage_sync_download.py
 2022-11-22 22:03:48.000000000 +0100
@@ -932,7 +932,8 @@
 
 def cleanup_files_from_local(file_set):
     for file in file_set:
-        os.remove(file)
+        if os.path.exists(file):
+            os.remove(file)
 
 
 def create_new_objects_remote(client, bucket_name, no_of_files_to_create, 
with_content=False, extension='txt',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oci-cli-3.20.2/services/object_storage/tests/integ/test_object_storage_sync_upload.py
 
new/oci-cli-3.20.3/services/object_storage/tests/integ/test_object_storage_sync_upload.py
--- 
old/oci-cli-3.20.2/services/object_storage/tests/integ/test_object_storage_sync_upload.py
   2022-11-15 12:28:19.000000000 +0100
+++ 
new/oci-cli-3.20.3/services/object_storage/tests/integ/test_object_storage_sync_upload.py
   2022-11-22 22:03:48.000000000 +0100
@@ -16,6 +16,7 @@
 from test_object_storage_sync_download import parse_dry_run_result, \
     generate_random_string, create_new_objects_remote, create_new_files_local, 
cleanup_files_from_local
 from tests import util
+import services.object_storage.tests.common.util as object_storage_util
 
 OBJECTS_TO_CREATE_IN_REMOTE_FOR_SYNC = 20
 
@@ -30,6 +31,10 @@
     '': []
 }
 
+new_path = 'new_path'
+new_files_set = 'new_files_set'
+new_dir = 'new_dir'
+
 
 @pytest.fixture(params=[False])
 def debug(request):
@@ -86,6 +91,14 @@
                            sync_upload_bucket_name, '--force'], debug=debug)
 
 
+@pytest.fixture()
+def cleanup_new_content_set():
+    data = {new_files_set: {}, new_dir: ''}
+    yield data
+    cleanup_files_from_local(data[new_files_set])
+    object_storage_util.remove_dir_at_path(data[new_dir])
+
+
 @util.skip_while_rerecording
 def test_sync_src_dry_run(object_storage_client, debug):
     """
@@ -162,7 +175,7 @@
 
 
 @util.skip_while_rerecording
-def test_sync_src_new_objects(object_storage_client):
+def test_sync_src_new_objects(object_storage_client, cleanup_new_content_set):
     """
     1. Upload the files to remote and validate the output and file contents
     2. Create a new file in local
@@ -176,6 +189,7 @@
     new_object_name = 'a/new_object'
     new_file_contents = {new_object_name: 
bulk_operation.generate_random_string(bulk_operation.CONTENT_STRING_LENGTH)}
     new_file_path = os.path.join(sync_upload_test_dir, new_object_name)
+    cleanup_new_content_set[new_files_set] = {new_file_path}
     with open(new_file_path, 'w') as fh:
         fh.write(new_file_contents[new_object_name])
 
@@ -425,7 +439,7 @@
 
 
 @util.skip_while_rerecording
-def test_sync_src_with_delete_and_include(object_storage_client):
+def test_sync_src_with_delete_and_include(object_storage_client, 
cleanup_new_content_set):
     """
     1. Create new set of objects in local with .pdf and .doc extensions.
     2. Perform a dry run with --delete to include only *.pdf and validate that 
only .pdf files are transferred.
@@ -439,6 +453,8 @@
 
     l_file_set_1 = create_new_files_local(sync_upload_test_dir, 3, 
extension='pdf')
     l_file_set_2 = create_new_files_local(sync_upload_test_dir, 5, 
extension='doc')
+    cleanup_new_content_set[new_files_set] = l_file_set_1.union(l_file_set_2)
+    cleanup_new_content_set[new_dir] = os.path.join(sync_upload_test_dir, 
'dir')
 
     result = bulk_operation.invoke(['os', 'object', 'sync', '--namespace', 
util.NAMESPACE, '--bucket-name',
                                     sync_upload_bucket_name, '--src-dir', 
sync_upload_test_dir, '--delete',
@@ -479,11 +495,9 @@
     assert parsed_result['skipped-objects'] == []
     assert set(parsed_result['deleted-objects']) == r_obj_set_1
 
-    cleanup_files_from_local(l_file_set_1.union(l_file_set_2))
-
 
 @util.skip_while_rerecording
-def test_sync_src_with_delete_and_exclude(object_storage_client, debug):
+def test_sync_src_with_delete_and_exclude(object_storage_client, debug, 
cleanup_new_content_set):
     """
     1. Create new set of objects in local with .pdf and .doc extensions.
     2. Perform a dry run with --delete to exclude only *.pdf and validate that 
all other files are transferred.
@@ -497,6 +511,8 @@
 
     l_file_set_1 = create_new_files_local(sync_upload_test_dir, 3, 
extension='pdf')
     l_file_set_2 = create_new_files_local(sync_upload_test_dir, 5, 
extension='doc')
+    cleanup_new_content_set[new_files_set] = l_file_set_1.union(l_file_set_2)
+    cleanup_new_content_set[new_dir] = os.path.join(sync_upload_test_dir, 
'dir')
 
     result = bulk_operation.invoke(['os', 'object', 'sync', '--namespace', 
util.NAMESPACE, '--bucket-name',
                                     sync_upload_bucket_name, '--src-dir', 
sync_upload_test_dir, '--delete',
@@ -537,8 +553,6 @@
     assert parsed_result['skipped-objects'] == []
     assert set(parsed_result['deleted-objects']) == r_obj_set_2
 
-    cleanup_files_from_local(l_file_set_1.union(l_file_set_2))
-
 
 @util.skip_while_rerecording
 def test_sync_src_with_delete_and_prefix(object_storage_client, debug):
@@ -601,7 +615,7 @@
 
 
 @util.skip_while_rerecording
-def test_sync_src_with_delete_include_and_prefix(object_storage_client, debug):
+def test_sync_src_with_delete_include_and_prefix(object_storage_client, debug, 
cleanup_new_content_set):
     """
     Assert that scope of file transfer and delete is only limited to --include 
pattern within the bucket prefix
 
@@ -621,6 +635,8 @@
 
     l_file_set_1 = create_new_files_local(sync_upload_test_dir, 6, 
extension='pdf')
     l_file_set_2 = create_new_files_local(sync_upload_test_dir, 4, 
extension='doc')
+    cleanup_new_content_set[new_files_set] = l_file_set_1.union(l_file_set_2)
+    cleanup_new_content_set[new_dir] = os.path.join(sync_upload_test_dir, 
'dir')
 
     result = bulk_operation.invoke(['os', 'object', 'sync', '--namespace', 
util.NAMESPACE, '--bucket-name',
                                     sync_upload_bucket_name, '--src-dir', 
sync_upload_test_dir, '--prefix',
@@ -663,11 +679,10 @@
     assert set(parsed_result['uploaded-objects']) == 
set([(os.path.join(_prefix, f[len(sync_upload_test_dir):].replace(os.sep, 
'/').strip('/'))) for f in l_file_set_1.union(l_file_set_2)])
     assert parsed_result['skipped-objects'] == []
     assert set(parsed_result['deleted-objects']) == r_obj_set_1
-    cleanup_files_from_local(l_file_set_1.union(l_file_set_2))
 
 
 @util.skip_while_rerecording
-def test_sync_src_with_delete_exclude_and_prefix(object_storage_client, debug):
+def test_sync_src_with_delete_exclude_and_prefix(object_storage_client, debug, 
cleanup_new_content_set):
     """
     Assert that scope of file transfer and delete is only limited to --exclude 
pattern within the bucket prefix
 
@@ -686,6 +701,8 @@
     _prefix = 'upload_prefix_exclude_delete/'
     l_file_set_1 = create_new_files_local(sync_upload_test_dir, 6, 
extension='pdf')
     l_file_set_2 = create_new_files_local(sync_upload_test_dir, 4, 
extension='doc')
+    cleanup_new_content_set[new_files_set] = l_file_set_1.union(l_file_set_2)
+    cleanup_new_content_set[new_dir] = os.path.join(sync_upload_test_dir, 
'dir')
 
     result = bulk_operation.invoke(['os', 'object', 'sync', '--namespace', 
util.NAMESPACE, '--bucket-name',
                                     sync_upload_bucket_name, '--src-dir', 
sync_upload_test_dir, '--prefix',
@@ -728,7 +745,6 @@
     assert set(parsed_result['uploaded-objects']) == 
set([(os.path.join(_prefix, o).replace(os.sep, '/')) for o in 
sync_local_object_content.keys()])
     assert parsed_result['skipped-objects'] == []
     assert set(parsed_result['deleted-objects']) == r_obj_set_2
-    cleanup_files_from_local(l_file_set_1.union(l_file_set_2))
 
 
 @util.skip_while_rerecording
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oci-cli-3.20.2/services/object_storage/tests/unit/test_objectstorage_extended.py
 
new/oci-cli-3.20.3/services/object_storage/tests/unit/test_objectstorage_extended.py
--- 
old/oci-cli-3.20.2/services/object_storage/tests/unit/test_objectstorage_extended.py
        2022-11-15 12:28:19.000000000 +0100
+++ 
new/oci-cli-3.20.3/services/object_storage/tests/unit/test_objectstorage_extended.py
        2022-11-22 22:03:48.000000000 +0100
@@ -469,7 +469,7 @@
         assert "Error: Missing option(s) --bucket-name, --name, --access-type, 
--time-expires." in result.output
 
         result = util.invoke_command(['os', 'preauth-request', 'create', 
'--bucket-name', 'b001', '--name', 'par', '--access-type', 'new-access', 
'--time-expires', '2017-09-15T20:30:00.123456Z'])
-        assert "Error: Invalid value for '--access-type': invalid choice: 
new-access. (choose from ObjectRead, ObjectWrite, ObjectReadWrite, 
AnyObjectWrite, AnyObjectRead, AnyObjectReadWrite)" in result.output
+        assert "Error: Invalid value for '--access-type': invalid choice: 
new-access." in result.output
 
     def test_preauth_request_delete(self):
         result = util.invoke_command(['os', 'preauth-request', 'delete'])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oci-cli-3.20.2/services/rover/src/oci_cli_rover/rover_utils.py 
new/oci-cli-3.20.3/services/rover/src/oci_cli_rover/rover_utils.py
--- old/oci-cli-3.20.2/services/rover/src/oci_cli_rover/rover_utils.py  
2022-11-15 12:28:19.000000000 +0100
+++ new/oci-cli-3.20.3/services/rover/src/oci_cli_rover/rover_utils.py  
2022-11-22 22:03:48.000000000 +0100
@@ -96,6 +96,71 @@
     return image_workload_name
 
 
+def get_object_storage_helper(ctx):
+    # Override the region for r1 for os public endpoint
+    if 'config' in ctx.obj:
+        if 'region' in ctx.obj['config'] and ctx.obj['config']['region']:  # 
region present in ~/.oci/config
+            if ctx.obj['config']['region'].strip().split(".")[0] == "r1":
+                region = ctx.obj['config']['region']
+                ctx.obj['region'] = "r1.oracleiaas.com"
+                object_cli = cli_util.build_client('object_storage', 
'object_storage', ctx)
+                ctx.obj['region'] = region
+                return object_cli
+    return cli_util.build_client('object_storage', 'object_storage', ctx)
+
+
+def validate_get_image(ctx, **kwargs):
+    if 'image_id' in kwargs and not kwargs['image_id']:
+        raise click.UsageError('Parameter image-id cannot be whitespace or 
empty string')
+    image_id = kwargs['image_id']
+    try:
+        compute_image_obj = get_compute_image_helper(ctx, image_id)
+        if compute_image_obj is None or compute_image_obj.data is None:
+            raise click.UsageError("Image not authorized or not found")
+    except Exception as e:
+        raise click.UsageError("Image not authorized or not found")
+    return compute_image_obj
+
+
+def validate_bucket(compartment_id, ctx, **kwargs):
+    if kwargs['type'].lower() == "bucket":
+        if not ('bucket_name' in kwargs and kwargs['bucket_name']):
+            raise click.UsageError('Parameter bucket-name cannot be whitespace 
or empty string')
+        try:
+            object_storage_obj = get_object_storage_helper(ctx)
+            kwargs_os = {
+                'compartment_id': compartment_id}
+            namespace = object_storage_obj.get_namespace(**kwargs_os).data
+            result = object_storage_obj.get_bucket(
+                namespace_name=namespace,
+                bucket_name=kwargs['bucket_name']
+            )
+            if result is None or result.data is None:
+                raise click.UsageError("Bucket not authorized or not found")
+        except Exception as e:
+            raise click.UsageError("Bucket not authorized or not found")
+    return result
+
+
+def prepare_bucket_workload_data(result_bucket, **kwargs):
+    workload_data = [{
+        "workloadType": "BUCKET", "id": result_bucket.data.name, "name": 
kwargs['bucket_name'],
+        "compartmentId": result_bucket.data.compartment_id,
+        'prefix': kwargs['prefix'], 'rangeStart': kwargs['range_start'], 
'rangeEnd': kwargs['range_end']
+    }]
+    return workload_data
+
+
+def prepare_image_workload_data(compute_image_obj, image_id):
+    compute_image_obj_name = 
modify_image_workload_name(compute_image_obj.data.display_name)
+    workload_data = [
+        {'workloadType': "IMAGE", 'id': image_id, 'name': 
compute_image_obj_name,
+         'size': compute_image_obj.data.size_in_mbs, 'compartmentId': 
compute_image_obj.data.compartment_id,
+         }
+    ]
+    return workload_data
+
+
 def create_master_key_policy_rover_resource(resource_name, ctx, **kwargs):
     confirm_prompt_policy = "You are providing your own master key ID, please 
create a policy to allow " \
                             "Roving Edge Infrastructure to create DEKs and use 
the master key ID to encrypt " \
@@ -201,66 +266,3 @@
     if 'policy_compartment_id' in kwargs:
         kwargs.pop('policy_compartment_id')
     return kwargs
-
-
-def get_object_storage_helper(ctx):
-    # Override the region for r1 for os public endpoint
-    if 'config' in ctx.obj:
-        if 'region' in ctx.obj['config'] and ctx.obj['config']['region']:  # 
region present in ~/.oci/config
-            if ctx.obj['config']['region'].strip().split(".")[0] == "r1":
-                region = ctx.obj['config']['region']
-                ctx.obj['region'] = "r1.oracleiaas.com"
-                object_cli = cli_util.build_client('object_storage', 
'object_storage', ctx)
-                ctx.obj['region'] = region
-                return object_cli
-    return cli_util.build_client('object_storage', 'object_storage', ctx)
-
-
-def validate_get_image(ctx, **kwargs):
-    if 'image_id' in kwargs and not kwargs['image_id']:
-        raise click.UsageError('Parameter image-id cannot be whitespace or 
empty string')
-    image_id = kwargs['image_id']
-    try:
-        compute_image_obj = get_compute_image_helper(ctx, image_id)
-        if compute_image_obj is None or compute_image_obj.data is None:
-            raise click.UsageError("Image not authorized or not found")
-    except Exception as e:
-        raise click.UsageError("Image not authorized or not found")
-    return compute_image_obj
-
-
-def validate_bucket(ctx, **kwargs):
-    if kwargs['type'].lower() == "bucket":
-        if not ('bucket_name' in kwargs and kwargs['bucket_name']):
-            raise click.UsageError('Parameter bucket-name cannot be whitespace 
or empty string')
-        try:
-            object_storage_obj = get_object_storage_helper(ctx)
-            namespace = object_storage_obj.get_namespace().data
-            result = object_storage_obj.get_bucket(
-                namespace_name=namespace,
-                bucket_name=kwargs['bucket_name']
-            )
-            if result is None or result.data is None:
-                raise click.UsageError("Bucket not authorized or not found")
-        except Exception as e:
-            raise click.UsageError("Bucket not authorized or not found")
-    return result
-
-
-def prepare_bucket_workload_data(result_bucket, **kwargs):
-    workload_data = [{
-        "workloadType": "BUCKET", "id": result_bucket.data.name, "name": 
kwargs['bucket_name'],
-        "compartmentId": result_bucket.data.compartment_id,
-        'prefix': kwargs['prefix'], 'rangeStart': kwargs['range_start'], 
'rangeEnd': kwargs['range_end']
-    }]
-    return workload_data
-
-
-def prepare_image_workload_data(compute_image_obj, image_id):
-    compute_image_obj_name = 
modify_image_workload_name(compute_image_obj.data.display_name)
-    workload_data = [
-        {'workloadType': "IMAGE", 'id': image_id, 'name': 
compute_image_obj_name,
-         'size': compute_image_obj.data.size_in_mbs, 'compartmentId': 
compute_image_obj.data.compartment_id,
-         }
-    ]
-    return workload_data
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oci-cli-3.20.2/services/rover/src/oci_cli_rover_cluster/rovercluster_utils.py
 
new/oci-cli-3.20.3/services/rover/src/oci_cli_rover_cluster/rovercluster_utils.py
--- 
old/oci-cli-3.20.2/services/rover/src/oci_cli_rover_cluster/rovercluster_utils.py
   2022-11-15 12:28:19.000000000 +0100
+++ 
new/oci-cli-3.20.3/services/rover/src/oci_cli_rover_cluster/rovercluster_utils.py
   2022-11-22 22:03:48.000000000 +0100
@@ -174,7 +174,7 @@
     result = get_rover_cluster_helper(ctx, kwargs['cluster_id'])
 
     if kwargs['type'].lower() == "bucket":
-        result_bucket = validate_bucket(ctx, **kwargs)
+        result_bucket = validate_bucket(result.data.compartment_id, ctx, 
**kwargs)
 
         workload_id = result_bucket.data.name
         workload_data = prepare_bucket_workload_data(result_bucket, **kwargs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oci-cli-3.20.2/services/rover/src/oci_cli_rover_node/rovernode_cli_extended.py
 
new/oci-cli-3.20.3/services/rover/src/oci_cli_rover_node/rovernode_cli_extended.py
--- 
old/oci-cli-3.20.2/services/rover/src/oci_cli_rover_node/rovernode_cli_extended.py
  2022-11-15 12:28:19.000000000 +0100
+++ 
new/oci-cli-3.20.3/services/rover/src/oci_cli_rover_node/rovernode_cli_extended.py
  2022-11-22 22:03:48.000000000 +0100
@@ -364,8 +364,7 @@
     result = get_rover_node_helper(ctx, kwargs['node_id'])
 
     if kwargs['type'].lower() == "bucket":
-        result_bucket = validate_bucket(ctx, **kwargs)
-
+        result_bucket = validate_bucket(result.data.compartment_id, ctx, 
**kwargs)
         workload_id = result_bucket.data.name
         workload_data = prepare_bucket_workload_data(result_bucket, **kwargs)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oci-cli-3.20.2/setup.py new/oci-cli-3.20.3/setup.py
--- old/oci-cli-3.20.2/setup.py 2022-11-15 12:28:19.000000000 +0100
+++ new/oci-cli-3.20.3/setup.py 2022-11-22 22:03:48.000000000 +0100
@@ -29,11 +29,11 @@
     readme = f.read()
 
 requires = [
-    'oci==2.88.1',
+    'oci==2.88.2',
     'arrow>=1.0.0',
     'certifi',
     'click==7.1.2',
-    'cryptography>=3.2.1,<=37.0.2',
+    'cryptography>=3.2.1,<39.0.0',
     'jmespath==0.10.0',
     'python-dateutil>=2.5.3,<3.0.0',
     'pytz>=2016.10',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oci-cli-3.20.2/src/oci_cli/version.py 
new/oci-cli-3.20.3/src/oci_cli/version.py
--- old/oci-cli-3.20.2/src/oci_cli/version.py   2022-11-15 12:28:19.000000000 
+0100
+++ new/oci-cli-3.20.3/src/oci_cli/version.py   2022-11-22 22:03:48.000000000 
+0100
@@ -2,4 +2,4 @@
 # Copyright (c) 2016, 2021, Oracle and/or its affiliates.  All rights reserved.
 # This software is dual-licensed to you under the Universal Permissive License 
(UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 
as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either 
license.
 
-__version__ = '3.20.2'
+__version__ = '3.20.3'

Reply via email to