From 9dba744407f61a56efb8e63bbfa50ade6e847acf Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Wed, 30 Sep 2020 18:48:54 +0200 Subject: update episodes table form. add venues table and CRUD --- .../cli/app/controllers/venue_controller.py | 19 +++++++++++ animism-align/cli/app/server/web.py | 2 ++ animism-align/cli/app/sql/common.py | 1 + animism-align/cli/app/sql/env.py | 1 + animism-align/cli/app/sql/models/episode.py | 13 +++++++- animism-align/cli/app/sql/models/venue.py | 32 +++++++++++++++++++ .../versions/202009291913_create_episodes_table.py | 36 --------------------- .../versions/202009301833_create_episodes_table.py | 37 ++++++++++++++++++++++ .../versions/202009301842_create_venue_table.py | 35 ++++++++++++++++++++ 9 files changed, 139 insertions(+), 37 deletions(-) create mode 100644 animism-align/cli/app/controllers/venue_controller.py create mode 100644 animism-align/cli/app/sql/models/venue.py delete mode 100644 animism-align/cli/app/sql/versions/202009291913_create_episodes_table.py create mode 100644 animism-align/cli/app/sql/versions/202009301833_create_episodes_table.py create mode 100644 animism-align/cli/app/sql/versions/202009301842_create_venue_table.py (limited to 'animism-align/cli') diff --git a/animism-align/cli/app/controllers/venue_controller.py b/animism-align/cli/app/controllers/venue_controller.py new file mode 100644 index 0000000..53588ab --- /dev/null +++ b/animism-align/cli/app/controllers/venue_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.venue import Venue, VenueForm +from app.controllers.crud_controller import CrudView + +class VenueView(CrudView): + model = Venue + form = VenueForm + + 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 165e4d4..890bd35 100644 --- a/animism-align/cli/app/server/web.py +++ b/animism-align/cli/app/server/web.py @@ -21,6 +21,7 @@ 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 +from app.controllers.venue_controller import VenueView def create_app(script_info=None): """ @@ -41,6 +42,7 @@ def create_app(script_info=None): UploadView.register(app, route_prefix='/api/v1/') MediaView.register(app, route_prefix='/api/v1/') EpisodeView.register(app, route_prefix='/api/v1/') + VenueView.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 88a3d1e..1061a46 100644 --- a/animism-align/cli/app/sql/common.py +++ b/animism-align/cli/app/sql/common.py @@ -36,3 +36,4 @@ 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 +from app.sql.models.venue import Venue diff --git a/animism-align/cli/app/sql/env.py b/animism-align/cli/app/sql/env.py index a44583a..1f03a42 100644 --- a/animism-align/cli/app/sql/env.py +++ b/animism-align/cli/app/sql/env.py @@ -19,6 +19,7 @@ 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 +from app.sql.models.venue import Venue 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 index a13c674..34402b8 100644 --- a/animism-align/cli/app/sql/models/episode.py +++ b/animism-align/cli/app/sql/models/episode.py @@ -1,4 +1,4 @@ -from sqlalchemy import create_engine, Table, Column, Text, String, Integer, Float, DateTime, JSON, ForeignKey +from sqlalchemy import create_engine, Table, Column, Text, String, Integer, Boolean, Float, DateTime, JSON, ForeignKey from sqlalchemy.orm import relationship import sqlalchemy.sql.functions as func from sqlalchemy_utc import UtcDateTime, utcnow @@ -15,6 +15,7 @@ class Episode(Base): 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) + is_live = Column(Boolean, default=False) settings = Column(JSON, default={}, nullable=True) def toJSON(self): @@ -23,6 +24,16 @@ class Episode(Base): 'episode_number': self.episode_number, 'title': self.type, 'release_date': self.release_date, + 'is_live': self.is_live, + } + + def toFullJSON(self): + return { + 'id': self.id, + 'episode_number': self.episode_number, + 'title': self.type, + 'release_date': self.release_date, + 'is_live': self.is_live, 'settings': self.settings, } diff --git a/animism-align/cli/app/sql/models/venue.py b/animism-align/cli/app/sql/models/venue.py new file mode 100644 index 0000000..992adea --- /dev/null +++ b/animism-align/cli/app/sql/models/venue.py @@ -0,0 +1,32 @@ +from sqlalchemy import create_engine, Table, Column, Text, String, Integer, Boolean, 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 Venue(Base): + """Table for storing the venue list""" + __tablename__ = 'venue' + id = Column(Integer, primary_key=True) + title = Column(String(256, convert_unicode=True), nullable=False) + date = Column(String(256, convert_unicode=True), nullable=False) + settings = Column(JSON, default={}, nullable=True) + + def toJSON(self): + return { + 'id': self.id, + 'title': self.type, + 'date': self.type, + 'settings': self.settings, + } + +class VenueForm(ModelForm): + class Meta: + model = Venue + 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 deleted file mode 100644 index ed58e8b..0000000 --- a/animism-align/cli/app/sql/versions/202009291913_create_episodes_table.py +++ /dev/null @@ -1,36 +0,0 @@ -"""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 ### diff --git a/animism-align/cli/app/sql/versions/202009301833_create_episodes_table.py b/animism-align/cli/app/sql/versions/202009301833_create_episodes_table.py new file mode 100644 index 0000000..46d626b --- /dev/null +++ b/animism-align/cli/app/sql/versions/202009301833_create_episodes_table.py @@ -0,0 +1,37 @@ +"""create episodes table + +Revision ID: 2eb39d4c2aea +Revises: 1e3c915ef21f +Create Date: 2020-09-30 18:33:26.620856 + +""" +from alembic import op +import sqlalchemy as sa +import sqlalchemy_utc + + +# revision identifiers, used by Alembic. +revision = '2eb39d4c2aea' +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('is_live', sa.Boolean(), nullable=True), + 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 ### diff --git a/animism-align/cli/app/sql/versions/202009301842_create_venue_table.py b/animism-align/cli/app/sql/versions/202009301842_create_venue_table.py new file mode 100644 index 0000000..17505fc --- /dev/null +++ b/animism-align/cli/app/sql/versions/202009301842_create_venue_table.py @@ -0,0 +1,35 @@ +"""create venue table + +Revision ID: a21872d09bbc +Revises: 2eb39d4c2aea +Create Date: 2020-09-30 18:42:37.865663 + +""" +from alembic import op +import sqlalchemy as sa +import sqlalchemy_utc + + +# revision identifiers, used by Alembic. +revision = 'a21872d09bbc' +down_revision = '2eb39d4c2aea' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('venue', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('title', sa.String(length=256, _expect_unicode=True), nullable=False), + sa.Column('date', sa.String(length=256, _expect_unicode=True), nullable=False), + sa.Column('settings', sa.JSON(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('venue') + # ### end Alembic commands ### -- cgit v1.2.3-70-g09d2