""" This file contains GET routes methods. """ import bottle import database import tools def fetch_papers(db): """ Fetch all matching papers. ``` GET /papers Accept: application/vnd.api+json ``` Filtering is possible using `id=ID`, `doi=DOI`, `arxiv_id=ARXIV_ID` or any combination of these GET parameters. Other parameters are ignored. ``` { "data": [ { "type": "papers", "id": 1, "attributes": { "doi": "TODO", "arxiv_id": "TODO" }, "links": { "self": "TODO" }, "relationships": { } } ] } ``` """ filters = {k: bottle.request.params[k] for k in bottle.request.params if k in ["id", "doi", "arxiv_id"]} resources = db.query(database.Paper).filter_by(**filters).all() if resources: return tools.pretty_json({ "data": [resource.json_api_repr() for resource in resources] }) return bottle.HTTPError(404, "Not found") def fetch_by_id(id, db): """ Fetch a resource identified by its internal id. ``` GET /id/ Accept: application/vnd.api+json ``` ``` { "data": { { "type": "papers", "id": 1, "attributes": { "doi": "TODO", "arxiv_id": "TODO" }, "links": { "self": "TODO" }, "relationships": { } } } } ``` """ resource = db.query(database.Paper).filter_by(id=id).first() if resource: return tools.pretty_json({ "data": resource.json_api_repr() }) return bottle.HTTPError(404, "Not found") def fetch_by_doi(doi, db): """ Fetch a resource identified by its DOI. ``` GET /doi/ Accept: application/vnd.api+json ``` ``` { "data": { { "type": "papers", "id": 1, "attributes": { "doi": "TODO", "arxiv_id": "TODO" }, "links": { "self": "TODO" }, "relationships": { } } } } ``` """ resource = db.query(database.Paper).filter_by(doi=doi).first() if resource: return tools.pretty_json({ "data": resource.json_api_repr() }) return bottle.HTTPError(404, "Not found") def fetch_by_arxiv(arxiv, db): """ Fetch a resource identified by its arXiv eprint ID. ``` GET /arxiv/ Accept: application/vnd.api+json ``` ``` { "data": { { "type": "papers", "id": 1, "attributes": { "doi": "TODO", "arxiv_id": "TODO" }, "links": { "self": "TODO" }, "relationships": { } } } } ``` """ resource = db.query(database.Paper).filter_by(arxiv_id=arxiv).first() if resource: return tools.pretty_json({ "data": resource.json_api_repr() }) return bottle.HTTPError(404, "Not found")