astrodbtoolkit / astrodbtoolkit/astrodb_utils
find_source_in_db's spatial fallback search crashes on a completely empty Sources table
- Dominant language
- Python
- Stars
- 0
- Forks
- 10
- PR merge metrics
- No merged PRs in 30d
Description
**Where:** `astrodb_utils.sources.find_source_in_db` (reached via `ingest_source(..., search_db=True)`).
**What happened:** Ingesting the very first source into a brand-new, completely empty `Sources` table with `search_db=True` failed on every single row with `"None of [Index(['ra_deg', 'dec_deg'], dtype='str')] are in the [columns]"`. This comes from `find_source_in_db`'s coordinate-based `db.query_region(...)` fallback (reached because there's no name match yet), which appears to return a DataFrame with no columns at all when queried against a table with zero rows, so the subsequent `db_name_matches[ra_col_name]` access fails with a `KeyError`-style pandas error.
**Workaround (downstream, in a skill):** Set `search_db=False` for the first bulk ingest into a fresh table, since there's nothing to dedupe against yet. This isn't viable for any future incremental ingest into an already-populated table that still happens to hit this same zero-row-result path.
**Suggested change:** Guard the empty-table/empty-result case in `find_source_in_db` before indexing into `db_name_matches[ra_col_name]` — if `db.query_region(...)` returns zero rows (or a columnless DataFrame), treat it as "no spatial matches" and return/continue rather than raising a KeyError-shaped exception.
**Cross-filed:** Also filed against the [astrodb-bot](https://github.com/astrodbtoolkit/astrodb-bot) skills repo as [astrodbtoolkit/astrodb-bot#101](https://github.com/astrodbtoolkit/astrodb-bot/issues/101), which documents the same gotcha from the skill-user workaround side; this issue is for the actual `astrodb_utils` fix.
---
_Reported from a gotchas.md log filed by a skill user (2026-08-28)._
Contributor guide
No contributing guide indexed for this repository
Research direction
Start in astrodb_utils.sources.find_source_in_db, reached through ingest_source(..., search_db=True), and reproduce the first ingest against an empty Sources table. Trace the db.query_region(...) fallback and verify that an empty or columnless result is treated as having no spatial matches without raising; the existing empty-table ingest should then complete successfully.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- databases
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 88/100