#!/usr/bin/env python3 from flask_marshmallow.sqla import auto_field from marshmallow_enum import EnumField from models import VideonUser, StreamResource, StreamResourceTypeEnum, OutputUrls from marshm import ma from db import db from marshmallow import fields """ Marshmallow schemas """ __author__ = "@tormakris" __copyright__ = "Copyright 2020, videON Team" __module_name__ = "schemas" __version__text__ = "1" class UserSchema(ma.Schema): """ Parameters: - name (string) - passowrd (string) """ name = fields.String(required=True) password = fields.String(required=True) class UserMetadataSchema(ma.SQLAlchemyAutoSchema): """ Marshmallow schema generated """ class Meta: model = VideonUser exclude = ('timestamp', 'password', 'id',) sqla_session = db.session creation_date = auto_field("timestamp", dump_only=False) streamresources = auto_field class IngestInputSchema(ma.Schema): outputNeighbours = fields.List(fields.UUID(), required=False) x = fields.Integer(required=True) y = fields.Integer(required=True) class EncodeInputSchema(ma.Schema): inputNeighbour = fields.UUID(required=True) outputNeighbours = fields.List(fields.UUID(), required=True) bitrate = fields.Integer(required=False) width = fields.Integer(required=False) height = fields.Integer(required=False) x = fields.Integer(required=True) y = fields.Integer(required=True) class RestreamInputSchema(ma.Schema): inputNeighbour = fields.UUID(required=False) outputURLs = fields.List(fields.String(), required=True) x = fields.Integer(required=True) y = fields.Integer(required=True) class OutputUrlSchema(ma.SQLAlchemyAutoSchema): """ Marshmallow schema generated """ class Meta: model = OutputUrls fields = ('output_url', ) sqla_session = db.session class StreamResourceIdSchema(ma.SQLAlchemyAutoSchema): """ Marshmallow schema generated """ class Meta: model = StreamResource fields = ('id',) sqla_session = db.session class StreamResourceSchema(ma.SQLAlchemyAutoSchema): """ Marshmallow schema generated """ class Meta: model = StreamResource exclude = ('parent_id',) sqla_session = db.session resource_type = EnumField(StreamResourceTypeEnum, by_value=True, dump_only=True) output_urls = ma.Pluck(OutputUrlSchema, field_name='output_url', many=True, dump_only=True) inputNeighbour = auto_field('parent_id', dump_only=True) children = ma.Pluck(StreamResourceIdSchema, field_name='id', many=True, dump_only=True)