Beispiel #1
0
def collection_get(cid="", format="json"):
    coll = mydao.get(cid)
    if not coll:
        abort(404)

    # if not include items, then just return the collection straight from couch
    if request.args.get("include_items") in ["0", "false", "False"]:
        # except if format is csv.  can't do that.
        if format == "csv":
            abort(405)  # method not supported
        else:
            response_code = 200
            resp = make_response(json.dumps(coll, sort_keys=True, indent=4), response_code)
            resp.mimetype = "application/json"
    else:
        try:
            (coll_with_items, something_currently_updating) = collection.get_collection_with_items_for_client(
                cid, myrefsets, myredis, mydao
            )
        except (LookupError, AttributeError):
            logger.error("couldn't get tiids for collection '{cid}'".format(cid=cid))
            abort(404)  # not found

        # return success if all reporting is complete for all items
        if something_currently_updating:
            response_code = 210  # update is not complete yet
        else:
            response_code = 200

        if format == "csv":
            # remove scopus before exporting to csv, so don't add magic keep-scopus keys to clean method
            clean_items = [ItemFactory.clean_for_export(item) for item in coll_with_items["items"]]
            csv = collection.make_csv_stream(clean_items)
            resp = make_response(csv, response_code)
            resp.mimetype = "text/csv;charset=UTF-8"
            resp.headers.add("Content-Disposition", "attachment; filename=ti.csv")
            resp.headers.add("Content-Encoding", "UTF-8")
        else:
            api_key = request.args.get("api_key", None)
            clean_if_necessary_items = [
                ItemFactory.clean_for_export(item, api_key, os.getenv("API_KEY")) for item in coll_with_items["items"]
            ]
            coll_with_items["items"] = clean_if_necessary_items
            resp = make_response(json.dumps(coll_with_items, sort_keys=True, indent=4), response_code)
            resp.mimetype = "application/json"
    return resp
Beispiel #2
0
def get_item_from_tiid(tiid, format=None):
    # TODO check request headers for format as well.

    try:
        item = ItemFactory.get_item(tiid, myrefsets, mydao)
    except (LookupError, AttributeError):
        abort(404)

    if not item:
        abort(404)

    if ItemFactory.is_currently_updating(tiid, myredis):
        response_code = 210  # not complete yet
        item["currently_updating"] = True
    else:
        response_code = 200
        item["currently_updating"] = False

    clean_item = ItemFactory.clean_for_export(item)
    resp = make_response(json.dumps(clean_item, sort_keys=True, indent=4), response_code)
    resp.mimetype = "application/json"

    return resp