satchecker-client
A small Python client for the IAU CPS SatChecker service, which publishes nearest-epoch satellite orbital records — TLEs up to the 2026-07-12 archive handover, OMM element sets after it. No account or credentials are needed.
Unofficial. This is a third-party client written for the TABASCAL and tab-sim radio-astronomy packages. It is not published, endorsed, or maintained by the IAU CPS SatHub team, who develop the SatChecker service itself. The distribution name deliberately avoids
satcheckerso that name stays available to them.
What it does
- Transport — both nearest-record endpoints, with normalised column sets and a typed error hierarchy that separates a per-satellite miss from a service outage or a rate limit.
- Parsing — TLE line parsing including Alpha-5 catalogue numbers and checksums, plus the element range and finiteness checks both record kinds share.
- Kind dispatch — one place that knows how TLE and OMM records differ, so callers spanning the archive handover do not thread a format flag through their own code.
- Caching — a validated, atomically-written per-NORAD JSON store.
- Batching — bounded-concurrency fetches that stop on the first sign the service itself is the problem rather than working through the rest of a list.
What it does not do
It takes no view on which record your observation should use. Source precedence, how stale a record may be before it is refused, and whether missing coverage is fatal are application policy and stay with the caller.
Install
pip install satchecker-client
Full documentation, including the usage guide and API reference, is at satchecker-client.readthedocs.io.
Use
import satchecker_client as sc
# Identify your application to the service operators. Optional, but the service
# is a courtesy to the community and shared traffic is easier to reason about
# when it is attributable.
sc.set_client_identifier("my-app/1.0")
epoch_jd = 2460800.5
norad_ids = [25544, 48274]
# nearest_endpoints_for picks TLE, OMM, or both, based on where the epoch falls
# relative to the archive handover.
for label, fetch in sc.nearest_endpoints_for(epoch_jd):
result = sc.fetch_nearest_batch(norad_ids, epoch_jd, fetch_nearest=fetch, endpoint=label)
if result.outage is not None:
raise result.outage # the service, not this satellite
for norad_id, err in result.errors.items():
print(f"{norad_id}: {err}") # this satellite, keep going
print(result.records)
Records are pandas rows; ask record_kind, record_epoch_jd and
record_elements about one rather than testing for columns yourself.
Caching a fetch for reuse across nearby epochs:
cache = sc.TextOrbitCache("~/.cache/my-app/orbits")
sc.store_or_warn(
lambda: cache.store(norad_id, result.records),
cache.path(norad_id),
"nearest records",
)
known = cache.get(norad_id)
Development
pip install -e ".[test]"
pytest
The tests block outbound network access via an autouse fixture, so the suite runs offline and never touches the live service.
Licence
MIT — see LICENSE. Extracted from TABASCAL, which is GPL-3.0; this client is relicensed by its copyright holder so that a thin API client is not the thing that constrains what it can be built into.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file satchecker_client-0.1.2.tar.gz.
File metadata
- Download URL: satchecker_client-0.1.2.tar.gz
- Upload date:
- Size: 46.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de153f1791f28365a0003bde2b0b65987b510dc875aa1d9fb286c0dc1c51922c
|
|
| MD5 |
a2046b6927b7df751cc4014397e389cc
|
|
| BLAKE2b-256 |
596b5e3094851809d496c5268b72f9def132c74ed710a2734b32adfd7265d1ed
|
Provenance
The following attestation bundles were made for satchecker_client-0.1.2.tar.gz:
Publisher:
release.yaml on epfl-radio-astro/satchecker-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
satchecker_client-0.1.2.tar.gz -
Subject digest:
de153f1791f28365a0003bde2b0b65987b510dc875aa1d9fb286c0dc1c51922c - Sigstore transparency entry: 2862165487
- Sigstore integration time:
-
Permalink:
epfl-radio-astro/satchecker-client@5739b7c0467713a17506b5e2878b6103d15bee12 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/epfl-radio-astro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@5739b7c0467713a17506b5e2878b6103d15bee12 -
Trigger Event:
release
-
Statement type:
File details
Details for the file satchecker_client-0.1.2-py3-none-any.whl.
File metadata
- Download URL: satchecker_client-0.1.2-py3-none-any.whl
- Upload date:
- Size: 34.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
67c3e722cd0e86ed569a6882287a971c1d3664106b9055b4f86484b23702ca44
|
|
| MD5 |
0671f8f7d18e26ac63c0e86a36440455
|
|
| BLAKE2b-256 |
abab59d0c9a9f2c58433a7325b93aabe0667b9d4cd372fc0f10256e9eb4a607f
|
Provenance
The following attestation bundles were made for satchecker_client-0.1.2-py3-none-any.whl:
Publisher:
release.yaml on epfl-radio-astro/satchecker-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
satchecker_client-0.1.2-py3-none-any.whl -
Subject digest:
67c3e722cd0e86ed569a6882287a971c1d3664106b9055b4f86484b23702ca44 - Sigstore transparency entry: 2862165517
- Sigstore integration time:
-
Permalink:
epfl-radio-astro/satchecker-client@5739b7c0467713a17506b5e2878b6103d15bee12 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/epfl-radio-astro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@5739b7c0467713a17506b5e2878b6103d15bee12 -
Trigger Event:
release
-
Statement type: