From 6c0ef47e0316accd621abaae0bff26b23d4c672d Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Fri, 17 Dec 2021 23:25:03 +0100 Subject: [PATCH] Be more liberal about accepting either lists or tuples when parsing using a schema instance --- implementations/python/preserves/schema.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/implementations/python/preserves/schema.py b/implementations/python/preserves/schema.py index 0e19010..971a180 100644 --- a/implementations/python/preserves/schema.py +++ b/implementations/python/preserves/schema.py @@ -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: