예제 #1
0
파일: models.py 프로젝트: mardom/corral
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
예제 #2
0
파일: models.py 프로젝트: mardom/corral
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
예제 #3
0
파일: models.py 프로젝트: mardom/corral
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
예제 #4
0
파일: models.py 프로젝트: mardom/corral
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))
예제 #5
0
파일: models.py 프로젝트: mardom/corral
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
예제 #6
0
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"]