summaryrefslogtreecommitdiff
path: root/cli/app/sql/models
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2020-06-01 19:45:15 +0200
committerJules Laplace <julescarbon@gmail.com>2020-06-01 19:45:15 +0200
commit3fb522534cff61576ac58ae466a2752585b8c44e (patch)
treebefac10b20e0c07e7e3fa32e77fc1429e8708e53 /cli/app/sql/models
parent288694ae9a61c59dba91e2357fa7785d95a51341 (diff)
setting up the database...
Diffstat (limited to 'cli/app/sql/models')
-rw-r--r--cli/app/sql/models/graph.py15
-rw-r--r--cli/app/sql/models/page.py27
-rw-r--r--cli/app/sql/models/tile.py13
-rw-r--r--cli/app/sql/models/upload.py10
4 files changed, 40 insertions, 25 deletions
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))