from flask import jsonify from flask import request import pdb from api.app import application from api.connectors import mysql from api.models import thread from api.models import message from api import presentation @application.route('/hello', methods=['GET']) def hello(): return jsonify({'foo': 'bar'}) @application.route('/') def index(): return application.send_static_file('index.html') @application.route('/threads', methods=['GET']) def list_threads(): session = mysql.zen_session() filters = {} allowed_filters = ['min_date', 'max_date', 'priority', 'status_id', 'q'] for filter_name in allowed_filters: filter_value = request.args.get(filter_name) if filter_value: filters[filter_name] = filter_value threads = thread.list(session, **filters) presentableThreads = presentation.thread_attributes_list(threads, ['messages']) session.close() return jsonify({'threads': presentableThreads}) # use a PUT since this is actually idempotent @application.route('/threads', methods=['PUT']) def create_thread(): session = mysql.zen_session() request_data = request.get_json() or {} thread_obj = None subject = request_data.get('subject_line') if subject: thread_obj = thread.find_one(session, subject_line=subject) else: return jsonify({'error': 'subject_line is required'}), 400 if not thread_obj: thread_obj = thread.Thread(subject_line=subject) session.add(thread_obj) session.commit() session.close() return jsonify(presentation.thread_attributes(thread_obj)) @application.route('/threads/', methods=['PUT']) def update_thread(thread_id): session = mysql.zen_session() thread_obj = thread.find_by_id(session, thread_id) if not thread_obj: return jsonify({'error': 'thread {} not found'.format(thread_id)}), 404 request_data = request.get_json() or {} attrs_for_update = ['status_id', 'priority', 'subject_line'] for attr_name in request_data: if attr_name in attrs_for_update: setattr(thread_obj, attr_name, request_data[attr_name]) session.commit() session.close() return jsonify(presentation.thread_attributes(thread_obj)) @application.route('/msgs', methods=['POST']) def create_message(): session = mysql.zen_session() request_data = request.get_json() or {} attrs_for_insert = ['thread_id', 'msg_from', 'msg_to', 'message', 'html'] message_obj = message.Message() for attr_name in request_data: if attr_name in attrs_for_insert: setattr(message_obj, attr_name, request_data[attr_name]) session.add(message_obj) session.commit() session.close() return jsonify(presentation.message_attributes(message_obj)), 201