Example #1
0
class Task(BaseModel):
    __tablename__ = "tasks"

    key = db.Column(db.String(), nullable=False)
    status = db.Column(db.Enum(StatusType),
                       default=StatusType.pending,
                       nullable=False)
    previous = db.Column(JSONBType, default=[])
    result = db.Column(PickleType)

    # Relationship
    workflow_id = db.Column(UUIDType(binary=False),
                            db.ForeignKey("workflows.id"),
                            nullable=False)
    workflow = db.relationship("Workflow",
                               backref=db.backref("tasks", lazy=True))

    def __repr__(self):
        return f"<Task {self.key}>"

    def to_dict(self):
        d = super().to_dict()
        d.update({
            "key": self.key,
            "status": self.status.value,
            "task": self.id,
            "previous": self.previous,
            "result": self.result,
        })
        return d
Example #2
0
class Workflow(BaseModel):
    __tablename__ = "workflows"

    name = db.Column(db.String(255), nullable=False)
    project = db.Column(db.String(255), nullable=False)
    status = db.Column(db.Enum(StatusType),
                       default=StatusType.pending,
                       nullable=False)
    payload = db.Column(JSONBType, default={})
    periodic = db.Column(db.Boolean, default=False)

    def __str__(self):
        return f"{self.project}.{self.name}"

    def __repr__(self):
        return f"<Workflow {self.project}.{self.name}>"

    def to_dict(self):
        d = super().to_dict()
        d.update({
            "name": self.name,
            "payload": self.payload,
            "project": self.project,
            "fullname": f"{self.project}.{self.name}",
            "status": self.status.value,
            "periodic": self.periodic,
        })
        return d