from app import db from marshmallow import Schema, fields, ValidationError, pre_load authors = db.Table('books_authors', db.Column('book_id', db.Integer, db.ForeignKey('books.id'), primary_key=True), db.Column('author_id', db.Integer, db.ForeignKey('authors.id'), primary_key=True) ) stacks = db.Table('books_stacks', db.Column('book_id', db.Integer, db.ForeignKey('books.id'), primary_key=True), db.Column('stack_id', db.Integer, db.ForeignKey('stacks.id'), primary_key=True) ) class Book(db.Model): __tablename__ = 'books' id = db.Column(db.Integer, primary_key = True) title = db.Column(db.String(255)) file = db.Column(db.String(255)) cover = db.Column(db.String(255)) fileformat = db.Column(db.String(255)) category = db.Column(db.String(255)) authors = db.relationship('Author', secondary=authors,cascade="delete", lazy='subquery', backref=db.backref('books', lazy=True),passive_deletes=True) stacks = db.relationship('Stack', secondary=stacks, lazy='subquery', backref=db.backref('books', lazy=True)) scapeX = db.Column(db.Numeric(10,2)) scapeY = db.Column(db.Numeric(10,2)) def __init__(self, title, file, cover, fileformat, category): self.title = title self.file = file self.cover = cover self.fileformat = fileformat self.category = category self.scapeX = 0 self.scapeY = 0 def __repr__(self): return '' % self.title def get_id(self): return self.id class Author(db.Model): __tablename__ = 'authors' id = db.Column(db.Integer(), primary_key=True) author_name = db.Column(db.String(50)) def __init__(self, author_name): self.author_name = author_name class AuthorSchema(Schema): id = fields.Int(dump_only=True) author_name = fields.Str() class BookSchema(Schema): id = fields.Int(dump_only=True) title = fields.Str() file = fields.Str() authors = fields.Nested(AuthorSchema, many=True) cover = fields.Str() fileformat = fields.Str() category = fields.Str() stack = fields.Str() class Stack(db.Model): __tablename__ = 'stacks' id = db.Column(db.Integer, primary_key = True) stack_name = db.Column(db.String(50)) stack_description = db.Column(db.String(500)) def __init__(self, stack_name, stack_description): self.stack_name = stack_name self.stack_description = stack_description def __repr__(self): return '<Stack %r>' % self.stack def get_id(self): return self.id class StackSchema(Schema): id = fields.Int(dump_only=True) stack_name = fields.Str() stack_description = fields.Str() def must_not_be_blank(data): if not data: raise ValidationError('You forgot to write stuff.')