Skip to main content

Read CFF formatted CITATION file from a GitHub url or local file and convert it to BibTeX, EndNote, RIS, Codemeta, .zenodo.json, or plain JSON

Project description

Build Status DOI Research Software Directory CII Best Practices

cffconvert

Read CFF formatted CITATION file from a GitHub url and convert it to various formats, such as:

  1. BibTeX

  2. EndNote

  3. RIS

  4. codemeta

  5. plain JSON

  6. Zenodo JSON

Supported types of GitHub URL:

  1. https://github.com/<org>/<repo>

  2. https://github.com/<org>/<repo>/tree/<sha>

  3. https://github.com/<org>/<repo>/tree/<tagname>

  4. https://github.com/<org>/<repo>/tree/<branchname>

cffconvert does not support the full CFF spec yet.

For users

Install

pip install cffconvert

Command line interface

See cffconvert’s options:

cffconvert --help

Shows:

Usage: cffconvert [OPTIONS]

Options:
  -if, --infile TEXT              Path to the CITATION.cff input file.
  -of, --outfile TEXT             Path to the output file.
  -f, --outputformat TEXT         Output format: bibtex|codemeta|endnote|ris|zenodo  [required]
  -u, --url TEXT                  URL of the repo containing the CITATION.cff (currently only github.com is supported;
                                  may include branch name, commit sha, tag name). For example:
                                  'https://github.com/citation-file-format/cff-converter-python' or
                                  'https://github.com/citation-file-format/cff-converter-python/tree/master'
  -v, --validate                  Validate the CITATION.cff found at the URL or supplied through '--infile'
  -ig, --ignore-suspect-keys BOOLEAN
                                  If True, ignore any keys from CITATION.cff that are likely out of date, such as
                                  'commit', 'date-released', 'doi', and 'version'.
  -v, --verbose                   Provide feedback on what was entered.
  --help                          Show this message and exit.

Example usage, retrieve CITATION.cff from URL with curl, output as BibTeX:

curl https://raw.githubusercontent.com/citation-file-format/cff-converter-python/44a8ad35d94dd50a8b5924d8d26402ae0d162189/CITATION.cff > CITATION.cff
cffconvert -f bibtex

Results in:

@misc{YourReferenceHere,
author = {
            Jurriaan H. Spaaks and
            Tom Klaver
         },
title  = {cff-converter-python},
month  = {1},
year   = {2018},
doi    = {10.5281/zenodo.1162057},
url    = {https://github.com/citation-file-format/cff-converter-python}
}

Example usage, let cffconvert retrieve CITATION.cff from URL, output as codemeta.json:

cffconvert -f codemeta -u https://github.com/citation-file-format/cff-converter-python/tree/master -of codemeta.json

Contents of file codemeta.json:

{
    "@context": [
        "https://doi.org/10.5063/schema/codemeta-2.0",
        "http://schema.org"
    ],
    "@type": "SoftwareSourceCode",
    "author": [
        {
            "@type": "Person",
            "affiliation": {
                "@type": "Organization",
                "legalName": "Netherlands eScience Center"
            },
            "familyName": "Spaaks",
            "givenName": "Jurriaan H."
        },
        {
            "@type": "Person",
            "affiliation": {
                "@type": "Organization",
                "legalName": "Netherlands eScience Center"
            },
            "familyName": "Klaver",
            "givenName": "Tom"
        }
    ],
    "codeRepository": "https://github.com/citation-file-format/cff-converter-python",
    "datePublished": "2018-01-16",
    "identifier": "https://doi.org/10.5281/zenodo.1162057",
    "keywords": [
        "citation",
        "bibliography",
        "cff",
        "CITATION.cff"
    ],
    "license": "http://www.apache.org/licenses/LICENSE-2.0",
    "name": "cff-converter-python",
    "version": "1.0.0"
}

Convert the contents of a local file CITATION.cff into the format used by .zenodo.json files (see Zenodo’s API docs), while ignoring any keys that are likely out of date:

cffconvert -f zenodo --ignore-suspect-keys

Results in (note absence of date-released, doi, and version):

{
    "creators": [
        {
            "affiliation": "Netherlands eScience Center",
            "name": "Spaaks, Jurriaan H."
        },
        {
            "affiliation": "Netherlands eScience Center",
            "name": "Klaver, Tom"
        }
    ],
    "keywords": [
        "citation",
        "bibliography",
        "cff",
        "CITATION.cff"
    ],
    "license": {
        "id": "Apache-2.0"
    },
    "title": "cff-converter-python"
}

For developers

Install

# get a copy of the cff-converter-python software
git clone https://github.com/citation-file-format/cff-converter-python.git
# change directory into cff-converter-python
cd cff-converter-python
# make a Python3.5 virtual environment named .venv35
virtualenv -p /usr/bin/python3.5 .venv35
# activate the virtual environment
source ./.venv35/bin/activate
# install any packages that cff-converter-python needs
pip install -r requirements.txt

Running tests

# (from the project root)

# run unit tests
pytest test/

# run tests against live system (GitHub)
pytest livetest/

Making a release

# register with PyPI test instance https://test.pypi.org

# I did the following in a virtual env

# make a source distribution:
python setup.py sdist
# install the 'upload to pypi/testpypi tool' aka twine
pip install twine
# upload the contents of the source distribtion we just made
twine upload --repository-url https://test.pypi.org/legacy/ dist/*

# checking the package
# pip install --index-url https://test.pypi.org/simple/ cffconvert

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cffconvert-0.0.3.tar.gz (11.7 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page