forked from getredash/redash
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathadmin.py
More file actions
78 lines (57 loc) · 2.36 KB
/
admin.py
File metadata and controls
78 lines (57 loc) · 2.36 KB
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
from flask_admin import Admin
from flask_admin.base import MenuLink
from flask_admin.contrib.sqla import ModelView
from flask_admin.contrib.sqla.form import AdminModelConverter
from wtforms import fields
from wtforms.widgets import TextInput
from redash import models
from redash.permissions import require_super_admin
from redash.utils import json_loads
class ArrayListField(fields.Field):
widget = TextInput()
def _value(self):
if self.data:
return u', '.join(self.data)
else:
return u''
def process_formdata(self, valuelist):
if valuelist:
self.data = [x.strip() for x in valuelist[0].split(',')]
else:
self.data = []
class JSONTextAreaField(fields.TextAreaField):
def process_formdata(self, valuelist):
if valuelist:
try:
json_loads(valuelist[0])
except ValueError:
raise ValueError(self.gettext(u'Invalid JSON'))
self.data = valuelist[0]
else:
self.data = ''
class BaseModelView(ModelView):
column_display_pk = True
model_form_converter = AdminModelConverter
form_excluded_columns = ('created_at', 'updated_at')
@require_super_admin
def is_accessible(self):
return True
class QueryResultModelView(BaseModelView):
column_exclude_list = ('data',)
class QueryModelView(BaseModelView):
column_exclude_list = ('latest_query_data',)
form_excluded_columns = ('version', 'visualizations', 'alerts', 'org', 'created_at',
'updated_at', 'latest_query_data', 'search_vector')
class DashboardModelView(BaseModelView):
column_searchable_list = ('name', 'slug')
column_exclude_list = ('version', )
form_excluded_columns = ('version', 'widgets', 'org', 'created_at', 'updated_at')
def init_admin(app):
admin = Admin(app, name='Redash Admin', template_mode='bootstrap3')
admin.add_view(QueryModelView(models.Query, models.db.session))
admin.add_view(QueryResultModelView(models.QueryResult, models.db.session))
admin.add_view(DashboardModelView(models.Dashboard, models.db.session))
logout_link = MenuLink('Logout', '/logout', 'logout')
for m in (models.Visualization, models.Widget, models.Event, models.Organization):
admin.add_view(BaseModelView(m, models.db.session))
admin.add_link(logout_link)