TART Catalogue Python Client
Fetches TLE data from the catalogue server and computes satellite positions in ECEF, celestial (RA/Dec), or horizontal (Az/El) coordinates.
Setup
uv sync
CLI Usage
# ECEF positions (default)
uv run python -m tart_client.cli ecef
# Celestial (RA/Dec) positions
uv run python -m tart_client.cli celestial
# Horizontal (Az/El) positions
uv run python -m tart_client.cli horizontal
# Benchmark (default 1000 queries over last week)
uv run python -m tart_client.cli benchmark 5000
# Custom server and date
uv run python -m tart_client.cli ecef \
--url http://localhost:8876 \
--date 2026-06-16T12:00:00Z
Set TART_CATALOGUE_URL to avoid repeating --url:
export TART_CATALOGUE_URL=http://localhost:8876
uv run python -m tart_client.cli celestial
Library API
from tart_client import CatalogueClient
client = CatalogueClient() # defaults to https://tart.elec.ac.nz/catalog
# Or: CatalogueClient(base_url="http://localhost:8876")
Fetch raw TLEs
tles = client.fetch_tles()
# Returns: [{"name": "...", "line1": "...", "line2": "..."}, ...]
ECEF positions
positions = client.ecef_positions()
Returns Earth-Centered Earth-Fixed coordinates:
[
{
"name": "GPS BIIR-2 (PRN 13)",
"ecef_km": [12345.678, -23456.789, 3456.78],
"velocity_km_s": [1.234, -2.345, 5.678]
}
]
Transform: SGP4 → TEME → rotate by −GMST → ECEF.
Celestial positions (RA/Dec)
positions = client.celestial_positions()
Derived from ECEF. Returns ICRS right ascension and declination:
[
{
"name": "GPS BIIR-2 (PRN 13)",
"ra_hours": 12.345678,
"dec_degrees": -45.678901,
"distance_km": 26500.0
}
]
Transform: ECEF → ITRS → ICRS (via astropy).
Horizontal positions (Az/El)
positions = client.horizontal_positions(
lat=-45.87, # observer latitude (degrees)
lon=170.60, # observer longitude (degrees)
alt=100.0, # observer altitude (meters)
min_elevation=10, # min elevation to include (default -90 = all)
name_regex="GPS", # optional regex to filter by name (default None)
)
Derived from ECEF. Returns topocentric azimuth and elevation:
[
{
"name": "GPS BIIR-2 (PRN 13)",
"azimuth_deg": 45.123456,
"elevation_deg": 30.654321,
"range_km": 20200.123
}
]
Transform: ECEF → observer-relative ENU → Az/El (WGS84 ellipsoid).
Fast satellite count
count = client.count_satellites()
# Returns: number of TLE records (no propagation)
Caching
TLE data is cached in ~/.cache/tart-catalogue/:
- Nearest-match: any cached entry within 12 hours of the requested time is reused
- LRU eviction: oldest 100+ entries are removed
- In-memory: parsed SGP4 satellite objects are cached per cache key to avoid re-parsing TLE lines
Server fetch requests are logged to stderr with the request datetime.
Coordinate transforms
| Method | Input Frame | Output Frame | Transform |
|---|---|---|---|
ecef_positions |
TEME (SGP4) | ITRS (ECEF) | Rotate by −GMST |
celestial_positions |
ITRS (ECEF) | ICRS (RA/Dec) | astropy ITRS→ICRS |
horizontal_positions |
ITRS (ECEF) | ENU → Az/El | WGS84 geodetic + rotation |
Testing
uv run pytest tart_client/ -v
Tests validate against astropy-generated reference vectors in test-vectors/test_vectors.json.
Metadata
Release files for tart-catalogue-client 0.5.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tart_catalogue_client-0.5.2.tar.gz | 40.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tart_catalogue_client-0.5.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 50.7 kB
Release files / tart_catalogue_client-0.5.2.tar.gz
| Download URL | tart_catalogue_client-0.5.2.tar.gz |
|---|---|
| Size | 40.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c5cf1b0ba53d76d82e356b02342a0a5e10e681d73a246409abe0c117193e11a1
|
|
BLAKE2b-256 checksum How to use checksums |
276cb9c9c8fcb2960a4cf7280d7319cb3bd76003836f0534a84bc7bdfa1562ba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / tart_catalogue_client-0.5.2-py3-none-any.whl
| Download URL | tart_catalogue_client-0.5.2-py3-none-any.whl |
|---|---|
| Size | 9.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f98cc67da3a45a4d296040b78c76b324547656fa8a0788095fe4309302688d17
|
|
BLAKE2b-256 checksum How to use checksums |
d43e0e52f826af2190ec4150d73701844fba34be0c094a75a57cd7a639653449
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|