From deb0926c14d9ce2ca90d4d4e983683e158e76432 Mon Sep 17 00:00:00 2001 From: Bryan Newbold Date: Mon, 20 May 2019 15:04:39 -0700 Subject: improved CSL transform (structured author names) --- python/fatcat_tools/transforms/csl.py | 23 +++++++++++------------ python/tests/web_citation_csl.py | 2 +- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/python/fatcat_tools/transforms/csl.py b/python/fatcat_tools/transforms/csl.py index 989629ab..f94fa372 100644 --- a/python/fatcat_tools/transforms/csl.py +++ b/python/fatcat_tools/transforms/csl.py @@ -34,31 +34,30 @@ def release_to_csl(entity): contribs = [] for contrib in (entity.contribs or []): if contrib.creator: - # TODO: should we actually be pulling creator metadata? or just - # using release-local raw metadata? - family = contrib.creator.surname - if not family: - if not contrib.raw_name: - raise ValueError("CSL requires some surname (family name)") - family = contrib.raw_name.split()[-1] + # Default to "local" (publication-specific) metadata; fall back to + # creator-level + family = contrib.surname or contrib.creator.surname or (contrib.raw_name and contrib.raw_name.split()[-1]) + if not contrib.raw_name: + raise ValueError("CSL requires some surname (family name)") c = dict( - family=contrib.creator.surname, - given=contrib.creator.given_name, + family=family, + given=contrib.given_name or contrib.creator.given_name, #dropping-particle #non-dropping-particle #suffix #comma-suffix #static-ordering - literal=contrib.raw_name, # or display_name? + literal=contrib.raw_name or contrib.creator.display_name, #parse-names, role=contrib.role, ) else: + family = contrib.surname or (contrib.raw_name and contrib.raw_name.split()[-1]) if not contrib.raw_name: raise ValueError("CSL requires some surname (family name)") c = dict( - # XXX: possible inclusion of full name metadata in release_contrib - family=contrib.raw_name.split()[-1], + family=family, + given=contrib.given_name, literal=contrib.raw_name, role=contrib.role, ) diff --git a/python/tests/web_citation_csl.py b/python/tests/web_citation_csl.py index cf50f3c3..241f450f 100644 --- a/python/tests/web_citation_csl.py +++ b/python/tests/web_citation_csl.py @@ -23,7 +23,7 @@ def test_release_bibtex(app): json.loads(rv.data.decode('utf-8')) rv = app.get('/release/aaaaaaaaaaaaarceaaaaaaaaam/citeproc?style=modern-language-association') assert rv.status_code == 200 - assert rv.data.decode('utf-8').startswith('Ioannidis. “Why Most Published Research Findings Are False”. 2.8 (2005)') + assert rv.data.decode('utf-8').startswith('Ioannidis, John. “Why Most Published Research Findings Are False”. 2.8 (2005)') # "dummy" demo entity rv = app.get('/release/aaaaaaaaaaaaarceaaaaaaaaai') -- cgit v1.2.3