>>> I'm not sure we would add other types except for 'string' but I'm
>>> inclined to something like the following.
>>
>> it looks like same as what i posted last week to me.
>
> The difference is that I don't think that we want to to put 'type'
> into ofproto_* instead of a reference to the json encode/decode
> implementation. ofproto_* explains 'types' and the code taking care of
> encode/decode knows what to encode/decode for these types.
thanks for explanation.
>
>> are you happier with the following?
>
> I don't think that we need addrconv.plain_text stuff. JSON uses utf
> for string. I don't think we need additional abstraction there.
ok, i'll kill it.
>
>> or is tagging with a string ('string') essential?
>
> Not but as I explained above, I prefer ofproto_* to just define types.
>
>
>> YAMAMOTO Takashi
>>
>> diff --git a/ryu/lib/stringify.py b/ryu/lib/stringify.py
>> index b71da75..ea3b3b8 100644
>> --- a/ryu/lib/stringify.py
>> +++ b/ryu/lib/stringify.py
>> @@ -21,6 +21,9 @@ import collections
>> import inspect
>>
>>
>> +from ryu.lib import addrconv
>> +
>> +
>> # Some arguments to __init__ is mungled in order to avoid name conflicts
>> # with builtin names.
>> # The standard mangling is to append '_' in order to avoid name clashes
>> @@ -46,6 +49,9 @@ _mapdict_key = lambda f, d: dict([(f(k), v) for k, v in
>> d.items()])
>> _mapdict_kv = lambda f, d: dict([(k, f(k, v)) for k, v in d.items()])
>>
>>
>> +StringType = addrconv.plain_text
>> +
>> +
>> class StringifyMixin(object):
>> _class_prefixes = []
>>
>> @@ -80,7 +86,10 @@ class StringifyMixin(object):
>>
>> @classmethod
>> def _get_converter(cls, k):
>> - return cls._JSON_FORMATTER[k]
>> + for t, attrs in cls._TYPE.iteritems():
>> + if k in attrs:
>> + return t
>> + raise KeyError
>>
>> @classmethod
>> def _get_encoder(cls, k, encode_string):
>> diff --git a/ryu/ofproto/ofproto_v1_0_parser.py
>> b/ryu/ofproto/ofproto_v1_0_parser.py
>> index d8e42bb..03c11ff 100644
>> --- a/ryu/ofproto/ofproto_v1_0_parser.py
>> +++ b/ryu/ofproto/ofproto_v1_0_parser.py
>> @@ -24,6 +24,7 @@ from . import ofproto_parser
>> from . import ofproto_v1_0
>> from . import nx_match
>> from ryu import utils
>> +from ryu.lib.stringify import StringType
>>
>> import logging
>> LOG = logging.getLogger('ryu.ofproto.ofproto_v1_0_parser')
>> @@ -83,11 +84,13 @@ class OFPPhyPort(ofproto_parser.namedtuple('OFPPhyPort',
>> (
>> 'port_no', 'hw_addr', 'name', 'config', 'state', 'curr',
>> 'advertised',
>> 'supported', 'peer'))):
>>
>> - _JSON_FORMATTER = {
>> - 'hw_addr': addrconv.plain_text,
>> - # XXX OF spec is unclear about the encoding of name.
>> - # OVS seems to use UTF-8.
>> - # 'name': addrconv.plain_text,
>
> hw_addr is ascii. JSON uses utf by default. I don't think that there
> is any uncleanness here.
the comment explains why 'name' below is commented out.
YAMAMOTO Takashi
>
>> + _TYPE = {
>> + StringType: [
>> + 'hw_addr',
>> + # XXX OF spec is unclear about the encoding of name.
>> + # OVS seems to use UTF-8.
>> + # 'name'
>> + ]
>> }
>>
>> @classmethod
>> @@ -2126,7 +2129,11 @@ class OFPFlowMod(MsgBase):
>> @_set_msg_type(ofproto_v1_0.OFPT_PORT_MOD)
>> class OFPPortMod(MsgBase):
>>
>> - _JSON_FORMATTER = {'hw_addr': addrconv.plain_text}
>> + _TYPE = {
>> + StringType: [
>> + 'hw_addr',
>> + ]
>> + }
>>
>> def __init__(self, datapath, port_no, hw_addr, config, mask, advertise):
>> super(OFPPortMod, self).__init__(datapath)
>>
>>>
>>> =
>>>>From b5ddaabfbb4ad5500d70fdd350f616ae357058f4 Mon Sep 17 00:00:00 2001
>>> From: FUJITA Tomonori <[email protected]>
>>> Date: Sat, 24 Aug 2013 08:54:16 +0900
>>> Subject: [PATCH 3/6] stop be64 encode/decode for strings in JSON
>>> representation
>>>
>>> Our JSON handles binary and string in the same way (use be64
>>> always). Had better to handle string in human readable way (string is
>>> supposed to be utf-8 encoded/decoded by default in JSON).
>>>
>>> Signed-off-by: FUJITA Tomonori <[email protected]>
>>> ---
>>> ryu/lib/stringify.py | 15 +++++++++++++--
>>> 1 file changed, 13 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/ryu/lib/stringify.py b/ryu/lib/stringify.py
>>> index 8b755c5..050aa0a 100644
>>> --- a/ryu/lib/stringify.py
>>> +++ b/ryu/lib/stringify.py
>>> @@ -79,9 +79,18 @@ class StringifyMixin(object):
>>> return False
>>>
>>> @classmethod
>>> + def _is_string_type(cls, k):
>>> + if hasattr(cls, '_TYPE'):
>>> + if 'string' in cls._TYPE and k in cls._TYPE['string']:
>>> + return True
>>> + return False
>>> +
>>> + @classmethod
>>> def _encode_value(cls, k, v, encode_string=base64.b64encode):
>>> encode = lambda x: cls._encode_value(k, x, encode_string)
>>> - if isinstance(v, (bytes, unicode)):
>>> + if cls._is_string_type(k):
>>> + json_value = v.encode('utf')
>>> + elif isinstance(v, (bytes, unicode)):
>>> json_value = encode_string(v)
>>> elif isinstance(v, list):
>>> json_value = map(encode, v)
>>> @@ -124,7 +133,9 @@ class StringifyMixin(object):
>>> @classmethod
>>> def _decode_value(cls, k, json_value, decode_string=base64.b64decode):
>>> decode = lambda x: cls._decode_value(k, x, decode_string)
>>> - if isinstance(json_value, (bytes, unicode)):
>>> + if cls._is_string_type(k):
>>> + v = json_value
>>> + elif isinstance(json_value, (bytes, unicode)):
>>> v = decode_string(json_value)
>>> elif isinstance(json_value, list):
>>> v = map(decode, json_value)
>>> --
>>> 1.7.12.4 (Apple Git-37)
>>>
>>>
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Introducing Performance Central, a new site from SourceForge and
>>> AppDynamics. Performance Central is your source for news, insights,
>>> analysis and resources for efficient Application Performance Management.
>>> Visit us today!
>>> http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk
>>> _______________________________________________
>>> Ryu-devel mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>
>> ------------------------------------------------------------------------------
>> Introducing Performance Central, a new site from SourceForge and
>> AppDynamics. Performance Central is your source for news, insights,
>> analysis and resources for efficient Application Performance Management.
>> Visit us today!
>> http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk
>> _______________________________________________
>> Ryu-devel mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>
> ------------------------------------------------------------------------------
> Introducing Performance Central, a new site from SourceForge and
> AppDynamics. Performance Central is your source for news, insights,
> analysis and resources for efficient Application Performance Management.
> Visit us today!
> http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk
> _______________________________________________
> Ryu-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ryu-devel
------------------------------------------------------------------------------
Introducing Performance Central, a new site from SourceForge and
AppDynamics. Performance Central is your source for news, insights,
analysis and resources for efficient Application Performance Management.
Visit us today!
http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel