Skip to content

egernia

A draft IVOA TAP 1.1 (Table Access Protocol) server in Python, built as microservices on a PostgreSQL backend.

The Table Access Protocol is the IVOA standard for querying tabular data — astronomical catalogues as well as general database tables — through a uniform web-service interface. This project implements the full TAP 1.1 endpoint set:

  • /sync — synchronous ADQL queries with DALI parameter handling
  • /async — asynchronous queries managed via the UWS 1.1 job pattern
  • VOSI — /capabilities (TAPRegExt), /availability, /tables (VODataService)
  • TAP_SCHEMA — self-describing metadata tables, queryable via ADQL
  • /examples — DALI service-provided examples

Reused building blocks

Concern Library
ADQL parsing & translation to PostgreSQL vendored ADQL 2.1 fork of queryparser-python3 (ANTLR-based, translates ADQL geometry to pg_sphere; fork in libs/egernia-core/egernia_core/query/_adql/, the non-ADQL parts still from PyPI)
VOTable serialization hand-written streaming writer (egernia_core.query.results); astropy parses it in tests
HTTP layer FastAPI / uvicorn
Job queue PostgreSQL FOR UPDATE SKIP LOCKED — no extra broker

Quick start

docker compose up --build -d
./scripts/smoke_test.sh

Then query with any IVOA client (TOPCAT, PyVO, astroquery):

import pyvo

svc = pyvo.dal.TAPService("http://localhost:8080/tap")
print(svc.search("SELECT TOP 5 * FROM ska.continuum_sources").to_table())

The Quickstart takes this further — cone search, UWS jobs, Parquet and Arrow output, TOPCAT, and ingesting metadata.