py3: nfv wrap dict.items() in list()

In python2 dict.items() returns a list, while in python3 it returns an
iterator. Modifying a dict while iterating over it(insert, delete)
produces a runtime error.

Wrap dict.items() in list() with 2 exceptions:
 - the dict is local scoped and no modification while iterating is done
 - access is atomic (e.g. using locks)

Story: 2008454
Task: 42727
Signed-off-by: Dan Voiculeasa <dan.voiculeasa@windriver.com>
Change-Id: I3fe93c49b360f86d6a962bbbce2bf30c2555e459
(cherry picked from commit d20aad6935)
This commit is contained in:
Dan Voiculeasa 2021-06-30 20:00:06 +03:00 committed by Charles Short
parent 198f87fe57
commit 8a4b7be55e
17 changed files with 36 additions and 36 deletions

View File

@ -28,7 +28,7 @@ def request(token_id, method, api_cmd, api_cmd_headers=None,
request_info.add_header("Accept", "application/json")
if api_cmd_headers is not None:
for header_type, header_value in api_cmd_headers.items():
for header_type, header_value in list(api_cmd_headers.items()):
request_info.add_header(header_type, header_value)
if api_cmd_payload is not None:

View File

@ -55,33 +55,33 @@ class AlarmHandlers(stevedore.enabled.EnabledExtensionManager):
"""
Raise an alarm using the handlers
"""
for handler_type, handler in self._handlers.items():
for handler_type, handler in list(self._handlers.items()):
handler.obj.raise_alarm(alarm_uuid, alarm_data)
def clear_alarm(self, alarm_uuid):
"""
Clear an alarm using the handlers
"""
for handler_type, handler in self._handlers.items():
for handler_type, handler in list(self._handlers.items()):
handler.obj.clear_alarm(alarm_uuid)
def audit_alarms(self):
"""
Audit alarms using the handlers
"""
for handler_type, handler in self._handlers.items():
for handler_type, handler in list(self._handlers.items()):
handler.obj.audit_alarms()
def initialize(self, config_file):
"""
Initialize handlers
"""
for handler_id, handler in self._handlers.items():
for handler_id, handler in list(self._handlers.items()):
handler.obj.initialize(config_file)
def finalize(self):
"""
Finalize handlers
"""
for handler_id, handler in self._handlers.items():
for handler_id, handler in list(self._handlers.items()):
handler.obj.finalize()

View File

@ -128,7 +128,7 @@ class DebugConfig(object):
if self._config is not None:
try:
for name, level_str in self._config.items('debug-loggers'):
for name, level_str in list(self._config.items('debug-loggers')):
debug_list.append((name, self.debug_level_mapping.get(
level_str, DEBUG_LEVEL.NONE)))

View File

@ -257,7 +257,7 @@ def debug_trace(trace_level):
end='', sep='')
six.print_(" kwargs=", file=Debug().output, end='', sep='')
for name, value in kwargs.items():
for name, value in list(kwargs.items()):
six.print_("{0}={1} ".format(name, value),
file=Debug().output, end='', sep='')

View File

@ -55,19 +55,19 @@ class EventLogHandlers(stevedore.enabled.EnabledExtensionManager):
"""
Log a particular event using the handlers
"""
for handler_type, handler in self._handlers.items():
for handler_type, handler in list(self._handlers.items()):
handler.obj.log(log_data)
def initialize(self, config_file):
"""
Initialize handlers
"""
for handler_id, handler in self._handlers.items():
for handler_id, handler in list(self._handlers.items()):
handler.obj.initialize(config_file)
def finalize(self):
"""
Finalize handlers
"""
for handler_id, handler in self._handlers.items():
for handler_id, handler in list(self._handlers.items()):
handler.obj.finalize()

View File

@ -17,7 +17,7 @@ def evidence_from_files(files, start_date, end_date, progress=None):
file_ctrl = dict()
total_lines = 0
for parser_name, file_name in files.items():
for parser_name, file_name in list(files.items()):
total_lines += sum(1 for _ in open(file_name))
file_ctrl[file_name] = (parser_name, open(file_name), None)

View File

