Source code for officiumdivinum.api.office

"""
Endpoint to serve complete offices.

This endpoint serves complete offices, and any legitimate bits of
them.  Queries may be either in json or as html queries.  The response
is negotiated according to the `Accept:` header of the request, and
currently supports either `application/json` (for serialised objects)
or `text/html` (for rendered objects).

Note that requesting parts of an office automatically suppresses
requesting a page.
"""
from datetime import datetime

from flask import Blueprint
from flask import abort
from flask import request
from flask_api.decorators import set_renderers
from flask_api.renderers import JSONRenderer

from . import database
from .renderers import objectHTMLRenderer

office = Blueprint("office", __name__, url_prefix="/office")


[docs]def get_partlist(things): """Get list of parts of any object.""" partlist = [] for thing in things: partlist += list(thing.__dict__.keys()) return partlist
[docs]@office.route("/", methods=["GET"]) @set_renderers(JSONRenderer, objectHTMLRenderer) def get_office(): args = request.args offices = ["prime"] langs = ["latin"] if args.getlist("getobjs"): return offices if args.getlist("getlangs"): return langs try: office = args["office"] except KeyError: abort(400) if office not in offices: abort(404) language = args["lang"] if "lang" in args.keys() else "latin" if language not in langs: abort(404) translation = ( args["trans"] if "lang" in args.keys() and "trans" in args.keys() else None ) date = args["date"] if "date" in args.keys() else str(datetime.now().date()) calendar = args["calendar"] if "calendar" in args.keys() else "1962" if not calendar == "1962": abort(404) things = database.get_office(office, calendar, date, language, translation) if args.getlist("getparts"): return get_partlist(things) parts = args.getlist("part") if not parts: return things else: disjointed_members = [] for part in parts: for thing in things: obj = getattr(thing, part) if not isinstance(obj, list): disjointed_members.append(getattr(thing, part)) else: disjointed_members += obj return disjointed_members