arxplorer / src /controller /catalog_controller.py
Subhadeep Mandal
Fresh deploy
54eb2ce
Raw
History Blame Contribute Delete
1.45 kB
from sqlalchemy import select
from ..database.db import session_pool
from ..model.arxiv_catalog import ArxivCatalog
from ..schema.arxiv import ArxivEntry
from ..core.logger import SingletonLogger
logger = SingletonLogger().get_logger()
async def get_feed(
topics: list[str],
start: int = 0,
limit: int = 20,
) -> list[ArxivEntry]:
"""Query the ArXiv catalog for papers matching topics, ordered by published_date DESC."""
async with session_pool() as session:
stmt = (
select(ArxivCatalog)
.where(ArxivCatalog.primary_category.in_(topics))
.order_by(ArxivCatalog.published_date.desc())
.offset(start)
.limit(limit)
)
result = await session.execute(stmt)
rows = result.scalars().all()
return [
ArxivEntry(
id=str(row.id),
arxiv_id=row.arxiv_id,
title=row.title,
abstract=row.abstract,
authors=row.authors.split("; ") if row.authors else [],
categories=row.categories.split() if row.categories else [],
primary_category=row.primary_category,
published=row.published_date,
updated=row.updated_date,
pdf_url=row.pdf_url,
paper_url=row.paper_url,
)
for row in rows
]