python3: Store AsciiStringType class data as str

AsciiStringType data are mostly IP addresses and they must be
text_type in python3 for text_to_bin to work.
Also introduce AsciiStringListType, which is suitable for lists of
IP addresses.

Signed-off-by: IWAMOTO Toshihiro <iwamoto@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
This commit is contained in:
IWAMOTO Toshihiro 2015-07-03 11:27:06 +09:00 committed by FUJITA Tomonori
parent 1bb849b304
commit 7da17ac941

View File

@ -60,10 +60,17 @@ class TypeDescr(object):
class AsciiStringType(TypeDescr): class AsciiStringType(TypeDescr):
@staticmethod @staticmethod
def encode(v): def encode(v):
# TODO: AsciiStringType data should probably be stored as
# text_type in class data. This isinstance() check exists
# because OFPDescStats violates this.
if six.PY3 and isinstance(v, six.text_type):
return v
return six.text_type(v, 'ascii') return six.text_type(v, 'ascii')
@staticmethod @staticmethod
def decode(v): def decode(v):
if six.PY3:
return v
return v.encode('ascii') return v.encode('ascii')
@ -77,6 +84,16 @@ class Utf8StringType(TypeDescr):
return v.encode('utf-8') return v.encode('utf-8')
class AsciiStringListType(TypeDescr):
@staticmethod
def encode(v):
return [AsciiStringType.encode(x) for x in v]
@staticmethod
def decode(v):
return [AsciiStringType.decode(x) for x in v]
class NXFlowSpecFieldType(TypeDescr): class NXFlowSpecFieldType(TypeDescr):
# ("field_name", 0) <-> ["field_name", 0] # ("field_name", 0) <-> ["field_name", 0]
@ -98,6 +115,7 @@ class NXFlowSpecFieldType(TypeDescr):
_types = { _types = {
'ascii': AsciiStringType, 'ascii': AsciiStringType,
'utf-8': Utf8StringType, 'utf-8': Utf8StringType,
'asciilist': AsciiStringListType,
'nx-flow-spec-field': NXFlowSpecFieldType, # XXX this should not be here 'nx-flow-spec-field': NXFlowSpecFieldType, # XXX this should not be here
} }
@ -112,12 +130,13 @@ class StringifyMixin(object):
Currently the following types are implemented. Currently the following types are implemented.
===== ========== ========= =============
Type Descrption Type Descrption
===== ========== ========= =============
ascii US-ASCII ascii US-ASCII
utf-8 UTF-8 utf-8 UTF-8
===== ========== asciilist list of ascii
========= =============
Example:: Example::
_TYPE = { _TYPE = {