Be more liberal about accepting either lists or tuples when parsing using a schema instance

This commit is contained in:
Tony Garnock-Jones 2021-12-17 23:25:03 +01:00
parent 550a524ca1
commit 6c0ef47e03
1 changed files with 7 additions and 4 deletions

View File

@ -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: