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:
parent
1bb849b304
commit
7da17ac941
@ -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 = {
|
||||||
|
Loading…
Reference in New Issue
Block a user