Refactoring

This commit is contained in:
2015-02-01 17:56:09 +00:00
parent 08f95dcb99
commit 971b37c4d2
14 changed files with 240 additions and 164 deletions

View File

@@ -0,0 +1,129 @@
from flask import (abort,
Blueprint,
jsonify,
render_template,
redirect,
request,
flash)
from flask.ext.thumbnails import Thumbnail
from flask.ext.sqlalchemy import SQLAlchemy
from sqlalchemy.orm import aliased
from flask_wtf import Form
from wtforms import TextField
from wtforms import BooleanField
from wtforms import SelectField
from wtforms import TextAreaField
from wtforms import IntegerField
from wtforms.validators import DataRequired
from application import db
from application.modules.nodes.models import Node, NodeType, Status
from application.modules.shots.models import NodeShot
# Name of the Blueprint
shots = Blueprint('shots', __name__)
@shots.route("/")
def index():
shots = []
for shot in Node.query.\
join(NodeType).\
filter(NodeType.url == 'shot'):
status = None
if shot.status:
status = shot.status.name
shots.append(dict(
id=shot.id,
name=shot.name,
description=shot.description,
duration=shot.node_shot[0].duration,
status=status,
notes=shot.node_shot[0].notes))
return render_template('shots/index.html',
title='shots',
shots=shots)
@shots.route("/view/<int:shot_id>")
def view(shot_id):
shot = Node.query.get(shot_id)
if shot and shot.node_type.url == 'shot':
return render_template('shots/view.html',
title='shots',
shot=shot,
notes=shot.node_shot[0].notes)
else:
abort(404)
class ShotForm(Form):
name = TextField('Shot Name', validators=[DataRequired()])
description = TextAreaField('Description', validators=[DataRequired()])
status_id = SelectField('Status', coerce=int)
duration = IntegerField('Duration')
notes = TextAreaField('Notes')
@shots.route("/create", methods=('GET', 'POST'))
def create():
form = ShotForm()
# Populate dropdown select with available Statuses
form.status_id.choices = [(status.id, status.name) for status in Status.query.all()]
if form.validate_on_submit():
shot_type = NodeType.query.filter_by(url='shot').first()
shot = Node(
name=form.name.data,
description=form.description.data,
node_type_id=shot_type.id,
status_id=form.status_id.data)
# Create entry in the attached node table
shot.node_shot = [NodeShot(
duration=form.duration.data,
notes=form.notes.data)]
db.session.add(shot)
db.session.commit()
return redirect('/')
return render_template('shots/create.html', form=form)
@shots.route("/edit/<int:shot_id>", methods=('GET', 'POST'))
def edit(shot_id):
shot = Node.query.get(shot_id)
form = ShotForm(
name=shot.name,
description=shot.description,
duration=shot.node_shot[0].duration,
note=shot.node_shot[0].notes)
form.status_id.choices = [(status.id, status.name) for status in Status.query.all()]
if form.validate_on_submit():
print shot.node_shot
shot.name = form.name.data
shot.description = form.description.data
shot.node_shot[0].duration = form.duration.data
shot.status_id = form.status_id.data
shot.node_shot[0].notes = form.notes.data
db.session.commit()
return redirect('/')
return render_template(
'shots/edit.html',
form=form,
shot_id=shot_id)
@shots.route("/delete/<int:shot_id>")
def delete(shot_id):
shot = Node.query.get(shot_id)
if shot:
db.session.delete(shot)
db.session.commit()
return redirect('/')
else:
abort(404)

View File

@@ -0,0 +1,53 @@
from application import app
from application import db
from application.modules.nodes.models import Node
class NodeShot(db.Model):
"""docstring for NodeShot"""
id = db.Column(db.Integer, primary_key = True)
duration = db.Column(db.Integer, nullable=False)
notes = db.Column(db.Text)
node_id = db.Column(db.Integer, db.ForeignKey(Node.id))
node = db.relationship(Node, backref='node_shot', uselist=False)
# Create Many to Many table
"""
assets_tags_table = db.Table('assets_tags', db.Model.metadata,
db.Column('asset_id', db.Integer, db.ForeignKey('asset.id')),
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'))
)
"""
# class Asset(db.Model):
# id = db.Column(db.Integer, primary_key=True)
# name = db.Column(db.String(120), nullable=False)
# description = db.Column(db.Text, nullable=False)
# link = db.Column(db.String(512))
# picture = db.Column(db.String(80))
# size = db.Column(db.String(7))
# format = db.Column(db.String(15))
# duration = db.Column(db.String(15))
# nodes = db.relationship('Node', secondary=nodes_assets_table)
# #tags = db.relationship('Tag', secondary=assets_tags_table)
# def __str__(self):
# return self.name
"""
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(64))
def __str__(self):
return self.name
"""