Skip to main content

Metadata for User facility Template Transformations (MUTTs)

Table of Contents

Introduction

The programs bundled in this repository automatically retrieve Biosample metadata records for studies submitted to NMDC through the NMDC Submission Portal, and convert the metadata into Excel spreadsheets that are accepted by DOE user facilities.


MUTTs User Documentation

The documentation and setup instructions in this section are meant for any user who would like to install the MUTTs Python package and use it's transformation capabilities to convert data from the NMDC Submission Portal into an Excel spreadsheet that follows a template, based on the MUTTs JSON mapper file that is used.

Prerequisites

To create an NMDC user account you will need to sign up at the above link by clicking on the 'ORCID LOGIN' button/link at the top right corner of the NMDC site, and signing in appropriately with your ORCID credentials

Setting up your API access token

This is required for running the examples in the Usage section below (after going through all the Installation steps).

Create a .env file in your working directory with the following environment variables:

echo "DATA_PORTAL_REFRESH_TOKEN=your_token_here" > .env
echo "SUBMISSION_PORTAL_BASE_URL=https://data.microbiomedata.org" >> .env

To get your access token:

  1. Visit https://data.microbiomedata.org/user
  2. Copy your Refresh Token
  3. Replace your_token_here in the .env file with your token

Installation

  1. Create a virtual environment (recommended)
python -m venv mutts-env
source mutts-env/bin/activate  # On Windows: mutts-env\Scripts\activate
  1. Install the MUTTs package from PyPI
pip install mutts
  1. Download any of the MUTTs JSON mapper configuration files

Note: It is not mandatory that you need to download/use any of the pre-existing/already defined JSON mapper files that are present in this repository. You can always define your own custom JSON mapper files that follow a format similar to the ones defined in this repo.

Create a directory for your mapper files and download them from this repository:

mkdir input-files
cd input-files

Download the mapper files you need from the input-files directory:

  • For EMSL: emsl_header.json
  • For JGI Metagenome: jgi_mg_header.json or jgi_mg_header_v15.json
  • For JGI Metatranscriptome: jgi_mt_header.json or jgi_mt_header_v15.json

Updating to the Latest Version

To ensure you have the latest features and bug fixes, you can upgrade the MUTTs package from PyPI:

pip install --upgrade mutts

To check your currently installed version:

pip show mutts

You can also install a specific version if needed:

pip install mutts==<version>

Usage

Run the mutts command with the required options:

mutts --help

Note: In the below examples there is a --sample-set argument that requires you to pass it an NMDC Sample Set UUID as value. Each NMDC Submission has one or more Sample Sets associated with it. You can find the Sample Set UUIDs for your Submission by visiting the NMDC Submission Portal and navigating to the Sample Metadata page for a Sample Set within a Submission. The URL will contain the Sample Set UUID.

An example would look like below:

https://data.microbiomedata.org/submission/<submission-uuid>/sample_set/<sample-set-uuid>/samples

Example 1: Generate a JGI Metagenome spreadsheet

mutts --sample-set <sample-set-uuid> \
      --user-facility jgi_mg \
      --mapper input-files/jgi_mg_header.json \
      --output my-samples_jgi.xlsx

Example 2: Generate a JGI Metagenome v15 spreadsheet

mutts --sample-set <sample-set-uuid> \
      --user-facility jgi_mg \
      --mapper input-files/jgi_mg_header_v15.json \
      --output my-samples_jgi_v15.xlsx

Example 3: Generate an EMSL spreadsheet

mutts --sample-set <sample-set-uuid> \
      --user-facility emsl \
      --mapper input-files/emsl_header.json \
      --header \
      --output my-samples_emsl.xlsx

Command Options

  • -s, --sample-set: Your NMDC sample set UUID (required)
  • -u, --user-facility: Target facility (required): emsl, jgi_mg, jgi_mg_lr, or jgi_mt
  • -m, --mapper: Path to the JSON mapper file (required)
  • -o, --output: Output Excel file path (required)
  • -h, --header: Include headers in output (use for EMSL, omit for JGI)

MUTTs Developer Documentation

The documentation and setup instructions in this section are largely meant for any developer/programmer whose primary use case is to extend/improve/build upon the current capabilities of the MUTTs software.

The software consists of two main components:

  1. JSON Mapper Configuration Files
  • Controls/specifies the mapping between columns from the NMDC Submission Portal and column names used in the output spreadsheets
  • Top-level keys indicate main headers in the output
  • Numbered keys add clarifying header information
  • The header keyword allows custom column names
  • The sub_port_mapping keyword specifies mappings between Submission Portal columns/slots (as dictated by the NMDC submission schema) and user facility template columns
  • Examples available in input-files/
  1. mutts CLI
  • Command-line application that performs the metadata conversion
  • Consumes mapper files and submission sample set data as inputs

