models.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from datetime import datetime
  2. import sqlalchemy as sa
  3. from celery import states
  4. from celery.db.session import ResultModelBase
  5. # See docstring of a805d4bd for an explanation for this workaround ;)
  6. if sa.__version__.startswith('0.5'):
  7. from celery.db.dfd042c7 import PickleType
  8. else:
  9. from celery.db.a805d4bd import PickleType
  10. class Task(ResultModelBase):
  11. """Task result/status."""
  12. __tablename__ = "celery_taskmeta"
  13. __table_args__ = {"sqlite_autoincrement": True}
  14. id = sa.Column(sa.Integer, sa.Sequence("task_id_sequence"),
  15. primary_key=True,
  16. autoincrement=True)
  17. task_id = sa.Column(sa.String(255), unique=True)
  18. status = sa.Column(sa.String(50), default=states.PENDING)
  19. result = sa.Column(PickleType, nullable=True)
  20. date_done = sa.Column(sa.DateTime, default=datetime.now,
  21. onupdate=datetime.now, nullable=True)
  22. traceback = sa.Column(sa.Text, nullable=True)
  23. def __init__(self, task_id):
  24. self.task_id = task_id
  25. def to_dict(self):
  26. return {"task_id": self.task_id,
  27. "status": self.status,
  28. "result": self.result,
  29. "traceback": self.traceback,
  30. "date_done": self.date_done}
  31. def __repr__(self):
  32. return "<Task %s state: %s>" % (self.task_id, self.status)
  33. class TaskSet(ResultModelBase):
  34. """TaskSet result"""
  35. __tablename__ = "celery_tasksetmeta"
  36. __table_args__ = {"sqlite_autoincrement": True}
  37. id = sa.Column(sa.Integer, sa.Sequence("taskset_id_sequence"),
  38. autoincrement=True, primary_key=True)
  39. taskset_id = sa.Column(sa.String(255), unique=True)
  40. result = sa.Column(sa.PickleType, nullable=True)
  41. date_done = sa.Column(sa.DateTime, default=datetime.now,
  42. nullable=True)
  43. def __init__(self, taskset_id, result):
  44. self.taskset_id = taskset_id
  45. self.result = result
  46. def to_dict(self):
  47. return {"taskset_id": self.taskset_id,
  48. "result": self.result,
  49. "date_done": self.date_done}
  50. def __repr__(self):
  51. return u"<TaskSet: %s>" % (self.taskset_id, )