annotations.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. # pylint: disable=C,R,W
  2. """a collection of Annotation-related models"""
  3. from flask_appbuilder import Model
  4. from sqlalchemy import (
  5. Column, DateTime, ForeignKey, Index, Integer, String, Text,
  6. )
  7. from sqlalchemy.orm import relationship
  8. from superset.models.helpers import AuditMixinNullable
  9. class AnnotationLayer(Model, AuditMixinNullable):
  10. """A logical namespace for a set of annotations"""
  11. __tablename__ = 'annotation_layer'
  12. id = Column(Integer, primary_key=True)
  13. name = Column(String(250))
  14. descr = Column(Text)
  15. def __repr__(self):
  16. return self.name
  17. class Annotation(Model, AuditMixinNullable):
  18. """Time-related annotation"""
  19. __tablename__ = 'annotation'
  20. id = Column(Integer, primary_key=True)
  21. start_dttm = Column(DateTime)
  22. end_dttm = Column(DateTime)
  23. layer_id = Column(Integer, ForeignKey('annotation_layer.id'))
  24. short_descr = Column(String(500))
  25. long_descr = Column(Text)
  26. layer = relationship(
  27. AnnotationLayer,
  28. backref='annotation')
  29. json_metadata = Column(Text)
  30. __table_args__ = (
  31. Index('ti_dag_state', layer_id, start_dttm, end_dttm),
  32. )
  33. @property
  34. def data(self):
  35. return {
  36. 'layer_id': self.layer_id,
  37. 'start_dttm': self.start_dttm,
  38. 'end_dttm': self.end_dttm,
  39. 'short_descr': self.short_descr,
  40. 'long_descr': self.long_descr,
  41. 'layer': self.layer.name if self.layer else None,
  42. }