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/models.py
2023-06-27 22:38:59 +02:00

95 lines
1.9 KiB
Python

from dataclasses import dataclass, field
from datetime import datetime
from typing import Optional, List
from dataclasses_json import DataClassJsonMixin, config
from marshmallow import fields
@dataclass
class PDF(DataClassJsonMixin):
id: int
url: str
file: str
sha256: str
type: str
preview: Optional[str]
updated_at: datetime = field(
metadata=config(
encoder=datetime.isoformat,
decoder=datetime.fromisoformat,
mm_field=fields.DateTime(format='iso')
)
)
@dataclass
class Paper(DataClassJsonMixin):
id: int
url: str
title: str
custom_title: str
pdfs: List[PDF]
doi: Optional[str]
@property
def main_pdf(self) -> Optional[PDF]:
if not self.pdfs:
return None
return self.pdfs[0]
@dataclass
class PaperComplete(Paper):
keywords: List[str]
authors: List[str]
first_author: str
publication: str
doctype: str
arxiv_id: Optional[str]
arxiv_class: Optional[str]
ads_version: Optional[int]
bibcode: Optional[str]
year: int
pubdate: str # TODO: to datetime
entry_date: str # TODO: to datetime
citation_count: Optional[int]
citation_key: Optional[str]
recommended_by: List[str]
tags: List[str]
custom_title: str
notes_md: Optional[str]
notes_html: Optional[str]
notes_updated_at: Optional[str]
@dataclass
class Author(DataClassJsonMixin):
id: int
url: str
papers: List[Paper]
name: str
pretty_name: Optional[str]
affiliation: Optional[str]
orcid_id: Optional[str]
@property
def display_name(self):
return self.pretty_name if self.pretty_name else self.name
@dataclass
class Keyword(DataClassJsonMixin):
id: int
url: str
papers: List[Paper]
name: str
kw_schema: str
@dataclass
class Note(DataClassJsonMixin):
paper: int
text_md: str
text_html: str
updated_at: str