Make the ActionContext serializable
Currently if Mistral needs to pass the ActionContext via it's internal rpc calls it wont be serialised. This change should have no end-user impact, but makes it easier for Mistral to use internally. Change-Id: I238355d52c77d622740527e43ddb2b7484cc58db
This commit is contained in:
parent
d190925999
commit
9f5162fa5a
|
@ -12,8 +12,10 @@
|
|||
|
||||
import warnings
|
||||
|
||||
from mistral_lib import serialization
|
||||
|
||||
class ActionContext(object):
|
||||
|
||||
class ActionContext(serialization.MistralSerializable):
|
||||
|
||||
def __init__(self, security_ctx=None, execution_ctx=None):
|
||||
self.security = security_ctx
|
||||
|
@ -86,3 +88,19 @@ class ExecutionContext(object):
|
|||
def task_id(self):
|
||||
self._deprecate_task_id_warning()
|
||||
return self.task_execution_id
|
||||
|
||||
|
||||
class ActionContextSerializer(serialization.DictBasedSerializer):
|
||||
def serialize_to_dict(self, entity):
|
||||
return {
|
||||
'security': vars(entity.security),
|
||||
'execution': vars(entity.execution),
|
||||
}
|
||||
|
||||
def deserialize_from_dict(self, entity_dict):
|
||||
return ActionContext(
|
||||
security_ctx=SecurityContext(**entity_dict['security']),
|
||||
execution_ctx=ExecutionContext(**entity_dict['execution'])
|
||||
)
|
||||
|
||||
serialization.register_serializer(ActionContext, ActionContextSerializer())
|
||||
|
|
|
@ -69,3 +69,27 @@ class TestActionsBase(tests_base.TestCase):
|
|||
old = getattr(ctx, deprecated)
|
||||
new = getattr(ctx.security, deprecated)
|
||||
self.assertEqual(old, new)
|
||||
|
||||
|
||||
class TestActionContextSerializer(tests_base.TestCase):
|
||||
|
||||
def test_serialization(self):
|
||||
|
||||
ctx = _fake_context()
|
||||
serialiser = context.ActionContextSerializer()
|
||||
dict_ctx = serialiser.serialize_to_dict(ctx)
|
||||
|
||||
self.assertEqual(dict_ctx['security'], vars(ctx.security))
|
||||
self.assertEqual(dict_ctx['execution'], vars(ctx.execution))
|
||||
|
||||
def test_deserialization(self):
|
||||
|
||||
ctx = _fake_context()
|
||||
serialiser = context.ActionContextSerializer()
|
||||
dict_ctx = serialiser.serialize_to_dict(ctx)
|
||||
ctx_2 = serialiser.deserialize_from_dict(dict_ctx)
|
||||
|
||||
self.assertEqual(ctx.security.auth_uri, ctx_2.security.auth_uri)
|
||||
self.assertEqual(
|
||||
ctx.execution.workflow_name,
|
||||
ctx_2.execution.workflow_name)
|
||||
|
|
Loading…
Reference in New Issue