diff --git a/redash/handlers/alerts.py b/redash/handlers/alerts.py index 34c7826c08..3a8d4be00c 100644 --- a/redash/handlers/alerts.py +++ b/redash/handlers/alerts.py @@ -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): diff --git a/redash/handlers/dashboards.py b/redash/handlers/dashboards.py index 5f90d23a47..468160ee35 100644 --- a/redash/handlers/dashboards.py +++ b/redash/handlers/dashboards.py @@ -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): diff --git a/redash/handlers/data_sources.py b/redash/handlers/data_sources.py index d4020a5046..6ceac2e816 100644 --- a/redash/handlers/data_sources.py +++ b/redash/handlers/data_sources.py @@ -128,14 +128,13 @@ 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 @@ -143,14 +142,13 @@ 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() diff --git a/redash/handlers/destinations.py b/redash/handlers/destinations.py index 6213626b61..39688c5417 100644 --- a/redash/handlers/destinations.py +++ b/redash/handlers/destinations.py @@ -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 @@ -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) diff --git a/redash/handlers/embed.py b/redash/handlers/embed.py index 47731b9795..db87786845 100644 --- a/redash/handlers/embed.py +++ b/redash/handlers/embed.py @@ -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: @@ -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)) @@ -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)) diff --git a/redash/handlers/events.py b/redash/handlers/events.py index b9a0862f55..cc411eccd3 100644 --- a/redash/handlers/events.py +++ b/redash/handlers/events.py @@ -1,6 +1,7 @@ from flask import request from redash.handlers.base import BaseResource +from redash.models import db class EventResource(BaseResource): @@ -8,5 +9,5 @@ def post(self): events_list = request.get_json(force=True) for event in events_list: self.record_event(event) - + db.session.commit() diff --git a/redash/handlers/groups.py b/redash/handlers/groups.py index a10435d63c..9af44c1816 100644 --- a/redash/handlers/groups.py +++ b/redash/handlers/groups.py @@ -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): @@ -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): @@ -78,8 +78,6 @@ 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()), @@ -87,7 +85,7 @@ def post(self, group_id): 'object_type': 'group', 'member_id': user.id }) - + models.db.session.commit() return user.to_dict() @require_permission('list_users') @@ -105,8 +103,6 @@ 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()), @@ -114,6 +110,7 @@ def delete(self, group_id, user_id): 'object_type': 'group', 'member_id': user.id }) + models.db.session.commit() def serialize_data_source_with_group(data_source, data_source_group): @@ -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', @@ -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 @@ -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()), @@ -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) @@ -192,3 +187,4 @@ def delete(self, group_id, data_source_id): 'object_type': 'group', 'member_id': data_source.id }) + models.db.session.commit() diff --git a/redash/handlers/permissions.py b/redash/handlers/permissions.py index d274462280..89f8971d82 100644 --- a/redash/handlers/permissions.py +++ b/redash/handlers/permissions.py @@ -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): diff --git a/redash/handlers/queries.py b/redash/handlers/queries.py index 426a460272..49871765cd 100644 --- a/redash/handlers/queries.py +++ b/redash/handlers/queries.py @@ -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') @@ -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): @@ -138,6 +136,7 @@ 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): @@ -145,6 +144,7 @@ class QueryForkResource(BaseResource): 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) diff --git a/redash/handlers/query_results.py b/redash/handlers/query_results.py index 015dc24094..d7ca759df3 100644 --- a/redash/handlers/query_results.py +++ b/redash/handlers/query_results.py @@ -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) diff --git a/redash/handlers/query_snippets.py b/redash/handlers/query_snippets.py index 1ab9f0fd36..589e7efbb9 100644 --- a/redash/handlers/query_snippets.py +++ b/redash/handlers/query_snippets.py @@ -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): diff --git a/redash/handlers/users.py b/redash/handlers/users.py index d25b6cd80c..d020e3bb18 100644 --- a/redash/handlers/users.py +++ b/redash/handlers/users.py @@ -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." @@ -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)) diff --git a/redash/handlers/widgets.py b/redash/handlers/widgets.py index 06d334a81b..545c0039da 100644 --- a/redash/handlers/widgets.py +++ b/redash/handlers/widgets.py @@ -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} @@ -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} diff --git a/redash/tasks/general.py b/redash/tasks/general.py index a2af50e198..6ee35f54b8 100644 --- a/redash/tasks/general.py +++ b/redash/tasks/general.py @@ -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: