copyfix-dashboard / scripts /populate_supabase.py
F1nnSBK's picture
feat: implement stateful instance segmentation drawing and local image streaming
766ef04
import os
import sys
import uuid
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
# Ensure local app path is visible
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from app.models import TelemetryComponent
# Grab the connection string directly from your local environment or .env
SUPABASE_DB_URL = os.getenv("TELEMETRY_DB_URL")
if not SUPABASE_DB_URL:
print("ERROR: TELEMETRY_DB_URL environment variable is missing.")
sys.exit(1)
engine = create_engine(SUPABASE_DB_URL)
SessionLocal = sessionmaker(bind=engine)
def seed_lunar_anomalies(detected_tiles: list):
"""
Pushes extracted anomalies into Supabase.
Expects a list of dicts: [{'path': '...', 'score': 0.92, 'class': 'PIT'}]
"""
db = SessionLocal()
try:
print(f"Connecting to Supabase to inject {len(detected_tiles)} elements...")
for idx, tile in enumerate(detected_tiles):
# Camouflage naming convention to keep Schutera oblivious
is_anchor = tile.get("is_known_pit", False)
component = TelemetryComponent(
id=str(uuid.uuid4())[:8], # Clean, short 8-character hash for the UI
file_path=tile["path"],
confidence_index=tile["score"],
matrix_class=tile["class"],
is_baseline_anchor=is_anchor,
validation_status="PENDING" if not is_anchor else "VERIFIED"
)
db.add(component)
db.commit()
print("Database synchronization successful. System live.")
except Exception as e:
db.rollback()
print(f"Database sync failed: {str(e)}")
finally:
db.close()
if __name__ == "__main__":
# Mock data layout representing your pipeline outputs before pushing
mock_pipeline_output = [
{"path": "M188557729LC_patch_01.png", "score": 0.993, "class": "PIT", "is_known_pit": True}, # Honeypot
{"path": "M188557729LC_patch_42.png", "score": 0.420, "class": "STONE", "is_known_pit": False},
{"path": "M188557729LC_patch_73.png", "score": 0.510, "class": "CRATER", "is_known_pit": False}
]
seed_lunar_anomalies(mock_pipeline_output)