summaryrefslogtreecommitdiff
path: root/ironic_python_agent/encoding.py
diff options
context:
space:
mode:
authorDmitry Tantsur <dtantsur@protonmail.com>2020-07-02 12:18:53 +0200
committerDmitry Tantsur <dtantsur@protonmail.com>2020-07-02 12:18:53 +0200
commita4855c544cac35e92ce7c20143536ca7a3bb847a (patch)
tree14ae02f91ac45403f19db38e5684d30d72c8e6cd /ironic_python_agent/encoding.py
parentc1c093fc2e56411bb9f677034b4925aaed624d6d (diff)
downloadironic-python-agent-a4855c544cac35e92ce7c20143536ca7a3bb847a.tar.gz
Fix serializing ironic-lib exceptions
Change-Id: If1408e4b81d263c56b4bbab618dd0737db5f762e Story: #2007889 Task: #40268
Diffstat (limited to 'ironic_python_agent/encoding.py')
-rw-r--r--ironic_python_agent/encoding.py12
1 files changed, 12 insertions, 0 deletions
diff --git a/ironic_python_agent/encoding.py b/ironic_python_agent/encoding.py
index 715d1341..b1b44cd1 100644
--- a/ironic_python_agent/encoding.py
+++ b/ironic_python_agent/encoding.py
@@ -15,6 +15,8 @@
import json
import uuid
+from ironic_lib import exception as lib_exc
+
class Serializable(object):
"""Base class for things that can be serialized."""
@@ -43,6 +45,14 @@ class SerializableComparable(Serializable):
return self.serialize() != other.serialize()
+def serialize_lib_exc(exc):
+ """Serialize an ironic-lib exception."""
+ return {'type': exc.__class__.__name__,
+ 'code': exc.code,
+ 'message': str(exc),
+ 'details': ''}
+
+
class RESTJSONEncoder(json.JSONEncoder):
"""A slightly customized JSON encoder."""
def encode(self, o):
@@ -68,5 +78,7 @@ class RESTJSONEncoder(json.JSONEncoder):
return o.serialize()
elif isinstance(o, uuid.UUID):
return str(o)
+ elif isinstance(o, lib_exc.IronicException):
+ return serialize_lib_exc(o)
else:
return json.JSONEncoder.default(self, o)