From c9dc398bf0c07d75499b17eb97bcda4ea58f34f6 Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Thu, 4 Feb 2021 13:29:36 +0100 Subject: [PATCH] Fix usage of email_alerts column --- lib/tool_shed/grids/repository_grids.py | 3 +- lib/tool_shed/util/commit_util.py | 4 +-- lib/tool_shed/util/shed_util_common.py | 2 +- .../webapp/controllers/repository.py | 30 +++++-------------- lib/tool_shed/webapp/model/mapping.py | 2 +- 5 files changed, 11 insertions(+), 30 deletions(-) diff --git a/lib/tool_shed/grids/repository_grids.py b/lib/tool_shed/grids/repository_grids.py index 9c5573d67fb..d60702f4a7f 100644 --- a/lib/tool_shed/grids/repository_grids.py +++ b/lib/tool_shed/grids/repository_grids.py @@ -1,4 +1,3 @@ -import json import logging from markupsafe import escape as escape_html @@ -181,7 +180,7 @@ class RepositoryGrid(grids.Grid): class EmailAlertsColumn(grids.TextColumn): def get_value(self, trans, grid, repository): - if trans.user and repository.email_alerts and trans.user.email in json.loads(repository.email_alerts): + if trans.user and trans.user.email in repository.email_alerts: return 'yes' return '' diff --git a/lib/tool_shed/util/commit_util.py b/lib/tool_shed/util/commit_util.py index 78fdc33c65c..2d5d511a3c7 100644 --- a/lib/tool_shed/util/commit_util.py +++ b/lib/tool_shed/util/commit_util.py @@ -1,6 +1,5 @@ import bz2 import gzip -import json import logging import os import shutil @@ -72,8 +71,7 @@ def check_file_contents_for_email_alerts(app): admin_users = app.config.get("admin_users", "").split(",") for repository in sa_session.query(app.model.Repository) \ .filter(app.model.Repository.table.c.email_alerts != null()): - email_alerts = json.loads(repository.email_alerts) - for user_email in email_alerts: + for user_email in repository.email_alerts: if user_email in admin_users: return True return False diff --git a/lib/tool_shed/util/shed_util_common.py b/lib/tool_shed/util/shed_util_common.py index 747041ab96c..9f850de157e 100644 --- a/lib/tool_shed/util/shed_util_common.py +++ b/lib/tool_shed/util/shed_util_common.py @@ -385,7 +385,7 @@ def handle_email_alerts(app, host, repository, content_alert_str='', new_repo_al email_alerts.append(user.email) else: subject = "Galaxy tool shed update alert for repository named %s" % str(repository.name) - email_alerts = json.loads(repository.email_alerts) + email_alerts = repository.email_alerts for email in email_alerts: to = email.strip() # Send it diff --git a/lib/tool_shed/webapp/controllers/repository.py b/lib/tool_shed/webapp/controllers/repository.py index 13ac6bf5987..0e363c77cd8 100644 --- a/lib/tool_shed/webapp/controllers/repository.py +++ b/lib/tool_shed/webapp/controllers/repository.py @@ -1658,10 +1658,6 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings): alerts = kwd.get('alerts', '') alerts_checked = CheckboxField.is_checked(alerts) category_ids = util.listify(kwd.get('category_id', '')) - if repository.email_alerts: - email_alerts = json.loads(repository.email_alerts) - else: - email_alerts = [] allow_push = kwd.get('allow_push', '') error = False user = trans.user @@ -1714,14 +1710,12 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings): elif kwd.get('receive_email_alerts_button', False): flush_needed = False if alerts_checked: - if user.email not in email_alerts: - email_alerts.append(user.email) - repository.email_alerts = json.dumps(email_alerts) + if user.email not in repository.email_alerts: + repository.email_alerts.append(user.email) flush_needed = True else: - if user.email in email_alerts: - email_alerts.remove(user.email) - repository.email_alerts = json.dumps(email_alerts) + if user.email in repository.email_alerts: + repository.email_alerts.remove(user.email) flush_needed = True if flush_needed: trans.sa_session.add(repository) @@ -1743,7 +1737,7 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings): for obj in options: label = obj.username allow_push_select_field.add_option(label, trans.security.encode_id(obj.id)) - checked = alerts_checked or user.email in email_alerts + checked = alerts_checked or user.email in repository.email_alerts alerts_check_box = CheckboxField('alerts', value=checked) changeset_revision_select_field = grids_util.build_changeset_revision_select_field(trans, repository, @@ -2273,19 +2267,14 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings): flush_needed = False for repository_id in repository_ids: repository = repository_util.get_repository_in_tool_shed(trans.app, repository_id) - if repository.email_alerts: - email_alerts = json.loads(repository.email_alerts) - else: - email_alerts = [] + email_alerts = repository.email_alerts if user.email in email_alerts: email_alerts.remove(user.email) - repository.email_alerts = json.dumps(email_alerts) trans.sa_session.add(repository) flush_needed = True total_alerts_removed += 1 else: email_alerts.append(user.email) - repository.email_alerts = json.dumps(email_alerts) trans.sa_session.add(repository) flush_needed = True total_alerts_added += 1 @@ -2568,10 +2557,7 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings): display_reviews = kwd.get('display_reviews', False) alerts = kwd.get('alerts', '') alerts_checked = CheckboxField.is_checked(alerts) - if repository.email_alerts: - email_alerts = json.loads(repository.email_alerts) - else: - email_alerts = [] + email_alerts = repository.email_alerts repository_dependencies = None user = trans.user if user and kwd.get('receive_email_alerts_button', False): @@ -2579,12 +2565,10 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings): if alerts_checked: if user.email not in email_alerts: email_alerts.append(user.email) - repository.email_alerts = json.dumps(email_alerts) flush_needed = True else: if user.email in email_alerts: email_alerts.remove(user.email) - repository.email_alerts = json.dumps(email_alerts) flush_needed = True if flush_needed: trans.sa_session.add(repository) diff --git a/lib/tool_shed/webapp/model/mapping.py b/lib/tool_shed/webapp/model/mapping.py index 332026540e7..271aded24f1 100644 --- a/lib/tool_shed/webapp/model/mapping.py +++ b/lib/tool_shed/webapp/model/mapping.py @@ -118,7 +118,7 @@ Repository.table = Table("repository", metadata, Column("user_id", Integer, ForeignKey("galaxy_user.id"), index=True), Column("private", Boolean, default=False), Column("deleted", Boolean, index=True, default=False), - Column("email_alerts", JSONType, nullable=True), + Column("email_alerts", JSONType, nullable=True, default=list), Column("times_downloaded", Integer), Column("deprecated", Boolean, default=False))