import dataclasses import datetime import operator import pathlib import pandas as pd import requests import tqdm.auto @dataclasses.dataclass(frozen=True) class PaperInfo: date: str arxiv_id: str github: str title: str paper_page: str upvotes: int published_at: str def __post_init__(self): object.__setattr__(self, "published_at", PaperInfo.convert_timestamp(self.published_at)) @staticmethod def convert_timestamp(timestamp: str) -> str: try: return datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S.%fZ").strftime("%Y/%m/%d %H:%M:%S") except ValueError: return timestamp def get_df(path: pathlib.Path | str) -> pd.DataFrame: df = pd.read_csv(path, dtype=str).fillna("") paper_info = [] for _, row in tqdm.auto.tqdm(df.iterrows(), total=len(df)): res = requests.get(f"https://huggingface.co/api/papers/{row.arxiv_id}").json() info = PaperInfo( **row, title=res["title"], paper_page=f"https://huggingface.co/papers/{row.arxiv_id}", upvotes=res["upvotes"], published_at=res["publishedAt"], ) paper_info.append(info) return pd.DataFrame([dataclasses.asdict(info) for info in paper_info]) class Prettifier: @staticmethod def get_github_link(link: str) -> str: if not link: return "" return Prettifier.create_link("github", link) @staticmethod def create_link(text: str, url: str) -> str: return f'{text}' @staticmethod def to_div(text: str | None, category_name: str) -> str: if text is None: text = "" class_name = f"{category_name}-{text.lower()}" return f'