Created
March 2, 2012 02:29
-
-
Save harvimt/1955047 to your computer and use it in GitHub Desktop.
Boilerplate Complaint
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from sqlalchemy import create_engine, Column, Integer, String | |
engine = create_engine('sqlite:///data.db') | |
from sqlalchemy.orm import sessionmaker | |
Session = sessionmaker(bind=engine) | |
sess = Session() | |
from sqlalchemy.ext.declarative import declarative_base | |
Base = declarative_base() | |
import flatland as flat | |
from flatland import Form | |
from flatland.validation import LengthBetween, ValueGreaterThan | |
from flask import Flask, request, redirect, url_for | |
app = Flask(__name__) | |
class Survey(Base): | |
__tablename__ = 'surveys' | |
__slots__ = ('survey_id','long_name') | |
survey_id = Column(Integer, primary_key=True) | |
long_name = Column(String(128)) | |
def __init__(self, survey_id=None, long_name=None): | |
self.survey_id = survey_id | |
self.long_name = long_name | |
def __repr__(self): | |
return 'Survey(survey_id=%r,long_name=%r)' % (self.survey_id, self.long_name) | |
def update(self, **fields): | |
vars(self).update(**fields) | |
Base.metadata.create_all(engine) | |
class SurveyForm(Form): | |
survey_id = flat.Integer.using(default_value=None,validators=[ValueGreaterThan(0)]) | |
long_name = flat.String.using(validators=[LengthBetween(0,128)]) | |
@app.route('/surveys',methods=['GET']) | |
def list_surveys(): | |
surveys = map(lambda x: SurveyForm.from_object(x).value, sess.query(Survey).all()) | |
return json.dumps(surveys,indent=4) | |
@app.route('/surveys',methods=['POST']) | |
def add_survey(): | |
survey_form = SurveyForm.from_flat(request.form) | |
survey_form.validate() #deal with validation errors and stuff | |
survey = Survey(**survey_form.value) | |
sess.add(survey) | |
sess.commit() | |
#return 'XX' | |
return redirect(url_for('get_survey',survey_id=survey.survey_id)) | |
@app.route('/surveys/<int:survey_id>', methods=['GET']) | |
def get_survey(survey_id): | |
survey = sess.query(Survey).filter_by(survey_id=survey_id).one() | |
survey_form = SurveyForm.from_object(survey) #arguably unneccessary, added for orthogonality and the fact that the view/template layer will likely plug into flatland | |
return json.dumps(survey_form.value) | |
@app.route('/surveys/<int:survey_id>', methods=['PUT']) | |
def put_survey(survey_id): | |
survey = sess.query(Survey).filter_by(survey_id=survey_id).one() | |
survey_form = SurveyForm.from_flat(request.form) | |
survey.update(**survey_form.value) | |
sess.commit() | |
return redirect(url_for('get_survey')) | |
@app.route('/surveys/<int:survey_id>', methods=['DELETE']) | |
def del_survey(survey_id): | |
survey = sess.query(Survey).filter_by(survey_id=survey_id).one() | |
sess.delete(survey) | |
sess.commit() | |
return 'Successfully delete survey %s' % survey.long_name | |
if __name__ == '__main__': | |
app.run(debug=True) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment