Skip to main content

rms-opus

Release Test Status Documentation Coverage
Release Release date Tests Integration Documentation Code coverage
PyPI Python Downloads License
PyPI version Python versions Downloads License
Issues Pull requests Activity
Open issues Closed issues Open pull requests Closed pull requests Commit activity Last commit

Introduction

OPUS is the Outer Planets Unified Search tool of the Ring-Moon Systems Node of NASA's Planetary Data System. It lets a researcher search the Ring-Moon Systems Node's archive by what an observation is -- when it was taken, what instrument took it, what it was pointed at, what ring or surface geometry it covers -- and then retrieve the matching data files. A public instance runs at opus.pds-rings.seti.org.

This distribution holds everything that instance is made of: the pipeline that reads PDS3 volumes and PDS4 bundles and populates the search database, the Django application that serves the web interface and the public API, and the log analyzer that reports on how the site is used. It is published so that the Ring-Moon Systems Node can deploy it and so that the software behind a public archive is inspectable, not because OPUS is a library to build on: the packages carry no API stability guarantees.

Features

  • Search by metadata, not by file name -- observation time, target, instrument, wavelength, ring and surface geometry, and hundreds of other fields.
  • A public HTTP API returning JSON, CSV or HTML, documented in the API guide, with stable per-observation identifiers meant to stay valid indefinitely.
  • An import pipeline that reads PDS3 and PDS4 archives, computes every metadata field, and writes the whole database in one piece: nothing a run produces becomes visible until the run succeeds.
  • A schema-driven database -- every table, column, search widget and tooltip comes from checked-in JSON, so adding a metadata field is a schema change rather than a migration.
  • A cart and bulk download, building ZIP or TAR archives of the products a search selected.
  • A log analyzer that turns Apache access logs into per-session reports of what users actually did.

Installation

rms-opus requires Python 3.12 or later and MySQL 8.0.19 or later. It also needs the MySQL client development headers, because its MySQL driver has no Linux wheel and is compiled during the install:

sudo apt-get install pkg-config default-libmysqlclient-dev build-essential

Then:

pip install rms-opus

OPUS reads one TOML configuration file and has no default location for it: the OPUS_CONFIG environment variable must name the file in the environment of every OPUS process. The installation writes the template to start from, with a comment on every key:

opus_config_template                          # writes ./opus.toml.template
install -m 600 opus.toml.template opus.toml   # then fill in every <PLACEHOLDER>
export OPUS_CONFIG=$PWD/opus.toml

Running the import pipeline needs the PDS holdings mounted. memcached and its pymemcache client are optional and are not installed by pip install rms-opus -- without them OPUS falls back to Django's per-process local-memory cache. The deployment guide covers both.

Quick Start

Import a volume into a fresh database:

export OPUS_CONFIG=/path/to/opus.toml
opus_import --do-it-all COISS_2002

Serve the site against it, from a checkout:

python manage.py migrate     # Django's own tables; OPUS's come from the import
python manage.py runserver   # then open http://127.0.0.1:8000/opus/

From a pip install there is no manage.py; opus_manage is the same program, and OPUS_CONFIG stays the only variable it needs:

opus_manage migrate
opus_manage runserver

Ask the public API how many Cassini ISS observations of Pan there are:

curl 'https://opus.pds-rings.seti.org/opus/api/meta/result_count.json?target=Pan&instrument=Cassini+ISS'

Summarize a day of access logs:

opus_log_analyzer --batch /var/log/apache2/access_log-2026-08-01

Each command has a --help describing the rest of its surface.

Documentation

The full documentation is at rms-opus.readthedocs.io: the public web API guide for people querying an OPUS server, and the developer guide for people working on OPUS itself.

To build it locally, install the docs extra and run Sphinx:

pip install -e ".[docs]"
cd docs && make html

Contributing

See CONTRIBUTING.md, and the code of conduct it points at.

License

Apache License 2.0. See LICENSE.

Supported by BrowserStack

Thanks to BrowserStack for their support of this open-source project.

BrowserStack

Metadata

Release files for rms-opus 3.23.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rms-opus 3.23.0
File Size Uploaded
rms_opus-3.23.0.tar.gz 4.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for rms-opus 3.23.0
File Interpreter ABI Platform
rms_opus-3.23.0-py3-none-any.whl Python 3 none any Details

Total release size: 6.8 MB

Release files / rms_opus-3.23.0.tar.gz

Download URL rms_opus-3.23.0.tar.gz
Size 4.7 MB
Tags Source
SHA-256 checksum
How to use checksums
9691bb56585678426ccfe2cfe2f64ec5dd4ac0e84e87f4853080ecc9882a3c62
BLAKE2b-256 checksum
How to use checksums
9a069922fb4a6505310779ad0edf47bc7994bf4ae6efacad81a60853939b95e2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / rms_opus-3.23.0-py3-none-any.whl

Download URL rms_opus-3.23.0-py3-none-any.whl
Size 2.1 MB
Tags Python 3
SHA-256 checksum
How to use checksums
0f3bbdb0160cd49143c931c227f9540371d7e2329b4eedec1f40a74af44ac305
BLAKE2b-256 checksum
How to use checksums
d6570a746f20fe8b753d3794e6c10be59325414164fd60b7648c41674a96ca63
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

3.23.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page