Skip to main content

rms-pdsfile

GitHub release; latest by date GitHub Release Date Test Status Documentation Status Code coverage
PyPI - Version PyPI - Format PyPI - Downloads PyPI - Python Version
GitHub commits since latest release GitHub commit activity GitHub last commit
Number of GitHub open issues Number of GitHub closed issues Number of GitHub open pull requests Number of GitHub closed pull requests
GitHub License Number of GitHub stars GitHub forks

Introduction

rms-pdsfile is the interface to a holdings tree: the directory tree in which the PDS Ring-Moon Systems Node keeps the planetary data it publishes — images, spectra and other observations of the outer planets from missions such as Cassini, Voyager and New Horizons — together with everything derived from that data: preview images, diagrams, index tables, checksum files, downloadable archives, and the precomputed caches that describe them.

Given any file in such a tree, the package answers the questions a data service asks over and over: what is this file, what is its size, checksum and modification date, where are its label, its previews and its metadata, and which other files belong to the same observation — all without opening the file, and mostly without touching the file system at all, by reading the tree's precomputed caches instead. It also ships the command-line programs the Node uses to build and validate those caches.

It is written for the Node's own services — it is the layer beneath the OPUS search engine and the Viewmaster browser at pds-rings.seti.org — and for anyone who maintains or mirrors a Ring-Moon Systems holdings tree.

rms-pdsfile is a product of the PDS Ring-Moon Systems Node.

Features

  • One object per file. A PdsFile represents one file or directory in a holdings tree and is the entry point to everything else: parent, children, associated files, metadata, previews.
  • Both PDS standards. Pds3File reads a PDS3 tree of volumes; Pds4File reads a PDS4 tree of bundles. The two share one interface.
  • Metadata without I/O. Size, child count, modification date and MD5 checksum come from the tree's shelf files, so answering does not require reading — or even statting — the data file itself.
  • Associations. From any product, find the files that belong with it in another category of the tree: its label, its previews, its diagrams, its calibrated version, its index-table rows.
  • OPUS support. Map any product to its OPUS ID and back, and enumerate every file OPUS should offer for an observation.
  • Index tables as directories. A metadata index table behaves as a directory whose children are its rows, so a single observation's row is addressable like a file.
  • Preview sets. The preview images of a product are collected into a view set that picks the best size on request.
  • Maintenance tools. Eleven console scripts build, validate and repair the derived parts of a tree: pdsarchives, pdschecksums, pdsdependency, pdsindexshelf, pdsinfoshelf and pdslinkshelf for PDS3, and pds4archives, pds4checksums, pds4indexshelf, pds4infoshelf and pds4linkshelf for PDS4. Three more programs run as modules with python -m: crlf, re_validate and show_opus_products (the user guide gives each one's full module path). The user guide has a chapter on each.

Installation

rms-pdsfile requires Python 3.11 or later.

pip install rms-pdsfile

To use the command-line programs without adding the package to any project's dependency list, install it as an application instead:

pipx install rms-pdsfile

The package is only as useful as the holdings tree it reads: point it at a locally accessible tree, complete or partial, such as a mirror of the Node's holdings. Two environment variables conventionally name the tree roots, and the examples below use them:

export PDS3_HOLDINGS_DIR="/path/to/pdsdata/holdings"
export PDS4_HOLDINGS_DIR="/path/to/pdsdata/pds4-holdings"

The directory basenames holdings and pds4-holdings are required — the package splits every absolute path at that component. The installation chapter of the user guide covers the tree layout and which programs read which variable.

Quick Start

Load a PDS3 holdings tree and ask about one Cassini image (replace the root with your own tree's; every path below it is real):

import pdsfile

pdsfile.Pds3File.preload('/path/to/pdsdata/holdings')

f = pdsfile.Pds3File.from_logical_path(
    'volumes/COISS_2xxx/COISS_2002/data/1460960653_1461048959/N1460960653_1.IMG')
print(f.description)      # Narrow-angle image, VICAR
print(f.opus_id)          # co-iss-n1460960653
print(f.label_basename)   # N1460960653_1.LBL
print(f.viewset)          # the four preview images of this observation

From the command line, validate one volume's cached file information against the volume itself:

pdsinfoshelf --validate "$PDS3_HOLDINGS_DIR/volumes/COUVIS_0xxx/COUVIS_0001"

Documentation

The user guide (the fourteen command-line programs), the developer guide and the API reference are at rms-pdsfile.readthedocs.io. To build them locally, install the dev extra and run make html in docs/.

Contributing

See the contribution guide.

License

Apache-2.0.

Metadata

Release files for rms-pdsfile 1.0.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-pdsfile 1.0.0
File Size Uploaded
rms_pdsfile-1.0.0.tar.gz 2.5 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for rms-pdsfile 1.0.0
File Interpreter ABI Platform
rms_pdsfile-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 3.1 MB

Release files / rms_pdsfile-1.0.0.tar.gz

Download URL rms_pdsfile-1.0.0.tar.gz
Size 2.5 MB
Tags Source
SHA-256 checksum
How to use checksums
d2e5923105eaed2fd936d3531730338b56e738db6df846d00a5da2d2bda77109
BLAKE2b-256 checksum
How to use checksums
d6914140eefc97d62c1a359f0f67dcc0a5ad11e623b52c7a089d2ff3d8af1dbc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / rms_pdsfile-1.0.0-py3-none-any.whl

Download URL rms_pdsfile-1.0.0-py3-none-any.whl
Size 600.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d424f4857e2e02f9d438da3bb8e1e4a033f76610e2376d2e307f0756e7e10b76
BLAKE2b-256 checksum
How to use checksums
9a543fa2341c78d3662fb8c1945e15ffb792240889a00addfc5874ffd124ffed
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

1.0.0 This release

2 release files

0.1.2

2 release files

0.1.0

2 release files

0.0.18

2 release files

0.0.17

2 release files

0.0.15

2 release files

0.0.14

2 release files

0.0.12

2 release files

0.0.11

2 release files

0.0.10

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

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