Guest User

Untitled

a guest
Jul 9th, 2016
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.26 KB | None | 0 0
  1. from flask import Flask, jsonify, request, abort, make_response
  2. from sqlalchemy import Column, Integer, String, ForeignKey, create_engine, \
  3.     Table
  4. from sqlalchemy.ext.declarative import declarative_base
  5. from sqlalchemy.orm import sessionmaker, relationship
  6. import random
  7.  
  8. app = Flask(__name__)
  9. Base = declarative_base()
  10. engine = create_engine('sqlite:///sqlalchemytest.db', echo=True)
  11. Session = sessionmaker(bind=engine)
  12. ses = Session()
  13.  
  14.  
  15. task_tasklists = Table(
  16.     'task_tasklists', Base.metadata,
  17.     Column('task_id', ForeignKey('tasks.id'), primary_key=True),
  18.     Column('tasklist_id', ForeignKey('task_lists.id'), primary_key=True)
  19. )
  20.  
  21.  
  22. class User(Base):
  23.     __tablename__ = 'users'
  24.     id = Column(Integer, primary_key=True)
  25.     email = Column(String(255))
  26.     password = Column(String(255))
  27.     remember_token = Column(String(255))
  28.     user_level = Column(Integer)
  29.  
  30.     tasks = relationship("Task", back_populates="user")
  31.  
  32.     def __repr__(self):
  33.         return "<User(email='%s', password='%s', rememberToken='%s', userLevel=%s)>" % (
  34.             self.email, self.password, self.remember_token, self.user_level)
  35.  
  36.  
  37. class Task(Base):
  38.     __tablename__ = 'tasks'
  39.  
  40.     id = Column(Integer, primary_key=True)
  41.     title = Column(String(50))
  42.     description = Column(String(255))
  43.     priority = Column(Integer)
  44.     completed = Column(Integer)
  45.     user_id = Column(Integer, ForeignKey('users.id'))
  46.  
  47.     user = relationship("User", back_populates="tasks")
  48.     tasklists = relationship(
  49.         'TaskList',
  50.         secondary=task_tasklists,
  51.         back_populates='tasks')
  52.  
  53.  
  54. class TaskList(Base):
  55.     __tablename__ = 'task_lists'
  56.  
  57.     id = Column(Integer, primary_key=True)
  58.     title = Column(String(50))
  59.     description = Column(String(255))
  60.     tasks = relationship(
  61.         'Task',
  62.         secondary=task_tasklists,
  63.         back_populates='tasklists')
  64.  
  65.  
  66. Base.metadata.create_all(engine)
  67.  
  68.  
  69. @app.route('/todo/api/v1.0/<int:id>/task', methods=['POST'])
  70. def create_task(id):
  71.     if not request.json or 'title' not in request.json:
  72.         abort(400)
  73.     user = ses.query(User).filter(User.id == id).first()
  74.     task = Task(
  75.         title=request.json['title'],
  76.         description=request.json.get('description', ""),
  77.         priority=request.json['priority'],
  78.         completed=request.json['completed'])
  79.     user.tasks.append(task)
  80.     ses.add(user)
  81.     ses.commit()
  82.     newTask = {
  83.         'id': task.id,
  84.         'title': task.title,
  85.         'description': task.description,
  86.         'priority': task.priority,
  87.         'completed': task.completed
  88.     }
  89.     return jsonify({'task': newTask}), 201
  90.  
  91.  
  92. @app.route('/todo/api/v1.0/<int:user_id>/tasks', methods=['GET'])
  93. def get_tasks(user_id):
  94.     tasks = []
  95.     for task in ses.query(User).filter(User.id == user_id).first().tasks:
  96.         tasks.append(
  97.             {
  98.                 'id': task.id,
  99.                 'title': task.title,
  100.                 'description': task.description,
  101.                 'priority': task.priority,
  102.                 'completed': task.completed
  103.             }
  104.         )
  105.     return jsonify({'tasks': tasks})
  106.  
  107.  
  108. @app.route('/todo/api/v1.0/user', methods=['POST'])
  109. def create_user():
  110.     if not request.json or 'email' not in request.json:
  111.         abort(400)
  112.     elif not request.json or 'password' not in request.json:
  113.         abort(400)
  114.     user = User(
  115.         email=request.json['email'],
  116.         password=request.json['password'],
  117.         remember_token=random.randint(1, 30000),
  118.         user_level=1)
  119.     ses.add(user)
  120.     ses.commit()
  121.     response = {
  122.         'status': 'success',
  123.         'message': 'new user created'
  124.     }
  125.     return jsonify({'user': response})
  126.  
  127.  
  128. @app.route('/todo/api/v1.0/user/<int:user_id>', methods=['GET'])
  129. def get_user(user_id):
  130.     user = ses.query(User).filter(User.id == user_id).first()
  131.     if not user:
  132.         abort(404)
  133.     response = {
  134.         'id': user.id,
  135.         'email': user.email,
  136.         'password': user.password,
  137.         'rememberToken': user.remember_token,
  138.         'userLevel': user.user_level
  139.     }
  140.     return jsonify({'user': response})
  141.  
  142.  
  143. @app.errorhandler(404)
  144. def not_found(error):
  145.     return make_response(jsonify({'error': 'Not Found'}), 404)
  146.  
  147. if __name__ == '__main__':
  148. app.run(debug=True)
Add Comment
Please, Sign In to add comment