From 0dad3c80dc3695dc7ac5bdffe963597413296036 Mon Sep 17 00:00:00 2001 From: matthewholman Date: Sat, 20 Jun 2026 07:58:04 -0400 Subject: [PATCH] Fall back to a bundled obscodes file when the MPC download fails LayupObservatory downloads the MPC observatory-codes file (obscodes_extended.json.gz) from minorplanetcenter.net on first use. When that server is unreachable the whole run fails -- this took down a CI leg where every obscode-dependent test errored with requests ConnectTimeout. Observatory codes change rarely, so ship a copy in layup/data/ObsCodes.json.gz and, when the live download raises a requests exception, decompress the bundled copy and hand it to sorcha's Observatory via its oc_file argument (which bypasses the download). A slightly stale fallback is far better than a hard failure on a transient network outage. - write_fallback_obscodes(): decompress the bundled file to a JSON path. - LayupObservatory.__init__: try the normal download, fall back on requests.exceptions.RequestException. - Tests: the bundled file decompresses to valid JSON, and a simulated MPC outage falls back to it instead of raising. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/layup/data/ObsCodes.json.gz | Bin 0 -> 77057 bytes .../utilities/data_processing_utilities.py | 41 +++++++++++++++++- tests/layup/test_data_processing_utilities.py | 41 ++++++++++++++++++ 3 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 src/layup/data/ObsCodes.json.gz diff --git a/src/layup/data/ObsCodes.json.gz b/src/layup/data/ObsCodes.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..88ba7098d3924906e9e14cfda70773aa66f3f892 GIT binary patch literal 77057 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 XZ7tpD-TQ!7{r2}C(GA)YmN5hX`k3%& literal 0 HcmV?d00001 diff --git a/src/layup/utilities/data_processing_utilities.py b/src/layup/utilities/data_processing_utilities.py index f55128bd..0014a308 100644 --- a/src/layup/utilities/data_processing_utilities.py +++ b/src/layup/utilities/data_processing_utilities.py @@ -1,7 +1,12 @@ +import gzip import logging +import os +import tempfile from concurrent.futures import ProcessPoolExecutor +from importlib.resources import files import numpy as np +import requests from sorcha.ephemeris.simulation_geometry import barycentricObservatoryRates from sorcha.ephemeris.simulation_parsing import Observatory as SorchaObservatory from sorcha.ephemeris.simulation_setup import furnish_spiceypy @@ -17,6 +22,25 @@ logger = logging.getLogger(__name__) +def write_fallback_obscodes(): + """Decompress the observatory-codes file bundled with layup to a plain JSON + file and return its path. + + The MPC observatory-codes file is normally downloaded from + minorplanetcenter.net on first use. When that download fails (e.g. the MPC + server is unreachable, as has happened on CI runners), we fall back to the + copy shipped in ``layup/data/ObsCodes.json.gz`` instead of failing the run. + Observatory codes change rarely, so a slightly stale fallback is far better + than a hard failure. Returns a path suitable for ``Observatory``'s + ``oc_file`` argument (which reads the decompressed JSON directly). + """ + compressed = files("layup.data").joinpath("ObsCodes.json.gz").read_bytes() + dest = os.path.join(tempfile.gettempdir(), "layup_obscodes_fallback.json") + with open(dest, "wb") as f: + f.write(gzip.decompress(compressed)) + return dest + + def process_data(data, n_workers, func, **kwargs): """ Process a structured numpy array in parallel for a given function and keyword arguments @@ -315,7 +339,22 @@ def __init__(self, cache_dir=None): # Furnish the spiceypy kernels layup_furnish_spiceypy(cache_dir) - super().__init__(FakeSorchaArgs(cache_dir), config.auxiliary) + try: + super().__init__(FakeSorchaArgs(cache_dir), config.auxiliary) + except requests.exceptions.RequestException as exc: + # The observatory-codes download from the MPC failed (server + # unreachable, timeout, etc.). Fall back to the copy bundled with + # layup so we don't fail the run over a transient network outage. + logger.warning( + "Could not fetch observatory codes from the MPC (%s); " + "falling back to the copy bundled with layup.", + exc, + ) + super().__init__( + FakeSorchaArgs(cache_dir), + config.auxiliary, + oc_file=write_fallback_obscodes(), + ) # A cache of barycentric positions for observatories of the form {obscode: {et: (x, y, z)}} self.cached_obs = {} diff --git a/tests/layup/test_data_processing_utilities.py b/tests/layup/test_data_processing_utilities.py index 00078e32..7a363610 100644 --- a/tests/layup/test_data_processing_utilities.py +++ b/tests/layup/test_data_processing_utilities.py @@ -11,6 +11,7 @@ has_cov_columns, parse_fit_result, process_data, + write_fallback_obscodes, ) from layup.utilities.data_utilities_for_tests import get_test_filepath from layup.utilities.file_io.CSVReader import CSVDataReader @@ -560,3 +561,43 @@ def test_parse_fit_result_missing_some_cov_columns(): assert len(fit_result.cov) == 36 assert np.all(np.array(fit_result.cov[:-1]) != 0.0) assert fit_result.cov[-1] == 0.0 + + +def test_write_fallback_obscodes(): + """The obscodes copy bundled with layup decompresses to valid JSON that + sorcha's Observatory can read directly (network-outage fallback).""" + import json + + path = write_fallback_obscodes() + with open(path) as f: + obs = json.load(f) + assert len(obs) > 2000 + assert "X05" in obs and "500" in obs # Rubin + geocenter + + +def test_layup_observatory_falls_back_on_mpc_failure(monkeypatch): + """If the MPC obscodes download fails (e.g. server unreachable), the + LayupObservatory should fall back to the bundled copy instead of raising.""" + import requests + + import layup.utilities.data_processing_utilities as dpu + + orig_init = dpu.SorchaObservatory.__init__ + calls = [] + + def fake_init(self, args, auxconfigs, oc_file=None): + calls.append(oc_file) + if oc_file is None: + # Simulate the MPC download failing. + raise requests.exceptions.ConnectTimeout("simulated MPC outage") + # The fallback path supplies a local oc_file; let the real init read it. + orig_init(self, args, auxconfigs, oc_file=oc_file) + + monkeypatch.setattr(dpu.SorchaObservatory, "__init__", fake_init) + + observatory = LayupObservatory() + + # First attempt (download) raised; the second used the bundled fallback. + assert calls[0] is None and calls[1] is not None + assert "X05" in observatory.ObservatoryXYZ + assert len(observatory.ObservatoryXYZ) > 2000