Be more liberal about accepting either lists or tuples when parsing using a schema instance
This commit is contained in:
parent
550a524ca1
commit
6c0ef47e03
|
@ -29,6 +29,9 @@ TUPLE = Symbol('tuple')
|
|||
TUPLE_PREFIX = Symbol('tuplePrefix')
|
||||
VERSION = Symbol('version')
|
||||
|
||||
def sequenceish(x):
|
||||
return isinstance(x, tuple) or isinstance(x, list)
|
||||
|
||||
class SchemaObject:
|
||||
ROOTNS = None
|
||||
SCHEMA = None
|
||||
|
@ -72,7 +75,7 @@ class SchemaObject:
|
|||
if v == p[0]: return ()
|
||||
return None
|
||||
if p.key == SEQOF:
|
||||
if not isinstance(v, tuple): return None
|
||||
if not sequenceish(v): return None
|
||||
vv = []
|
||||
for w in v:
|
||||
ww = cls.parse(p[0], w, args)
|
||||
|
@ -106,7 +109,7 @@ class SchemaObject:
|
|||
if cls.parse(p[1], v.fields, args) is None: return None
|
||||
return ()
|
||||
if p.key == TUPLE:
|
||||
if not isinstance(v, tuple): return None
|
||||
if not sequenceish(v): return None
|
||||
if len(v) != len(p[0]): return None
|
||||
i = 0
|
||||
for pp in p[0]:
|
||||
|
@ -114,7 +117,7 @@ class SchemaObject:
|
|||
i = i + 1
|
||||
return ()
|
||||
if p.key == TUPLE_PREFIX:
|
||||
if not isinstance(v, tuple): return None
|
||||
if not sequenceish(v): return None
|
||||
if len(v) < len(p[0]): return None
|
||||
i = 0
|
||||
for pp in p[0]:
|
||||
|
@ -318,7 +321,7 @@ def is_empty_pattern(p):
|
|||
def gather_defined_field_names(s, acc):
|
||||
if is_simple_pattern(s):
|
||||
pass
|
||||
elif isinstance(s, tuple):
|
||||
elif sequenceish(s):
|
||||
for p in s:
|
||||
gather_defined_field_names(p, acc)
|
||||
elif s.key == NAMED:
|
||||
|
|
Loading…
Reference in New Issue