summaryrefslogtreecommitdiff
path: root/animism-align
diff options
context:
space:
mode:
Diffstat (limited to 'animism-align')
-rw-r--r--animism-align/cli/app/controllers/episode_controller.py19
-rw-r--r--animism-align/cli/app/server/web.py2
-rw-r--r--animism-align/cli/app/sql/common.py1
-rw-r--r--animism-align/cli/app/sql/env.py1
-rw-r--r--animism-align/cli/app/sql/models/episode.py34
-rw-r--r--animism-align/cli/app/sql/versions/202009291913_create_episodes_table.py36
6 files changed, 93 insertions, 0 deletions
diff --git a/animism-align/cli/app/controllers/episode_controller.py b/animism-align/cli/app/controllers/episode_controller.py
new file mode 100644
index 0000000..700b04f
--- /dev/null
+++ b/animism-align/cli/app/controllers/episode_controller.py
@@ -0,0 +1,19 @@
+from flask import request, jsonify, redirect
+from flask_classful import route
+from werkzeug.datastructures import MultiDict
+
+from app.sql.common import db, Session
+from app.sql.models.episode import Episode, EpisodeForm
+from app.controllers.crud_controller import CrudView
+
+class EpisodeView(CrudView):
+ model = Episode
+ form = EpisodeForm
+
+ def on_create(self, session, form, item):
+ if 'settings' in form:
+ item.settings = form['settings']
+
+ def on_update(self, session, form, item):
+ if 'settings' in form:
+ item.settings = form['settings']
diff --git a/animism-align/cli/app/server/web.py b/animism-align/cli/app/server/web.py
index a0527ef..165e4d4 100644
--- a/animism-align/cli/app/server/web.py
+++ b/animism-align/cli/app/server/web.py
@@ -20,6 +20,7 @@ from app.controllers.annotation_controller import AnnotationView
from app.controllers.paragraph_controller import ParagraphView
from app.controllers.upload_controller import UploadView
from app.controllers.media_controller import MediaView
+from app.controllers.episode_controller import EpisodeView
def create_app(script_info=None):
"""
@@ -39,6 +40,7 @@ def create_app(script_info=None):
ParagraphView.register(app, route_prefix='/api/v1/')
UploadView.register(app, route_prefix='/api/v1/')
MediaView.register(app, route_prefix='/api/v1/')
+ EpisodeView.register(app, route_prefix='/api/v1/')
index_html = 'index.html'
diff --git a/animism-align/cli/app/sql/common.py b/animism-align/cli/app/sql/common.py
index 851c333..88a3d1e 100644
--- a/animism-align/cli/app/sql/common.py
+++ b/animism-align/cli/app/sql/common.py
@@ -35,3 +35,4 @@ from app.sql.models.annotation import Annotation
from app.sql.models.paragraph import Paragraph
from app.sql.models.upload import Upload
from app.sql.models.media import Media
+from app.sql.models.episode import Episode
diff --git a/animism-align/cli/app/sql/env.py b/animism-align/cli/app/sql/env.py
index 6871a27..a44583a 100644
--- a/animism-align/cli/app/sql/env.py
+++ b/animism-align/cli/app/sql/env.py
@@ -18,6 +18,7 @@ from app.sql.models.annotation import Annotation
from app.sql.models.paragraph import Paragraph
from app.sql.models.upload import Upload
from app.sql.models.media import Media
+from app.sql.models.episode import Episode
def run_migrations_offline():
"""Run migrations in 'offline' mode.
diff --git a/animism-align/cli/app/sql/models/episode.py b/animism-align/cli/app/sql/models/episode.py
new file mode 100644
index 0000000..a13c674
--- /dev/null
+++ b/animism-align/cli/app/sql/models/episode.py
@@ -0,0 +1,34 @@
+from sqlalchemy import create_engine, Table, Column, Text, String, Integer, Float, 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.settings import app_cfg
+
+class Episode(Base):
+ """Table for storing episodes and their metadata"""
+ __tablename__ = 'episode'
+ id = Column(Integer, primary_key=True)
+ episode_number = Column(Integer, primary_key=True)
+ title = Column(String(256, convert_unicode=True), nullable=False)
+ release_date = Column(String(256, convert_unicode=True), primary_key=True)
+ settings = Column(JSON, default={}, nullable=True)
+
+ def toJSON(self):
+ return {
+ 'id': self.id,
+ 'episode_number': self.episode_number,
+ 'title': self.type,
+ 'release_date': self.release_date,
+ 'settings': self.settings,
+ }
+
+class EpisodeForm(ModelForm):
+ class Meta:
+ model = Episode
+ exclude = ['settings']
+ def get_session():
+ return Session()
diff --git a/animism-align/cli/app/sql/versions/202009291913_create_episodes_table.py b/animism-align/cli/app/sql/versions/202009291913_create_episodes_table.py
new file mode 100644
index 0000000..ed58e8b
--- /dev/null
+++ b/animism-align/cli/app/sql/versions/202009291913_create_episodes_table.py
@@ -0,0 +1,36 @@
+"""create episodes table
+
+Revision ID: 67406c9b5b8f
+Revises: 1e3c915ef21f
+Create Date: 2020-09-29 19:13:46.262415
+
+"""
+from alembic import op
+import sqlalchemy as sa
+import sqlalchemy_utc
+
+
+# revision identifiers, used by Alembic.
+revision = '67406c9b5b8f'
+down_revision = '1e3c915ef21f'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.create_table('episode',
+ sa.Column('id', sa.Integer(), nullable=False),
+ sa.Column('episode_number', sa.Integer(), nullable=False),
+ sa.Column('title', sa.String(length=256, _expect_unicode=True), nullable=False),
+ sa.Column('release_date', sa.String(length=256, _expect_unicode=True), nullable=False),
+ sa.Column('settings', sa.JSON(), nullable=True),
+ sa.PrimaryKeyConstraint('id', 'episode_number', 'release_date')
+ )
+ # ### end Alembic commands ###
+
+
+def downgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.drop_table('episode')
+ # ### end Alembic commands ###