Skip to content

Commit

Permalink
Commit DB transaction when needed
Browse files Browse the repository at this point in the history
  • Loading branch information
Allen Short committed Dec 28, 2016
1 parent ea12dc4 commit 7596fa0
Show file tree
Hide file tree
Showing 14 changed files with 37 additions and 42 deletions.
2 changes: 1 addition & 1 deletion redash/handlers/alerts.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def post(self, alert_id):
'object_id': alert.id,
'object_type': 'alert'
})

models.db.session.commit()
return alert.to_dict()

def delete(self, alert_id):
Expand Down
2 changes: 1 addition & 1 deletion redash/handlers/dashboards.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ def post(self, dashboard_id):
'object_id': dashboard.id,
'object_type': 'dashboard',
})

models.db.session.commit()
return {'public_url': public_url, 'api_key': api_key.api_key}

def delete(self, dashboard_id):
Expand Down
6 changes: 2 additions & 4 deletions redash/handlers/data_sources.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,29 +128,27 @@ def post(self, data_source_id):

data_source.pause(reason)
models.db.session.add(data_source)
models.db.session.commit()

self.record_event({
'action': 'pause',
'object_id': data_source.id,
'object_type': 'datasource'
})

models.db.session.commit()
return data_source.to_dict()

@require_admin
def delete(self, data_source_id):
data_source = get_object_or_404(models.DataSource.get_by_id_and_org, data_source_id, self.current_org)
data_source.resume()
models.db.session.add(data_source)
models.db.session.commit()

self.record_event({
'action': 'resume',
'object_id': data_source.id,
'object_type': 'datasource'
})

models.db.session.commit()
return data_source.to_dict()


Expand Down
4 changes: 2 additions & 2 deletions redash/handlers/destinations.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def post(self, destination_id):
destination.name = req['name']

models.db.session.add(destination)

models.db.session.commit()
return destination.to_dict(all=True)

@require_admin
Expand Down Expand Up @@ -88,5 +88,5 @@ def post(self):
user=self.current_user)

models.db.session.add(destination)

models.db.session.commit()
return destination.to_dict(all=True)
4 changes: 3 additions & 1 deletion redash/handlers/embed.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ def run_query_sync(data_source, parameter_values, query_text, max_age=0):
query_hash, query_text, data,
run_time, utils.utcnow())

models.db.session.commit()
return data
except Exception, e:
if max_age > 0:
Expand All @@ -79,6 +80,7 @@ def embed(query_id, visualization_id, org_slug=None):
})

full_path = safe_join(settings.STATIC_ASSETS_PATHS[-2], 'index.html')
models.db.session.commit()
return send_file(full_path, **dict(cache_timeout=0, conditional=True))


Expand All @@ -94,6 +96,6 @@ def public_dashboard(token, org_slug=None):
# 'headless': 'embed' in request.args,
# 'referer': request.headers.get('Referer')
# })

# models.db.session.commit()
full_path = safe_join(settings.STATIC_ASSETS_PATHS[-2], 'index.html')
return send_file(full_path, **dict(cache_timeout=0, conditional=True))
3 changes: 2 additions & 1 deletion redash/handlers/events.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
from flask import request

from redash.handlers.base import BaseResource
from redash.models import db


class EventResource(BaseResource):
def post(self):
events_list = request.get_json(force=True)
for event in events_list:
self.record_event(event)

db.session.commit()

18 changes: 7 additions & 11 deletions redash/handlers/groups.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def post(self):
'object_id': group.id,
'object_type': 'group'
})

models.db.session.commit()
return group.to_dict()

def get(self):
Expand Down Expand Up @@ -49,7 +49,7 @@ def post(self, group_id):
'object_id': group.id,
'object_type': 'group'
})

models.db.session.commit()
return group.to_dict()

def get(self, group_id):
Expand Down Expand Up @@ -78,16 +78,14 @@ def post(self, group_id):
group = models.Group.get_by_id_and_org(group_id, self.current_org)
user.group_ids.append(group.id)

models.db.session.commit()

self.record_event({
'action': 'add_member',
'timestamp': int(time.time()),
'object_id': group.id,
'object_type': 'group',
'member_id': user.id
})

models.db.session.commit()
return user.to_dict()

@require_permission('list_users')
Expand All @@ -105,15 +103,14 @@ def delete(self, group_id, user_id):
user = models.User.get_by_id_and_org(user_id, self.current_org)
user.group_ids.remove(int(group_id))

models.db.session.commit()

self.record_event({
'action': 'remove_member',
'timestamp': int(time.time()),
'object_id': group_id,
'object_type': 'group',
'member_id': user.id
})
models.db.session.commit()


def serialize_data_source_with_group(data_source, data_source_group):
Expand All @@ -131,7 +128,6 @@ def post(self, group_id):

data_source_group = data_source.add_group(group)

models.db.session.commit()

self.record_event({
'action': 'add_data_source',
Expand All @@ -140,7 +136,7 @@ def post(self, group_id):
'object_type': 'group',
'member_id': data_source.id
})

models.db.session.commit()
return serialize_data_source_with_group(data_source, data_source_group)

@require_admin
Expand All @@ -165,8 +161,6 @@ def post(self, group_id, data_source_id):

