Skip to content

Commit

Permalink
Merge updates (ref doi issued) from 'usnistgov/integration' into rel/…
Browse files Browse the repository at this point in the history
…1.0.X
  • Loading branch information
RayPlante committed Aug 17, 2020
2 parents f453fd6 + a0784cd commit f99d9e4
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 6 deletions.
31 changes: 25 additions & 6 deletions python/nistoar/nerdm/convert/pod.py
Original file line number Diff line number Diff line change
Expand Up @@ -522,7 +522,25 @@ def from_config(cls, cfg):
cfg.get('email', "[email protected]")
)
return DOIResolver(ci, resolver)


def _date_parts2date(parts):
if not parts:
return None

if not isinstance(parts[0], int) or parts[0] < 1000 or parts[0] > 3000:
return None
out = str(parts[0])

if len(parts) > 1:
if not isinstance(parts[1], int) or parts[1] < 1 or parts[1] > 12:
return out
out += "-{0:0>2}".format(parts[1])

if len(parts) > 2 and \
isinstance(parts[2], int) and parts[2] > 0 and parts[2] < 32:
out += "-{0:0>2}".format(parts[2])

return out

def _doiinfo2reference(info, resolver):
out = OrderedDict( [('@id', "doi:"+info.id)] )
Expand Down Expand Up @@ -555,12 +573,13 @@ def _doiinfo2reference(info, resolver):

if info.data.get('title'):
out['title'] = info.data['title']
if info.data.get('issued') and 'date-parts' in info.data['issued']:
parts = info.data['issued']['date-parts'][0]
if len(parts) > 0: out['issued'] = str(parts[0])
if len(parts) > 1: out['issued'] += "-{0:0>2}".format(parts[1])
if len(parts) > 2: out['issued'] += "-{0:0>2}".format(parts[2])

if info.data.get('issued') and 'date-parts' in info.data['issued'] and \
len(info.data['issued']['date-parts']) > 0:
issued = _date_parts2date(info.data['issued']['date-parts'][0])
if issued:
out['issued'] = issued

if 'location' not in out:
out['location'] = resolver + info.id

Expand Down
19 changes: 19 additions & 0 deletions python/nistoar/nerdm/convert/tests/test_pod_doi.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,25 @@ def test_datacite_creators2nerdm_authors(self):

class TestConvertReferences(unittest.TestCase):

def test_date_parts2date(self):
self.assertIsNone(cvt._date_parts2date([]))
self.assertIsNone(cvt._date_parts2date([None]))
self.assertIsNone(cvt._date_parts2date(["2020"]))
self.assertIsNone(cvt._date_parts2date([837]))
self.assertIsNone(cvt._date_parts2date([3030]))
self.assertEqual(cvt._date_parts2date([1786]), "1786")
self.assertEqual(cvt._date_parts2date([2020]), "2020")
self.assertEqual(cvt._date_parts2date([2020, None]), "2020")
self.assertEqual(cvt._date_parts2date([2020, 53]), "2020")
self.assertEqual(cvt._date_parts2date([1966, 3]), "1966-03")
self.assertEqual(cvt._date_parts2date([1866, 11]), "1866-11")
self.assertEqual(cvt._date_parts2date([1866, 11, 35]), "1866-11")
self.assertEqual(cvt._date_parts2date([1866, 11, "1"]), "1866-11")
self.assertEqual(cvt._date_parts2date([1866, 11, None]), "1866-11")
self.assertEqual(cvt._date_parts2date([1866, 11, 4]), "1866-11-04")
self.assertEqual(cvt._date_parts2date([1866, 11, 4, 8]), "1866-11-04")


def test_crossref_doiinfo2reference(self):
info = DOIInfo("10.10/XXX", source="Crossref")
info._data = crossref
Expand Down

0 comments on commit f99d9e4

Please sign in to comment.