class Stack(db.Model): __tablename__ = 'Stack' id = db.Column(db.Integer, primary_key=True) created_at = db.Column(db.DateTime(timezone=True)) modified_at = db.Column(db.DateTime(timezone=True)) path = db.Column(db.Text, nullable=True) def __repr__(self): return self.id
class MasterCal(db.Model): __tablename__ = 'MasterCal' id = db.Column(db.Integer, primary_key=True) created_at = db.Column(db.DateTime(timezone=True)) modified_at = db.Column(db.DateTime(timezone=True)) path = db.Column(db.Text, nullable=True) imagetype = db.Column(db.String(40), nullable=False) def __repr__(self): return self.id
class CalFile(db.Model): __tablename__ = 'CalFile' id = db.Column(db.Integer, primary_key=True) path = db.Column(db.Text, nullable=True) observation_date = db.Column(db.DateTime(timezone=True)) exptime = db.Column(db.Integer, nullable=False) created_at = db.Column(db.DateTime(timezone=True)) imagetype = db.Column(db.String(16), nullable=False) def __repr__(self): return self.id
class StateChange(db.Model): __tablename__ = 'StateChange' id = db.Column(db.Integer, primary_key=True) created_at = db.Column(db.DateTime(timezone=True)) modified_at = db.Column(db.DateTime(timezone=True)) count = db.Column(db.Integer) path = db.Column(db.Text, nullable=True) state_id = db.Column(db.Integer, db.ForeignKey('State.id')) state = db.relationship("State", backref=db.backref('statechanges', order_by=id)) pawprint_id = db.Column(db.Integer, db.ForeignKey('Pawprint.id')) pawprint = db.relationship("Pawprint", backref=db.backref('statechanges', order_by=id)) def __repr__(self): return "{} ({})".format(repr(self.pawprint), repr(self.state))
class Pawprint(db.Model): __tablename__ = 'Pawprint' id = db.Column(db.Integer, primary_key=True) jd = db.Column(db.Float, nullable=False) created_at = db.Column(db.DateTime(timezone=True)) observation_date = db.Column(db.DateTime(timezone=True)) modified_at = db.Column(db.DateTime(timezone=True)) simple = db.Column(db.String(8), nullable=True) bitpix = db.Column(db.Integer, nullable=True) naxis = db.Column(db.Integer, nullable=True) naxis1 = db.Column(db.Integer, nullable=True) naxis2 = db.Column(db.Integer, nullable=True) bscale = db.Column(db.Float, nullable=True) bzero = db.Column(db.Float, nullable=True) exposure = db.Column(db.Float, nullable=True) set_temp = db.Column(db.Float, nullable=True) xpixsz = db.Column(db.Float, nullable=True) ypixsz = db.Column(db.Float, nullable=True) exptime = db.Column(db.Integer, nullable=False) ccdtemp = db.Column(db.Float, nullable=True) imagetype = db.Column(db.String(32), nullable=False) targname = db.Column(db.String(40), nullable=True) xbinning = db.Column(db.Integer, nullable=False) ybinning = db.Column(db.Integer, nullable=False) readoutm = db.Column(db.String(24), nullable=True) object_ = db.Column(db.String(24), nullable=True) observer = db.Column(db.String(48), nullable=True) state_id = db.Column(db.Integer, db.ForeignKey('State.id')) state = db.relationship("State", backref=db.backref('pawprints', order_by=id)) campaign_id = db.Column(db.Integer, db.ForeignKey('Campaign.id')) campaign = db.relationship("Campaign", backref=db.backref('pawprints', order_by=id)) def __repr__(self): return self.id
class Alerted(db.Model): __tablename__ = '__corral_alerted__' id = db.Column(db.Integer, primary_key=True) alert_path = db.Column(db.String(1000)) model_table = db.Column(db.String(1000)) model_ids = db.Column(db.PickleType) created_at = db.Column(db.DateTime(timezone=True)) @classmethod def model_class_to_column(cls, mcls): table = mcls.__table__ return {"model_table": table.name} @classmethod def model_to_columns(cls, m): table = m.__table__ instance_as_dict = m._sa_instance_state.dict ids = { c: instance_as_dict[c] for c in table.primary_key.columns.keys() } columns = cls.model_class_to_column(type(m)) columns.update({"model_ids": ids}) return columns @classmethod def alert_to_columns(cls, alert_cls): return { "alert_path": ".".join([alert_cls.__module__, alert_cls.__name__]) } @classmethod def all_models(cls): if not hasattr(Alerted, "_all_models"): Alerted._all_models = { cls.__tablename__: cls for cls in util.collect_subclasses(db.Model) } return Alerted._all_models @property def model(self): if not hasattr(self, "_m"): session = object_session(self) Model = self.all_models()[self.model_table] filters = self.model_ids self._m = session.query(Model).filter_by(**filters).first() return self._m @model.setter def model(self, m): columns = self.model_to_columns(m) self.model_table = columns["model_table"] self.model_ids = columns["model_ids"] @property def alert(self): return util.dimport(self.alert_path) @alert.setter def alert(self, a): columns = self.alert_to_columns(a) self.alert_path = columns["alert_path"]