diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9d945567450344fa94ec9e6280095e86a6c532b0..08aef91b213be4ddd939a50b8dc41a603a8cc14f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -9,7 +9,7 @@ default_language_version: repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: ebc15addedad713c86ef18ae9632c88e187dd0af # v3.1.0 + rev: 9136088a246768144165fcc3ecc3d31bb686920a # v3.3.0 hooks: - id: trailing-whitespace # Replaces or checks mixed line ending @@ -27,9 +27,13 @@ repos: - id: debug-statements - id: check-yaml files: .*\.(yaml|yml)$ - - repo: https://gitlab.com/pycqa/flake8 - rev: 181bb46098dddf7e2d45319ea654b4b4d58c2840 # 3.8.3 + - repo: local hooks: - id: flake8 + name: flake8 additional_dependencies: - hacking>=3.0.1,<3.1.0 + language: python + entry: flake8 + files: '^.*\.py$' + exclude: '^(doc|releasenotes|tools)/.*$' diff --git a/.zuul.yaml b/.zuul.yaml index 4eb1657eca976c253448e8ba55a25f88fa8a4815..81fe9a18f4772a6e5488dfd031b0197dfc95d4b1 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -2,6 +2,6 @@ templates: - check-requirements - lib-forward-testing-python3 - - openstack-python3-wallaby-jobs + - openstack-python3-xena-jobs - publish-openstack-docs-pti - release-notes-jobs-python3 diff --git a/lower-constraints.txt b/lower-constraints.txt deleted file mode 100644 index eeabb356c984030d866df06a012d8a55f331bf7f..0000000000000000000000000000000000000000 --- a/lower-constraints.txt +++ /dev/null @@ -1,47 +0,0 @@ -alabaster==0.7.10 -Babel==2.3.4 -bandit==1.6.0 -coverage==4.0 -ddt==1.0.1 -debtcollector==1.2.0 -docutils==0.11 -dulwich==0.15.0 -eventlet==0.18.2 -extras==1.0.0 -fasteners==0.7.0 -fixtures==3.0.0 -gitdb==0.6.4 -GitPython==1.0.1 -greenlet==0.4.15 -imagesize==0.7.1 -iso8601==0.1.11 -Jinja2==2.10 -linecache2==1.0.0 -lxml==4.5.0 -MarkupSafe==1.0 -netaddr==0.7.18 -netifaces==0.10.4 -oslo.concurrency==3.26.0 -oslo.config==5.2.0 -oslo.context==2.19.2 -oslo.i18n==3.15.3 -oslo.utils==3.33.0 -pbr==2.0.0 -Pygments==2.2.0 -pyparsing==2.1.0 -python-mimeparse==1.6.0 -python-subunit==1.0.0 -pytz==2013.6 -PyYAML==3.13 -requests==2.14.2 -rfc3986==0.3.1 -smmap==0.9.0 -snowballstemmer==1.2.1 -stestr==2.0.0 -stevedore==1.20.0 -suds-jurko==0.6 -testtools==2.2.0 -traceback2==1.4.0 -unittest2==1.1.0 -urllib3==1.21.1 -wrapt==1.7.0 diff --git a/oslo_vmware/rw_handles.py b/oslo_vmware/rw_handles.py index e3769ecd467d9376084b5c7f78e014dd0b88b093..a7b3e7256fec396e3f3162d7524b99dd450b46af 100644 --- a/oslo_vmware/rw_handles.py +++ b/oslo_vmware/rw_handles.py @@ -556,6 +556,10 @@ class VmdkWriteHandle(VmdkHandle): """ try: self._release_lease() + except exceptions.ManagedObjectNotFoundException: + LOG.info("Lease for %(url)s not found. No need to release.", + {'url': self._url}) + return except exceptions.VimException: LOG.warning("Error occurred while releasing the lease " "for %s.", @@ -637,6 +641,10 @@ class VmdkReadHandle(VmdkHandle): """ try: self._release_lease() + except exceptions.ManagedObjectNotFoundException: + LOG.info("Lease for %(url)s not found. No need to release.", + {'url': self._url}) + return except exceptions.VimException: LOG.warning("Error occurred while releasing the lease " "for %s.", diff --git a/oslo_vmware/tests/test_vim_util.py b/oslo_vmware/tests/test_vim_util.py index 43c02bc1e9b6abde903bd699b49d26f9138d288c..e35294cdce838cd0fb7eae9b70eda3302989125c 100644 --- a/oslo_vmware/tests/test_vim_util.py +++ b/oslo_vmware/tests/test_vim_util.py @@ -527,3 +527,33 @@ class VimUtilTest(base.TestCase): self.assertEqual({"test_name_0": "test_val_0", "test_name_1": "test_val_1"}, vim_util.propset_dict(mock_propset)) + + def test_serialize_object(self): + self.assertEqual({}, vim_util.serialize_object({})) + + mobj1 = mock.MagicMock() + mobj1.__keylist__ = ['asdf'] + mobj1.keys = lambda: ['asdf'] + mobj1.__getitem__.side_effect = [1] + + mobj2 = mock.Mock() + + mobj3 = mock.MagicMock() + mobj3.__keylist__ = ['subkey1', 'subkey2'] + mobj3.keys = lambda: ['subkey1', 'subkey2'] + mobj3.__getitem__.side_effect = ['subvalue1', True] + + mobj4 = 12 + + obj = { + 'foo': mobj1, + 'bar': [mobj2, mobj3], + 'baz': mobj4 + } + + expected = { + 'foo': {'asdf': 1}, + 'bar': [mobj2, {'subkey1': 'subvalue1', 'subkey2': True}], + 'baz': 12 + } + self.assertEqual(expected, vim_util.serialize_object(obj)) diff --git a/oslo_vmware/vim_util.py b/oslo_vmware/vim_util.py index b2c9d2c71ec762a7f310ca240baca436be30aae5..945c98a093ef294f6035eac4dacd88d450fd5a76 100644 --- a/oslo_vmware/vim_util.py +++ b/oslo_vmware/vim_util.py @@ -694,3 +694,21 @@ def storage_placement_spec(client_factory, spec.resourcePool = res_pool_ref spec.host = host_ref return spec + + +def serialize_object(obj): + """Convert Suds object into serializable format - a dict.""" + d = {} + for k, v in dict(obj).items(): + if hasattr(v, '__keylist__'): + d[k] = serialize_object(v) + elif isinstance(v, list): + d[k] = [] + for item in v: + if hasattr(item, '__keylist__'): + d[k].append(serialize_object(item)) + else: + d[k].append(item) + else: + d[k] = v + return d diff --git a/releasenotes/source/index.rst b/releasenotes/source/index.rst index 8c50554d1b035aa329f34bdcd0d650ea806ed08f..492b5f32391287f9e52260cbeca6cae52782c945 100644 --- a/releasenotes/source/index.rst +++ b/releasenotes/source/index.rst @@ -6,6 +6,7 @@ :maxdepth: 1 unreleased + wallaby victoria ussuri train diff --git a/releasenotes/source/wallaby.rst b/releasenotes/source/wallaby.rst new file mode 100644 index 0000000000000000000000000000000000000000..d77b56599553b6fe996624b33c1663168342fb94 --- /dev/null +++ b/releasenotes/source/wallaby.rst @@ -0,0 +1,6 @@ +============================ +Wallaby Series Release Notes +============================ + +.. release-notes:: + :branch: stable/wallaby diff --git a/setup.cfg b/setup.cfg index 2a1d676a342fea8efb150cbf3ec1118f62768e39..1f6663a77ca6f7899dab85c8d70726c6a04a5874 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,12 +1,12 @@ [metadata] name = oslo.vmware summary = Oslo VMware library -description-file = +description_file = README.rst author = OpenStack -author-email = openstack-discuss@lists.openstack.org -home-page = https://docs.openstack.org/oslo.vmware/latest/ -python-requires = >=3.6 +author_email = openstack-discuss@lists.openstack.org +home_page = https://docs.openstack.org/oslo.vmware/latest/ +python_requires = >=3.6 classifier = Environment :: OpenStack Intended Audience :: Information Technology diff --git a/tox.ini b/tox.ini index d2f62368c280d1221d4325c1b414f133091f0c52..ffbe76dcfcf3cb7a48e3bd1634c5f58bf1ca1380 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,6 @@ [tox] minversion = 3.2.0 -envlist = py38,pep8 +envlist = py3,pep8 ignore_basepython_conflict = true [testenv] @@ -8,7 +8,7 @@ basepython = python3 whitelist_externals = find deps = - -c{env:UPPER_CONSTRAINTS_FILE:https://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt} + -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} -r{toxinidir}/test-requirements.txt -r{toxinidir}/requirements.txt commands = stestr run --slowest {posargs} @@ -62,7 +62,7 @@ paths = ./oslo_vmware/hacking [testenv:releasenotes] whitelist_externals = rm deps = - -c{env:UPPER_CONSTRAINTS_FILE:https://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt} + -c{env:TOX_CONSTRAINTS_FILE:ttps://releases.openstack.org/constraints/upper/master} -r{toxinidir}/doc/requirements.txt commands = rm -rf releasenotes/build @@ -76,9 +76,3 @@ commands = # explicitly to avoid unnecessarily installing the checked-out repo too. deps = bindep commands = bindep test - -[testenv:lower-constraints] -deps = - -c{toxinidir}/lower-constraints.txt - -r{toxinidir}/test-requirements.txt - -r{toxinidir}/requirements.txt