-# Copyright (c) 2020 Cisco and/or its affiliates.
+# Copyright (c) 2021 Cisco and/or its affiliates.
# 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:
import sys
import tempfile
import time
+from collections import UserDict
+
from pprint import pformat
from robot.api import logger
"""
if not hasattr(obj, u"_asdict"):
return obj
- ret = obj._asdict()
- old_get = ret.__getitem__
+ overriden = UserDict(obj._asdict())
+ old_get = overriden.__getitem__
new_get = lambda self, key: dictize(old_get(self, key))
- ret.__getitem__ = new_get
- return ret
+ overriden.__getitem__ = new_get
+ return overriden
class PapiSocketExecutor:
if not isinstance(reply, list):
reply = [reply]
for item in reply:
- self.crc_checker.check_api_name(item.__class__.__name__)
+ message_name = item.__class__.__name__
+ self.crc_checker.check_api_name(message_name)
dict_item = dictize(item)
if u"retval" in dict_item.keys():
# *_details messages do not contain retval.
retval = dict_item[u"retval"]
if retval != exp_rv:
- # TODO: What exactly to log and raise here?
raise AssertionError(
f"Retval {retval!r} does not match expected "
- f"retval {exp_rv!r}"
+ f"retval {exp_rv!r} in message {message_name} "
+ f"for command {command}."
)
replies.append(dict_item)
return replies
is "stats".
- the second parameter must be 'path' as it is used by PapiExecutor
method 'add'.
+ - even if the parameter contains multiple paths, there is only one
+ reply item (for each .add).
"""
def __init__(self, node):