Skip to content

Commit

Permalink
Merge branch 'master' of github.com:makaimc/choose-your-own-adventure…
Browse files Browse the repository at this point in the history
…-presentations
  • Loading branch information
mattmakai committed Mar 22, 2015
2 parents 0488d82 + aa59353 commit ab0cfb2
Show file tree
Hide file tree
Showing 27 changed files with 417 additions and 723 deletions.
3 changes: 1 addition & 2 deletions cyoa/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,4 @@
login_manager.login_view = 'admin_sign_in'
login_manager.init_app(app)

from . import views
from . import websockets
from . import views, websockets, wizard_views, web_voting_views
36 changes: 22 additions & 14 deletions cyoa/forms.py
Original file line number Diff line number Diff line change
@@ -1,36 +1,44 @@
from flask.ext.wtf import Form
from wtforms import StringField, PasswordField, BooleanField, SubmitField, \
DateField
from wtforms.validators import Required, Length, Email, Regexp, EqualTo
DateField, IntegerField
from wtforms.validators import Required, Length, Regexp, EqualTo
from wtforms import ValidationError
from .models import User, Presentation
from .models import Wizard, Presentation


class LoginForm(Form):
email = StringField('Email', validators=[Required(), Length(1, 64),
Email()])
password = PasswordField('Password', validators=[Required(),
wizard_name = StringField('Wizard Name',
validators=[Required(), Length(1, 32)])
password = PasswordField('Password', validators=[Required(),
Length(1, 32)])

def validate(self):
if not Form.validate(self):
return False
user = User.query.filter_by(email=self.email.data).first()
user = Wizard.query.filter_by(wizard_name=self.
wizard_name.data).first()
if user is not None and not user.verify_password(self.password.data):
self.password.errors.append('Incorrect password.')
return False
return True


class PresentationForm(Form):
name = StringField('Presentation name', validators=[Required(),
name = StringField('Presentation name', validators=[Required(),
Length(1, 60)])
filename = StringField('File name', validators=[Required(),
filename = StringField('File name', validators=[Required(),
Length(1, 255)])
url_slug = StringField('Public URL slug', validators=[Required(),
Length(1, 255)])
slug = StringField('URL slug', validators=[Required(),
Length(1, 255)])
is_active = BooleanField()
number = StringField('Text-in phone number', validators=[Length(0, 32)])
email = StringField('Text-in email address', validators=[Length(0, 40)])
choices = StringField('Choices (semicolon delimited)')
voting_number = StringField('Text-in phone number',
validators=[Length(0, 32)])
enable_browser_voting = BooleanField()


class ChoiceForm(Form):
name = StringField('Voting choice name', validators=[Required(),
Length(1, 60)])
slug = StringField('URL slug', validators=[Required(),
Length(1, 60)])
decision_point = IntegerField('Decision Point #', validators=[Required()])
34 changes: 14 additions & 20 deletions cyoa/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,17 @@
from . import db


class User(UserMixin, db.Model):
class Wizard(UserMixin, db.Model):
"""
Represents an admin user in cyoa.
Represents a wizard who can access special parts of the application.
"""
__tablename__ = 'users'
__tablename__ = 'wizards'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(64), unique=True, index=True)
wizard_name = db.Column(db.String(64), unique=True, index=True)
password_hash = db.Column(db.String(128))

def __init__(self, email, password):
self.email = email
def __init__(self, wizard_name, password):
self.wizard_name = wizard_name
self.password = password

@property
Expand All @@ -30,7 +30,7 @@ def verify_password(self, password):
return check_password_hash(self.password_hash, password)

def __repr__(self):
return '<User %r>' % self.email
return '<Wizard %r>' % self.wizard_name


class Presentation(db.Model):
Expand All @@ -40,16 +40,12 @@ class Presentation(db.Model):
__tablename__ = 'presentations'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)
slug = db.Column(db.String(128), unique=True)
filename = db.Column(db.String(256))
url_slug = db.Column(db.String(128))
is_active = db.Column(db.Boolean, default=False)
choices_number = db.Column(db.String(32), default="")
choices_email = db.Column(db.String(40), default="")
choices = db.relationship('Choice', lazy='dynamic')

def __init__(self, name, filename):
self.name = name
self.filename = filename
voting_number = db.Column(db.String(32), default="")
enable_browser_voting = db.Column(db.Boolean, default=False)
choices_list = db.relationship('Choice', lazy='dynamic')

def __repr__(self):
return '<Presentation %r>' % self.name
Expand All @@ -62,13 +58,11 @@ class Choice(db.Model):
"""
__tablename__ = 'choices'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)
votes = db.Column(db.Integer, default=0)
name = db.Column(db.String(64))
slug = db.Column(db.String(64))
decision_point = db.Column(db.Integer)
presentation = db.Column(db.Integer, db.ForeignKey('presentations.id'))

def __init__(self, name):
self.name = name

def __repr__(self):
return '<Choice %r>' % self.name

Loading

0 comments on commit ab0cfb2

Please sign in to comment.