Source code for backend.schedule

"""
schedule.py
==============
Endpoints for operations related to matching users. All routes start with
/api/schedule
All incoming request parameters are wrapped in a JSON body.
All outgoing response returns are wrapped in a JSON entry with key 'payload',
like this:

.. code-block::

    {
      "error": "false",
      "error-msg": None,
        "payload": {
        "return-1": "true"
      }
    }


Note that method documentation assumes you are using jsonResponse/errorResponse
to generate the response, and only shows the actual returns within payload.
Ditto for request parameters.

Scheduling blocks are from 9am - 9pm in two hour incrememts for 6 blocks a day,
7 days a week. We index into a scheduling array by 6*day + block.
"""
import functools
from flask import (
    Blueprint, flash, g, redirect, render_template, request, session, url_for, current_app
)
import flask
from werkzeug.security import check_password_hash, generate_password_hash

import json
import datetime
from form_response import *

bp = Blueprint('schedule', __name__, url_prefix='/api/schedule')

[docs]@bp.route('/set', methods=('GET', 'POST')) def set(): """ POST set schedule for user. Parameters ---------- uid: str bytes: int[42] see module description for magic 42. Notes ----- returns an empty response body on success. Raises ------ BadRequest Some part of the required parameters is missing. """ redis_client = current_app.config['RDSCXN'] if request.method == 'POST': data = request.get_json() if not data: error = 'Data Body Required' return errorResponse(error) uid = data['uid'] if 'uid' in data.keys() else None bytes = data['bytes'] if 'bytes' in data.keys() else None if uid is None: error = 'uid is required.' return errorResponse(error) elif bytes is None: error = 'bytes is required.' return errorResponse(error) redis_client.ltrim("schedule{}".format(uid), 1, 0) redis_client.rpush("schedule{}".format(uid), *bytes) return jsonResponse() return jsonResponse()
[docs]@bp.route('/get', methods=('GET', 'POST')) def get(): """ POST get schedule for user. Parameters ---------- uid: str Returns ------- bytes: int[42] see module description for magic 42. Raises ------ BadRequest Some part of the required parameters is missing. """ redis_client = current_app.config['RDSCXN'] if request.method == 'POST': data = request.get_json() if not data: error = 'Data Body Required' return errorResponse(error) uid = data['uid'] if 'uid' in data.keys() else None if uid is None: error = 'uid is required.' return errorResponse(error) bytes = redis_client.lrange("schedule{}".format(uid), 0, -1) bytes = [int(i) for i in bytes] return jsonResponse({'bytes': bytes}) return jsonResponse()