From 3fb522534cff61576ac58ae466a2752585b8c44e Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Mon, 1 Jun 2020 19:45:15 +0200 Subject: setting up the database... --- cli/app/sql/models/graph.py | 15 +++++++++++---- cli/app/sql/models/page.py | 27 +++++++++++++++++---------- cli/app/sql/models/tile.py | 13 +++++++------ cli/app/sql/models/upload.py | 10 +++++----- 4 files changed, 40 insertions(+), 25 deletions(-) (limited to 'cli/app/sql/models') diff --git a/cli/app/sql/models/graph.py b/cli/app/sql/models/graph.py index ef5a817..1f553e9 100644 --- a/cli/app/sql/models/graph.py +++ b/cli/app/sql/models/graph.py @@ -1,9 +1,11 @@ -from sqlalchemy import create_engine, Table, Column, Text, String, Integer, DateTime, JSON +from sqlalchemy import create_engine, Table, Column, Text, String, Integer, DateTime, JSON, ForeignKey +from sqlalchemy.orm import relationship import sqlalchemy.sql.functions as func from sqlalchemy_utc import UtcDateTime, utcnow from wtforms_alchemy import ModelForm from app.sql.common import db, Base, Session +# from app.sql.models.page import Page from app.settings import app_cfg @@ -11,16 +13,16 @@ from os.path import join class Graph(Base): """Table for storing references to graphs""" - __tablename__ = 'graphs' + __tablename__ = 'graph' id = Column(Integer, primary_key=True) path = Column(String(64, convert_unicode=True), nullable=False) title = Column(String(64, convert_unicode=True), nullable=False) description = Column(Text(convert_unicode=True), nullable=False) settings = Column(JSON, default={}, nullable=True) created_at = Column(UtcDateTime(), default=utcnow()) - updated_at = Column(UtcDateTime(), default=utcnow()) + updated_at = Column(UtcDateTime(), onupdate=utcnow()) - # pages = relationship("Page", secondary="pages", lazy='dynamic') + # pages = relationship('Page', lazy='dynamic') def toJSON(self): return { @@ -33,6 +35,11 @@ class Graph(Base): 'updated_at': self.updated_at, } + def toFullJSON(self): + data = self.toJSON() + data['pages'] = [ page.toJSON() for page in self.pages ] + return data + class GraphForm(ModelForm): class Meta: model = Graph diff --git a/cli/app/sql/models/page.py b/cli/app/sql/models/page.py index 1362bb3..bad5568 100644 --- a/cli/app/sql/models/page.py +++ b/cli/app/sql/models/page.py @@ -1,15 +1,17 @@ -from sqlalchemy import create_engine, Table, Column, Text, String, Integer, DateTime, JSON +from sqlalchemy import create_engine, Table, Column, Text, String, Integer, DateTime, JSON, ForeignKey +from sqlalchemy.orm import relationship import sqlalchemy.sql.functions as func from sqlalchemy_utc import UtcDateTime, utcnow from wtforms_alchemy import ModelForm from app.sql.common import db, Base, Session +# from app.sql.models.graph import Graph from app.settings import app_cfg class Page(Base): """Table for storing references to pages""" - __tablename__ = 'pages' + __tablename__ = 'page' id = Column(Integer, primary_key=True) graph_id = Column(Integer, ForeignKey('graph.id'), nullable=True) path = Column(String(64, convert_unicode=True), nullable=False) @@ -17,9 +19,9 @@ class Page(Base): description = Column(Text(convert_unicode=True), nullable=False) settings = Column(JSON, default={}, nullable=True) created_at = Column(UtcDateTime(), default=utcnow()) - updated_at = Column(UtcDateTime(), default=utcnow()) + updated_at = Column(UtcDateTime(), onupdate=utcnow()) - tiles = relationship("Tile", secondary="tiles", lazy='dynamic') + # tiles = relationship("Tile", lazy='dynamic') def toJSON(self): return { @@ -33,9 +35,14 @@ class Page(Base): 'updated_at': self.updated_at, } -class PageForm(ModelForm): - class Meta: - model = Page - exclude = ['graph_id', 'settings', 'created_at', 'updated_at'] - def get_session(): - return Session() + def toFullJSON(self): + data = self.toJSON() + data['tiles'] = [ tile.toJSON() for tile in self.tiles ] + return data + +# class PageForm(ModelForm): +# class Meta: +# model = Page +# exclude = ['graph_id', 'settings', 'created_at', 'updated_at'] +# def get_session(): +# return Session() diff --git a/cli/app/sql/models/tile.py b/cli/app/sql/models/tile.py index 01b3fab..85ee1bf 100644 --- a/cli/app/sql/models/tile.py +++ b/cli/app/sql/models/tile.py @@ -1,18 +1,20 @@ -from sqlalchemy import create_engine, Table, Column, Text, String, Integer, DateTime, JSON +from sqlalchemy import create_engine, Table, Column, Text, String, Integer, DateTime, JSON, ForeignKey +from sqlalchemy.orm import relationship import sqlalchemy.sql.functions as func from sqlalchemy_utc import UtcDateTime, utcnow from wtforms_alchemy import ModelForm from app.sql.common import db, Base, Session +# from app.sql.models.graph import Graph +# from app.sql.models.page import Page -from app.utils.file_utils import sha256_tree from app.settings import app_cfg from os.path import join class Tile(Base): """Table for storing references to tiles""" - __tablename__ = 'tiles' + __tablename__ = 'tile' id = Column(Integer, primary_key=True) graph_id = Column(Integer, ForeignKey('graph.id'), nullable=True) page_id = Column(Integer, ForeignKey('page.id'), nullable=True) @@ -20,7 +22,7 @@ class Tile(Base): type = Column(String(16, convert_unicode=True), nullable=False) settings = Column(JSON, default={}, nullable=True) created_at = Column(UtcDateTime(), default=utcnow()) - updated_at = Column(UtcDateTime(), default=utcnow()) + updated_at = Column(UtcDateTime(), onupdate=utcnow()) def toJSON(self): return { @@ -34,10 +36,9 @@ class Tile(Base): 'updated_at': self.updated_at, } - class TileForm(ModelForm): class Meta: model = Tile - exclude = ['graph_id', 'page_id', 'target_page_id', 'settings', 'created_at', 'updated_at'] + # exclude = ['graph_id', 'page_id', 'target_page_id', 'settings', 'created_at', 'updated_at'] def get_session(): return Session() diff --git a/cli/app/sql/models/upload.py b/cli/app/sql/models/upload.py index f1e8108..5863b07 100644 --- a/cli/app/sql/models/upload.py +++ b/cli/app/sql/models/upload.py @@ -4,8 +4,6 @@ from sqlalchemy_utc import UtcDateTime, utcnow from wtforms_alchemy import ModelForm from app.sql.common import db, Base, Session -from app.sql.columns.hash_column import HashColumn -from app.sql.columns.media_type_column import MediaTypeColumn from app.utils.file_utils import sha256_tree from app.settings import app_cfg @@ -14,9 +12,10 @@ from os.path import join class Upload(Base): """Table for storing references to various media""" - __tablename__ = 'uploads' + __tablename__ = 'upload' id = Column(Integer, primary_key=True) - sha256 = Column(HashColumn(32), nullable=False) + sha256 = Column(String(256), nullable=False) + fn = Column(String(256), nullable=False) ext = Column(String(4, convert_unicode=True), nullable=False) username = Column(String(16, convert_unicode=True), nullable=False) created_at = Column(UtcDateTime(), default=utcnow()) @@ -25,6 +24,7 @@ class Upload(Base): return { 'id': self.id, 'sha256': self.sha256, + 'fn': self.fn, 'ext': self.ext, 'username': self.username, 'url': self.url(), @@ -32,7 +32,7 @@ class Upload(Base): } def filename(self): - return "{}{}".format(self.sha256, self.ext) + return "{}{}".format(self.fn) def filepath(self): return join(app_cfg.DIR_UPLOADS, sha256_tree(self.sha256)) -- cgit v1.2.3-70-g09d2