Skip to content

Commit

Permalink
Merge pull request getredash#1353 from washort/draft-toggle
Browse files Browse the repository at this point in the history
Change: make draft status for queries and dashboards toggleable
  • Loading branch information
arikfr authored Nov 22, 2016
2 parents 3532890 + a28b7c4 commit c82fe9b
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 33 deletions.
16 changes: 8 additions & 8 deletions handlers/dashboards.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,12 @@ def get(self):
@require_permission('create_dashboard')
def post(self):
dashboard_properties = request.get_json(force=True)
dashboard = models.Dashboard.create(name=dashboard_properties['name'],
org=self.current_org,
user=self.current_user,
layout='[]')

result = dashboard.to_dict()
return result
dashboard = models.Dashboard(name=dashboard_properties['name'],
org=self.current_org,
user=self.current_user,
is_draft=True,
layout='[]')
return dashboard.to_dict()


class DashboardResource(BaseResource):
Expand All @@ -63,7 +62,8 @@ def post(self, dashboard_slug):

require_object_modify_permission(dashboard, self.current_user)

updates = project(dashboard_properties, ('name', 'layout', 'version'))
updates = project(dashboard_properties, ('name', 'layout', 'version',
'is_draft'))
updates['changed_by'] = self.current_user

try:
Expand Down
1 change: 1 addition & 0 deletions handlers/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ def post(self):
query_def['user'] = self.current_user
query_def['data_source'] = data_source
query_def['org'] = self.current_org
query_def['is_draft'] = True
query = models.Query.create(**query_def)

self.record_event({
Expand Down
63 changes: 38 additions & 25 deletions models.py
Original file line number Diff line number Diff line change
Expand Up @@ -702,6 +702,7 @@ class Query(ChangeTrackingMixin, ModelTimestampsMixin, BaseVersionedModel, Belon
user = peewee.ForeignKeyField(User)
last_modified_by = peewee.ForeignKeyField(User, null=True, related_name="modified_queries")
is_archived = peewee.BooleanField(default=False, index=True)
is_draft = peewee.BooleanField(default=True, index=True)
schedule = peewee.CharField(max_length=10, null=True)
options = JSONField(default={})

Expand All @@ -719,6 +720,7 @@ def to_dict(self, with_stats=False, with_visualizations=False, with_user=True, w
'schedule': self.schedule,
'api_key': self.api_key,
'is_archived': self.is_archived,
'is_draft': self.is_draft,
'updated_at': self.updated_at,
'created_at': self.created_at,
'data_source_id': self.data_source_id,
Expand Down Expand Up @@ -771,10 +773,9 @@ def all_queries(cls, groups, drafts=False):
.order_by(cls.created_at.desc())

if drafts:
q = q.where(Query.name == 'New Query')
q = q.where(Query.is_draft == True)
else:
q = q.where(Query.name != 'New Query')

q = q.where(Query.is_draft == False)
return q

@classmethod
Expand Down Expand Up @@ -818,17 +819,22 @@ def search(cls, term, groups):

@classmethod
def recent(cls, groups, user_id=None, limit=20):
query = cls.select(Query, User).where(Event.created_at > peewee.SQL("current_date - 7")).\
join(Event, on=(Query.id == Event.object_id.cast('integer'))). \
join(DataSourceGroup, on=(Query.data_source==DataSourceGroup.data_source)). \
switch(Query).join(User).\
where(Event.action << ('edit', 'execute', 'edit_name', 'edit_description', 'view_source')).\
where(~(Event.object_id >> None)).\
where(Event.object_type == 'query'). \
where(DataSourceGroup.group << groups).\
where(cls.is_archived == False).\
group_by(Event.object_id, Query.id, User.id).\
order_by(peewee.SQL("count(0) desc"))
query = (
cls.select(Query, User)
.where(Event.created_at > peewee.SQL("current_date - 7"))
.join(Event, on=(Query.id == Event.object_id.cast('integer')))
.join(DataSourceGroup, on=(Query.data_source==DataSourceGroup.data_source))
.switch(Query).join(User)
.where(Event.action << ('edit', 'execute', 'edit_name',
'edit_description', 'toggle_published',
'view_source'))
.where(~(Event.object_id >> None))
.where(Event.object_type == 'query')
.where(DataSourceGroup.group << groups)
.where(cls.is_archived == False)
.where(cls.is_draft == False)
.group_by(Event.object_id, Query.id, User.id)
.order_by(peewee.SQL("count(0) desc")))

if user_id:
query = query.where(Event.user == user_id)
Expand Down Expand Up @@ -1077,6 +1083,7 @@ class Dashboard(ChangeTrackingMixin, ModelTimestampsMixin, BaseVersionedModel, B
layout = peewee.TextField()
dashboard_filters_enabled = peewee.BooleanField(default=False)
is_archived = peewee.BooleanField(default=False, index=True)
is_draft = peewee.BooleanField(default=False, index=True)

class Meta:
db_table = 'dashboards'
Expand Down Expand Up @@ -1129,24 +1136,29 @@ def to_dict(self, with_widgets=False, user=None):
'dashboard_filters_enabled': self.dashboard_filters_enabled,
'widgets': widgets_layout,
'is_archived': self.is_archived,
'is_draft': self.is_draft,
'updated_at': self.updated_at,
'created_at': self.created_at,
'version': self.version
}

@classmethod
def all(cls, org, groups, user_id):
query = cls.select().\
join(Widget, peewee.JOIN_LEFT_OUTER, on=(Dashboard.id == Widget.dashboard)). \
join(Visualization, peewee.JOIN_LEFT_OUTER, on=(Widget.visualization == Visualization.id)). \
join(Query, peewee.JOIN_LEFT_OUTER, on=(Visualization.query == Query.id)). \
join(DataSourceGroup, peewee.JOIN_LEFT_OUTER, on=(Query.data_source == DataSourceGroup.data_source)). \
where(Dashboard.is_archived == False). \
where((DataSourceGroup.group << groups) |
(Dashboard.user == user_id) |
(~(Widget.dashboard >> None) & (Widget.visualization >> None))). \
where(Dashboard.org == org). \
group_by(Dashboard.id)
query = (cls.select()
.join(Widget, peewee.JOIN_LEFT_OUTER,
on=(Dashboard.id == Widget.dashboard))
.join(Visualization, peewee.JOIN_LEFT_OUTER,
on=(Widget.visualization == Visualization.id))
.join(Query, peewee.JOIN_LEFT_OUTER,
on=(Visualization.query == Query.id))
.join(DataSourceGroup, peewee.JOIN_LEFT_OUTER,
on=(Query.data_source == DataSourceGroup.data_source))
.where(Dashboard.is_archived == False)
.where((DataSourceGroup.group << groups & (Dashboard.is_draft != True)) |
(Dashboard.user == user_id) |
(~(Widget.dashboard >> None) & (Widget.visualization >> None)))
.where(Dashboard.org == org)
.group_by(Dashboard.id))

return query

Expand All @@ -1162,6 +1174,7 @@ def recent(cls, org, groups, user_id, for_user=False, limit=20):
where(~(Event.object_id >> None)). \
where(Event.object_type == 'dashboard'). \
where(Dashboard.is_archived == False). \
where(Dashboard.is_draft == False). \
where(Dashboard.org == org). \
where((DataSourceGroup.group << groups) |
(Dashboard.user == user_id) |
Expand Down

0 comments on commit c82fe9b

Please sign in to comment.