def refetch_publishers(): """ Tries to assign publishers to OaiRecords without Journals """ for p in OaiRecord.objects.filter(publisher__isnull=True,publisher_name__isnull=False): publisher = fetch_publisher(p.publisher_name) if publisher: p.publisher = publisher p.save(update_fields=['publisher']) p.paper.update_availability()
def refetch_publishers(): """ Tries to assign publishers to Publications without Journals """ for p in Publication.objects.filter(publisher__isnull=True): publisher = fetch_publisher(p.publisher_name) if publisher: p.publisher = publisher p.save(update_fields=['publisher']) p.paper.update_availability()
def _create_publication(paper, metadata): if not metadata: return if not metadata.get('container-title'): return doi = to_doi(metadata.get('DOI', None)) title = metadata['container-title'] if isinstance(title, list): title = title[0] title = title[:512] issn = metadata.get('ISSN', None) if issn and isinstance(issn, list): issn = issn[0] # TODO pass all the ISSN to the RoMEO interface volume = metadata.get('volume', None) pages = metadata.get('page', None) issue = metadata.get('issue', None) date_dict = metadata.get('issued', dict()) pubdate = None if 'date-parts' in date_dict: dateparts = date_dict.get('date-parts')[0] pubdate = date_from_dateparts(dateparts) # for instance it outputs dates like 2014-2-3 publisher_name = metadata.get('publisher', None) if publisher_name: publisher_name = publisher_name[:512] pubtype = metadata.get('type', 'unknown') pubtype = CROSSREF_PUBTYPE_ALIASES.get(pubtype, pubtype) splash_url = doi_to_url(doi) # PDF availability pdf_url = None licenses = set([(license or {}).get('URL') for license in metadata.get('license', [])]) doi_prefix = doi.split('/')[0] if doi_prefix in free_doi_prefixes or any(map(is_oa_license, licenses)): pdf_url = splash_url # Lookup journal search_terms = {'jtitle': title} if issn: search_terms['issn'] = issn journal = fetch_journal(search_terms) publisher = None if journal: publisher = journal.publisher AliasPublisher.increment(publisher_name, journal.publisher) else: publisher = fetch_publisher(publisher_name) barepub = BareOaiRecord( paper=paper, journal_title=title, issue=issue, volume=volume, pubdate=pubdate, pages=pages, doi=doi, pubtype=pubtype, publisher_name=publisher_name, journal=journal, publisher=publisher, pdf_url=pdf_url, splash_url=splash_url, source=OaiSource.objects.get(identifier='crossref'), identifier=doi_to_crossref_identifier(doi)) rec = paper.add_oairecord(barepub) paper.update_availability() return paper, rec
def _create_publication(paper, metadata): if not metadata: return if not 'container-title' in metadata or not metadata['container-title']: return doi = to_doi(metadata.get('DOI', None)) title = metadata['container-title'] if type(title) == type([]): title = title[0] title = title[:512] issn = metadata.get('ISSN', None) if issn and type(issn) == type([]): issn = issn[0] # TODO pass all the ISSN to the RoMEO interface volume = metadata.get('volume', None) pages = metadata.get('page', None) issue = metadata.get('issue', None) date_dict = metadata.get('issued', dict()) pubdate = None if 'date-parts' in date_dict: dateparts = date_dict.get('date-parts')[0] pubdate = date_from_dateparts(dateparts) # for instance it outputs dates like 2014-2-3 publisher_name = metadata.get('publisher', None) if publisher_name: publisher_name = publisher_name[:512] pubtype = metadata.get('type', 'unknown') pubtype = CROSSREF_PUBTYPE_ALIASES.get(pubtype, pubtype) # PDF availability pdf_url = None licenses = set([(license or {}).get('URL') for license in metadata.get('license', [])]) if any(map(is_oa_license, licenses)): pdf_url = 'http://dx.doi.org/' + doi # Lookup journal search_terms = {'jtitle': title} if issn: search_terms['issn'] = issn journal = fetch_journal(search_terms) publisher = None if journal: publisher = journal.publisher AliasPublisher.increment(publisher_name, journal.publisher) else: publisher = fetch_publisher(publisher_name) barepub = BarePublication(title=title, issue=issue, volume=volume, pubdate=pubdate, paper=paper, pages=pages, doi=doi, pubtype=pubtype, publisher_name=publisher_name, journal=journal, publisher=publisher, pdf_url=pdf_url) pub = paper.add_publication(barepub) cur_pubdate = paper.pubdate if type(cur_pubdate) != type(pubdate): cur_pubdate = cur_pubdate.date() if pubdate and pubdate > cur_pubdate: paper.pubdate = pubdate paper.update_availability() return paper, pub
def _create_publication(paper, metadata): if not metadata: return if not 'container-title' in metadata or not metadata['container-title']: return doi = to_doi(metadata.get('DOI',None)) title = metadata['container-title'] if type(title) == type([]): title = title[0] title = title[:512] issn = metadata.get('ISSN',None) if issn and type(issn) == type([]): issn = issn[0] # TODO pass all the ISSN to the RoMEO interface volume = metadata.get('volume',None) pages = metadata.get('page',None) issue = metadata.get('issue',None) date_dict = metadata.get('issued',dict()) pubdate = None if 'date-parts' in date_dict: dateparts = date_dict.get('date-parts')[0] pubdate = date_from_dateparts(dateparts) # for instance it outputs dates like 2014-2-3 publisher_name = metadata.get('publisher', None) if publisher_name: publisher_name = publisher_name[:512] pubtype = metadata.get('type','unknown') pubtype = CROSSREF_PUBTYPE_ALIASES.get(pubtype, pubtype) # PDF availability pdf_url = None licenses = set([(license or {}).get('URL') for license in metadata.get('license', [])]) if any(map(is_oa_license, licenses)): pdf_url = 'http://dx.doi.org/'+doi # Lookup journal search_terms = {'jtitle':title} if issn: search_terms['issn'] = issn journal = fetch_journal(search_terms) publisher = None if journal: publisher = journal.publisher AliasPublisher.increment(publisher_name, journal.publisher) else: publisher = fetch_publisher(publisher_name) barepub = BarePublication(title=title, issue=issue, volume=volume, pubdate=pubdate, paper=paper, pages=pages, doi=doi, pubtype=pubtype, publisher_name=publisher_name, journal=journal, publisher=publisher, pdf_url=pdf_url) pub = paper.add_publication(barepub) cur_pubdate = paper.pubdate if type(cur_pubdate) != type(pubdate): cur_pubdate = cur_pubdate.date() if pubdate and pubdate > cur_pubdate: paper.pubdate = pubdate paper.update_availability() return paper, pub
def test_fetch_publisher(self): self.assertEqual(fetch_publisher(None), None)