doi-service

Service and tools for generating DOIs for PDS bundles, collections, and data sets

https://github.com/nasa-pds/doi-service

Science Score: 49.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 3 DOI reference(s) in README
  • Academic publication links
    Links to: zenodo.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (13.8%) to scientific vocabulary

Keywords

doi nasa nasa-pds pds
Last synced: 6 months ago · JSON representation

Repository

Service and tools for generating DOIs for PDS bundles, collections, and data sets

Basic Info
Statistics
  • Stars: 0
  • Watchers: 6
  • Forks: 0
  • Open Issues: 76
  • Releases: 22
Topics
doi nasa nasa-pds pds
Created about 6 years ago · Last pushed 6 months ago
Metadata Files
Readme Changelog License Codeowners Security Support Zenodo

README.md

NASA PDS DOI Service

DOI 🤪 Unstable integration & delivery 😌 Stable integration & delivery

The Planetary Data System (PDS) Digital Object Identifier (DOI) Service provides tools for PDS operators to mint DOIs.

Prerequisites

  • Python 3.13 or above
  • A login to the DOI Service Provider endpoint server (currently DataCite)

User Documentation

Please visit the documentation at: https://nasa-pds.github.io/doi-service/

Developers

JPL Internal Wiki

Get the code and work on a branch:

git clone ...
git checkout -b "#<issue number>"

Install a Python virtual environment, say in a venv directory:

python3 -m venv venv
source venv/bin/activate

Install the package and its dependencies for development into the virtual environment:

pip install --editable '.[dev]'

If you get an error like

src/types.h:36:2: error: You need a compatible libgit2 version (1.1.x)

then you're probably using brew.sh's Python 3.10. Use their Python 3.13 instead.

Update your local configuration to access the DOI service provider's test server.

Create a file in the base directory of the project named pds_doi_service.ini; the following may be used as a template

[SERVICE]
# Should be set to DataCite (case-insensitive)
provider = datacite

