Busabase
Busabase is an open-source (MIT) database and workspace for AI agents — data, docs, skills, and apps in one place. Run it locally, self-host it inside your network, or use Busabase Cloud, and turn age
IVOA TAP 1.1 server in Python — microservices on PostgreSQL
Translation pending
DataPython · ShellGitHub @ska-telescopeOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
An IVOA TAP 1.1 (Table Access Protocol) server in Python, built as microservices on a PostgreSQL backend, reusing existing libraries for the hard parts
Loading the full README. The saved excerpt is shown below.
An IVOA TAP 1.1 server in Python — ADQL over PostgreSQL, scaling on nothing but the database.
The Table Access Protocol is the IVOA standard for querying tabular
data — astronomical catalogues as well as ordinary database tables — over a
uniform web service. This is a complete TAP 1.1 implementation for the SKA
Regional Centre Network, built as two stateless services over one PostgreSQL
database.Read the full README ↗The Table Access Protocol is the IVOA standard for querying tabular data — astronomical catalogues as well as ordinary database tables — over a uniform web service. This is a complete TAP 1.1 implementation for the SKA Regional Centre Network, built as two stateless services over one PostgreSQL database.
FOR UPDATE SKIP LOCKED on a table, so there is no broker, no cache tier and
no service registry to operate — and executors scale out with no leases and
no split-brain.TAP_SCHEMA, then executed under SET LOCAL ROLE tap_reader
with a statement timeout. An ADQL query cannot write, whatever it manages to
express.TAP_SCHEMA so
ingested metadata is queryable by ordinary ADQL.docker compose up --build -d
./scripts/smoke_test.sh # availability, tables, sync + async round trip
Query it with curl:
curl "http://localhost:8080/tap/sync" \
--data-urlencode "LANG=ADQL" \
--data-urlencode "QUERY=SELECT TOP 5 * FROM ska.continuum_sources" \
--data-urlencode "RESPONSEFORMAT=csv"
…or with any IVOA client, which needs no configuration beyond the URL:
import pyvo
svc = pyvo.dal.TAPService("http://localhost:8080/tap")
print(svc.search("SELECT TOP 5 * FROM ska.continuum_sources").to_table())
Cone search, UWS jobs, Parquet output, TOPCAT and metadata ingest are in the Quickstart guide.
| Standard | Surface |
|---|---|
| TAP 1.1 | /sync, /async, TAP_SCHEMA, UPLOAD (inline multipart and http(s)) |
| ADQL 2.1 | Parsed and translated by a vendored queryparser-python3 fork; geometry becomes pg_sphere expressions |
| UWS 1.1 | Complete job lifecycle, including WAIT blocking, AFTER filtering, and ABORT that cancels the running statement |
| VOSI | /capabilities (TAPRegExt), /availability, /tables (VODataService) |
| DALI | Parameter conventions, error VOTables, /examples |
| VOTable 1.4 | hand-written streaming writer; plus CSV, TSV, JSON, Parquet, Arrow |
| VOResource | /tap/registry record for registry harvesting |
| AuthVO | Challenges naming the IAM, so a client can go and get a token |
Endpoint-by-endpoint detail with every parameter is in the API reference.
A JSON interface for machine-to-machine use lives alongside the
standards-mandated XML at /api/v1 — see the JSON API.
helm upgrade --install egernia charts/egernia \
--namespace egernia --create-namespace \
--set tapApi.baseUrl=https://tap.example.org/tap
helm test egernia -n egernia # in-cluster VOSI + sync smoke test
The chart covers both services, an optional in-chart PostgreSQL, anti-affinity and PodDisruptionBudgets, opt-in autoscaling and scheduled backups. External HA PostgreSQL, PITR, restore and hardening are in the deployment guide.
[!IMPORTANT] Authentication is off by default. A deployment that configures no IAM is fully anonymous, including the mutating metadata endpoints, so it must not be exposed to untrusted networks. See Authentication.
| Quickstart | Run it locally, query it from curl, PyVO and TOPCAT |
| Architecture | The two-service shape, request paths, failure behaviour |
| API reference · JSON API | Every endpoint and parameter |
| Deployment · Autoscaling | Helm values, scaling, backup, restore |
| Authentication · VO Registry | Tokens, gated operations, registration |
| Metadata plugins · Model schemas | Binding a pydantic model to a queryable schema |
| Observability · Benchmarking | Metrics, tracing, how the numbers were measured |
| Development · Roadmap |
Contributions are welcome — see CONTRIBUTING.md for the development loop and CODE_OF_CONDUCT.md for the standards we hold each other to. Questions and bug reports belong in GitHub issues.
To report a security vulnerability, follow SECURITY.md rather than opening a public issue.
If this software supports published work, please cite it — GitHub builds the citation from CITATION.cff via Cite this repository.
MIT © Michele Delli Veneri and contributors.
The uv workspace, tests, and what is planned |