class Document(db.Model): __tablename__ = "documents" id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(128), unique=True) dates = db.Column(db.UnicodeText) citations = db.Column(db.UnicodeText) notes = db.Column(db.UnicodeText) last_update = db.Column(db.DateTime) box_id = db.Column(db.Integer, db.ForeignKey("boxes.id")) authors = db.relationship("Person", secondary=documents_authors, backref=db.backref("documents_by", lazy="dynamic")) people = db.relationship("Person", secondary=documents_people, backref=db.backref("documents_in", lazy="dynamic")) topics = db.relationship("Topic", secondary=documents_topics, backref="documents") def __init__(self, title, dates=None, citations=None, notes=None): db.Model.__init__(self) self.title = title self.dates = dates self.citations = citations self.notes = notes @staticmethod def from_dict(data): data = data.get("document") if not is_ok(data): raise TypeError("Missing data: document") if not is_ok(data.get("title")): raise TypeError("Missing data: document.title") if (Document.query.filter_by(title=data["title"]).first() or len(data["title"]) >= 128): raise TypeError("Invalid data: document.title") return Document(title=data["title"], dates=data.get("dates"), citations=data.get("citations"), notes=data.get("notes")) def get_url(self, full=False): return url_for("kron.get_document", id=self.id, _external=full) def __repr__(self): return "<Document {id}>".format(id=self.id)
class Box(db.Model): __tablename__ = "boxes" id = db.Column(db.Integer, primary_key=True) number = db.Column(db.Integer, unique=True) dates = db.Column(db.UnicodeText) notes = db.Column(db.UnicodeText) last_update = db.Column(db.DateTime) archive_id = db.Column(db.Integer, db.ForeignKey("archives.id")) documents = db.relationship("Document", backref="box") people = db.relationship("Person", secondary=boxes_people, backref="boxes") topics = db.relationship("Topic", secondary=boxes_topics, backref="boxes") def __init__(self, number, dates=None, notes=None): db.Model.__init__(self) self.number = number self.dates = dates self.notes = notes @staticmethod def from_dict(data): data = data.get("box") if not is_ok(data): raise TypeError("Missing data: box") if not is_ok(data.get("number")): raise TypeError("Missing data: box.number") if Box.query.filter_by(number=data["number"]).first(): raise TypeError("Invalid data: box.number") return Box(number=data["number"], dates=data.get("dates"), notes=data.get("notes")) def get_url(self, full=False): return url_for("kron.get_box", id=self.id, _external=full) def __repr__(self): return "<Box {id}>".format(id=self.id)
from datetime import datetime from flask import url_for from kron import db, is_ok, ModelEventListeners boxes_people = db.Table( "boxes_people", db.Column("box_id", db.Integer, db.ForeignKey("boxes.id")), db.Column("person_id", db.Integer, db.ForeignKey("people.id"))) boxes_topics = db.Table( "boxes_topics", db.Column("box_id", db.Integer, db.ForeignKey("boxes.id")), db.Column("topic_id", db.Integer, db.ForeignKey("topics.id"))) class Box(db.Model): __tablename__ = "boxes" id = db.Column(db.Integer, primary_key=True) number = db.Column(db.Integer, unique=True) dates = db.Column(db.UnicodeText) notes = db.Column(db.UnicodeText) last_update = db.Column(db.DateTime) archive_id = db.Column(db.Integer, db.ForeignKey("archives.id")) documents = db.relationship("Document", backref="box") people = db.relationship("Person", secondary=boxes_people, backref="boxes") topics = db.relationship("Topic", secondary=boxes_topics, backref="boxes") def __init__(self, number, dates=None, notes=None): db.Model.__init__(self) self.number = number self.dates = dates
from datetime import datetime from flask import url_for from kron import db, is_ok, ModelEventListeners documents_authors = db.Table( "documents_authors", db.Column("document_id", db.Integer, db.ForeignKey("documents.id")), db.Column("person_id", db.Integer, db.ForeignKey("people.id"))) documents_people = db.Table( "documents_people", db.Column("document_id", db.Integer, db.ForeignKey("documents.id")), db.Column("person_id", db.Integer, db.ForeignKey("people.id"))) documents_topics = db.Table( "documents_topics", db.Column("document_id", db.Integer, db.ForeignKey("documents.id")), db.Column("topic_id", db.Integer, db.ForeignKey("topics.id"))) class Document(db.Model): __tablename__ = "documents" id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(128), unique=True) dates = db.Column(db.UnicodeText) citations = db.Column(db.UnicodeText) notes = db.Column(db.UnicodeText) last_update = db.Column(db.DateTime) box_id = db.Column(db.Integer, db.ForeignKey("boxes.id"))
from datetime import datetime from flask import url_for import bleach from markdown import markdown from kron import db, is_ok, ModelEventListeners tags_posts = db.Table( "tags_posts", db.Column("tag_id", db.Integer, db.ForeignKey("tags.id")), db.Column("post_id", db.Integer, db.ForeignKey("posts.id"))) class Tag(db.Model): __tablename__ = "tags" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True) def __init__(self, name): db.Model.__init__(self) self.name = name @staticmethod def from_dict(data): data = data.get("tag") if not is_ok(data): raise TypeError("Missing data: tag") if not is_ok(data.get("name")): raise TypeError("Missing data: tag.name") return Tag(name=data["name"])