From cd06ead101771707810d9f6e1920e161a328f92b Mon Sep 17 00:00:00 2001 From: Jack Orlowski-Scherer Date: Tue, 21 Jul 2026 14:51:14 -0400 Subject: [PATCH 1/6] fix: correctly cast bytes to boolean --- socat/ingest/textingest.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/socat/ingest/textingest.py b/socat/ingest/textingest.py index 4196483..3687ee7 100644 --- a/socat/ingest/textingest.py +++ b/socat/ingest/textingest.py @@ -41,7 +41,10 @@ def ingest_text_file( table["name"] = names table["monitored"] = [ - bool(monitored.decode("utf-8")) for monitored in table["monitored"] + bool(monitored.decode("utf-8")) + if isinstance(monitored, (bytes, np.bytes_)) + else bool(monitored) + for monitored in table["monitored"] ] number_of_sources = 0 From 99cdf9be2268e2e938c2b274e927d3d9e74e0739 Mon Sep 17 00:00:00 2001 From: Jack Orlowski-Scherer Date: Tue, 21 Jul 2026 16:39:00 -0400 Subject: [PATCH 2/6] fix: swap to pandas ingest --- socat/ingest/textingest.py | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/socat/ingest/textingest.py b/socat/ingest/textingest.py index 3687ee7..810c949 100644 --- a/socat/ingest/textingest.py +++ b/socat/ingest/textingest.py @@ -2,6 +2,7 @@ from pathlib import Path import numpy as np +import pandas as pd from astropy import units as u from astropy.coordinates import ICRS @@ -28,28 +29,10 @@ def ingest_text_file( number_of_sources: int The number of sources added to the catalog. """ - - table = np.loadtxt( - filename, - dtype=[("ra", "f8"), ("dec", "f8"), ("name", "S20"), ("monitored", "S20")], - skiprows=1, - ) - names = [ - name.decode("utf-8") if isinstance(name, (bytes, np.bytes_)) else name - for name in table["name"] - ] - table["name"] = names - - table["monitored"] = [ - bool(monitored.decode("utf-8")) - if isinstance(monitored, (bytes, np.bytes_)) - else bool(monitored) - for monitored in table["monitored"] - ] - + table = pd.read_csv(filename) number_of_sources = 0 - for row in table: + for index, row in table.iterrows(): client.create_source( position=ICRS( ra=float(row["ra"]) * u.deg, From 31f3c6e36124738096cc411548a00dfae9d50722 Mon Sep 17 00:00:00 2001 From: Jack Orlowski-Scherer Date: Tue, 21 Jul 2026 16:45:52 -0400 Subject: [PATCH 3/6] fix: ruff formating --- socat/ingest/textingest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/socat/ingest/textingest.py b/socat/ingest/textingest.py index 810c949..10e6761 100644 --- a/socat/ingest/textingest.py +++ b/socat/ingest/textingest.py @@ -32,7 +32,7 @@ def ingest_text_file( table = pd.read_csv(filename) number_of_sources = 0 - for index, row in table.iterrows(): + for index, row in table.iterrows(): client.create_source( position=ICRS( ra=float(row["ra"]) * u.deg, From 578edd7655e343585ec8d5ec7c8844946319099c Mon Sep 17 00:00:00 2001 From: Jack Orlowski-Scherer Date: Tue, 21 Jul 2026 16:55:44 -0400 Subject: [PATCH 4/6] feat: update test_ingest to pandas --- socat/alembic/env.py | 2 +- socat/alembic/versions/35a6a33e0a34_initial_database.py | 1 + .../versions/c3d4e5f6a7b8_add_monitored_pointing_flags.py | 1 + socat/ingest/textingest.py | 1 - tests/conftest.py | 3 ++- tests/test_ingest.py | 6 ++++-- 6 files changed, 9 insertions(+), 5 deletions(-) diff --git a/socat/alembic/env.py b/socat/alembic/env.py index 8d7000e..a12e8fc 100644 --- a/socat/alembic/env.py +++ b/socat/alembic/env.py @@ -1,8 +1,8 @@ from logging.config import fileConfig -from alembic import context from sqlalchemy import engine_from_config, pool +from alembic import context from socat.settings import settings # this is the Alembic Config object, which provides diff --git a/socat/alembic/versions/35a6a33e0a34_initial_database.py b/socat/alembic/versions/35a6a33e0a34_initial_database.py index c655f50..81895ad 100644 --- a/socat/alembic/versions/35a6a33e0a34_initial_database.py +++ b/socat/alembic/versions/35a6a33e0a34_initial_database.py @@ -9,6 +9,7 @@ from collections.abc import Sequence import sqlalchemy as sa + from alembic import op # revision identifiers, used by Alembic. diff --git a/socat/alembic/versions/c3d4e5f6a7b8_add_monitored_pointing_flags.py b/socat/alembic/versions/c3d4e5f6a7b8_add_monitored_pointing_flags.py index a36eda9..d3f2de8 100644 --- a/socat/alembic/versions/c3d4e5f6a7b8_add_monitored_pointing_flags.py +++ b/socat/alembic/versions/c3d4e5f6a7b8_add_monitored_pointing_flags.py @@ -9,6 +9,7 @@ from collections.abc import Sequence import sqlalchemy as sa + from alembic import op # revision identifiers, used by Alembic. diff --git a/socat/ingest/textingest.py b/socat/ingest/textingest.py index 10e6761..d715393 100644 --- a/socat/ingest/textingest.py +++ b/socat/ingest/textingest.py @@ -1,7 +1,6 @@ import pickle from pathlib import Path -import numpy as np import pandas as pd from astropy import units as u from astropy.coordinates import ICRS diff --git a/tests/conftest.py b/tests/conftest.py index 9456b88..bacc118 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -11,9 +11,10 @@ def run_migration(database_path: str): """ Run the migration on the database. """ - from alembic import command from alembic.config import Config + from alembic import command + alembic_cfg = Config("socat/alembic.ini") database_url = f"sqlite:///{database_path}" alembic_cfg.set_main_option("sqlalchemy.url", database_url) diff --git a/tests/test_ingest.py b/tests/test_ingest.py index 01da93d..0d194c6 100644 --- a/tests/test_ingest.py +++ b/tests/test_ingest.py @@ -5,6 +5,7 @@ import os import numpy as np +import pandas as pd from astropy import units as u from astropy.coordinates import ICRS from astropy.io import fits @@ -44,15 +45,16 @@ def text_catalog(tmp_path): n_sources = 10 data = np.zeros( n_sources, - dtype=[("ra", "f8"), ("dec", "f8"), ("name", "U20"), ("monitored", "S20")], + dtype=[("ra", "f8"), ("dec", "f8"), ("name", "U20"), ("monitored", "U20")], ) data["ra"] = np.random.uniform(0, 360, n_sources) data["dec"] = np.random.uniform(-90, 90, n_sources) data["name"] = np.array([f"Source_{i}" for i in range(n_sources)], dtype="U20") data["monitored"] = np.random.choice(["True", "False"], size=n_sources) + data = pd.DataFrame(data) text_path = tmp_path / "text_catalog.txt" - np.savetxt(text_path, data, fmt="%f %f %s %s", header="ra dec name monitored") + data.to_csv(text_path, index=False) yield text_path From ab9a5d483cd6e0f16aedbe580f85d29c453bc3c8 Mon Sep 17 00:00:00 2001 From: Jack Orlowski-Scherer Date: Tue, 21 Jul 2026 17:11:45 -0400 Subject: [PATCH 5/6] Attempt fix --- socat/alembic/versions/35a6a33e0a34_initial_database.py | 1 - .../versions/c3d4e5f6a7b8_add_monitored_pointing_flags.py | 1 - 2 files changed, 2 deletions(-) diff --git a/socat/alembic/versions/35a6a33e0a34_initial_database.py b/socat/alembic/versions/35a6a33e0a34_initial_database.py index 81895ad..c655f50 100644 --- a/socat/alembic/versions/35a6a33e0a34_initial_database.py +++ b/socat/alembic/versions/35a6a33e0a34_initial_database.py @@ -9,7 +9,6 @@ from collections.abc import Sequence import sqlalchemy as sa - from alembic import op # revision identifiers, used by Alembic. diff --git a/socat/alembic/versions/c3d4e5f6a7b8_add_monitored_pointing_flags.py b/socat/alembic/versions/c3d4e5f6a7b8_add_monitored_pointing_flags.py index d3f2de8..a36eda9 100644 --- a/socat/alembic/versions/c3d4e5f6a7b8_add_monitored_pointing_flags.py +++ b/socat/alembic/versions/c3d4e5f6a7b8_add_monitored_pointing_flags.py @@ -9,7 +9,6 @@ from collections.abc import Sequence import sqlalchemy as sa - from alembic import op # revision identifiers, used by Alembic. From c2ca74e970daef456f5fb0a76b74d5695bb0f95c Mon Sep 17 00:00:00 2001 From: Jack Orlowski-Scherer Date: Tue, 21 Jul 2026 17:14:42 -0400 Subject: [PATCH 6/6] Try that --- socat/alembic/env.py | 2 +- tests/conftest.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/socat/alembic/env.py b/socat/alembic/env.py index a12e8fc..8d7000e 100644 --- a/socat/alembic/env.py +++ b/socat/alembic/env.py @@ -1,8 +1,8 @@ from logging.config import fileConfig +from alembic import context from sqlalchemy import engine_from_config, pool -from alembic import context from socat.settings import settings # this is the Alembic Config object, which provides diff --git a/tests/conftest.py b/tests/conftest.py index bacc118..9456b88 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -11,9 +11,8 @@ def run_migration(database_path: str): """ Run the migration on the database. """ - from alembic.config import Config - from alembic import command + from alembic.config import Config alembic_cfg = Config("socat/alembic.ini") database_url = f"sqlite:///{database_path}"