from flask_restful_swagger_2 import Schema class AnnotationModel(Schema): type = "object" description = "Filter by annotation key: value" properties = { "name": {"type": "string"}, # TODO update to OpenAPI v3.0 when a library is available that supports it # Unfortunately 2.0 doesn't have a way to have a schema that accepts multiple types # Overloading the type key with a list seems to work ok and makes it to the page "values": {"type": "array", "items": {"type": ["float32", "string", "int32", "bool"]}}, "min": {"type": ["int32", "float32"]}, "max": {"type": ["int32", "float32"]}, } required = ["name"] class IndexModel(Schema): type = "object" description = "Filter by index of observation/variable ex. [0, 5, 15]" properties = {"index": {"type": "array", "items": {"format": "int32", "type": "integer"}}} class AxisModel(Schema): type = "object" description = "Axis of data -- obs or var" properties = {"index": IndexModel, "annotation_value": AnnotationModel.array()} class FilterModel(Schema): type = "object" description = "Complex filter" properties = {"filter": {"type": "object", "properties": {"obs": AxisModel, "var": AxisModel}}}