models.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. # -*- coding: utf-8 -*-
  2. """Database models used by the SQLAlchemy result store backend."""
  3. from datetime import datetime
  4. import sqlalchemy as sa
  5. from sqlalchemy.types import PickleType
  6. from celery import states
  7. from .session import ResultModelBase
  8. __all__ = ['Task', 'TaskSet']
  9. class Task(ResultModelBase):
  10. """Task result/status."""
  11. __tablename__ = 'celery_taskmeta'
  12. __table_args__ = {'sqlite_autoincrement': True}
  13. id = sa.Column(sa.Integer, sa.Sequence('task_id_sequence'),
  14. primary_key=True, autoincrement=True)
  15. task_id = sa.Column(sa.String(155), unique=True)
  16. status = sa.Column(sa.String(50), default=states.PENDING)
  17. result = sa.Column(PickleType, nullable=True)
  18. date_done = sa.Column(sa.DateTime, default=datetime.utcnow,
  19. onupdate=datetime.utcnow, nullable=True)
  20. traceback = sa.Column(sa.Text, nullable=True)
  21. def __init__(self, task_id):
  22. self.task_id = task_id
  23. def to_dict(self):
  24. return {
  25. 'task_id': self.task_id,
  26. 'status': self.status,
  27. 'result': self.result,
  28. 'traceback': self.traceback,
  29. 'date_done': self.date_done,
  30. }
  31. def __repr__(self):
  32. return '<Task {0.task_id} state: {0.status}>'.format(self)
  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(155), unique=True)
  40. result = sa.Column(PickleType, nullable=True)
  41. date_done = sa.Column(sa.DateTime, default=datetime.utcnow,
  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 {
  48. 'taskset_id': self.taskset_id,
  49. 'result': self.result,
  50. 'date_done': self.date_done,
  51. }
  52. def __repr__(self):
  53. return '<TaskSet: {0.taskset_id}>'.format(self)