Skip to content

Instantly share code, notes, and snippets.

@ecthiender
Created August 20, 2015 04:31
Show Gist options
  • Save ecthiender/0afe024aa7d18ad851a0 to your computer and use it in GitHub Desktop.
Save ecthiender/0afe024aa7d18ad851a0 to your computer and use it in GitHub Desktop.
[SQLAlchemy Models] Entities in the Virtual Labs dataservice
class IntegrationLevel(db.Model):
__tablename__ = 'integration_levels'
id = db.Column(db.Integer, primary_key=True)
level = db.Column(db.Integer, nullable=False)
labs = db.relationship('Lab', backref='integration_level')
class TypeOfLab(db.Model):
__tablename__ = 'type_of_labs'
id = db.Column(db.Integer, primary_key=True)
type = db.Column(db.String(64), nullable=False)
labs = db.relationship('Lab', backref='type_of_lab')
class HostingPlatform(db.Model):
__tablename__ = 'hosting_platforms'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(32), nullable=False)
labs = db.relationship('Lab', backref='hosted_on')
simulations = db.relationship('Experiment', backref='simulation_on')
content = db.relationship('Experiment', backref='content_on')
class Institute(db.Model):
__tablename__ = 'institutes'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128), nullable=False)
pic = db.Column(db.String(128))
iic = db.Column(db.String(128))
labs = db.relationship('Lab', backref='institute')
developers = db.relationship('Developer', backref='institute')
class Discipline(db.Model):
__tablename__ = 'disciplines'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128), nullable=False)
dnc = db.Column(db.String(64))
labs = db.relationship('Lab', backref='discipline')
# association table of developers and labs
developers_engaged = db.Table(
'developers_engaged',
db.Column('lab_id', db.Integer, db.ForeignKey('labs.id')),
db.Column('developer_id', db.Integer, db.ForeignKey('developers.id'))
)
# association table of technologies and labs
technologies_used_labs = db.Table(
'technologies_used_labs',
db.Column('lab_id', db.Integer, db.ForeignKey('labs.id')),
db.Column('tech_id', db.Integer, db.ForeignKey('technologies.id'))
)
# association table of technologies and experiments
technologies_used_expt = db.Table(
'technologies_used_expt',
db.Column('expt_id', db.Integer, db.ForeignKey('experiments.id')),
db.Column('tech_id', db.Integer, db.ForeignKey('technologies.id'))
)
class Lab(Entity):
__tablename__ = 'labs'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128), nullable=False)
mnemonic = db.Column(db.String(32), nullable=False)
slug = db.Column(db.String(128))
institute_id = db.Column(db.Integer, db.ForeignKey('institutes.id'))
discipline_id = db.Column(db.Integer, db.ForeignKey('disciplines.id'))
integration_level_id = db.Column(db.ForeignKey('integration_levels.id'))
developers = db.relationship('Developer', secondary=developers_engaged,
backref='labs')
number_of_experiments = db.Column(db.Integer)
experiments = db.relationship('Experiment', backref='lab')
technologies = db.relationship('Technology',
secondary=technologies_used_labs,
backref='labs')
repo_url = db.Column(db.String(256))
hosted_url = db.Column(db.String(256))
hosted_on_id = db.Column(db.ForeignKey('hosting_platforms.id'))
type_of_lab_id = db.Column(db.ForeignKey('type_of_labs.id'))
remarks = db.Column(db.Text)
status = db.Column(db.String(32))
is_web_2_compliant = db.Column(db.Boolean)
is_phase_2_lab = db.Column(db.Boolean)
class Developer(Entity):
__tablename__ = 'developers'
id = db.Column(db.Integer, primary_key=True)
email_id = db.Column(db.String(128))
name = db.Column(db.String(64), nullable=False)
institute_id = db.Column(db.Integer, db.ForeignKey('institutes.id'))
class Technology(Entity):
__tablename__ = 'technologies'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), nullable=False)
version = db.Column(db.String(32))
foss = db.Column(db.Boolean)
class Experiment(Entity):
__tablename__ = 'experiments'
id = db.Column(db.Integer, primary_key=True)
# Our data set has really, really long experiment names and URLs!!
name = db.Column(db.String(256))
lab_id = db.Column(db.Integer, db.ForeignKey('labs.id'))
content_url = db.Column(db.String(256))
content_on_id = db.Column(db.ForeignKey('hosting_platforms.id'))
simulation_url = db.Column(db.String(256))
simulation_on_id = db.Column(db.ForeignKey('hosting_platforms.id'))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment