in lnt/server/db/migrations/upgrade_0_to_1.py [0:0]
def get_base_for_testsuite(test_suite):
Base = sqlalchemy.ext.declarative.declarative_base()
db_key_name = test_suite.db_key_name
class Machine(Base):
__tablename__ = db_key_name + '_Machine'
id = Column("ID", Integer, primary_key=True)
name = Column("Name", String(256), index=True)
parameters_data = Column("Parameters", Binary)
class_dict = locals()
for item in test_suite.machine_fields:
if item.name in class_dict:
raise ValueError,"test suite defines reserved key %r" % (
name,)
class_dict[item.name] = item.column = Column(
item.name, String(256))
class Order(Base):
__tablename__ = db_key_name + '_Order'
id = Column("ID", Integer, primary_key=True)
next_order_id = Column("NextOrder", Integer, ForeignKey(
"%s.ID" % __tablename__))
previous_order_id = Column("PreviousOrder", Integer, ForeignKey(
"%s.ID" % __tablename__))
class_dict = locals()
for item in test_suite.order_fields:
if item.name in class_dict:
raise ValueError,"test suite defines reserved key %r" % (
name,)
class_dict[item.name] = item.column = Column(
item.name, String(256))
class Run(Base):
__tablename__ = db_key_name + '_Run'
id = Column("ID", Integer, primary_key=True)
machine_id = Column("MachineID", Integer, ForeignKey(Machine.id),
index=True)
order_id = Column("OrderID", Integer, ForeignKey(Order.id),
index=True)
imported_from = Column("ImportedFrom", String(512))
start_time = Column("StartTime", DateTime)
end_time = Column("EndTime", DateTime)
simple_run_id = Column("SimpleRunID", Integer)
parameters_data = Column("Parameters", Binary)
machine = sqlalchemy.orm.relation(Machine)
order = sqlalchemy.orm.relation(Order)
class_dict = locals()
for item in test_suite.run_fields:
if item.name in class_dict:
raise ValueError,"test suite defines reserved key %r" % (
name,)
class_dict[item.name] = item.column = Column(
item.name, String(256))
class Test(Base):
__tablename__ = db_key_name + '_Test'
id = Column("ID", Integer, primary_key=True)
name = Column("Name", String(256), unique=True, index=True)
class Sample(Base):
__tablename__ = db_key_name + '_Sample'
id = Column("ID", Integer, primary_key=True)
run_id = Column("RunID", Integer, ForeignKey(Run.id))
test_id = Column("TestID", Integer, ForeignKey(Test.id), index=True)
run = sqlalchemy.orm.relation(Run)
test = sqlalchemy.orm.relation(Test)
class_dict = locals()
for item in test_suite.sample_fields:
if item.name in class_dict:
raise ValueError("test suite defines reserved key {}"
.format(name))
if item.type.name == 'Real':
item.column = Column(item.name, Float)
elif item.type.name == 'Status':
item.column = Column(item.name, Integer, ForeignKey(
StatusKind.id))
elif item.type.name == 'Hash':
continue
else:
raise ValueError("test suite defines unknown sample type {}"
.format(item.type.name))
class_dict[item.name] = item.column
sqlalchemy.schema.Index("ix_%s_Sample_RunID_TestID" % db_key_name,
Sample.run_id, Sample.test_id)
args = [Machine.name, Machine.parameters_data]
for item in test_suite.machine_fields:
args.append(item.column)
sqlalchemy.schema.Index("ix_%s_Machine_Unique" % db_key_name,
*args, unique = True)
return Base