def deserialize(self, cstruct=colander.null): """ Deserialize and validate the QuerySchema fields and try to deserialize and get the native value of additional filds (field filters) that may be present on the cstruct. e.g:: ?exclude_id=a,b&deleted=true -> {'exclude_id': ['a', 'b'], deleted: True} """ values = {} schema_values = super().deserialize(cstruct) if schema_values is colander.drop: return schema_values # Deserialize querystring field filters (see docstring e.g) for k, v in cstruct.items(): # Deserialize lists used on contains_ and contains_any_ filters if k.startswith("contains_"): as_list = native_value(v) if not isinstance(as_list, list): values[k] = [as_list] else: values[k] = as_list # Deserialize lists used on in_ and exclude_ filters elif k.startswith("in_") or k.startswith("exclude_"): as_list = FieldList().deserialize(v) values[k] = [native_value(v) for v in as_list] else: values[k] = native_value(v) values.update(schema_values) return values
class PluralQuerySchema(QuerySchema): """Querystring schema used with plural endpoints.""" _limit = QueryField(colander.Integer(), validator=positive_big_integer) _sort = FieldList() _token = QueryField(colander.String()) _since = QueryField(colander.Integer(), validator=positive_big_integer) _to = QueryField(colander.Integer(), validator=positive_big_integer) _before = QueryField(colander.Integer(), validator=positive_big_integer) id = QueryField(colander.String()) last_modified = QueryField(colander.Integer(), validator=positive_big_integer)
class CollectionGetQuerySchema(CollectionQuerySchema): """Querystring schema for GET collection requests.""" _fields = FieldList()
class RecordGetQuerySchema(QuerySchema): """Querystring schema for GET record requests.""" _fields = FieldList()
class PluralGetQuerySchema(PluralQuerySchema): """Querystring schema for GET plural endpoints requests.""" _fields = FieldList()
class ObjectGetQuerySchema(QuerySchema): """Querystring schema for GET object requests.""" _fields = FieldList()