models.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. # -*- coding: utf-8 -*-
  2. """Database models used by the SQLAlchemy result store backend."""
  3. from __future__ import absolute_import, unicode_literals
  4. import sqlalchemy as sa
  5. from datetime import datetime
  6. from sqlalchemy.types import PickleType
  7. from celery import states
  8. from celery.five import python_2_unicode_compatible
  9. from .session import ResultModelBase
  10. __all__ = ('Task', 'TaskSet')
  11. @python_2_unicode_compatible
  12. class Task(ResultModelBase):
  13. """Task result/status."""
  14. __tablename__ = 'celery_taskmeta'
  15. __table_args__ = {'sqlite_autoincrement': True}
  16. id = sa.Column(sa.Integer, sa.Sequence('task_id_sequence'),
  17. primary_key=True, autoincrement=True)
  18. task_id = sa.Column(sa.String(155), unique=True)
  19. status = sa.Column(sa.String(50), default=states.PENDING)
  20. result = sa.Column(PickleType, nullable=True)
  21. date_done = sa.Column(sa.DateTime, default=datetime.utcnow,
  22. onupdate=datetime.utcnow, nullable=True)
  23. traceback = sa.Column(sa.Text, nullable=True)
  24. def __init__(self, task_id):
  25. self.task_id = task_id
  26. def to_dict(self):
  27. return {
  28. 'task_id': self.task_id,
  29. 'status': self.status,
  30. 'result': self.result,
  31. 'traceback': self.traceback,
  32. 'date_done': self.date_done,
  33. }
  34. def __repr__(self):
  35. return '<Task {0.task_id} state: {0.status}>'.format(self)
  36. @python_2_unicode_compatible
  37. class TaskSet(ResultModelBase):
  38. """TaskSet result."""
  39. __tablename__ = 'celery_tasksetmeta'
  40. __table_args__ = {'sqlite_autoincrement': True}
  41. id = sa.Column(sa.Integer, sa.Sequence('taskset_id_sequence'),
  42. autoincrement=True, primary_key=True)
  43. taskset_id = sa.Column(sa.String(155), unique=True)
  44. result = sa.Column(PickleType, nullable=True)
  45. date_done = sa.Column(sa.DateTime, default=datetime.utcnow,
  46. nullable=True)
  47. def __init__(self, taskset_id, result):
  48. self.taskset_id = taskset_id
  49. self.result = result
  50. def to_dict(self):
  51. return {
  52. 'taskset_id': self.taskset_id,
  53. 'result': self.result,
  54. 'date_done': self.date_done,
  55. }
  56. def __repr__(self):
  57. return '<TaskSet: {0.taskset_id}>'.format(self)