add some docstring on StringifyMixin and relevant code
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
This commit is contained in:
parent
e1ae103b78
commit
71ea304be6
@ -77,6 +77,33 @@ _types = {
|
|||||||
|
|
||||||
|
|
||||||
class StringifyMixin(object):
|
class StringifyMixin(object):
|
||||||
|
|
||||||
|
_TYPE = {}
|
||||||
|
"""_TYPE class attribute is used to annotate types of attributes.
|
||||||
|
|
||||||
|
This type information is used to find an appropriate conversion for
|
||||||
|
a JSON style dictionary.
|
||||||
|
|
||||||
|
Currently the following types are implemented.
|
||||||
|
|
||||||
|
===== ==========
|
||||||
|
Type Descrption
|
||||||
|
===== ==========
|
||||||
|
ascii US-ASCII
|
||||||
|
utf-8 UTF-8
|
||||||
|
===== ==========
|
||||||
|
|
||||||
|
Example::
|
||||||
|
_TYPE = {
|
||||||
|
'ascii': [
|
||||||
|
'hw_addr',
|
||||||
|
],
|
||||||
|
'utf-8': [
|
||||||
|
'name',
|
||||||
|
]
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
|
||||||
_class_prefixes = []
|
_class_prefixes = []
|
||||||
|
|
||||||
def stringify_attrs(self):
|
def stringify_attrs(self):
|
||||||
@ -149,7 +176,31 @@ class StringifyMixin(object):
|
|||||||
return _encode
|
return _encode
|
||||||
|
|
||||||
def to_jsondict(self, encode_string=base64.b64encode):
|
def to_jsondict(self, encode_string=base64.b64encode):
|
||||||
"""returns an object to feed json.dumps()
|
"""
|
||||||
|
This method returns a JSON style dict to describe this object.
|
||||||
|
|
||||||
|
The returned dict is compatible with json.dumps() and json.loads().
|
||||||
|
|
||||||
|
Suppose ClassName object inherits StringifyMixin.
|
||||||
|
For an object like the following::
|
||||||
|
|
||||||
|
ClassName(Param1=100, Param2=200)
|
||||||
|
|
||||||
|
this method would produce::
|
||||||
|
|
||||||
|
{ "ClassName": {"Param1": 100, "Param2": 200} }
|
||||||
|
|
||||||
|
This method takes the following arguments.
|
||||||
|
|
||||||
|
============= =====================================================
|
||||||
|
Argument Description
|
||||||
|
============= =====================================================
|
||||||
|
encode_string (Optional) specify how to encode attributes which has
|
||||||
|
python 'str' type.
|
||||||
|
The default is base64.
|
||||||
|
This argument is used only for attributes which don't
|
||||||
|
have explicit type annotations in _TYPE class attribute.
|
||||||
|
============= =====================================================
|
||||||
"""
|
"""
|
||||||
dict_ = {}
|
dict_ = {}
|
||||||
encode = lambda k, x: self._encode_value(k, x, encode_string)
|
encode = lambda k, x: self._encode_value(k, x, encode_string)
|
||||||
@ -217,7 +268,24 @@ class StringifyMixin(object):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def from_jsondict(cls, dict_, decode_string=base64.b64decode,
|
def from_jsondict(cls, dict_, decode_string=base64.b64decode,
|
||||||
**additional_args):
|
**additional_args):
|
||||||
"""create an instance from a result of json.loads()
|
"""Create an instance from a JSON style dict.
|
||||||
|
|
||||||
|
Instantiate this class with parameters specified by the dict.
|
||||||
|
|
||||||
|
This method takes the following arguments.
|
||||||
|
|
||||||
|
=============== =====================================================
|
||||||
|
Argument Descrpition
|
||||||
|
=============== =====================================================
|
||||||
|
dict\_ A dictionary which describes the parameters.
|
||||||
|
For example, {"Param1": 100, "Param2": 200}
|
||||||
|
decode_string (Optional) specify how to decode strings.
|
||||||
|
The default is base64.
|
||||||
|
This argument is used only for attributes which don't
|
||||||
|
have explicit type annotations in _TYPE class
|
||||||
|
attribute.
|
||||||
|
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)
|
||||||
kwargs = cls._restore_args(_mapdict_kv(decode, dict_))
|
kwargs = cls._restore_args(_mapdict_kv(decode, dict_))
|
||||||
|
@ -68,6 +68,30 @@ def create_list_of_base_attributes(f):
|
|||||||
|
|
||||||
|
|
||||||
def ofp_msg_from_jsondict(dp, jsondict):
|
def ofp_msg_from_jsondict(dp, jsondict):
|
||||||
|
"""
|
||||||
|
This function instanticates an appropriate OpenFlow message class
|
||||||
|
from the given JSON style dictionary.
|
||||||
|
The objects created by following two code fragments are equivalent.
|
||||||
|
|
||||||
|
Code A::
|
||||||
|
|
||||||
|
jsonstr = '{ "OFPSetConfig": { "flags": 0, "miss_send_len": 128 } }'
|
||||||
|
jsondict = json.loads(jsonstr)
|
||||||
|
o = ofp_msg_from_jsondict(dp, jsondict)
|
||||||
|
|
||||||
|
Code B::
|
||||||
|
|
||||||
|
o = dp.ofproto_parser.OFPSetConfig(flags=0, miss_send_len=128)
|
||||||
|
|
||||||
|
This function takes the following arguments.
|
||||||
|
|
||||||
|
======== =======================================
|
||||||
|
Argument Description
|
||||||
|
======== =======================================
|
||||||
|
dp An instance of ryu.controller.Datapath.
|
||||||
|
jsondict A JSON style dict.
|
||||||
|
======== =======================================
|
||||||
|
"""
|
||||||
parser = dp.ofproto_parser
|
parser = dp.ofproto_parser
|
||||||
assert len(jsondict) == 1
|
assert len(jsondict) == 1
|
||||||
for k, v in jsondict.iteritems():
|
for k, v in jsondict.iteritems():
|
||||||
@ -87,6 +111,23 @@ class StringifyMixin(stringify.StringifyMixin):
|
|||||||
|
|
||||||
|
|
||||||
class MsgBase(StringifyMixin):
|
class MsgBase(StringifyMixin):
|
||||||
|
"""
|
||||||
|
This is a base class for OpenFlow message classes.
|
||||||
|
|
||||||
|
An instance of this class has at least the following attributes.
|
||||||
|
|
||||||
|
========= ==============================
|
||||||
|
Attribute Description
|
||||||
|
========= ==============================
|
||||||
|
datapath A ryu.controller.controller.Datapath instance for this message
|
||||||
|
version OpenFlow protocol version
|
||||||
|
msg_type Type of OpenFlow message
|
||||||
|
msg_len Length of the message
|
||||||
|
xid Transaction id
|
||||||
|
buf Raw data
|
||||||
|
========= ==============================
|
||||||
|
"""
|
||||||
|
|
||||||
@create_list_of_base_attributes
|
@create_list_of_base_attributes
|
||||||
def __init__(self, datapath):
|
def __init__(self, datapath):
|
||||||
super(MsgBase, self).__init__()
|
super(MsgBase, self).__init__()
|
||||||
|
Loading…
Reference in New Issue
Block a user