File: tables.py

package info (click to toggle)
mistral-dashboard 20.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 848 kB
  • sloc: python: 3,383; sh: 376; makefile: 27
file content (128 lines) | stat: -rw-r--r-- 3,606 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# Copyright 2014 - StackStorm, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from django.template.defaultfilters import title
from django.urls import reverse
from django.utils.translation import gettext_lazy as _

from horizon import exceptions
from horizon import tables

from mistraldashboard import api
from mistraldashboard.default import smart_cell
from mistraldashboard.default.utils import humantime
from mistraldashboard.default.utils import label

smart_cell.init()


class UpdateRow(tables.Row):
    ajax = True

    def get_data(self, request, id):
        try:
            instance = api.task_get(request, id)
        except Exception:
            msg = _('Unable to get task by ID "%s".') % id
            exceptions.handle(request, msg)
        return instance


class TypeColumn(tables.Column):
    def get_link_url(self, datum):
        obj_id = datum.id
        url = ""
        action_execution_url = "horizon:mistral:action_executions:task"
        workflow_execution_url = "horizon:mistral:executions:tasks"
        if datum.type == "ACTION":
            url = action_execution_url
        elif datum.type == "WORKFLOW":
            url = workflow_execution_url

        return reverse(url, args=[obj_id])


class TaskTable(tables.DataTable):

    def getHoverHelp(data):
        if hasattr(data, 'state_info') and data.state_info:
            return {'title': data.state_info}

    STATE_STATUS_CHOICES = (
        ("success", True),
        ("error", False),
        ("idle", None),
        ("running", None),
    )

    id = tables.Column(
        "id",
        verbose_name=_("ID"),
        link="horizon:mistral:tasks:detail"
    )
    name = tables.Column(
        "name",
        verbose_name=_("Name")
    )
    workflow_execution_id = tables.Column(
        "workflow_execution_id",
        verbose_name=_("Workflow Execution ID"),
        link="horizon:mistral:executions:detail_task_id"
    )
    type = TypeColumn(
        "type",
        verbose_name=_("Type"),
        filters=[title],
        link=True
    )
    result = tables.Column(
        "",
        verbose_name=_("Result"),
        empty_value=_("View"),
        link="horizon:mistral:tasks:result",
        link_classes=("ajax-modal",)
    )
    published = tables.Column(
        "",
        verbose_name=_("Published"),
        empty_value=_("View"),
        link="horizon:mistral:tasks:published",
        link_classes=("ajax-modal",)
    )
    created_at = tables.Column(
        "created_at",
        verbose_name=_("Created at"),
        filters=[humantime]
    )
    updated_at = tables.Column(
        "updated_at",
        verbose_name=_("Updated at"),
        filters=[humantime]
    )

    state = tables.Column(
        "state",
        status=True,
        status_choices=STATE_STATUS_CHOICES,
        verbose_name=_("State"),
        filters=[label],
        cell_attributes_getter=getHoverHelp
    )

    class Meta(object):
        name = "tasks"
        verbose_name = _("Tasks")
        table_actions = (tables.FilterAction,)
        status_columns = ["state"]
        row_class = UpdateRow