annotations.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. # pylint: disable=C,R,W
  2. from flask_appbuilder.models.sqla.interface import SQLAInterface
  3. from flask_babel import gettext as __
  4. from flask_babel import lazy_gettext as _
  5. from superset import appbuilder
  6. from superset.models.annotations import Annotation, AnnotationLayer
  7. from .base import DeleteMixin, SupersetModelView
  8. class AnnotationModelView(SupersetModelView, DeleteMixin): # noqa
  9. datamodel = SQLAInterface(Annotation)
  10. list_title = _('List Annotation')
  11. show_title = _('Show Annotation')
  12. add_title = _('Add Annotation')
  13. edit_title = _('Edit Annotation')
  14. list_columns = ['layer', 'short_descr', 'start_dttm', 'end_dttm']
  15. edit_columns = [
  16. 'layer', 'short_descr', 'long_descr', 'start_dttm', 'end_dttm',
  17. 'json_metadata']
  18. add_columns = edit_columns
  19. label_columns = {
  20. 'layer': _('Layer'),
  21. 'short_descr': _('Short Descr'),
  22. 'start_dttm': _('Start Dttm'),
  23. 'end_dttm': _('End Dttm'),
  24. 'long_descr': _('Long Descr'),
  25. 'json_metadata': _('JSON Metadata'),
  26. }
  27. description_columns = {
  28. 'json_metadata': 'This JSON represents any additional metadata this \
  29. annotation needs to add more context.',
  30. }
  31. def pre_add(self, obj):
  32. if not obj.layer:
  33. raise Exception('Annotation layer is required.')
  34. if not obj.start_dttm and not obj.end_dttm:
  35. raise Exception('Annotation start time or end time is required.')
  36. elif not obj.start_dttm:
  37. obj.start_dttm = obj.end_dttm
  38. elif not obj.end_dttm:
  39. obj.end_dttm = obj.start_dttm
  40. elif obj.end_dttm < obj.start_dttm:
  41. raise Exception('Annotation end time must be no earlier than start time.')
  42. def pre_update(self, obj):
  43. self.pre_add(obj)
  44. class AnnotationLayerModelView(SupersetModelView, DeleteMixin):
  45. datamodel = SQLAInterface(AnnotationLayer)
  46. list_title = _('List Annotation Layer')
  47. show_title = _('Show Annotation Layer')
  48. add_title = _('Add Annotation Layer')
  49. edit_title = _('Edit Annotation Layer')
  50. list_columns = ['id', 'name']
  51. edit_columns = ['name', 'descr']
  52. add_columns = edit_columns
  53. label_columns = {
  54. 'name': _('Name'),
  55. 'descr': _('Description'),
  56. }
  57. appbuilder.add_view(
  58. AnnotationLayerModelView,
  59. 'Annotation Layers',
  60. label=__('Annotation Layers'),
  61. icon='fa-comment',
  62. category='Manage',
  63. category_label=__('Manage'),
  64. category_icon='')
  65. appbuilder.add_view(
  66. AnnotationModelView,
  67. 'Annotations',
  68. label=__('Annotations'),
  69. icon='fa-comments',
  70. category='Manage',
  71. category_label=__('Manage'),
  72. category_icon='')