@ -167,7 +167,7 @@ class Task(object):
# target. It is possible to have many task work outstanding at
# the same time. Results are returned in the order that task
# work was scheduled.
for key, (state, task_work) in self._work_list.items():
for key, (state, task_work) in list(self._work_list.items()):
if Task._READY == state:
self._scheduler.schedule_task(self)
break
@ -215,7 +215,7 @@ class Task(object):
self._started = True
else:
# Schedule work that is ready
for key, (state, task_work) in self._work_list.items():
for key, (state, task_work) in list(self._work_list.items()):
if Task._READY == state:
scheduled = self._scheduler.schedule_task_work(task_work)
if scheduled:

View File

@ -83,22 +83,22 @@ class TaskScheduler(object):
"""
DLOG.debug("Pool %s: Delete Task, name=%s."
% (self._task_worker_pool.name, task.name))
for timer_id, timer_owner in self._task_timers.items():
for timer_id, timer_owner in list(self._task_timers.items()):
if timer_owner.id == task.id:
timers.timers_delete_timer(timer_id)
del self._task_timers[timer_id]
for timer_id, timer_owner in self._task_work_timers.items():
for timer_id, timer_owner in list(self._task_work_timers.items()):
if timer_owner.task_id == task.id:
timers.timers_delete_timer(timer_id)
del self._task_work_timers[timer_id]
for select_obj, select_obj_owner in self._task_read_selobjs.items():
for select_obj, select_obj_owner in list(self._task_read_selobjs.items()):
if select_obj_owner.id == task.id:
selobj.selobj_del_read_obj(select_obj)
del self._task_read_selobjs[select_obj]
for select_obj, select_obj_owner in self._task_write_selobjs.items():
for select_obj, select_obj_owner in list(self._task_write_selobjs.items()):
if select_obj_owner.id == task.id:
selobj.selobj_del_write_obj(select_obj)
del self._task_write_selobjs[select_obj]
@ -319,7 +319,7 @@ class TaskScheduler(object):
task_work = worker.get_task_work_result()
if task_work is not None:
for timer_id, timer_owner in self._task_work_timers.items():
for timer_id, timer_owner in list(self._task_work_timers.items()):
if timer_owner.id == task_work.id:
timers.timers_delete_timer(timer_id)
del self._task_work_timers[timer_id]

View File

@ -322,7 +322,7 @@ class FaultManagement(alarm_handlers_v1.AlarmHandler):
"error=%s." % e)
# Check for missing alarms needing to be raised
for alarm_uuid, (alarm_data, fm_uuid) in self._openstack_alarm_db.items():
for alarm_uuid, (alarm_data, fm_uuid) in list(self._openstack_alarm_db.items()):
if fm_uuid is None:
self.raise_alarm(alarm_uuid, alarm_data)
else:
@ -335,7 +335,7 @@ class FaultManagement(alarm_handlers_v1.AlarmHandler):
# Check for stale alarms needing to be cleared
for fm_alarm in fm_alarms:
for alarm_uuid, (alarm_data, fm_uuid) in self._openstack_alarm_db.items():
for alarm_uuid, (alarm_data, fm_uuid) in list(self._openstack_alarm_db.items()):
if fm_uuid == fm_alarm["uuid"]:
break
else:
@ -357,7 +357,7 @@ class FaultManagement(alarm_handlers_v1.AlarmHandler):
continue
# Check for missing alarms needing to be raised
for alarm_uuid, (alarm_data, fm_uuid) in self._platform_alarm_db.items():
for alarm_uuid, (alarm_data, fm_uuid) in list(self._platform_alarm_db.items()):
if alarm_type == alarm_data.alarm_type:
if fm_uuid is None:
self.raise_alarm(alarm_uuid, alarm_data)
@ -372,7 +372,7 @@ class FaultManagement(alarm_handlers_v1.AlarmHandler):
# Check for stale alarms needing to be cleared
for fm_fault in fm_faults:
for alarm_uuid, (alarm_data, fm_uuid) in self._platform_alarm_db.items():
for alarm_uuid, (alarm_data, fm_uuid) in list(self._platform_alarm_db.items()):
if fm_uuid == fm_fault.uuid:
break
else:

View File

@ -305,7 +305,7 @@ def _rest_api_request(token_id, method, api_cmd, api_cmd_headers,
request_info.add_header("Accept", "application/json")
if api_cmd_headers is not None:
for header_type, header_value in api_cmd_headers.items():
for header_type, header_value in list(api_cmd_headers.items()):
request_info.add_header(header_type, header_value)
if api_cmd_payload is not None:

View File

@ -231,7 +231,7 @@ class SwUpdateStrategyTestCase(testcase.NFVTestCase):
"""
member_uuids = []
for instance_uuid, instance in self._instance_table.items():
for instance_uuid, instance in list(self._instance_table.items()):
if instance.name in members:
member_uuids.append(instance_uuid)
@ -310,7 +310,7 @@ class SwUpdateStrategyTestCase(testcase.NFVTestCase):
"""
member_uuids = []
for instance_uuid, instance in self._instance_table.items():
for instance_uuid, instance in list(self._instance_table.items()):
if instance.name in members:
member_uuids.append(instance_uuid)

View File

@ -171,7 +171,7 @@ class TestInstance(testcase.NFVTestCase):
Create an instance group
"""
member_uuids = []
for instance_uuid, instance in self._instance_table.items():
for instance_uuid, instance in list(self._instance_table.items()):
if instance.name in members:
member_uuids.append(instance_uuid)
@ -230,7 +230,7 @@ class TestInstance(testcase.NFVTestCase):
Create a host group
"""
member_uuids = []
for instance_uuid, instance in self._instance_table.items():
for instance_uuid, instance in list(self._instance_table.items()):
if instance.name in members:
member_uuids.append(instance_uuid)

View File

@ -24,7 +24,7 @@ def rest_api_request(token, method, url, headers=None, body=None):
request_info.get_method = lambda: method
if headers is not None:
for header_type, header_value in headers.items():
for header_type, header_value in list(headers.items()):
# Allow the Content-Length to be set by urllib
if 'Content-Length' != header_type and 'Host' != header_type:
request_info.add_header(header_type, header_value)

View File

@ -18,7 +18,7 @@ class ObjectData(collections.MutableMapping):
super(ObjectData, self).__setattr__('_fields', dict())
if data is not None:
for key, value in data.items():
for key, value in list(data.items()):
self._do_set(key, value)
@property

View File

@ -180,7 +180,7 @@ class GuestServices(ObjectData):
return current_state
overall_state = None
for _, service_state in self._services.items():
for _, service_state in list(self._services.items()):
overall_state = update_overall_state(overall_state, service_state)
return overall_state
@ -321,7 +321,7 @@ class GuestServices(ObjectData):
Returns a listing of nfvi guest services and their state
"""
nfvi_service_names = list()
for service_name, service_state in self._services.items():
for service_name, service_state in list(self._services.items()):
nfvi_name = self._get_nfvi_service_name(service_name)
if nfvi_name is not None:
nfvi_service_names.append(nfvi_name)
@ -333,7 +333,7 @@ class GuestServices(ObjectData):
Returns a listing of nfvi guest services and their state
"""
nfvi_services = list()
for service_name, service_state in self._services.items():
for service_name, service_state in list(self._services.items()):
nfvi_name = self._get_nfvi_service_name(service_name)
nfvi_admin_state = self._get_nfvi_service_admin_state(service_state)

View File

@ -193,7 +193,7 @@ class Host(ObjectData):
ignore_services = []
all_enabled = True
at_least_one_failed = False
for service, service_state in self._host_service_state.items():
for service, service_state in list(self._host_service_state.items()):
# Ignore state of kubernetes, plugin as
# there is no query function for that sevice.
if service == HOST_SERVICES.CONTAINER:
@ -745,7 +745,7 @@ class Host(ObjectData):
"""
at_least_one_change = False
for service, state in self._host_service_state.items():
for service, state in list(self._host_service_state.items()):
if state != host_service_state:
at_least_one_change = True
self._host_service_state[service] = host_service_state

View File

@ -18,7 +18,7 @@ class ObjectData(collections.MutableMapping):
super(ObjectData, self).__setattr__('_fields', dict())
if data is not None:
for key, value in data.items():
for key, value in list(data.items()):
self._do_set(key, value)
@property