aboutsummaryrefslogtreecommitdiffstats
path: root/python/fatcat_export.py
diff options
context:
space:
mode:
authorBryan Newbold <bnewbold@robocracy.org>2019-03-11 15:31:25 -0700
committerBryan Newbold <bnewbold@robocracy.org>2019-03-11 16:05:45 -0700
commit180328d25549ef5517d4870f1069c790cabf1c71 (patch)
treea937115f39dddb917c93081487dc4cc40a472061 /python/fatcat_export.py
parent318ba16a98d77b87c76bb353e87aeffbe79b7176 (diff)
downloadfatcat-180328d25549ef5517d4870f1069c790cabf1c71.tar.gz
fatcat-180328d25549ef5517d4870f1069c790cabf1c71.zip
basic demo CSL/citeproc transform code
Needs tests
Diffstat (limited to 'python/fatcat_export.py')
-rwxr-xr-xpython/fatcat_export.py61
1 files changed, 60 insertions, 1 deletions
diff --git a/python/fatcat_export.py b/python/fatcat_export.py
index 33e23202..a9d46142 100755
--- a/python/fatcat_export.py
+++ b/python/fatcat_export.py
@@ -10,12 +10,19 @@ without permission by an third party.
import sys
import json
import argparse
+
+from citeproc import CitationStylesStyle, CitationStylesBibliography
+from citeproc import Citation, CitationItem
+from citeproc import formatter
+from citeproc.source.json import CiteProcJSON
+from citeproc_styles import get_style_filepath
+
import fatcat_client
from fatcat_client.rest import ApiException
from fatcat_client import ReleaseEntity, ContainerEntity, ChangelogEntry
from fatcat_tools import uuid2fcid, entity_from_json, entity_to_dict, \
release_to_elasticsearch, container_to_elasticsearch, \
- changelog_to_elasticsearch, public_api
+ changelog_to_elasticsearch, public_api, release_to_csl
def run_export_releases(args):
@@ -52,6 +59,43 @@ def run_transform_changelogs(args):
args.json_output.write(
json.dumps(changelog_to_elasticsearch(entity)) + '\n')
+def run_citeproc_releases(args):
+ for line in args.json_input:
+ line = line.strip()
+ if not line:
+ continue
+ entity = entity_from_json(line, ReleaseEntity, api_client=args.api.api_client)
+ csl_json = release_to_csl(entity)
+ # XXX:
+ csl_json['id'] = "release:" + (entity.ident or "unknown")
+ if args.style == "csl-json":
+ args.json_output.write(json.dumps(csl_json) + "\n")
+ continue
+ bib_src = CiteProcJSON([csl_json])
+ form = formatter.plain
+ if args.html:
+ form = formatter.html
+ style_path = get_style_filepath(args.style)
+ bib_style = CitationStylesStyle(style_path, validate=False)
+ bib = CitationStylesBibliography(bib_style, bib_src, form)
+ bib.register(Citation([CitationItem(csl_json['id'])]))
+ # XXX:
+ #args.json_output.write(
+ # json.dumps(release_to_csl(entity)) + '\n')
+ lines = bib.bibliography()[0]
+ if args.style == "bibtex":
+ for l in lines:
+ if l.startswith(" @"):
+ args.json_output.write("\n@")
+ elif l.startswith(" "):
+ #print("line: START|{}|END".format(l))
+ args.json_output.write("\n " + l)
+ else:
+ args.json_output.write(l)
+ else:
+ args.json_output.write(''.join(lines) + "\n")
+ print()
+
def run_export_changelog(args):
end = args.end
if end is None:
@@ -109,6 +153,21 @@ def main():
help="where to send output",
default=sys.stdout, type=argparse.FileType('w'))
+ sub_citeproc_releases = subparsers.add_parser('citeproc-releases')
+ sub_citeproc_releases.set_defaults(func=run_citeproc_releases)
+ sub_citeproc_releases.add_argument('json_input',
+ help="JSON-per-line of release entities",
+ default=sys.stdin, type=argparse.FileType('r'))
+ sub_citeproc_releases.add_argument('json_output',
+ help="where to send output",
+ default=sys.stdout, type=argparse.FileType('w'))
+ sub_citeproc_releases.add_argument('--style',
+ help="citation style to output",
+ default='csl-json')
+ sub_citeproc_releases.add_argument('--html',
+ action='store_true',
+ help="output HTML, not plain text")
+
sub_changelog = subparsers.add_parser('changelog')
sub_changelog.set_defaults(func=run_export_changelog)
sub_changelog.add_argument('--start',