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
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