[DATACITE]
# Select the appropriate URL endpoint for either a test or production deployment
url = https://api.test.datacite.org/dois
#url = https://api.datacite.org/dois
user = <contact [PDS Help Desk](https://pds.nasa.gov/?feedback=true)>
password = <contact [PDS Help Desk](https://pds.nasa.gov/?feedback=true)>
doi_prefix = 10.17189
validate_against_schema = True

[OSTI]
# This section is kept for posterity, but should be ignored as OSTI is no longer a supported endpoint
url = https://www.osti.gov/iad2test/api/records
#url = https://www.osti.gov/iad2/api/records
user = <contact [PDS Help Desk](https://pds.nasa.gov/?feedback=true)>
password = <contact [PDS Help Desk](https://pds.nasa.gov/?feedback=true)>
doi_prefix = 10.17189
validate_against_schema = True

[PDS4_DICTIONARY]
url = https://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_JSON_1D00.JSON
pds_node_identifier = 0001_NASA_PDS_1.pds.Node.pds.name

[API_AUTHENTICATION]
# Add the issuer of the oauth tokens, for cognito https://cognito-idp.<aws-region>.amazonaws.com/<userpoolID>
jwt_issuer =
# Add the entire content of the JSON file at https://cognito-idp.<aws-region>.amazonaws.com/<userpoolID>/.well-known/jwks.json
json_web_key_set =
jwt_lifetime_seconds = 3600
jwt_algorithm = RS256

[OTHER]
logging_level = INFO
doi_publisher = NASA Planetary Data System
global_keyword_values = PDS,PDS4
pds_uri = https://pds.nasa.gov/pds4/pds/v1/
transaction_dir = ./transaction_history
db_file = doi.db
db_table = doi
api_host = 0.0.0.0
api_port = 8080
api_valid_referrers =
emailer_local_host = localhost
emailer_port       = 25
emailer_sender     = pdsen-doi-test@jpl.nasa.gov
emailer_receivers  = pdsen-doi-test@jpl.nasa.gov

Launch API server

To run the DOI API server, try:

console $ pip install pds-doi-service $ pds-doi-api

The started service documentation is available on http://localhost:8080/PDSAPIs/pdsdoi_api/0.2/ui/

👉 Note: When the api_valid_referrers option is set in pds_doi_service.ini, this service documentation UI will be unavailable.

Running with Docker

To run the server on a Docker container, please execute the following from the package directory:

console $ # building the image $ docker image build --tag pds-doi-service --file docker/Dockerfile . $ # starting up a container $ docker container run --publish 8080:8080 pds-doi-service

However, note that when launching the container via docker container run, all configuration values are derived from the default INI file bundled with the repository. To override the configuration, it is recommended to launch the service via a Docker Composition:

console $ cd docker $ # Make a copy of the docker composition environment template: $ cp doi_service.env.in doi_service.env $ # Edit the environment file, setting the credentials within: $ vi doi_service.env $ # Start the composition; on some systems, `docker compose` is `docker-compose`: $ docker compose up

This will launch the DOI Service container using the docker-compose.yaml file in the docker subdirectory, which specifies that environment variables be imported from doi_service.env. Modify doi_service.env (after copying it from doi_service.env.in) to define any configuration values to override when the service is launched.

Test

Testing details are detailed in this section.

Tox (for developers)

N.B. Updates to pip dependencies are not automatically applied to existing tox virtual environments, to keep unit testing fast. The simplest way to propagate dependency updates is to delete ./.tox and run tox again.

tox is installed automatically during pip install --editable .[dev], and provides virtual environments and run configurations for - unit/functional testing - linting - building the rich documentation.

To launch the full set of tests, simply set the following environment variables:

  • CI should be set to true
  • DATACITE_USER should be set to the PDS username of the testing Datacite instance
  • DATACITE_PASSWORD should be set to that username's password

Then run:

tox

You can also run individual components:

console $ tox -e tests # Run unit, functional, and integration tests $ tox -e lint # Run flake8, mypy, and black code reformatting $ tox -e docs # Build the documentation to see if that works

It is strongly recommended to add tox -e lint to your pre-commit git hook, and tox -e tests in a pre-push hook, as only linted and test-passing PRs will be merged.

The following linting example is provided for ease of use:

```bash STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep ".py$")

echo "Linting files" tox -e lint git add $STAGED_FILES # add any lint-related changes to the current commit

if [ $? -ne 0 ] then echo "Initial lint detected errors, re-linting to determine whether errors remain" tox -e lint if [ $? -ne 0 ] then exit 1 fi fi

exit 0 ```

You can also run pytest, sphinx-build, mypy, etc., if that's more your speed.

~~Behavioral testing (for Integration & Testing)~~

~~Behavioral tests are also pre-installed in the Python virtual environment when you run pip install --editable .[dev]. Launch those by running:~~

behave

~~Note this will download reference test data. If they need to be updated you have to first remove your local copy of the reference data (test/aaDOI_production_submitted_labels)~~

~~You can also run them for a nicer reporting:~~

behave -f allure_behave.formatter:AllureFormatter -o ./allure ./features
allure service allure

~~👉 Note: This assumes you have Allure Test Reporting framework installed.~~

Testrail Reporting

Test reports can be pushed to Testrail

Project: Planetary Data System (PDS) Test suite: pds-doi-service

Set your environment:

export TESTRAIL_USER=<your email in testrail>
export TESTRAIL_KEY=<your API key in tesrail>

Run the tests:

behave

See the results in https://cae-testrail.jpl.nasa.gov/testrail/index.php?/projects/overview/168

👉 Note: This assumes you have access to the Jet Propulsion Laboratory's Testrail installation.

Documentation Management

Documentation about the documentation is described in this section.

Design

See in this repository:

https://github.com/NASA-PDS/pds-doi-service/tree/main/docs

or the docs directory in the source package.

User Documentation

User documentation is managed with Sphinx, which is also installed in your Python virtual environment when you run pip install --editable .[dev]. You can use tox as described above to make the docs, or by hand at any time by running:

sphinx-build -ab html docs/source docs/build

Build & Release

The build and release process is managed by GitHub Actions and the Roundup.

Owner

  • Name: NASA Planetary Data System Software
  • Login: NASA-PDS
  • Kind: organization
  • Email: pds-operator@jpl.nasa.gov

GitHub Events

Total
  • Create event: 18
  • Commit comment event: 3
  • Release event: 5
  • Issues event: 11
  • Delete event: 13
  • Issue comment event: 57
  • Public event: 1
  • Push event: 44
  • Pull request review comment event: 25
  • Pull request review event: 26
  • Pull request event: 23
Last Year
  • Create event: 18
  • Commit comment event: 3
  • Release event: 5
  • Issues event: 11
  • Delete event: 13
  • Issue comment event: 57
  • Public event: 1
  • Push event: 44
  • Pull request review comment event: 25
  • Pull request review event: 26
  • Pull request event: 23

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 139
  • Total pull requests: 56
  • Average time to close issues: 3 months
  • Average time to close pull requests: about 2 months
  • Total issue authors: 10
  • Total pull request authors: 7
  • Average comments per issue: 2.32
  • Average comments per pull request: 1.14
  • Merged pull requests: 32
  • Bot issues: 0
  • Bot pull requests: 28
Past Year
  • Issues: 6
  • Pull requests: 29
  • Average time to close issues: 9 days
  • Average time to close pull requests: 3 months
  • Issue authors: 3
  • Pull request authors: 5
  • Average comments per issue: 0.33
  • Average comments per pull request: 1.45
  • Merged pull requests: 11
  • Bot issues: 0
  • Bot pull requests: 17
Top Authors
Issue Authors
  • jordanpadams (58)
  • tloubrieu-jpl (33)
  • rsjoyner (17)
  • collinss-jpl (12)
  • alexdunnjpl (8)
  • gxtchen (2)
  • nutjob4life (2)
  • rchenatjpl (2)
  • jimmie (1)
  • jpl-jengelke (1)
Pull Request Authors
  • dependabot[bot] (45)
  • jordanpadams (12)
  • nutjob4life (8)
  • alexdunnjpl (6)
  • collinss-jpl (2)
  • rsjoyner (2)
  • lylebarner (1)
Top Labels
Issue Labels
bug (57) i&t.skip (51) B12.1 (29) requirement (26) icebox (26) s.medium (22) B13.0 (22) task (19) needs:triage (17) B12.0 (17) open.v2.4.0 (16) p.must-have (14) B14.1 (13) enhancement (12) B13.1 (9) s.high (8) s.low (7) p.could-have (7) Epic (7) p.should-have (6) i&t.issue (5) theme (5) sprint-backlog (4) requirement-topic:DOI management (4) B14.0 (3) proj.doi-service (3) needs:more-info (3) wontfix (3) i&t.done (3) duplicate (2)
Pull Request Labels
needs:dependency (36) python (33) github_actions (10) dependencies (9) docker (2)

Dependencies

.github/workflows/branch-cicd.yaml actions
  • actions/cache v4 composite
  • actions/checkout v4 composite
  • actions/setup-python v5 composite
.github/workflows/codeql-analysis.yml actions
  • actions/checkout v4 composite
  • actions/setup-python v5 composite
  • actions/upload-artifact v4 composite
  • github/codeql-action/analyze v3 composite
  • github/codeql-action/autobuild v3 composite
  • github/codeql-action/init v3 composite
.github/workflows/secrets-detection.yaml actions
  • actions/checkout v4 composite
.github/workflows/stable-cicd.yaml actions
  • NASA-PDS/roundup-action stable composite
  • actions/cache v4 composite
  • actions/checkout v4 composite
.github/workflows/unstable-cicd.yaml actions
  • NASA-PDS/roundup-action stable composite
  • actions/cache v4 composite
  • actions/checkout v4 composite
docker/Dockerfile docker
  • python 3.9-slim build
pyproject.toml pypi
setup.py pypi