from marshmallow import fields, Schema
from marshmallow.validate import Length
import datetime
from flask_marshmallow import Marshmallow
from dynamicannotationdb.models import AnalysisView
ma = Marshmallow()
[docs]class SegmentationInfoSchema(Schema):
pcg_table_name = fields.Str(required=True)
[docs]class SegmentationTableSchema(SegmentationInfoSchema):
table_name = fields.Str(order=0, required=True)
[docs]class CreateTableSchema(SegmentationTableSchema):
metadata = fields.Nested(
Metadata, required=True, example={"description": "my description"}
)
[docs]class GetDeleteAnnotationSchema(SegmentationInfoSchema):
annotation_ids = fields.List(fields.Int, required=True)
[docs]class PostPutAnnotationSchema(SegmentationInfoSchema):
annotations = fields.List(fields.Dict, required=True)
[docs]class SegmentationDataSchema(Schema):
pcg_table_name = fields.Str(required=True)
segmentations = fields.List(fields.Dict, required=True)
[docs]class V2QuerySchema(Schema):
table = fields.Str(required=True)
timestamp = fields.AwareDateTime(
default_timezone=datetime.timezone.utc, required=True
)
join_tables = fields.List(
fields.List(fields.Str),
required=False,
)
filter_in_dict = fields.Dict()
filter_notin_dict = fields.Dict()
filter_equal_dict = fields.Dict()
filter_spatial_dict = fields.Dict()
filter_regex_dict = fields.Dict(required=False)
select_columns = fields.Dict()
offset = fields.Integer()
limit = fields.Integer()
suffixes = fields.Dict()
desired_resolution = fields.List(
fields.Float, validate=Length(equal=3), required=False
)
[docs]class SimpleQuerySchema(Schema):
filter_in_dict = fields.Dict()
filter_notin_dict = fields.Dict()
filter_equal_dict = fields.Dict()
filter_spatial_dict = fields.Dict()
filter_regex_dict = fields.Dict(required=False)
select_columns = fields.List(fields.Str)
offset = fields.Integer()
limit = fields.Integer()
desired_resolution = fields.List(
fields.Float, validate=Length(equal=3), required=False
)
[docs]class ComplexQuerySchema(Schema):
tables = fields.List(
fields.List(fields.Str, validate=Length(equal=2)), required=True
)
filter_in_dict = fields.Dict()
filter_notin_dict = fields.Dict()
filter_equal_dict = fields.Dict()
filter_spatial_dict = fields.Dict()
filter_regex_dict = fields.Dict(required=False)
select_columns = fields.List(fields.Str)
select_column_map = fields.Dict()
offset = fields.Integer()
limit = fields.Integer()
suffixes = fields.List(fields.Str)
suffix_map = fields.Dict()
desired_resolution = fields.List(
fields.Float, validate=Length(equal=3), required=False
)
[docs]class AnalysisViewSchema(ma.SQLAlchemyAutoSchema):