1
0
Fork 0
mirror of https://github.com/Findus23/PaperLibrary-cli.git synced 2024-09-20 17:03:46 +02:00
PaperLibrary-cli/paperlibrary/api/api.py

76 lines
2.4 KiB
Python
Raw Normal View History

2023-06-27 22:38:59 +02:00
from functools import lru_cache
2020-11-01 13:48:40 +01:00
from pathlib import Path
from typing import List, Dict
2020-10-14 21:38:36 +02:00
from requests import Session
2023-06-27 22:38:59 +02:00
from paperlibrary.api.models import Author, PDF, Keyword, PaperComplete, Note
2020-10-14 21:38:36 +02:00
class PaperLibraryAPI:
def __init__(self, baseURL: str, auth_token: str):
self.baseURL = baseURL
self.auth_token = auth_token
self.s = Session()
self.s.headers.update({"Authorization": "Token " + auth_token})
2023-06-27 22:38:59 +02:00
@lru_cache
2020-11-01 13:48:40 +01:00
def fetch_papers(self) -> List[PaperComplete]:
r = self.s.get(self.baseURL + "papers/")
2023-06-27 22:38:59 +02:00
r.raise_for_status()
2020-11-01 13:48:40 +01:00
return PaperComplete.schema().loads(r.text, many=True)
2023-06-27 22:38:59 +02:00
@lru_cache
2020-10-14 21:38:36 +02:00
def fetch_authors(self) -> List[Author]:
r = self.s.get(self.baseURL + "authors/")
2023-06-27 22:38:59 +02:00
r.raise_for_status()
2020-10-14 21:38:36 +02:00
return Author.schema().loads(r.text, many=True)
2023-06-27 22:38:59 +02:00
@lru_cache
2020-11-01 13:48:40 +01:00
def fetch_keywords(self) -> List[Keyword]:
2020-10-19 17:43:08 +02:00
r = self.s.get(self.baseURL + "keywords/")
2023-06-27 22:38:59 +02:00
r.raise_for_status()
2020-10-19 17:43:08 +02:00
return Keyword.schema().loads(r.text, many=True)
2023-06-27 22:38:59 +02:00
@lru_cache
2020-11-01 13:48:40 +01:00
def fetch_papers_by_year(self) -> Dict[int, List[PaperComplete]]:
papers = self.fetch_papers()
years: Dict[int, List[PaperComplete]] = {}
for paper in papers:
if paper.year in years:
years[paper.year].append(paper)
else:
years[paper.year] = [paper]
return years
2023-06-27 22:38:59 +02:00
@lru_cache
2023-08-08 11:04:42 +02:00
def fetch_bibliography(self, tag=None) -> str:
r = self.s.get(self.baseURL + "bibtex/", params={"tag": tag})
2023-06-27 22:38:59 +02:00
r.raise_for_status()
2020-11-08 22:25:56 +01:00
return r.text
2023-06-27 22:38:59 +02:00
@lru_cache
2020-10-14 21:38:36 +02:00
def fetch_pdfs(self) -> List[PDF]:
r = self.s.get(self.baseURL + "pdfs/")
2023-06-27 22:38:59 +02:00
r.raise_for_status()
2020-10-14 21:38:36 +02:00
return PDF.schema().loads(r.text, many=True)
2020-11-01 13:48:40 +01:00
def upload_pdf(self, pdf, file: Path) -> PDF:
with file.open("rb") as f:
r = self.s.put(pdf.url, files={
"file": f,
})
2023-06-27 22:38:59 +02:00
r.raise_for_status()
2020-11-01 13:48:40 +01:00
return PDF.schema().loads(r.text)
2023-06-27 22:38:59 +02:00
def update_note(self, id: int, file_text: str) -> None:
r = self.s.put(self.baseURL + f"notes/{id}/", json={"paper": id, "text_md": file_text})
r.raise_for_status()
return Note.schema().loads(r.text)
def create_note(self, id: int, file_text: str) -> None:
r = self.s.post(self.baseURL + f"notes/", json={"paper": id, "text_md": file_text})
r.raise_for_status()
return Note.schema().loads(r.text)