distcloud/distributedcloud/dcmanager/common/serializer.py
BoYuan Chang 4ce7734743 Minor Code Change Based on Py39 Pylint Feedback
Pylint is currently running python3.0 syntax and we are updating
the pylint to python3.9. As a result we received a few warnings that
have not been previously identified with python3.0 syntax. This code
change will address those warnings raised by latest pylint check.

The following alarms are addressed:

1. W0237 - Parameter '.' has been renamed to '.' in overridden method
2. E1101 - Instance of '.' has no '.' member (no-member)
3. W0127 - Assigning the same variable to itself
4. E4702 - Iterated dict is being modified inside for loop body
5. W0602 - Using global for '.' but no assignment is done
6. E1123 - Unexpected keyword argument '.'. in method call
7. W0238 - Unused private memeber '.'
8. E1121 - Too many positional arguments for methods call

The following alarms are still remain suppressed:

1. W1514 - Using open with specifying encoding (python2 does not support this change)
2. W0707 - Consider explicitly re-raising using raise '.' from '.' (same as above)

Test Plan :

1. Perform DC Regression Test and compare before and after code change
2. Ensure Tox can pass on both Debain and CentOS build server
3. Ensure pylint3 and pylint3.9 can pass without warning
4. Ensure ISO can be properly booted on both Debian and CentOS

Story: 2008943
Task: 45832
Signed-off-by: BoYuan Chang <boyuan.chang@windriver.com>
Change-Id: I6f3a25fd788a3bdc021067c624123132a716e5c8
2022-08-10 13:12:24 -04:00

85 lines
2.6 KiB
Python

# Copyright 2015 Huawei Technologies Co., Ltd.
# Copyright (c) 2017, 2019, 2021, 2022 Wind River Systems, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import oslo_messaging
ATTR_NOT_SPECIFIED = object()
class Mapping(object):
def __init__(self, mapping):
self.direct_mapping = mapping
self.reverse_mapping = {}
for key, value in mapping.items():
self.reverse_mapping[value] = key
_SINGLETON_MAPPING = Mapping({
ATTR_NOT_SPECIFIED: "@@**ATTR_NOT_SPECIFIED**@@",
})
class DCManagerSerializer(oslo_messaging.Serializer):
def __init__(self, base=None):
super(DCManagerSerializer, self).__init__()
self._base = base
def serialize_entity(self, ctxt, entity):
if isinstance(entity, dict):
for key, value in entity.items():
entity[key] = self.serialize_entity(ctxt, value)
elif isinstance(entity, list):
for i, item in enumerate(entity):
entity[i] = self.serialize_entity(ctxt, item)
elif entity in _SINGLETON_MAPPING.direct_mapping:
entity = _SINGLETON_MAPPING.direct_mapping[entity]
if self._base is not None:
entity = self._base.serialize_entity(ctxt, entity)
return entity
def deserialize_entity(self, ctxt, entity):
if isinstance(entity, dict):
for key, value in entity.items():
entity[key] = self.deserialize_entity(ctxt, value)
elif isinstance(entity, list):
for i, item in enumerate(entity):
entity[i] = self.deserialize_entity(ctxt, item)
elif entity in _SINGLETON_MAPPING.reverse_mapping:
entity = _SINGLETON_MAPPING.reverse_mapping[entity]
if self._base is not None:
entity = self._base.deserialize_entity(ctxt, entity)
return entity
def serialize_context(self, ctxt):
if self._base is not None:
context = self._base.serialize_context(ctxt)
return context
def deserialize_context(self, ctxt):
if self._base is not None:
context = self._base.deserialize_context(ctxt)
return context