Repository layout
The importable public package is everything under src/metadata_tools/
except the hosts/ subpackage. The hosts/ subpackage and everything
outside src/ is supporting code: per-collection configuration, runnable
scripts, tests, docs, and tooling.
rms-metadata-tools/
pyproject.toml # packaging, dependencies, and tool configuration
requirements.txt # runtime requirements (mirrors pyproject)
README.md # project front page (included into these docs)
CONTRIBUTING.md # contribution workflow
codecov.yml # coverage service configuration
scripts/
run-all-checks.sh # single source of truth for the quality gates
read-docs.sh # build the docs (-W) and open them in a browser
docs/ # Sphinx documentation source (this site)
conf.py # single Sphinx configuration
index.rst # documentation root
user_guide/ # the end-user manual
dev_guide/ # this developer manual, including api/
tests/ # pytest suite (see Environment setup)
hosts/<HOST>/ # host-specific tests (requires_archive)
src/
metadata_tools/ # the importable engine (public package)
__init__.py # package docstring and version
common.py # Table base class, global logger, task plumbing
index_support.py # IndexTable and process_index()
geometry_support/ # geometry engine (package)
cumulative_support.py # cumulative table concatenation
label_support.py # PDS3 label generation from templates
columns/ # geometry column definitions (body/ring/sky/sun)
bodies.py # builds the oops Body registry
util.py # path, text, time, and math utilities
defs.py # constants (body names, ring radii, paths)
templates/ # shared PDS3 label-template fragments
hosts/ # per-collection configuration + scripts
GO_0xxx/ # Galileo SSI host (the reference example)
The geometry engine is a package:
src/metadata_tools/geometry_support/
__init__.py # re-exports the public surface (entry points + classes)
process.py # get_args() and process_tables() (the stage entry point)
suite.py # Suite: the set of geometry tables for one volume
record.py # Record: one observation's row across all tables
tables.py # InventoryTable, SkyTable, SunTable, RingTable, BodyTable
prep.py # prep_row(): builds the formatted columns for a row
masks.py # construct_excluded_mask(): excluded-pixel masks
formatting.py # numeric/ISO column formatting
formats.py # FORMAT_DICT: per-column format/units/null/range metadata
bodies_select.py # primary/body selection and field-of-view inventory
A host directory mixes configuration, templates, and runnable scripts:
src/metadata_tools/hosts/GO_0xxx/
host_config.py # shared host settings + get_volume_id()
index_config.py # index glob + key__<NAME> column functions
geometry_config.py # SPICE id, mission table, meshgrids, hooks
host_init.py # initializes the oops host module (side effects)
GO_0xxx_index.py # local index entry point (argparse CLI)
GO_0xxx_geometry.py # local geometry entry point
GO_0xxx_cumulative.py # local cumulative entry point
GO_0xxx_*_cloud.py # rms-cloud-tasks (GCP) counterparts
gcp_*_config.yml # GCP machine/queue configuration
gcp_*_startup.sh # GCP instance start-up scripts
templates/ # host PDS3 label templates