summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ryu/lib/stringify.py14
-rw-r--r--ryu/ofproto/ofproto_parser.py10
2 files changed, 17 insertions, 7 deletions
diff --git a/ryu/lib/stringify.py b/ryu/lib/stringify.py
index ad771db9..77de2b82 100644
--- a/ryu/lib/stringify.py
+++ b/ryu/lib/stringify.py
@@ -216,11 +216,11 @@ class StringifyMixin(object):
return getattr(mod, k)
@classmethod
- def obj_from_jsondict(cls, jsondict):
+ def obj_from_jsondict(cls, jsondict, **additional_args):
assert len(jsondict) == 1
for k, v in jsondict.iteritems():
obj_cls = cls.cls_from_jsondict_key(k)
- return obj_cls.from_jsondict(v)
+ return obj_cls.from_jsondict(v, **additional_args)
@classmethod
def _get_decoder(cls, k, decode_string):
@@ -230,19 +230,20 @@ class StringifyMixin(object):
return cls._get_default_decoder(decode_string)
@classmethod
- def _decode_value(cls, k, json_value, decode_string=base64.b64decode):
+ def _decode_value(cls, k, json_value, decode_string=base64.b64decode,
+ **additional_args):
return cls._get_decoder(k, decode_string)(json_value)
@classmethod
def _get_default_decoder(cls, decode_string):
- def _decode(json_value):
+ def _decode(json_value, **additional_args):
if isinstance(json_value, (bytes, unicode)):
v = decode_string(json_value)
elif isinstance(json_value, list):
v = map(_decode, json_value)
elif isinstance(json_value, dict):
if cls._is_class(json_value):
- v = cls.obj_from_jsondict(json_value)
+ v = cls.obj_from_jsondict(json_value, **additional_args)
else:
v = _mapdict(_decode, json_value)
# XXXhack
@@ -287,7 +288,8 @@ class StringifyMixin(object):
additional_args (Optional) Additional kwargs for constructor.
=============== =====================================================
"""
- decode = lambda k, x: cls._decode_value(k, x, decode_string)
+ decode = lambda k, x: cls._decode_value(k, x, decode_string,
+ **additional_args)
kwargs = cls._restore_args(_mapdict_kv(decode, dict_))
try:
return cls(**dict(kwargs, **additional_args))
diff --git a/ryu/ofproto/ofproto_parser.py b/ryu/ofproto/ofproto_parser.py
index 609d4d67..b8911bb3 100644
--- a/ryu/ofproto/ofproto_parser.py
+++ b/ryu/ofproto/ofproto_parser.py
@@ -14,6 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import base64
import collections
import logging
import struct
@@ -115,7 +116,6 @@ class StringifyMixin(stringify.StringifyMixin):
@classmethod
def cls_from_jsondict_key(cls, k):
obj_cls = super(StringifyMixin, cls).cls_from_jsondict_key(k)
- assert not issubclass(obj_cls, MsgBase)
return obj_cls
@@ -204,6 +204,14 @@ class MsgBase(StringifyMixin):
self._serialize_header()
+class MsgInMsgBase(MsgBase):
+ @classmethod
+ def _decode_value(cls, k, json_value, decode_string=base64.b64decode,
+ **additional_args):
+ return cls._get_decoder(k, decode_string)(json_value,
+ **additional_args)
+
+
def msg_pack_into(fmt, buf, offset, *args):
if len(buf) < offset:
buf += bytearray(offset - len(buf))