Software Requirements

Development Installation

  1. Clone this repository
git clone https://github.com/microbiomedata/metadata-for-user-facility-template-transformations.git
cd metadata-for-user-facility-template-transformations
  1. Install dependencies with Poetry
poetry install

This installs the mutts package in development mode and creates the mutts command-line tool.

  1. Set up your .env file
cp .env.example .env  # if available, or create a new .env file

Add your NMDC API token and submission portal base URL:

DATA_PORTAL_REFRESH_TOKEN=your_token_here
SUBMISSION_PORTAL_BASE_URL=https://data.microbiomedata.org

Get your token from: https://data.microbiomedata.org/user

  1. Run the CLI in development mode
poetry run mutts --help

Running Tests

Unit Tests

The unit tests are isolated from NMDC services, so they do not require an API token, a .env file, or network access. This is also the test suite run for pull requests.

Run the complete unit test suite:

poetry run pytest

Run a single test file:

poetry run pytest tests/test_dataframe.py

Run a single test function:

poetry run pytest tests/test_dataframe.py::test_merges_environmental_records_by_sample_name

Integration Test

The integration test makes authenticated, read-only requests to the configured nmdc-server instance. It refreshes an access token, reads one stable sample set, and verifies that MUTTs can produce a DataFrame containing an expected sample.

In addition to the URL and token environment variables described above, the integration test requires three additional environment variables. Add these to your .env file to run the integration test locally:

INTEGRATION_TEST_SAMPLE_SET_ID=<test-sample-set-id>
INTEGRATION_TEST_USER_FACILITY=<test-user-facility>
INTEGRATION_TEST_EXPECTED_SAMPLE_NAME=<test-sample-name>

Then run the integration test with:

poetry run pytest -m integration

Pytest excludes integration tests by default. Selecting the integration marker explicitly overrides that default.

The Dev nmdc-server integration tests GitHub Actions workflow runs nightly and can also be started manually. It is configured through repository secrets and variables to talk to the deployed dev nmdc-server instance. The workflow tests both the default-branch (main) source and the latest published MUTTs package:

Published MUTTs Default-branch MUTTs Meaning
Pass Pass Dev nmdc-server remains compatible with current and future MUTTs.
Fail Pass A compatible MUTTs change exists but has not been published.
Fail Fail The nmdc-server contract, deployment, authentication, fixture, or shared client path may be broken.
Pass Fail Published users remain safe; MUTTs development has regressed.

Failures create or update one GitHub issue. A successful recovery comments on and closes that issue.

Creating Custom Mapper Files

To create a custom mapper for a new user facility, refer to the existing examples:

Download files

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

Source Distribution

mutts-2.0.0.tar.gz (34.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mutts-2.0.0-py3-none-any.whl (31.0 kB view details)

Uploaded Python 3

File details

Details for the file mutts-2.0.0.tar.gz.

File metadata

  • Download URL: mutts-2.0.0.tar.gz
  • Upload date:
  • Size: 34.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for mutts-2.0.0.tar.gz
Algorithm Hash digest
SHA256 1b10c92c28e0266b2de7002615af06b369ffda9d0af92cb75063ad028d38d814
MD5 ffee70abd292f2ada8157923b2a0c310
BLAKE2b-256 580e793bde32f17df08c5f695f31c6f68ce1723d52ea88de15ec7424b77a0287

See more details on using hashes here.

Provenance

The following attestation bundles were made for mutts-2.0.0.tar.gz:

Publisher: pypi-publish.yaml on microbiomedata/metadata-for-user-facility-template-transformations

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mutts-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: mutts-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 31.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for mutts-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0c954f6752e4fd1028fa1a3e1e7caf2a7a98ac15bf13fefe276f6e712812317b
MD5 e096067633b31ce63b8fbc6eac0813c6
BLAKE2b-256 00ce70026d0e43264fef50a94df8bb5ed3203a21281c57caf3b8f45039cd2c07

See more details on using hashes here.

Provenance

The following attestation bundles were made for mutts-2.0.0-py3-none-any.whl:

Publisher: pypi-publish.yaml on microbiomedata/metadata-for-user-facility-template-transformations

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

2.1.0

2 files

This release

2.0.0 This release

2 files

1.0.9

2 files

1.0.8

2 files

1.0.7

2 files

1.0.6

2 files

1.0.5

2 files

1.0.4

2 files

1.0.3

2 files

1.0.2

2 files

1.0.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page