Spaces:
Running
Running
# SQLAlchemy models for provenance | |
# File: orchestrator/provenance.py | |
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, create_engine | |
from sqlalchemy.orm import declarative_base, relationship, sessionmaker | |
from datetime import datetime | |
Base = declarative_base() | |
class Paper(Base): | |
__tablename__ = 'papers' | |
id = Column(String, primary_key=True) | |
title = Column(String) | |
authors = Column(String) | |
abstract = Column(String) | |
fetched_at = Column(DateTime, default=datetime.utcnow) | |
runs = relationship("Run", back_populates="paper") | |
class Run(Base): | |
__tablename__ = 'runs' | |
id = Column(Integer, primary_key=True, autoincrement=True) | |
paper_id = Column(String, ForeignKey('papers.id')) | |
cell_index = Column(Integer) | |
output = Column(String) | |
executed_at = Column(DateTime, default=datetime.utcnow) | |
paper = relationship("Paper", back_populates="runs") | |
# Utility to initialize and get a session | |
def init_db(db_url: str): | |
engine = create_engine(db_url) | |
Base.metadata.create_all(engine) | |
return sessionmaker(bind=engine) |