From 012845eb708dced21df4c9981716122e458f1a55 Mon Sep 17 00:00:00 2001 From: Geert Kapteijns <ghkapteijns@gmail.com> Date: Fri, 12 May 2017 16:29:29 +0200 Subject: [PATCH] Start work on new ArxivCaller --- scipost/services.py | 50 +++++++++++++++++++++++++++++++++++----- scipost/test_services.py | 6 +++++ 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/scipost/services.py b/scipost/services.py index 47efe58b9..c3ad2777a 100644 --- a/scipost/services.py +++ b/scipost/services.py @@ -22,7 +22,7 @@ class DOICaller: request = requests.get(url) if request.ok: self.is_valid = True - self._crossref_data = requests.get(url).json()['message'] + self._crossref_data = request.json()['message'] else: self.is_valid = False @@ -65,6 +65,48 @@ class DOICaller: return pub_date +class ArxivCaller: + query_base_url = 'http://export.arxiv.org/api/query?id_list=%s' + + def __init__(self, identifier): + self.identifier = identifier + self._call_arxiv() + if self.is_valid: + self._format_data() + + def _call_arxiv(self): + url = self.query_base_url % self.identifier + request = requests.get(url) + if request.ok: + self.is_valid = True + self._arxiv_data = feedparser.parse(request.content) + else: + self.is_valid = False + + def _format_data(self): + raise NotImplementedError + + +# metadata = caller.metadata +# pub_title = metadata['entries'][0]['title'] +# authorlist = metadata['entries'][0]['authors'][0]['name'] +# for author in metadata['entries'][0]['authors'][1:]: +# authorlist += ', ' + author['name'] +# arxiv_link = metadata['entries'][0]['id'] +# abstract = metadata['entries'][0]['summary'] +# +# initialdata = { +# 'type': 'preprint', +# 'metadata': metadata, +# 'pub_title': pub_title, +# 'author_list': authorlist, +# 'arxiv_identifier': identifierform.cleaned_data['identifier'], +# 'arxiv_link': arxiv_link, +# 'pub_abstract': abstract +# } + + + # I'm going to revamp this whole thing... class BaseCaller(object): @@ -216,12 +258,8 @@ class BaseCaller(object): return t.render(Context(self.errorvariables)) -# class DOICaller(BaseCaller): -# """Perform a DOI lookup for a given identifier.""" -# pass - -class ArxivCaller(BaseCaller): +class ArxivCallerOld(BaseCaller): """ Performs an Arxiv article lookup for given identifier """ # State of the caller diff --git a/scipost/test_services.py b/scipost/test_services.py index 6794725eb..44986d73d 100644 --- a/scipost/test_services.py +++ b/scipost/test_services.py @@ -6,7 +6,13 @@ from submissions.models import Submission class ArxivCallerTest(TestCase): + def setUp(self): + self.valid_arxiv_identifier = '1612.07611v1' + def test_collects_metadata(self): + raise NotImplementedError + +class ArxivCallerTestOld(TestCase): def test_correct_lookup(self): caller = ArxivCaller(Submission, '1611.09574v1') -- GitLab