def test_date_from_dateparts(self): self.assertEqual(date_from_dateparts([]), datetime.date(1970, 1, 1)) self.assertEqual(date_from_dateparts([2015]), datetime.date(2015, 1, 1)) self.assertEqual(date_from_dateparts([2015,2]), datetime.date(2015, 2, 1)) self.assertEqual(date_from_dateparts([2015,2,16]), datetime.date(2015, 2, 16)) self.assertEqual(date_from_dateparts([2015,2,16]), datetime.date(2015, 2, 16)) with self.assertRaises(ValueError): date_from_dateparts([2015,2,35])
def parse_crossref_date(date): """ Parse the date representation from CrossRef to a python object """ ret = None if 'date-parts' in date: try: for date in date['date-parts']: ret = date_from_dateparts(date) if ret is not None: return ret except ValueError: pass if 'raw' in date: ret = tolerant_datestamp_to_datetime(date['raw']).date() return ret
def parse_crossref_date(date): """ Parse the date representation from CrossRef to a python object """ if not date: return None ret = None if 'date-parts' in date: try: for date in date['date-parts']: ret = date_from_dateparts(date) if ret == datetime.date(year=1970, month=1, day=1): ret = None if ret is not None: return ret except ValueError: pass if 'raw' in date: ret = tolerant_datestamp_to_datetime(date['raw']).date() if valid_publication_date(ret): return ret
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 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 journal = Journal.find(issn=issn, title=title) publisher = None if journal: publisher = journal.publisher AliasPublisher.increment(publisher_name, journal.publisher) else: publisher = Publisher.find(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