from datetime import datetime
from sqlalchemy import Column, ForeignKey, Integer, String, DateTime, Float, Text
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
[docs]class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(200), unique=True, nullable=False)
created_at = Column(DateTime, default=datetime.now)
[docs]class Problem(Base):
__tablename__ = "problems"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(100), nullable=False)
problem_type = Column(String(100), nullable=False)
problem_type_details = Column(String(1000), nullable=True)
data_dir_train = Column(String(200), nullable=False)
data_dir_test = Column(String(200), nullable=False)
files = Column(String(1000), nullable=False)
table_names = Column(String(1000), nullable=False)
entities_table_name = Column(String(100), nullable=False)
entities_featurized_table_name = Column(String(100), nullable=True)
target_table_name = Column(String(100), nullable=False)
created_at = Column(DateTime, default=datetime.now)
[docs]class Feature(Base):
__tablename__ = "features"
id = Column(Integer, primary_key=True, autoincrement=True)
user_id = Column(Integer, ForeignKey("users.id"))
user = relationship("User")
problem_id = Column(Integer, ForeignKey("problems.id"))
problem = relationship("Problem")
code = Column(Text, nullable=False)
feature_dill_quoted = Column(Text, nullable=True)
md5 = Column(String(32), nullable=False)
description = Column(String(1000), nullable=False)
created_at = Column(DateTime, default=datetime.now)
[docs]class Metric(Base):
__tablename__ = "metrics"
id = Column(Integer, primary_key=True, autoincrement=True)
feature_id = Column(Integer, ForeignKey("features.id"))
feature = relationship("Feature", back_populates="metrics")
name = Column(String(100), nullable=False)
scoring = Column(String(100), nullable=False)
value = Column(Float, nullable=True)
created_at = Column(DateTime, default=datetime.now)
[docs]class EvaluationAttempt(Base):
__tablename__ = "evaluationattempts"
id = Column(Integer, primary_key=True, autoincrement=True)
user_id = Column(Integer, ForeignKey("users.id"))
user = relationship("User")
problem_id = Column(Integer, ForeignKey("problems.id"))
problem = relationship("Problem")
code = Column(Text, nullable=False)
created_at = Column(DateTime, default=datetime.now)
# backwards relationships
Feature.metrics = relationship(
"Metric", order_by=Metric.name, back_populates="feature")
User.features = relationship("Feature", back_populates="user")
Problem.features = relationship("Feature", back_populates="problem")
User.evaluationattempts = relationship("EvaluationAttempt",
back_populates="user")
Problem.evaluationattempts = relationship("EvaluationAttempt",
back_populates="problem")