data_source_group = data_source.update_group_permission(group, view_only)

models.db.session.commit()

self.record_event({
'action': 'change_data_source_permission',
'timestamp': int(time.time()),
Expand All @@ -175,6 +169,7 @@ def post(self, group_id, data_source_id):
'member_id': data_source.id,
'view_only': view_only
})
models.db.session.commit()

return serialize_data_source_with_group(data_source, data_source_group)

Expand All @@ -192,3 +187,4 @@ def delete(self, group_id, data_source_id):
'object_type': 'group',
'member_id': data_source.id
})
models.db.session.commit()
4 changes: 2 additions & 2 deletions redash/handlers/permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,10 @@ def post(self, object_type, object_id):
'action': 'grant_permission',
'object_id': object_id,
'object_type': object_type,
'grantee': grantee.id,
'access_type': access_type,
'grantee': grantee.id
})

db.session.commit()
return permission.to_dict()

def delete(self, object_type, object_id):
Expand Down
8 changes: 4 additions & 4 deletions redash/handlers/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,13 @@ def post(self):
query_def['is_draft'] = True
query = models.Query.create(**query_def)
models.db.session.add(query)
models.db.session.commit()

self.record_event({
'action': 'create',
'object_id': query.id,
'object_type': 'query'
})

models.db.session.commit()
return query.to_dict()

@require_permission('view_query')
Expand Down Expand Up @@ -121,8 +120,7 @@ def post(self, query_id):
except StaleDataError:
abort(409)

result = query.to_dict(with_visualizations=True)
return result
return query.to_dict(with_visualizations=True)

@require_permission('view_query')
def get(self, query_id):
Expand All @@ -138,13 +136,15 @@ def delete(self, query_id):
query = get_object_or_404(models.Query.get_by_id_and_org, query_id, self.current_org)
require_admin_or_owner(query.user_id)
query.archive(self.current_user)
models.db.session.commit()


class QueryForkResource(BaseResource):
@require_permission('edit_query')
def post(self, query_id):
query = get_object_or_404(models.Query.get_by_id_and_org, query_id, self.current_org)
forked_query = query.fork(self.current_user)
models.db.session.commit()
return forked_query.to_dict(with_visualizations=True)


Expand Down
1 change: 0 additions & 1 deletion redash/handlers/query_results.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ def post(self):
'object_type': 'data_source',
'query': query
})

return run_query(data_source, parameter_values, query, query_id, max_age)


Expand Down
2 changes: 1 addition & 1 deletion redash/handlers/query_snippets.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,13 @@ def delete(self, snippet_id):
snippet_id, self.current_org)
require_admin_or_owner(snippet.user.id)
models.db.session.delete(snippet)
models.db.session.commit()

self.record_event({
'action': 'delete',
'object_id': snippet.id,
'object_type': 'query_snippet'
})
models.db.session.commit()


class QuerySnippetListResource(BaseResource):
Expand Down
17 changes: 8 additions & 9 deletions redash/handlers/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,9 +108,16 @@ def post(self, user_id):
if 'groups' in params and not self.current_user.has_permission('admin'):
abort(403, message="Must be admin to change groups membership.")

self.record_event({
'action': 'edit',
'timestamp': int(time.time()),
'object_id': user.id,
'object_type': 'user',
'updated_fields': params.keys()
})
try:
self.update_model(user, params)
# TODO: this won't be triggered at this point. Need to call db.session.commit?
models.db.session.commit()
except IntegrityError as e:
if "email" in e.message:
message = "Email already taken."
Expand All @@ -119,14 +126,6 @@ def post(self, user_id):

abort(400, message=message)

self.record_event({
'action': 'edit',
'timestamp': int(time.time()),
'object_id': user.id,
'object_type': 'user',
'updated_fields': params.keys()
})

return user.to_dict(with_api_key=is_admin_or_owner(user_id))


7 changes: 3 additions & 4 deletions redash/handlers/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ def post(self):

widget.dashboard.layout = json.dumps(layout)
models.db.session.add(widget.dashboard)

models.db.session.commit()
return {'widget': widget.to_dict(), 'layout': layout, 'new_row': new_row, 'version': dashboard.version}


Expand All @@ -61,14 +61,13 @@ def post(self, widget_id):
require_object_modify_permission(widget.dashboard, self.current_user)
widget_properties = request.get_json(force=True)
widget.text = widget_properties['text']

models.db.session.commit()
return widget.to_dict()

@require_permission('edit_dashboard')
def delete(self, widget_id):
widget = models.Widget.get_by_id_and_org(widget_id, self.current_org)
require_object_modify_permission(widget.dashboard, self.current_user)

widget.delete()

models.db.session.commit()
return {'layout': widget.dashboard.layout, 'version': widget.dashboard.version}
1 change: 1 addition & 0 deletions redash/tasks/general.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
def record_event(event):
original_event = event.copy()
models.Event.record(event)
models.db.session.commit()
for hook in settings.EVENT_REPORTING_WEBHOOKS:
logger.debug("Forwarding event to: %s", hook)
try:
Expand Down

0 comments on commit 7596fa0

Please sign in to comment.