diff --git a/news/patch_read_lists.rst b/news/patch_read_lists.rst new file mode 100644 index 000000000..51b8760f4 --- /dev/null +++ b/news/patch_read_lists.rst @@ -0,0 +1,23 @@ +**Added:** + +* + +**Changed:** + +* + +**Deprecated:** + +* + +**Removed:** + +* + +**Fixed:** + +* Changed how the reading-list builder fetches the references from Crossref so that it only fetches each needed reference once. + +**Security:** + +* diff --git a/regolith/builders/readinglistsbuilder.py b/regolith/builders/readinglistsbuilder.py index 40a867a1f..b69aa5805 100644 --- a/regolith/builders/readinglistsbuilder.py +++ b/regolith/builders/readinglistsbuilder.py @@ -41,6 +41,22 @@ def latex(self): """Render latex template""" rc = self.rc + # build the collection of formatted references so that we only go + # and fetch the formatted references once per doi + dois, formatted_refs = [], {} + for rlist in self.gtx["reading_lists"]: + for paper in rlist['papers']: + dois.append(paper.get('doi', '')) + dois = list(set(dois)) + for item in ['tbd', '']: + if item in dois: + dois.remove('tbd') + dois.remove('') + for doi in dois: + ref_and_date = get_formatted_crossref_reference(doi) + formatted_refs.update({doi: ref_and_date}) + + # loop through the reading lists to build the files for rlist in self.gtx["reading_lists"]: listid = rlist["_id"] outfile_bib = listid @@ -53,15 +69,9 @@ def latex(self): doi = None url = paper.get('url') if doi: - # if rc.verbose: - # print(f"getting {doi} for {paper.get('tite')}") - ref, ref_date = get_formatted_crossref_reference(doi) - # if rc.verbose: - # try: - # print(f"got ref: {ref}") - # except: - # print("obtained ref but print error") - paper.update({'reference': ref, 'ref_date': ref_date, 'n': n, 'label': 'DOI'}) + paper.update({'reference': formatted_refs.get(doi)[0], + 'ref_date': formatted_refs.get(doi)[1], + 'n': n, 'label': 'DOI'}) n += 1 elif url: paper['doi'] = url diff --git a/regolith/tools.py b/regolith/tools.py index 0e56bbeac..5a2526e40 100644 --- a/regolith/tools.py +++ b/regolith/tools.py @@ -1980,7 +1980,7 @@ def get_formatted_crossref_reference(doi): authorlist = [ f"{a['given'].strip()} {a['family'].strip()}" - for a in article.get('message').get('author')] + for a in article.get('message',{}).get('author','')] try: journal = \ article.get('message').get('short-container-title')[0] diff --git a/tests/test_builders.py b/tests/test_builders.py index 9a264ff1f..26741210f 100644 --- a/tests/test_builders.py +++ b/tests/test_builders.py @@ -26,6 +26,7 @@ "grantreport", "resume", "review-man", + # reading-lists need tests for this "reimb" ] db_srcs = ["mongo", "fs"]