Last active
February 19, 2018 05:19
-
-
Save viveksb007/26abbd4c82651f30b30107aa3b1f2e09 to your computer and use it in GitHub Desktop.
This file contains 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 flask import Flask, request, jsonify | |
from flask_httpauth import HTTPBasicAuth | |
from flask_sqlalchemy import SQLAlchemy | |
import datetime | |
app = Flask(__name__) | |
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db' | |
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True | |
db = SQLAlchemy(app) | |
auth = HTTPBasicAuth() | |
class User(db.Model): | |
id = db.Column(db.Integer, primary_key=True) | |
username = db.Column(db.String(80), unique=True, nullable=False) | |
password = db.Column(db.String(20), nullable=False) | |
email = db.Column(db.String(100), unique=True, nullable=False) | |
def __init__(self, username, password, email): | |
self.username = username | |
self.password = password | |
self.email = email | |
def __repr__(self): | |
return '<User %r>' % self.username | |
class Task(db.Model): | |
id = db.Column(db.Integer, primary_key=True) | |
content = db.Column(db.Text) | |
add_date = db.Column(db.DateTime, default=datetime.datetime.now()) | |
end_date = db.Column(db.DateTime) | |
done = db.Column(db.Boolean, default=False) | |
user = db.relationship('User', backref='tasks', lazy=True) | |
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) | |
def __init__(self, content, user): | |
self.content = content | |
self.user = user | |
def __repr__(self): | |
return '<Task %r>' % self.content | |
@auth.get_password | |
def get_pw(username): | |
user = User.query.filter_by(username=username).first() | |
if user is not None: | |
return user.password | |
else: | |
return None | |
@app.route('/signup', methods=['POST']) | |
def signup(): | |
username = request.form['username'] | |
password = request.form['password'] | |
email = request.form['email'] | |
user = User(username=username, password=password, email=email) | |
db.session.add(user) | |
db.session.commit() | |
return jsonify({ | |
'response': 'User ' + username + ' created successfully' | |
}) | |
@app.route('/add_task', methods=['POST']) | |
@auth.login_required | |
def add_task(): | |
content = request.form['content'] | |
task = Task(content=content, user=User.query.filter_by(username=auth.username()).first()) | |
db.session.add(task) | |
db.session.commit() | |
return jsonify({ | |
'username': auth.username(), | |
'task-id': task.id, | |
'content': task.content | |
}) | |
@app.route('/remove_task', methods=['POST']) | |
@auth.login_required | |
def remove_task(): | |
task_id = request.form['task_id'] | |
task = Task.query.get(task_id) | |
if task is None: | |
return jsonify({ | |
'status': 'Failed' | |
}) | |
deleted_task = jsonify({ | |
'status': 'success', | |
'task_id': task.id, | |
'content': task.content, | |
'task_completed': task.done | |
}) | |
db.session.delete(task) | |
db.session.commit() | |
return deleted_task | |
@app.route('/mark_task_as_done', methods=['POST']) | |
@auth.login_required | |
def mark_task_as_done(): | |
task_id = request.form['task_id'] | |
task = Task.query.get(task_id) | |
if task is None: | |
return jsonify({ | |
'status': 'Failed' | |
}) | |
task.done = True | |
task.end_date = datetime.datetime.now() | |
db.session.commit() | |
return jsonify({ | |
'content': task.content, | |
'add_date': task.add_date, | |
'end_date': task.end_date, | |
'task_completed': task.done | |
}) | |
@app.route('/show_tasks', methods=['GET']) | |
@auth.login_required | |
def list_all_tasks(): | |
user = User.query.filter_by(username=auth.username()).first() | |
if user is None: | |
return jsonify({ | |
'status': 'failed' | |
}) | |
task_list = {} | |
for task in user.tasks: | |
task_list[task.id] = {'content': task.content, | |
'add_date': task.add_date, | |
'task_completed': task.done} | |
return jsonify(task_list) | |
# creating dummy user | |
db.create_all() | |
if __name__ == '__main__': | |
app.run() | |
''' | |
Calls | |
/signup | |
curl -d "username=vivek&password=pass&email=yo@gmail.com" -X POST http://127.0.0.1:5000/signup | |
/add_task | |
curl -u vivek:pass -d "content=this is first test content" -X POST http://127.0.0.1:5000/add_task | |
/remove_task | |
curl -u vivek:pass -d"task_id=2" -X POST http://127.0.0.1:5000/remove_task | |
/mark_task_as_done | |
curl -u vivek:pass -d "task_id=2" -X POST http://127.0.0.1:5000/mark_task_as_done | |
/show_tasks | |
curl -u vivek:pass -X GET http://127.0.0.1:5000/show_tasks | |
''' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment