__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
import re
import requests
import unicodedata
from .exceptions import ArxivPDFNotFound
[docs]def retrieve_pdf_from_arxiv(arxiv_id):
"""Try to download the pdf as bytes object from arXiv for a certain arXiv Identifier.
Raise ArxivPDFNotFound instead.
:arxiv_id: Arxiv Identifier with or without (takes latest version instead) version number
"""
path_to_pdf = "https://arxiv.org/pdf/{arxiv_id}.pdf".format(arxiv_id=arxiv_id)
response = requests.get(path_to_pdf)
if response.status_code != 200:
raise ArxivPDFNotFound("No pdf found on arXiv.")
return response.content
[docs]def check_verified_author(submission, user):
"""Check if user is verified author of Submission."""
if not hasattr(user, "contributor"):
return False
return submission.authors.filter(user=user).exists()
[docs]def check_unverified_author(submission, user):
"""
Check if user may be author of Submission.
Only return true if author is unverified. Verified authors will return false.
"""
if not hasattr(user, "contributor"):
return False
if submission.authors.filter(user=user).exists():
# User is verified author.
return False
return (
user.last_name in submission.author_list
and not submission.authors_false_claims.filter(user=user).exists()
)
[docs]def to_ascii_only(str):
"""
Convert string to lowercase, ASCII-only characters without punctuation and whitespaces.
"""
str = re.sub(r"[^\w]", "", str).lower()
return unicodedata.normalize("NFKD", str).encode("ascii", "ignore")