- # approved: yes/no
- # private: yes/no
- # }
- review_contents_dict = {
- "Tools": dict(
- rating=5,
- comment="Version 2.2.0 does the impossible and improves this tool.",
- approved="yes",
- private="yes",
- )
- }
- self.create_repository_review(
- repository,
- review_contents_dict,
- changeset_revision=self.get_repository_tip(repository),
- copy_from=(str(last_review.changeset_revision), last_review.id),
- )
-
- def test_0135_verify_review_for_new_version(self):
- """Verify that the reviews display correctly for this changeset revision.
-
- We are at step 27.
- Log in as test_user_1 and check that the tools component review is for filtering 2.2.0, but that the other component
- reviews had their contents copied from the last reviewed changeset.
- """
- self.login(email=common.test_user_1_email, username=common.test_user_1_name)
- repository = self.test_db_util.get_repository_by_name_and_owner(repository_name, common.test_user_1_name)
- user = self.test_db_util.get_user(common.test_user_2_email)
- strings_displayed = [
- "Data types",
- "Functional tests",
- "yes",
- "A good set of functional tests.",
- "README",
- "yes",
- "Workflows",
- "Tools",
- ]
- strings_displayed.extend(
- ["Clear and concise readme file, a true pleasure to read.", "Tool dependencies", "not_applicable"]
- )
- strings_displayed.extend(
- ["Repository dependencies", "Version 2.2.0 does the impossible and improves this tool."]
- )
- self.verify_repository_reviews(repository, reviewer=user, strings_displayed=strings_displayed)
diff --git a/lib/tool_shed/test/functional/test_0410_repository_component_review_access_control.py b/lib/tool_shed/test/functional/test_0410_repository_component_review_access_control.py
deleted file mode 100644
index fc6bfa418bc..00000000000
--- a/lib/tool_shed/test/functional/test_0410_repository_component_review_access_control.py
+++ /dev/null
@@ -1,246 +0,0 @@
-from ..base.twilltestcase import (
- common,
- ShedTwillTestCase,
-)
-
-repository_name = "filtering_0410"
-repository_description = "Galaxy filtering tool for test 0410"
-repository_long_description = "Long description of Galaxy filtering tool for test 0410"
-
-"""
-1. Create a repository in the tool shed owned by test_user_1.
-2. Have test_user_2 complete a review of the repository.
-3. Have test_user_1 browse the review.
-4. Have test_user_3 browse the repository and make sure they are not allowed to browse the review.
-5. Have test_user_1 give write permission on the repository to the test_user_3.
-6. Have test_user_3 browse the repository again and they should now have the ability to browse the review.
-7. Have test_user_3 browse the review.
-"""
-
-
-class TestRepositoryComponentReviews(ShedTwillTestCase):
- """Test repository component review features."""
-
- def test_0000_initiate_users(self):
- """Create necessary user accounts and login as an admin user.
-
- Create all the user accounts that are needed for this test script to run independently of other test.
- Previously created accounts will not be re-created.
- """
- self.login(email=common.test_user_1_email, username=common.test_user_1_name)
- test_user_1 = self.test_db_util.get_user(common.test_user_1_email)
- assert (
- test_user_1 is not None
- ), f"Problem retrieving user with email {common.test_user_1_email} from the database"
- self.test_db_util.get_private_role(test_user_1)
- self.login(email=common.test_user_2_email, username=common.test_user_2_name)
- test_user_2 = self.test_db_util.get_user(common.test_user_2_email)
- assert (
- test_user_2 is not None
- ), f"Problem retrieving user with email {common.test_user_2_email} from the database"
- self.test_db_util.get_private_role(test_user_2)
- self.login(email=common.test_user_3_email, username=common.test_user_3_name)
- test_user_3 = self.test_db_util.get_user(common.test_user_3_email)
- assert (
- test_user_3 is not None
- ), f"Problem retrieving user with email {common.test_user_3_email} from the database"
- self.test_db_util.get_private_role(test_user_3)
- self.login(email=common.admin_email, username=common.admin_username)
- admin_user = self.test_db_util.get_user(common.admin_email)
- assert admin_user is not None, f"Problem retrieving user with email {common.admin_email} from the database"
- self.test_db_util.get_private_role(admin_user)
-
- def test_0005_grant_reviewer_role(self):
- """Grant the repository reviewer role to test_user_2.
-
- We now have an admin user (admin_user) and three non-admin users (test_user_1, test_user_2, and test_user_3). Grant the repository
- reviewer role to test_user_2, who will not be the owner of the reviewed repositories, and do not grant any roles to test_user_3 yet.
- """
- reviewer_role = self.test_db_util.get_role_by_name("Repository Reviewer")
- test_user_2 = self.test_db_util.get_user(common.test_user_2_email)
- self.grant_role_to_user(test_user_2, reviewer_role)
-
- def test_0010_verify_repository_review_components(self):
- """Ensure that the required review components exist.
-
- Make sure all the components we are to review are recorded in the database.
- """
- self.add_repository_review_component(
- name="Repository dependencies",
- description="Repository dependencies defined in a file named repository_dependencies.xml included in the repository",
- )
- strings_displayed = [
- "Data types",
- "Functional tests",
- "README",
- "Repository dependencies",
- "Tool dependencies",
- "Tools",
- "Workflows",
- ]
- self.manage_review_components(strings_displayed=strings_displayed)
-
- def test_0015_create_repository(self):
- """Create and populate the filtering repository
-
- We are at step 1.
- Log in as test_user_1 and create the filtering repository, then upload a basic set of
- components to be reviewed in subsequent tests.
- """
- category = self.create_category(
- name="Test 0400 Repository Component Reviews", description="Test 0400 Repository Component Reviews"
- )
- self.login(email=common.test_user_1_email, username=common.test_user_1_name)
- strings_displayed = self.expect_repo_created_strings(repository_name)
- repository = self.get_or_create_repository(
- name=repository_name,
- description=repository_description,
- long_description=repository_long_description,
- owner=common.test_user_1_name,
- category_id=self.security.encode_id(category.id),
- strings_displayed=strings_displayed,
- )
- self.upload_file(
- repository,
- filename="filtering/filtering_1.1.0.tar",
- filepath=None,
- valid_tools_only=True,
- uncompress_file=True,
- remove_repo_files_not_in_tar=False,
- commit_message="Uploaded filtering 1.1.0 tarball.",
- strings_displayed=[],
- strings_not_displayed=[],
- )
- self.upload_file(
- repository,
- filename="filtering/filtering_test_data.tar",
- filepath=None,
- valid_tools_only=True,
- uncompress_file=True,
- remove_repo_files_not_in_tar=False,
- commit_message="Uploaded filtering test data.",
- strings_displayed=[],
- strings_not_displayed=[],
- )
- self.upload_file(
- repository,
- filename="readme.txt",
- filepath=None,
- valid_tools_only=True,
- uncompress_file=True,
- remove_repo_files_not_in_tar=False,
- commit_message="Uploaded readme.txt.",
- strings_displayed=[],
- strings_not_displayed=[],
- )
-
- def test_0020_review_repository(self):
- """Complete a review of the filtering repository.
-
- We are at step 2 - Have test_user_2 complete a review of the repository.
- Review all components of the filtering repository, with the appropriate contents and approved/not approved/not applicable status.
- """
- self.login(email=common.test_user_2_email, username=common.test_user_2_name)
- repository = self.test_db_util.get_repository_by_name_and_owner(repository_name, common.test_user_1_name)
- review_contents_dict = {
- "Data types": dict(),
- "README": dict(
- rating=5,
- comment="Clear and concise readme file, a true pleasure to read.",
- approved="yes",
- private="no",
- ),
- "Functional tests": dict(rating=5, comment="A good set of functional tests.", approved="yes", private="no"),
- "Repository dependencies": dict(),
- "Tool dependencies": dict(),
- "Tools": dict(rating=5, comment="Excellent tool, easy to use.", approved="yes", private="no"),
- "Workflows": dict(),
- }
- self.create_repository_review(repository, review_contents_dict)
-
- def test_0025_verify_repository_review(self):
- """Verify that the review was completed and displays properly.
-
- We are at step 3 - Have test_user_1 browse the review.
- Verify that all the review components were submitted, and that the repository owner can see the review.
- """
- self.login(email=common.test_user_1_email, username=common.test_user_1_name)
- repository = self.test_db_util.get_repository_by_name_and_owner(repository_name, common.test_user_1_name)
- user = self.test_db_util.get_user(common.test_user_2_email)
- strings_displayed = [
- "Data types",
- "Functional tests",
- "yes",
- "A good set of functional tests.",
- "README",
- "yes",
- "Workflows",
- "Tools",
- ]
- strings_displayed.extend(
- ["Clear and concise readme file, a true pleasure to read.", "Tool dependencies", "not_applicable"]
- )
- strings_displayed.extend(["Repository dependencies", "Excellent tool, easy to use."])
- strings_displayed = ["Browse reviews of this repository"]
- self.display_manage_repository_page(repository, strings_displayed=strings_displayed)
- self.verify_repository_reviews(repository, reviewer=user, strings_displayed=strings_displayed)
-
- def test_0030_browse_with_other_user(self):
- """Verify that test_user_3 is blocked from browsing the review.
-
- We are at step 4 - Have test_user_3 browse the repository and make sure they are not allowed to browse the review.
- """
- self.login(email=common.test_user_3_email, username=common.test_user_3_name)
- repository = self.test_db_util.get_repository_by_name_and_owner(repository_name, common.test_user_1_name)
- user = self.test_db_util.get_user(common.test_user_2_email)
- strings_not_displayed = ["Browse reviews of this repository"]
- self.display_manage_repository_page(repository, strings_not_displayed=strings_not_displayed)
- strings_not_displayed = [
- "A good set of functional tests.",
- "Clear and concise readme file, a true pleasure to read.",
- ]
- strings_not_displayed.append("Excellent tool, easy to use.")
- changeset_revision = self.get_repository_tip(repository)
- review = self.test_db_util.get_repository_review_by_user_id_changeset_revision(
- user.id, repository.id, changeset_revision
- )
- self.browse_component_review(review, strings_not_displayed=strings_not_displayed)
-
- def test_0035_grant_write_access_to_other_user(self):
- """Grant write access on the filtering_0410 repository to test_user_3.
-
- We are at step 5 - Have test_user_1 give write permission on the repository to the test_user_3.
- """
- self.login(email=common.test_user_1_email, username=common.test_user_1_name)
- repository = self.test_db_util.get_repository_by_name_and_owner(repository_name, common.test_user_1_name)
- self.grant_write_access(repository, usernames=[common.test_user_3_name])
-
- def test_0040_verify_test_user_3_can_browse_reviews(self):
- """Check that test_user_3 can now browse reviews.
-
- We are at step 6 - Have test_user_3 browse the repository again and they should now have the ability to browse the review.
- """
- self.login(email=common.test_user_3_email, username=common.test_user_3_name)
- repository = self.test_db_util.get_repository_by_name_and_owner(repository_name, common.test_user_1_name)
- strings_displayed = ["Browse reviews of this repository"]
- self.display_manage_repository_page(repository, strings_displayed=strings_displayed)
-
- def test_0045_verify_browse_review_with_write_access(self):
- """Check that test_user_3 can now display reviews.
-
- We are at step 7 - Have test_user_3 browse the review.
- """
- self.login(email=common.test_user_3_email, username=common.test_user_3_name)
- repository = self.test_db_util.get_repository_by_name_and_owner(repository_name, common.test_user_1_name)
- user = self.test_db_util.get_user(common.test_user_2_email)
- strings_displayed = [
- "A good set of functional tests.",
- "Clear and concise readme file",
- "a true pleasure to read.",
- "Excellent tool, easy to use.",
- ]
- changeset_revision = self.get_repository_tip(repository)
- review = self.test_db_util.get_repository_review_by_user_id_changeset_revision(
- user.id, repository.id, changeset_revision
- )
- self.browse_component_review(review, strings_displayed=strings_displayed)
diff --git a/lib/tool_shed/util/metadata_util.py b/lib/tool_shed/util/metadata_util.py
index e6f77309836..629ee0ff0ae 100644
--- a/lib/tool_shed/util/metadata_util.py
+++ b/lib/tool_shed/util/metadata_util.py
@@ -272,27 +272,6 @@ def get_repository_metadata_by_repository_id_changeset_revision(app, id, changes
return get_repository_metadata_by_changeset_revision(app, id, changeset_revision)
-def get_repository_metadata_revisions_for_review(repository, reviewed=True):
- repository_metadata_revisions = []
- metadata_changeset_revision_hashes = []
- if reviewed:
- for metadata_revision in repository.metadata_revisions:
- metadata_changeset_revision_hashes.append(metadata_revision.changeset_revision)
- for review in repository.reviews:
- if review.changeset_revision in metadata_changeset_revision_hashes:
- rmcr_hashes = [rmr.changeset_revision for rmr in repository_metadata_revisions]
- if review.changeset_revision not in rmcr_hashes:
- repository_metadata_revisions.append(review.repository_metadata)
- else:
- for review in repository.reviews:
- if review.changeset_revision not in metadata_changeset_revision_hashes:
- metadata_changeset_revision_hashes.append(review.changeset_revision)
- for metadata_revision in repository.metadata_revisions:
- if metadata_revision.changeset_revision not in metadata_changeset_revision_hashes:
- repository_metadata_revisions.append(metadata_revision)
- return repository_metadata_revisions
-
-
def get_updated_changeset_revisions(app, name, owner, changeset_revision):
"""
Return a string of comma-separated changeset revision hashes for all available updates to the received changeset
diff --git a/lib/tool_shed/util/review_util.py b/lib/tool_shed/util/review_util.py
deleted file mode 100644
index 7c745620aa7..00000000000
--- a/lib/tool_shed/util/review_util.py
+++ /dev/null
@@ -1,143 +0,0 @@
-import logging
-
-from sqlalchemy import and_
-
-from tool_shed.util import hg_util
-
-log = logging.getLogger(__name__)
-
-
-def can_browse_repository_reviews(app, user, repository):
- """
- Determine if there are any reviews of the received repository for which the
- current user has permission to browse any component reviews.
- """
- if user:
- for review in repository.reviews:
- for component_review in review.component_reviews:
- if app.security_agent.user_can_browse_component_review(app, repository, component_review, user):
- return True
- return False
-
-
-def changeset_revision_reviewed_by_user(user, repository, changeset_revision):
- """Determine if the current changeset revision has been reviewed by the current user."""
- for review in repository.reviews:
- if review.changeset_revision == changeset_revision and review.user == user:
- return True
- return False
-
-
-def get_component(app, id):
- """Get a component from the database."""
- sa_session = app.model.session
- return sa_session.query(app.model.Component).get(app.security.decode_id(id))
-
-
-def get_component_review(app, id):
- """Get a component_review from the database"""
- sa_session = app.model.session
- return sa_session.query(app.model.ComponentReview).get(app.security.decode_id(id))
-
-
-def get_component_by_name(app, name):
- """Get a component from the database via a name."""
- sa_session = app.model.session
- return sa_session.query(app.model.Component).filter(app.model.Component.table.c.name == name).first()
-
-
-def get_component_review_by_repository_review_id_component_id(app, repository_review_id, component_id):
- """Get a component_review from the database via repository_review_id and component_id."""
- sa_session = app.model.session
- return (
- sa_session.query(app.model.ComponentReview)
- .filter(
- and_(
- app.model.ComponentReview.table.c.repository_review_id == app.security.decode_id(repository_review_id),
- app.model.ComponentReview.table.c.component_id == app.security.decode_id(component_id),
- )
- )
- .first()
- )
-
-
-def get_components(app):
- sa_session = app.model.session
- return sa_session.query(app.model.Component).order_by(app.model.Component.name).all()
-
-
-def get_previous_repository_reviews(app, repository, changeset_revision):
- """
- Return an ordered dictionary of repository reviews up to and including the
- received changeset revision.
- """
- repo = repository.hg_repo
- reviewed_revision_hashes = [review.changeset_revision for review in repository.reviews]
- previous_reviews_dict = {}
- for changeset in hg_util.reversed_upper_bounded_changelog(repo, changeset_revision):
- previous_changeset_revision = str(repo[changeset])
- if previous_changeset_revision in reviewed_revision_hashes:
- previous_rev, previous_changeset_revision_label = hg_util.get_rev_label_from_changeset_revision(
- repo, previous_changeset_revision
- )
- revision_reviews = get_reviews_by_repository_id_changeset_revision(
- app, app.security.encode_id(repository.id), previous_changeset_revision
- )
- previous_reviews_dict[previous_changeset_revision] = dict(
- changeset_revision_label=previous_changeset_revision_label, reviews=revision_reviews
- )
- return previous_reviews_dict
-
-
-def get_review(app, id):
- """Get a repository_review from the database via id."""
- sa_session = app.model.session
- return sa_session.query(app.model.RepositoryReview).get(app.security.decode_id(id))
-
-
-def get_review_by_repository_id_changeset_revision_user_id(app, repository_id, changeset_revision, user_id):
- """
- Get a repository_review from the database via repository id, changeset_revision
- and user_id.
- """
- sa_session = app.model.session
- return (
- sa_session.query(app.model.RepositoryReview)
- .filter(
- and_(
- app.model.RepositoryReview.repository_id == app.security.decode_id(repository_id),
- app.model.RepositoryReview.changeset_revision == changeset_revision,
- app.model.RepositoryReview.user_id == app.security.decode_id(user_id),
- )
- )
- .first()
- )
-
-
-def get_reviews_by_repository_id_changeset_revision(app, repository_id, changeset_revision):
- """Get all repository_reviews from the database via repository id and changeset_revision."""
- sa_session = app.model.session
- return (
- sa_session.query(app.model.RepositoryReview)
- .filter(
- and_(
- app.model.RepositoryReview.repository_id == app.security.decode_id(repository_id),
- app.model.RepositoryReview.changeset_revision == changeset_revision,
- )
- )
- .all()
- )
-
-
-def has_previous_repository_reviews(app, repository, changeset_revision):
- """
- Determine if a repository has a changeset revision review prior to the
- received changeset revision.
- """
- repo = repository.hg_repo
- reviewed_revision_hashes = [review.changeset_revision for review in repository.reviews]
- for changeset in hg_util.reversed_upper_bounded_changelog(repo, changeset_revision):
- previous_changeset_revision = str(repo[changeset])
- if previous_changeset_revision in reviewed_revision_hashes:
- return True
- return False
diff --git a/lib/tool_shed/util/shed_index.py b/lib/tool_shed/util/shed_index.py
index e0229583d83..5c14db7e566 100644
--- a/lib/tool_shed/util/shed_index.py
+++ b/lib/tool_shed/util/shed_index.py
@@ -123,12 +123,6 @@ def get_repos(sa_session, file_path, hgweb_config_dir, **kwargs):
user = sa_session.query(model.User).filter(model.User.id == repo.user_id).one()
repo_owner_username = user.username.lower()
- approved = "no"
- for review in repo.reviews:
- if review.approved == "yes":
- approved = "yes"
- break
-
last_updated = pretty_print_time_interval(repo.update_time)
full_last_updated = repo.update_time.strftime("%Y-%m-%d %I:%M %p")
@@ -165,7 +159,7 @@ def get_repos(sa_session, file_path, hgweb_config_dir, **kwargs):
remote_repository_url=unicodify(remote_repository_url),
repo_owner_username=unicodify(repo_owner_username),
times_downloaded=unicodify(times_downloaded),
- approved=unicodify(approved),
+ approved=unicodify("no"),
last_updated=unicodify(last_updated),
full_last_updated=unicodify(full_last_updated),
tools_list=tools_list,
diff --git a/lib/tool_shed/webapp/api/groups.py b/lib/tool_shed/webapp/api/groups.py
index 82ecb5fb6ef..512b542979b 100644
--- a/lib/tool_shed/webapp/api/groups.py
+++ b/lib/tool_shed/webapp/api/groups.py
@@ -125,15 +125,7 @@ class GroupsController(BaseAPIController):
time_repo_updated_full = repo.update_time.strftime("%Y-%m-%d %I:%M %p")
time_repo_created = pretty_print_time_interval(repo.create_time, True)
time_repo_updated = pretty_print_time_interval(repo.update_time, True)
- approved = ""
- ratings = []
- for review in repo.reviews:
- if review.rating:
- ratings.append(review.rating)
- if review.approved == "yes":
- approved = "yes"
# TODO add user ratings
- ratings_mean = str(float(sum(ratings)) / len(ratings)) if len(ratings) > 0 else ""
total_downloads += repo.times_downloaded
group_repos.append(
{
@@ -145,8 +137,6 @@ class GroupsController(BaseAPIController):
"time_updated_full": time_repo_updated_full,
"time_updated": time_repo_updated,
"description": repo.description,
- "approved": approved,
- "ratings_mean": ratings_mean,
"categories": categories,
}
)
diff --git a/lib/tool_shed/webapp/controllers/repository.py b/lib/tool_shed/webapp/controllers/repository.py
index 314c4447de0..5846a8a6f6a 100644
--- a/lib/tool_shed/webapp/controllers/repository.py
+++ b/lib/tool_shed/webapp/controllers/repository.py
@@ -263,10 +263,6 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings):
return trans.response.send_redirect(
web.url_for(controller="repository", action="browse_repositories_by_user", **kwd)
)
- elif operation == "reviewed_repositories_i_own":
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="reviewed_repositories_i_own")
- )
elif operation == "repositories_by_category":
category_id = kwd.get("id", None)
message = escape(kwd.get("message", ""))
@@ -1632,14 +1628,8 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings):
# TODO: move the following to some in-memory register so these queries can be done once
# at startup. The in-memory register can then be managed during the current session.
can_administer_repositories = False
- has_reviewed_repositories = False
has_deprecated_repositories = False
if current_user:
- # See if the current user owns any repositories that have been reviewed.
- for repository in current_user.active_repositories:
- if repository.reviews:
- has_reviewed_repositories = True
- break
# See if the current user has any repositories that have been marked as deprecated.
for repository in current_user.active_repositories:
if repository.deprecated:
@@ -1666,7 +1656,6 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings):
"/webapps/tool_shed/index.mako",
repository_metadata=repository_metadata,
can_administer_repositories=can_administer_repositories,
- has_reviewed_repositories=has_reviewed_repositories,
has_deprecated_repositories=has_deprecated_repositories,
user_id=user_id,
repository_id=repository_id,
@@ -1822,7 +1811,6 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings):
description = kwd.get("description", repository.description)
long_description = kwd.get("long_description", repository.long_description)
avg_rating, num_ratings = self.get_ave_item_rating_data(trans.sa_session, repository, webapp_model=trans.model)
- display_reviews = util.string_as_bool(kwd.get("display_reviews", False))
alerts = kwd.get("alerts", "")
alerts_checked = CheckboxField.is_checked(alerts)
category_ids = util.listify(kwd.get("category_id", ""))
@@ -2016,7 +2004,6 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings):
categories=categories,
metadata=metadata,
avg_rating=avg_rating,
- display_reviews=display_reviews,
num_ratings=num_ratings,
alerts_check_box=alerts_check_box,
malicious_check_box=malicious_check_box,
@@ -2074,13 +2061,6 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings):
status=status,
)
- @web.expose
- @require_login("review repository revision")
- def manage_repository_reviews_of_revision(self, trans, **kwd):
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="manage_repository_reviews_of_revision", **kwd)
- )
-
@web.expose
@require_login("multi select email alerts")
def multi_select_email_alerts(self, trans, **kwd):
@@ -2268,7 +2248,6 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings):
comment = kwd.get("comment", "")
rating = self.rate_item(trans, trans.user, repository, rating, comment)
avg_rating, num_ratings = self.get_ave_item_rating_data(trans.sa_session, repository, webapp_model=trans.model)
- display_reviews = util.string_as_bool(kwd.get("display_reviews", False))
rra = self.get_user_item_rating(trans.sa_session, trans.user, repository, webapp_model=trans.model)
metadata = metadata_util.get_repository_metadata_by_repository_id_changeset_revision(
trans.app, id, changeset_revision, metadata_only=True
@@ -2281,7 +2260,6 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings):
metadata=metadata,
revision_label=revision_label,
avg_rating=avg_rating,
- display_reviews=display_reviews,
num_ratings=num_ratings,
rra=rra,
repository_type_select_field=repository_type_select_field,
@@ -2763,7 +2741,6 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings):
repository, changeset_revision=changeset_revision
)
repository.clone_url = common_util.generate_clone_url_for_repository_in_tool_shed(trans.user, repository)
- display_reviews = kwd.get("display_reviews", False)
alerts = kwd.get("alerts", "")
alerts_checked = CheckboxField.is_checked(alerts)
if repository.email_alerts:
@@ -2833,7 +2810,6 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings):
metadata=metadata,
containers_dict=containers_dict,
avg_rating=avg_rating,
- display_reviews=display_reviews,
num_ratings=num_ratings,
alerts_check_box=alerts_check_box,
changeset_revision=changeset_revision,
diff --git a/lib/tool_shed/webapp/controllers/repository_review.py b/lib/tool_shed/webapp/controllers/repository_review.py
deleted file mode 100644
index 7338dc6b7bc..00000000000
--- a/lib/tool_shed/webapp/controllers/repository_review.py
+++ /dev/null
@@ -1,670 +0,0 @@
-import logging
-
-from sqlalchemy import (
- and_,
- false,
- func,
-)
-
-import tool_shed.grids.repository_review_grids as repository_review_grids
-import tool_shed.grids.util as grids_util
-from galaxy import (
- util,
- web,
-)
-from galaxy.web.form_builder import CheckboxField
-from galaxy.webapps.base.controller import BaseUIController
-from tool_shed.util import (
- hg_util,
- metadata_util,
- repository_util,
- review_util,
- shed_util_common as suc,
-)
-from tool_shed.util.container_util import STRSEP
-from tool_shed.util.web_util import escape
-from tool_shed.webapp.framework.decorators import require_login
-from tool_shed.webapp.util import ratings_util
-
-log = logging.getLogger(__name__)
-
-
-class RepositoryReviewController(BaseUIController, ratings_util.ItemRatings):
-
- component_grid = repository_review_grids.ComponentGrid()
- repositories_ready_for_review_grid = repository_review_grids.RepositoriesReadyForReviewGrid()
- repositories_reviewed_by_me_grid = repository_review_grids.RepositoriesReviewedByMeGrid()
- repositories_with_reviews_grid = repository_review_grids.RepositoriesWithReviewsGrid()
- repositories_without_reviews_grid = repository_review_grids.RepositoriesWithoutReviewsGrid()
- repository_reviews_by_user_grid = repository_review_grids.RepositoryReviewsByUserGrid()
- reviewed_repositories_i_own_grid = repository_review_grids.ReviewedRepositoriesIOwnGrid()
- repositories_with_no_tool_tests_grid = repository_review_grids.RepositoriesWithNoToolTestsGrid()
-
- @web.expose
- @require_login("approve repository review")
- def approve_repository_review(self, trans, **kwd):
- # The value of the received id is the encoded review id.
- message = escape(kwd.get("message", ""))
- status = kwd.get("status", "done")
- encoded_review_id = kwd["id"]
- review = review_util.get_review(trans.app, encoded_review_id)
- if kwd.get("approve_repository_review_button", False):
- approved_select_field_name = f"{encoded_review_id}{STRSEP}approved"
- approved_select_field_value = str(kwd[approved_select_field_name])
- review.approved = approved_select_field_value
- trans.sa_session.add(review)
- trans.sa_session.flush()
- message = f"Approved value {escape(approved_select_field_value)} saved for this revision."
- repository_id = trans.security.encode_id(review.repository_id)
- changeset_revision = review.changeset_revision
- return trans.response.send_redirect(
- web.url_for(
- controller="repository_review",
- action="manage_repository_reviews_of_revision",
- id=repository_id,
- changeset_revision=changeset_revision,
- message=message,
- status=status,
- )
- )
-
- @web.expose
- @require_login("browse components")
- def browse_components(self, trans, **kwd):
- if "operation" in kwd:
- operation = kwd["operation"].lower()
- if operation == "create":
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="create_component", **kwd)
- )
- return self.component_grid(trans, **kwd)
-
- @web.expose
- @require_login("browse review")
- def browse_review(self, trans, **kwd):
- message = escape(kwd.get("message", ""))
- status = kwd.get("status", "done")
- review = review_util.get_review(trans.app, kwd["id"])
- repository = review.repository
- repo = repository.hg_repo
- rev, changeset_revision_label = hg_util.get_rev_label_from_changeset_revision(repo, review.changeset_revision)
- return trans.fill_template(
- "/webapps/tool_shed/repository_review/browse_review.mako",
- repository=repository,
- changeset_revision_label=changeset_revision_label,
- review=review,
- message=message,
- status=status,
- )
-
- def copy_review(self, trans, review_to_copy, review):
- for component_review in review_to_copy.component_reviews:
- copied_component_review = trans.model.ComponentReview(
- repository_review_id=review.id,
- component_id=component_review.component.id,
- comment=component_review.comment,
- private=component_review.private,
- approved=component_review.approved,
- rating=component_review.rating,
- )
- trans.sa_session.add(copied_component_review)
- trans.sa_session.flush()
- review.approved = review_to_copy.approved
- review.rating = review_to_copy.rating
- trans.sa_session.add(review)
- trans.sa_session.flush()
-
- @web.expose
- @require_login("create component")
- def create_component(self, trans, **kwd):
- message = escape(kwd.get("message", ""))
- status = kwd.get("status", "done")
- name = kwd.get("name", "")
- description = kwd.get("description", "")
- if kwd.get("create_component_button", False):
- if not name or not description:
- message = "Enter a valid name and a description"
- status = "error"
- elif review_util.get_component_by_name(trans.app, name):
- message = "A component with that name already exists"
- status = "error"
- else:
- component = trans.app.model.Component(name=name, description=description)
- trans.sa_session.add(component)
- trans.sa_session.flush()
- message = f"Component '{escape(component.name)}' has been created"
- status = "done"
- trans.response.send_redirect(
- web.url_for(
- controller="repository_review", action="manage_components", message=message, status=status
- )
- )
- return trans.fill_template(
- "/webapps/tool_shed/repository_review/create_component.mako",
- name=name,
- description=description,
- message=message,
- status=status,
- )
-
- @web.expose
- @require_login("create review")
- def create_review(self, trans, **kwd):
- # The value of the received id is the encoded repository id.
- message = escape(kwd.get("message", ""))
- status = kwd.get("status", "done")
- repository_id = kwd.get("id", None)
- changeset_revision = kwd.get("changeset_revision", None)
- previous_review_id = kwd.get("previous_review_id", None)
- create_without_copying = "create_without_copying" in kwd
- if repository_id:
- if changeset_revision:
- # Make sure there is not already a review of the revision by the user.
- repository = repository_util.get_repository_in_tool_shed(trans.app, repository_id)
- if review_util.get_review_by_repository_id_changeset_revision_user_id(
- app=trans.app,
- repository_id=repository_id,
- changeset_revision=changeset_revision,
- user_id=trans.security.encode_id(trans.user.id),
- ):
- message = f"You have already created a review for revision {changeset_revision} of repository {escape(repository.name)} ."
- status = "error"
- else:
- # See if there are any reviews for previous changeset revisions that the user can copy.
- if (
- not create_without_copying
- and not previous_review_id
- and review_util.has_previous_repository_reviews(trans.app, repository, changeset_revision)
- ):
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="select_previous_review", **kwd)
- )
- # A review can be initially performed only on an installable revision of a repository, so make sure we have metadata associated
- # with the received changeset_revision.
- repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision(
- trans.app, repository_id, changeset_revision
- )
- if repository_metadata:
- metadata = repository_metadata.metadata
- if metadata:
- review = trans.app.model.RepositoryReview(
- repository_id=repository_metadata.repository_id,
- changeset_revision=changeset_revision,
- user_id=trans.user.id,
- rating=None,
- deleted=False,
- )
- trans.sa_session.add(review)
- trans.sa_session.flush()
- if previous_review_id:
- review_to_copy = review_util.get_review(trans.app, previous_review_id)
- self.copy_review(trans, review_to_copy, review)
- review_id = trans.security.encode_id(review.id)
- message = f"Begin your review of revision {changeset_revision} of repository {repository.name} ."
- status = "done"
- trans.response.send_redirect(
- web.url_for(
- controller="repository_review",
- action="edit_review",
- id=review_id,
- message=message,
- status=status,
- )
- )
- else:
- message = (
- "A new review cannot be created for revision %s of repository %s . Select a valid revision and try again."
- % (changeset_revision, escape(repository.name))
- )
- kwd["message"] = message
- kwd["status"] = "error"
- else:
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="manage_repository_reviews", **kwd)
- )
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="view_or_manage_repository", **kwd)
- )
-
- @web.expose
- @require_login("edit component")
- def edit_component(self, trans, **kwd):
- message = escape(kwd.get("message", ""))
- status = kwd.get("status", "done")
- id = kwd.get("id", None)
- if not id:
- message = "No component ids received for editing"
- trans.response.send_redirect(
- web.url_for(controller="admin", action="manage_categories", message=message, status="error")
- )
- component = review_util.get_component(trans.app, id)
- if kwd.get("edit_component_button", False):
- new_description = kwd.get("description", "").strip()
- if component.description != new_description:
- component.description = new_description
- trans.sa_session.add(component)
- trans.sa_session.flush()
- message = f"The information has been saved for the component named {escape(component.name)} "
- status = "done"
- return trans.response.send_redirect(
- web.url_for(
- controller="repository_review", action="manage_components", message=message, status=status
- )
- )
- return trans.fill_template(
- "/webapps/tool_shed/repository_review/edit_component.mako",
- component=component,
- message=message,
- status=status,
- )
-
- @web.expose
- @require_login("edit review")
- def edit_review(self, trans, **kwd):
- # The value of the received id is the encoded review id.
- message = escape(kwd.get("message", ""))
- status = kwd.get("status", "done")
- review_id = kwd.get("id", None)
- review = review_util.get_review(trans.app, review_id)
- components_dict = {}
- for component in review_util.get_components(trans.app):
- components_dict[component.name] = dict(component=component, component_review=None)
- repository = review.repository
- repo = repository.hg_repo
- for component_review in review.component_reviews:
- if component_review and component_review.component:
- component_name = component_review.component.name
- if component_name in components_dict:
- component_review_dict = components_dict[component_name]
- component_review_dict["component_review"] = component_review
- components_dict[component_name] = component_review_dict
- # Handle a Save button click.
- save_button_clicked = False
- save_buttons = [f"{comp_name}{STRSEP}review_button" for comp_name in components_dict.keys()]
- save_buttons.append("revision_approved_button")
- for save_button in save_buttons:
- if save_button in kwd:
- save_button_clicked = True
- break
- if save_button_clicked:
- # Handle the revision_approved_select_field value.
- revision_approved = kwd.get("revision_approved", None)
- revision_approved_setting_changed = False
- if revision_approved:
- revision_approved = str(revision_approved)
- if review.approved != revision_approved:
- revision_approved_setting_changed = True
- review.approved = revision_approved
- trans.sa_session.add(review)
- trans.sa_session.flush()
- saved_component_names = []
- for component_name in components_dict.keys():
- flushed = False
- # Retrieve the review information from the form.
- # The star rating form field is a radio button list, so it will not be received if it was not clicked in the form.
- # Due to this behavior, default the value to 0.
- rating = 0
- private = False
- for k, v in kwd.items():
- if k.startswith(f"{component_name}{STRSEP}"):
- component_review_attr = k.replace(f"{component_name}{STRSEP}", "")
- if component_review_attr == "component_id":
- component_id = str(v)
- elif component_review_attr == "comment":
- comment = str(v)
- elif component_review_attr == "private":
- private = CheckboxField.is_checked(v)
- elif component_review_attr == "approved":
- approved = str(v)
- elif component_review_attr == "rating":
- rating = int(str(v))
- component = review_util.get_component(trans.app, component_id)
- component_review = review_util.get_component_review_by_repository_review_id_component_id(
- trans.app, review_id, component_id
- )
- if component_review:
- # See if the existing component review should be updated.
- if (
- component_review.comment != comment
- or component_review.private != private
- or component_review.approved != approved
- or component_review.rating != rating
- ):
- component_review.comment = comment
- component_review.private = private
- component_review.approved = approved
- component_review.rating = rating
- trans.sa_session.add(component_review)
- trans.sa_session.flush()
- flushed = True
- saved_component_names.append(component_name)
- else:
- # See if a new component_review should be created.
- if comment or private or approved != trans.model.ComponentReview.approved_states.NO or rating:
- component_review = trans.model.ComponentReview(
- repository_review_id=review.id,
- component_id=component.id,
- comment=comment,
- approved=approved,
- rating=rating,
- )
- trans.sa_session.add(component_review)
- trans.sa_session.flush()
- flushed = True
- saved_component_names.append(component_name)
- if flushed:
- # Update the repository rating value to be the average of all component review ratings.
- average_rating = (
- trans.sa_session.query(func.avg(trans.model.ComponentReview.table.c.rating))
- .filter(
- and_(
- trans.model.ComponentReview.table.c.repository_review_id == review.id,
- trans.model.ComponentReview.table.c.deleted == false(),
- trans.model.ComponentReview.table.c.approved
- != trans.model.ComponentReview.approved_states.NA,
- )
- )
- .scalar()
- )
- if average_rating is not None:
- review.rating = int(average_rating)
- trans.sa_session.add(review)
- trans.sa_session.flush()
- # Update the information in components_dict.
- if component_name in components_dict:
- component_review_dict = components_dict[component_name]
- component_review_dict["component_review"] = component_review
- components_dict[component_name] = component_review_dict
- if revision_approved_setting_changed:
- message += f"Approved value {review.approved} saved for this revision. "
- if saved_component_names:
- message += f"Reviews were saved for components: {', '.join(saved_component_names)}"
- if not revision_approved_setting_changed and not saved_component_names:
- message += "No changes were made to this review, so nothing was saved."
- if review and review.approved:
- selected_value = review.approved
- else:
- selected_value = trans.model.ComponentReview.approved_states.NO
- revision_approved_select_field = grids_util.build_approved_select_field(
- trans, name="revision_approved", selected_value=selected_value, for_component=False
- )
- rev, changeset_revision_label = hg_util.get_rev_label_from_changeset_revision(repo, review.changeset_revision)
- return trans.fill_template(
- "/webapps/tool_shed/repository_review/edit_review.mako",
- repository=repository,
- review=review,
- changeset_revision_label=changeset_revision_label,
- revision_approved_select_field=revision_approved_select_field,
- components_dict=components_dict,
- message=message,
- status=status,
- )
-
- @web.expose
- @require_login("manage components")
- def manage_components(self, trans, **kwd):
- if "operation" in kwd:
- operation = kwd["operation"].lower()
- if operation == "create":
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="create_component", **kwd)
- )
- elif operation == "edit":
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="edit_component", **kwd)
- )
- if "message" not in kwd:
- message = "This is a list of repository components (features) that can be reviewed. You can add new components or change "
- message += "the description of an existing component if appropriate. Click on the name link to change the description."
- status = "warning"
- kwd["message"] = message
- kwd["status"] = status
- return self.component_grid(trans, **kwd)
-
- @web.expose
- @require_login("manage repositories ready for review")
- def manage_repositories_ready_for_review(self, trans, **kwd):
- """
- A repository is ready to be reviewed if one of the following conditions is met:
-
- 1) It contains no tools
- 2) It contains tools the tools_functionally_correct flag is set to True. This implies that the repository metadata revision was installed and tested
- by the Tool Shed's install and test framework.
- """
- if "operation" in kwd:
- operation = kwd["operation"].lower()
- if operation == "inspect repository revisions":
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="create_review", **kwd)
- )
- if operation == "view_or_manage_repository":
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="view_or_manage_repository", **kwd)
- )
- message = "Any of these repositories that contain tools have been installed into Galaxy and proven to be functionally correct by executing the tests defined "
- message += "for each tool. Repositories that do not contain tools have not been installed into Galaxy. "
- kwd["message"] = message
- kwd["status"] = "warning"
- return self.repositories_ready_for_review_grid(trans, **kwd)
-
- @web.expose
- @require_login("manage repositories reviewed by me")
- def manage_repositories_reviewed_by_me(self, trans, **kwd):
- # The value of the received id is the encoded repository id.
- if "operation" in kwd:
- kwd["mine"] = True
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="manage_repositories_with_reviews", **kwd)
- )
- self.repositories_reviewed_by_me_grid.title = "Repositories reviewed by me"
- return self.repositories_reviewed_by_me_grid(trans, **kwd)
-
- @web.expose
- @require_login("manage repositories with invalid tests")
- def manage_repositories_with_invalid_tests(self, trans, **kwd):
- """
- Display a list of repositories that contain tools, have not yet been reviewed, and have invalid functional tests. Tests are defined as
- invalid if they are missing from the tool config or if defined test data is not included in the repository.
- """
- if "operation" in kwd:
- operation = kwd["operation"].lower()
- if operation == "inspect repository revisions":
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="create_review", **kwd)
- )
- if operation == "view_or_manage_repository":
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="view_or_manage_repository", **kwd)
- )
- message = "These repositories contain tools with missing functional tests or test data. "
- kwd["message"] = message
- kwd["status"] = "warning"
- return self.repositories_with_no_tool_tests_grid(trans, **kwd)
-
- @web.expose
- @require_login("manage repositories with reviews")
- def manage_repositories_with_reviews(self, trans, **kwd):
- # The value of the received id is the encoded repository id.
- if "operation" in kwd:
- operation = kwd["operation"].lower()
- if operation == "inspect repository revisions":
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="manage_repository_reviews", **kwd)
- )
- if operation == "view_or_manage_repository":
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="view_or_manage_repository", **kwd)
- )
- return self.repositories_with_reviews_grid(trans, **kwd)
-
- @web.expose
- @require_login("manage repositories without reviews")
- def manage_repositories_without_reviews(self, trans, **kwd):
- if "operation" in kwd:
- operation = kwd["operation"].lower()
- if operation == "inspect repository revisions":
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="create_review", **kwd)
- )
- if operation == "view_or_manage_repository":
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="view_or_manage_repository", **kwd)
- )
- return self.repositories_without_reviews_grid(trans, **kwd)
-
- @web.expose
- @require_login("manage repository reviews")
- def manage_repository_reviews(self, trans, mine=False, **kwd):
- # The value of the received id is the encoded repository id.
- message = escape(kwd.get("message", ""))
- status = kwd.get("status", "done")
- repository_id = kwd.get("id", None)
- if repository_id:
- repository = suc.get_repository_in_tool_shed(trans.app, repository_id)
- repo = repository.hg_repo
- metadata_revision_hashes = [
- metadata_revision.changeset_revision for metadata_revision in repository.metadata_revisions
- ]
- reviewed_revision_hashes = [review.changeset_revision for review in repository.reviews]
- reviews_dict = {}
- for changeset in hg_util.get_reversed_changelog_changesets(repo):
- changeset_revision = str(repo[changeset])
- if changeset_revision in metadata_revision_hashes or changeset_revision in reviewed_revision_hashes:
- rev, changeset_revision_label = hg_util.get_rev_label_from_changeset_revision(
- repo, changeset_revision
- )
- if changeset_revision in reviewed_revision_hashes:
- # Find the review for this changeset_revision
- repository_reviews = review_util.get_reviews_by_repository_id_changeset_revision(
- trans.app, repository_id, changeset_revision
- )
- # Determine if the current user can add a review to this revision.
- can_add_review = trans.user not in [
- repository_review.user for repository_review in repository_reviews
- ]
- repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision(
- trans.app, repository_id, changeset_revision
- )
- if repository_metadata:
- repository_metadata_reviews = util.listify(repository_metadata.reviews)
- else:
- repository_metadata_reviews = []
- else:
- repository_reviews = []
- repository_metadata_reviews = []
- can_add_review = True
- installable = changeset_revision in metadata_revision_hashes
- revision_dict = dict(
- changeset_revision_label=changeset_revision_label,
- repository_reviews=repository_reviews,
- repository_metadata_reviews=repository_metadata_reviews,
- installable=installable,
- can_add_review=can_add_review,
- )
- reviews_dict[changeset_revision] = revision_dict
- return trans.fill_template(
- "/webapps/tool_shed/repository_review/reviews_of_repository.mako",
- repository=repository,
- reviews_dict=reviews_dict,
- mine=mine,
- message=message,
- status=status,
- )
-
- @web.expose
- @require_login("manage repository reviews of revision")
- def manage_repository_reviews_of_revision(self, trans, **kwd):
- # The value of the received id is the encoded repository id.
- message = escape(kwd.get("message", ""))
- status = kwd.get("status", "done")
- repository_id = kwd.get("id", None)
- changeset_revision = kwd.get("changeset_revision", None)
- repository = repository_util.get_repository_in_tool_shed(trans.app, repository_id)
- repo = repository.hg_repo
- installable = changeset_revision in [
- metadata_revision.changeset_revision for metadata_revision in repository.metadata_revisions
- ]
- rev, changeset_revision_label = hg_util.get_rev_label_from_changeset_revision(repo, changeset_revision)
- reviews = review_util.get_reviews_by_repository_id_changeset_revision(
- trans.app, repository_id, changeset_revision
- )
- return trans.fill_template(
- "/webapps/tool_shed/repository_review/reviews_of_changeset_revision.mako",
- repository=repository,
- changeset_revision=changeset_revision,
- changeset_revision_label=changeset_revision_label,
- reviews=reviews,
- installable=installable,
- message=message,
- status=status,
- )
-
- @web.expose
- @require_login("repository reviews by user")
- def repository_reviews_by_user(self, trans, **kwd):
-
- if "operation" in kwd:
- operation = kwd["operation"].lower()
- # The value of the received id is the encoded review id.
- review = review_util.get_review(trans.app, kwd["id"])
- repository = review.repository
- kwd["id"] = trans.security.encode_id(repository.id)
- if operation == "inspect repository revisions":
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="manage_repository_reviews", **kwd)
- )
- if operation == "view_or_manage_repository":
- kwd["changeset_revision"] = review.changeset_revision
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="view_or_manage_repository", **kwd)
- )
- # The user may not be the current user. The value of the received id is the encoded user id.
- user = suc.get_user(trans.app, kwd["id"])
- self.repository_reviews_by_user_grid.title = f"All repository revision reviews for user '{user.username}'"
- return self.repository_reviews_by_user_grid(trans, **kwd)
-
- @web.expose
- @require_login("reviewed repositories i own")
- def reviewed_repositories_i_own(self, trans, **kwd):
- # The value of the received id is the encoded repository id.
- if "operation" in kwd:
- operation = kwd["operation"].lower()
- if operation == "inspect repository revisions":
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="manage_repository_reviews", **kwd)
- )
- if operation == "view_or_manage_repository":
- return trans.response.send_redirect(
- web.url_for(controller="repository_review", action="view_or_manage_repository", **kwd)
- )
- return self.reviewed_repositories_i_own_grid(trans, **kwd)
-
- @web.expose
- @require_login("select previous review")
- def select_previous_review(self, trans, **kwd):
- # The value of the received id is the encoded repository id.
- message = escape(kwd.get("message", ""))
- status = kwd.get("status", "done")
- repository = repository_util.get_repository_in_tool_shed(trans.app, kwd["id"])
- changeset_revision = kwd.get("changeset_revision", None)
- repo = repository.hg_repo
- previous_reviews_dict = review_util.get_previous_repository_reviews(trans.app, repository, changeset_revision)
- rev, changeset_revision_label = hg_util.get_rev_label_from_changeset_revision(repo, changeset_revision)
- return trans.fill_template(
- "/webapps/tool_shed/repository_review/select_previous_review.mako",
- repository=repository,
- changeset_revision=changeset_revision,
- changeset_revision_label=changeset_revision_label,
- previous_reviews_dict=previous_reviews_dict,
- message=message,
- status=status,
- )
-
- @web.expose
- @require_login("view or manage repository")
- def view_or_manage_repository(self, trans, **kwd):
- repository = repository_util.get_repository_in_tool_shed(trans.app, kwd["id"])
- if trans.user_is_admin or repository.user == trans.user:
- return trans.response.send_redirect(web.url_for(controller="repository", action="manage_repository", **kwd))
- else:
- return trans.response.send_redirect(web.url_for(controller="repository", action="view_repository", **kwd))
diff --git a/lib/tool_shed/webapp/model/__init__.py b/lib/tool_shed/webapp/model/__init__.py
index 810665b404b..d246f373e0a 100644
--- a/lib/tool_shed/webapp/model/__init__.py
+++ b/lib/tool_shed/webapp/model/__init__.py
@@ -20,7 +20,6 @@ from sqlalchemy import (
Column,
DateTime,
desc,
- false,
ForeignKey,
Integer,
not_,
@@ -132,7 +131,6 @@ class User(Base, Dictifiable, _HasTable):
& not_(Role.name == User.email) # type: ignore[has-type]
),
)
- repository_reviews = relationship("RepositoryReview", back_populates="user")
def __init__(self, email=None, password=None):
self.email = email
@@ -375,8 +373,6 @@ class Repository(Base, Dictifiable, _HasTable):
back_populates="repository",
)
roles = relationship("RepositoryRoleAssociation", back_populates="repository")
- reviews = relationship("RepositoryReview", back_populates="repository")
- reviewers = relationship("User", secondary=lambda: RepositoryReview.__table__, viewonly=True) # type: ignore
dict_collection_visible_keys = [
"id",
@@ -541,114 +537,6 @@ class Repository(Base, Dictifiable, _HasTable):
return rval
-class RepositoryReview(Base, Dictifiable, _HasTable):
- __tablename__ = "repository_review"
-
- id = Column(Integer, primary_key=True)
- create_time = Column(DateTime, default=now)
- update_time = Column(DateTime, default=now, onupdate=now)
- repository_id = Column(ForeignKey("repository.id"), index=True)
- changeset_revision = Column(TrimmedString(255), index=True)
- user_id = Column(ForeignKey("galaxy_user.id"), index=True, nullable=False)
- approved = Column(TrimmedString(255))
- rating = Column(Integer, index=True)
- deleted = Column(Boolean, index=True, default=False)
- repository = relationship("Repository", back_populates="reviews")
- # Take care when using the mapper below! It should be used only when a new review is being created for a repository change set revision.
- # Keep in mind that repository_metadata records can be removed from the database for certain change set revisions when metadata is being
- # reset on a repository!
- repository_metadata = relationship(
- "RepositoryMetadata",
- viewonly=True,
- foreign_keys=lambda: [RepositoryReview.repository_id, RepositoryReview.changeset_revision],
- primaryjoin=lambda: (
- (RepositoryReview.repository_id == RepositoryMetadata.repository_id) # type: ignore[has-type]
- & (RepositoryReview.changeset_revision == RepositoryMetadata.changeset_revision) # type: ignore[has-type]
- ),
- back_populates="reviews",
- )
- user = relationship("User", back_populates="repository_reviews")
-
- component_reviews = relationship(
- "ComponentReview",
- viewonly=True,
- primaryjoin=lambda: (
- (RepositoryReview.id == ComponentReview.repository_review_id) # type: ignore[has-type]
- & (ComponentReview.deleted == false()) # type: ignore[has-type]
- ),
- back_populates="repository_review",
- )
-
- private_component_reviews = relationship(
- "ComponentReview",
- viewonly=True,
- primaryjoin=lambda: (
- (RepositoryReview.id == ComponentReview.repository_review_id) # type: ignore[has-type]
- & (ComponentReview.deleted == false()) # type: ignore[has-type]
- & (ComponentReview.private == true()) # type: ignore[has-type]
- ),
- )
-
- dict_collection_visible_keys = ["id", "repository_id", "changeset_revision", "user_id", "rating", "deleted"]
- dict_element_visible_keys = ["id", "repository_id", "changeset_revision", "user_id", "rating", "deleted"]
- approved_states = Bunch(NO="no", YES="yes")
-
- def __init__(self, deleted=False, **kwd):
- super().__init__(**kwd)
- self.deleted = deleted
-
-
-class ComponentReview(Base, Dictifiable, _HasTable):
- __tablename__ = "component_review"
-
- id = Column(Integer, primary_key=True)
- create_time = Column(DateTime, default=now)
- update_time = Column(DateTime, default=now, onupdate=now)
- repository_review_id = Column(ForeignKey("repository_review.id"), index=True)
- component_id = Column(ForeignKey("component.id"), index=True)
- comment = Column(TEXT)
- private = Column(Boolean, default=False)
- approved = Column(TrimmedString(255))
- rating = Column(Integer)
- deleted = Column(Boolean, index=True, default=False)
- repository_review = relationship("RepositoryReview", back_populates="component_reviews")
- component = relationship("Component")
-
- dict_collection_visible_keys = [
- "id",
- "repository_review_id",
- "component_id",
- "private",
- "approved",
- "rating",
- "deleted",
- ]
- dict_element_visible_keys = [
- "id",
- "repository_review_id",
- "component_id",
- "private",
- "approved",
- "rating",
- "deleted",
- ]
- approved_states = Bunch(NO="no", YES="yes", NA="not_applicable")
-
- def __init__(self, private=False, approved=False, deleted=False, **kwd):
- super().__init__(**kwd)
- self.private = private
- self.approved = approved
- self.deleted = deleted
-
-
-class Component(Base, _HasTable):
- __tablename__ = "component"
-
- id = Column(Integer, primary_key=True)
- name = Column(TrimmedString(255))
- description = Column(TEXT)
-
-
class ItemRatingAssociation(_HasTable):
def __init__(self, id=None, user=None, item=None, rating=0, comment=""):
self.id = id
@@ -841,23 +729,13 @@ class RepositoryMetadata(Dictifiable, _HasTable):
# After the map_imperatively statement has been executed, the members of the
-# properties dictionary (repository, reviews) will be available as instrumented
+# properties dictionary (repository) will be available as instrumented
# class attributes on RepositoryMetadata.
mapper_registry.map_imperatively(
RepositoryMetadata,
RepositoryMetadata.table,
properties=dict(
repository=relationship(Repository, back_populates="metadata_revisions"),
- reviews=relationship(
- RepositoryReview,
- viewonly=True,
- foreign_keys=lambda: [RepositoryReview.repository_id, RepositoryReview.changeset_revision],
- primaryjoin=lambda: (
- (RepositoryReview.repository_id == RepositoryMetadata.repository_id)
- & (RepositoryReview.changeset_revision == RepositoryMetadata.changeset_revision)
- ),
- back_populates="repository_metadata",
- ),
),
)
diff --git a/lib/tool_shed/webapp/security/__init__.py b/lib/tool_shed/webapp/security/__init__.py
index bd6c12acb82..29c15a7a57e 100644
--- a/lib/tool_shed/webapp/security/__init__.py
+++ b/lib/tool_shed/webapp/security/__init__.py
@@ -164,18 +164,6 @@ class CommunityRBACAgent(RBACAgent):
return None
return role
- def get_repository_reviewer_role(self):
- return (
- self.sa_session.query(self.model.Role)
- .filter(
- and_(
- self.model.Role.table.c.name == "Repository Reviewer",
- self.model.Role.table.c.type == self.model.Role.types.SYSTEM,
- )
- )
- .first()
- )
-
def set_entity_group_associations(self, groups=None, users=None, roles=None, delete_existing_assocs=True):
if groups is None:
groups = []
@@ -283,26 +271,6 @@ class CommunityRBACAgent(RBACAgent):
return True
return False
- def user_can_review_repositories(self, user):
- if user:
- roles = user.all_roles()
- if roles:
- repository_reviewer_role = self.get_repository_reviewer_role()
- if repository_reviewer_role:
- return repository_reviewer_role in roles
- return False
-
- def user_can_browse_component_review(self, app, repository, component_review, user):
- if component_review and user:
- if self.can_push(app, user, repository):
- # A user with write permission on the repository can access private/public component reviews.
- return True
- else:
- if self.user_can_review_repositories(user):
- # Reviewers can access private/public component reviews.
- return True
- return False
-
def get_permitted_actions(filter=None):
"""Utility method to return a subset of RBACAgent's permitted actions"""
diff --git a/lib/tool_shed/webapp/templates/webapps/tool_shed/admin/index.mako b/lib/tool_shed/webapp/templates/webapps/tool_shed/admin/index.mako
index b60ba1af1c1..fdd53b539f9 100644
--- a/lib/tool_shed/webapp/templates/webapps/tool_shed/admin/index.mako
+++ b/lib/tool_shed/webapp/templates/webapps/tool_shed/admin/index.mako
@@ -31,7 +31,6 @@
%def>
<%def name="left_panel()">
- <% can_review_repositories = trans.app.security_agent.user_can_review_repositories( trans.user ) %>
diff --git a/lib/tool_shed/webapp/templates/webapps/tool_shed/common/common.mako b/lib/tool_shed/webapp/templates/webapps/tool_shed/common/common.mako
index 37b90a5b303..c1d43f10ea8 100644
--- a/lib/tool_shed/webapp/templates/webapps/tool_shed/common/common.mako
+++ b/lib/tool_shed/webapp/templates/webapps/tool_shed/common/common.mako
@@ -152,19 +152,3 @@
${heads_str}
%def>
-
-<%def name="render_review_comment( comment_text )">
-
-
-%def>
diff --git a/lib/tool_shed/webapp/templates/webapps/tool_shed/common/repository_actions_menu.mako b/lib/tool_shed/webapp/templates/webapps/tool_shed/common/repository_actions_menu.mako
index 008e9103a55..41c545eadb9 100644
--- a/lib/tool_shed/webapp/templates/webapps/tool_shed/common/repository_actions_menu.mako
+++ b/lib/tool_shed/webapp/templates/webapps/tool_shed/common/repository_actions_menu.mako
@@ -2,7 +2,6 @@
<%def name="render_tool_shed_repository_actions( repository, metadata=None, changeset_revision=None )">
<%
- from tool_shed.util.review_util import can_browse_repository_reviews, changeset_revision_reviewed_by_user, get_review_by_repository_id_changeset_revision_user_id
from tool_shed.util.metadata_util import is_malicious
if repository.metadata_revisions:
@@ -34,11 +33,6 @@
can_browse_contents = not is_new
- if can_browse_repository_reviews( trans.app, trans.user, repository ):
- can_browse_reviews = True
- else:
- can_browse_reviews = False
-
if trans.user and trans.user != repository.user:
can_contact_owner = True
else:
@@ -73,28 +67,6 @@
can_rate = True
else:
can_rate = False
-
- if metadata is not None and changeset_revision is not None:
- if has_metadata and not is_deprecated and trans.app.security_agent.user_can_review_repositories( trans.user ):
- can_review_repository = True
- else:
- can_review_repository = False
- if changeset_revision_reviewed_by_user( trans.user, repository, changeset_revision ):
- reviewed_by_user = True
- else:
- reviewed_by_user = False
- else:
- can_review_repository = False
- reviewed_by_user = False
-
- if reviewed_by_user:
- review = get_review_by_repository_id_changeset_revision_user_id( app=trans.app,
- repository_id=trans.security.encode_id( repository.id ),
- changeset_revision=changeset_revision,
- user_id=trans.security.encode_id( trans.user.id ) )
- review_id = trans.security.encode_id( review.id )
- else:
- review_id = None
if not is_new and not is_deprecated:
can_set_metadata = True
@@ -134,16 +106,6 @@
%else:
- %if can_review_repository:
- %if reviewed_by_user:
-
Manage my review of this revision
- %else:
-
Add a review to this revision
- %endif
- %endif
- %if can_browse_reviews:
-
Browse reviews of this repository
- %endif
%if can_upload:
Upload files to repository
%endif
diff --git a/lib/tool_shed/webapp/templates/webapps/tool_shed/index.mako b/lib/tool_shed/webapp/templates/webapps/tool_shed/index.mako
index ca554f96684..7b3d776af14 100644
--- a/lib/tool_shed/webapp/templates/webapps/tool_shed/index.mako
+++ b/lib/tool_shed/webapp/templates/webapps/tool_shed/index.mako
@@ -28,7 +28,6 @@
%def>
<%def name="left_panel()">
- <% can_review_repositories = trans.app.security_agent.user_can_review_repositories( trans.user ) %>
@@ -93,11 +92,6 @@
Repositories I can administer
%endif
- %if has_reviewed_repositories:
-
- %endif
%if has_deprecated_repositories:
%endif
- %if can_review_repositories:
-
-
- Reviewing Repositories
-
-
-
-
- Reviewing Repositories With Tools
-
-
- %endif
%else:
-
%endif
%if can_set_malicious:
diff --git a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository/rate_repository.mako b/lib/tool_shed/webapp/templates/webapps/tool_shed/repository/rate_repository.mako
index 72e49ca9535..925531628e7 100644
--- a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository/rate_repository.mako
+++ b/lib/tool_shed/webapp/templates/webapps/tool_shed/repository/rate_repository.mako
@@ -92,19 +92,6 @@ ${render_tool_shed_repository_actions( repository, metadata=None, changeset_revi
${render_star_rating( 'rating', rating )}
-
@@ -112,42 +99,4 @@ ${render_tool_shed_repository_actions( repository, metadata=None, changeset_revi
- %if repository.ratings and ( len( repository.ratings ) > 1 or repository.ratings[0] != rra ):
-
- %endif
%endif
diff --git a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository/view_repository.mako b/lib/tool_shed/webapp/templates/webapps/tool_shed/repository/view_repository.mako
index d07644ff0fa..9bcdda09f40 100644
--- a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository/view_repository.mako
+++ b/lib/tool_shed/webapp/templates/webapps/tool_shed/repository/view_repository.mako
@@ -230,47 +230,5 @@ ${render_repository_items( metadata, containers_dict, can_set_metadata=False, re
-
-
%endif
diff --git a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/browse_review.mako b/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/browse_review.mako
deleted file mode 100644
index c338d56bb3a..00000000000
--- a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/browse_review.mako
+++ /dev/null
@@ -1,118 +0,0 @@
-<%inherit file="/base.mako"/>
-<%namespace file="/message.mako" import="render_msg" />
-<%namespace file="/webapps/tool_shed/common/common.mako" import="*" />
-<%namespace file="/webapps/tool_shed/common/repository_actions_menu.mako" import="render_tool_shed_repository_actions" />
-
-<%
- from galaxy.web.form_builder import CheckboxField
- from tool_shed.util.container_util import STRSEP
- from tool_shed.util.basic_util import to_html_string
-%>
-
-<%def name="stylesheets()">
- ${h.css('base')}
-%def>
-
-<%def name="javascripts()">
- ${parent.javascripts()}
-%def>
-
-${render_tool_shed_repository_actions( repository=repository, changeset_revision=review.changeset_revision )}
-
-%if message:
- ${render_msg( message, status )}
-%endif
-
-
diff --git a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/create_component.mako b/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/create_component.mako
deleted file mode 100644
index 263998921fd..00000000000
--- a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/create_component.mako
+++ /dev/null
@@ -1,34 +0,0 @@
-<%inherit file="/base.mako"/>
-<%namespace file="/message.mako" import="render_msg" />
-
-<%def name="javascripts()">
- ${parent.javascripts()}
-
-%def>
-
-%if message:
- ${render_msg( message, status )}
-%endif
-
-
diff --git a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/edit_component.mako b/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/edit_component.mako
deleted file mode 100644
index 483f4024551..00000000000
--- a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/edit_component.mako
+++ /dev/null
@@ -1,37 +0,0 @@
-<%inherit file="/base.mako"/>
-<%namespace file="/message.mako" import="render_msg" />
-
-%if message:
- ${render_msg( message, status )}
-%endif
-
-
diff --git a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/edit_review.mako b/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/edit_review.mako
deleted file mode 100644
index 3734130b30c..00000000000
--- a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/edit_review.mako
+++ /dev/null
@@ -1,162 +0,0 @@
-<%inherit file="/base.mako"/>
-<%namespace file="/message.mako" import="render_msg" />
-<%namespace file="/webapps/tool_shed/common/common.mako" import="*" />
-<%namespace file="/webapps/tool_shed/common/repository_actions_menu.mako" import="render_tool_shed_repository_actions" />
-
-<%
- from galaxy.web.form_builder import CheckboxField
- from tool_shed.grids.util import build_approved_select_field
- from tool_shed.util.container_util import STRSEP
-%>
-
-<%def name="stylesheets()">
- ${h.css('base')}
-%def>
-
-<%def name="javascripts()">
- ${parent.javascripts()}
-%def>
-
-${render_tool_shed_repository_actions( repository=repository, changeset_revision=review.changeset_revision )}
-
-%if message:
- ${render_msg( message, status )}
-%endif
-
-
diff --git a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/grid.mako b/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/grid.mako
deleted file mode 100644
index 2e645fe5a2e..00000000000
--- a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/grid.mako
+++ /dev/null
@@ -1 +0,0 @@
-<%inherit file="/legacy/grid_base.mako"/>
diff --git a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/reviews_of_changeset_revision.mako b/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/reviews_of_changeset_revision.mako
deleted file mode 100644
index 54554e06797..00000000000
--- a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/reviews_of_changeset_revision.mako
+++ /dev/null
@@ -1,112 +0,0 @@
-<%inherit file="/base.mako"/>
-<%namespace file="/message.mako" import="render_msg" />
-<%namespace file="/webapps/tool_shed/common/common.mako" import="*" />
-<%namespace file="/webapps/tool_shed/repository/common.mako" import="*" />
-<%namespace file="/webapps/tool_shed/common/repository_actions_menu.mako" import="render_tool_shed_repository_actions" />
-
-<%
- from tool_shed.grids.util import build_approved_select_field
- from tool_shed.util.container_util import STRSEP
-
- if installable:
- installable_str = 'yes'
- else:
- installable_str = 'no'
- can_review_repositories = trans.app.security_agent.user_can_review_repositories( trans.user )
-%>
-
-<%!
- def inherit(context):
- if context.get('use_panels'):
- return '/webapps/tool_shed/base_panels.mako'
- else:
- return '/base.mako'
-%>
-<%inherit file="${inherit(context)}"/>
-
-<%def name="stylesheets()">
- ${h.css('base')}
-%def>
-
-<%def name="javascripts()">
- ${parent.javascripts()}
- ${common_javascripts(repository)}
-%def>
-
-${render_tool_shed_repository_actions( repository=repository, changeset_revision=changeset_revision )}
-
-%if message:
- ${render_msg( message, status )}
-%endif
-
-
diff --git a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/reviews_of_repository.mako b/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/reviews_of_repository.mako
deleted file mode 100644
index 1116d16e64a..00000000000
--- a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/reviews_of_repository.mako
+++ /dev/null
@@ -1,87 +0,0 @@
-<%inherit file="/base.mako"/>
-<%namespace file="/message.mako" import="render_msg" />
-<%namespace file="/webapps/tool_shed/common/common.mako" import="*" />
-<%namespace file="/webapps/tool_shed/repository/common.mako" import="*" />
-<%namespace file="/webapps/tool_shed/common/repository_actions_menu.mako" import="render_tool_shed_repository_actions" />
-
-<%
- if mine:
- title = "My reviews of repository '%s'" % repository.name
- else:
- title = "All reviews of repository '%s'" % repository.name
-%>
-
-<%!
- def inherit(context):
- if context.get('use_panels'):
- return '/webapps/tool_shed/base_panels.mako'
- else:
- return '/base.mako'
-%>
-<%inherit file="${inherit(context)}"/>
-
-<%def name="javascripts()">
- ${parent.javascripts()}
- ${common_javascripts(repository)}
-%def>
-
-${render_tool_shed_repository_actions( repository=repository )}
-
-%if message:
- ${render_msg( message, status )}
-%endif
-
-
diff --git a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/select_previous_review.mako b/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/select_previous_review.mako
deleted file mode 100644
index 56383b51afe..00000000000
--- a/lib/tool_shed/webapp/templates/webapps/tool_shed/repository_review/select_previous_review.mako
+++ /dev/null
@@ -1,89 +0,0 @@
-<%inherit file="/base.mako"/>
-<%namespace file="/message.mako" import="render_msg" />
-<%namespace file="/webapps/tool_shed/common/common.mako" import="*" />
-<%namespace file="/webapps/tool_shed/repository/common.mako" import="*" />
-<%namespace file="/webapps/tool_shed/common/repository_actions_menu.mako" import="render_tool_shed_repository_actions" />
-
-<%!
- def inherit(context):
- if context.get('use_panels'):
- return '/webapps/tool_shed/base_panels.mako'
- else:
- return '/base.mako'
-%>
-<%inherit file="${inherit(context)}"/>
-
-<%def name="stylesheets()">
- ${h.css('base')}
-%def>
-
-<%def name="javascripts()">
- ${parent.javascripts()}
- ${common_javascripts(repository)}
-%def>
-
-${render_tool_shed_repository_actions( repository=repository )}
-
-%if message:
- ${render_msg( message, status )}
-%endif
-
-
- You have elected to create a new review for revision ${changeset_revision_label} of this repository. Since previous revisions have been reviewed,
- you can select a previous review to copy to your new review, or click the Create a review without copying button.
-
-
-
diff --git a/test/unit/shed_unit/model/test_mapping.py b/test/unit/shed_unit/model/test_mapping.py
index 3100bbeb940..85713806c46 100644
--- a/test/unit/shed_unit/model/test_mapping.py
+++ b/test/unit/shed_unit/model/test_mapping.py
@@ -94,69 +94,6 @@ class TestCategory(BaseTest):
assert stored_obj.repositories == [repository_category_association]
-class TestComponent(BaseTest):
- def test_table(self, cls_):
- assert cls_.__tablename__ == "component"
-
- def test_columns(self, session, cls_):
- name, description = "a", "b"
- obj = cls_(name=name, description=description)
-
- with dbcleanup(session, obj) as obj_id:
- stored_obj = get_stored_obj(session, cls_, obj_id)
- assert stored_obj.id == obj_id
- assert stored_obj.name == name
- assert stored_obj.description == description
-
-
-class TestComponentReview(BaseTest):
- def test_table(self, cls_):
- assert cls_.__tablename__ == "component_review"
-
- def test_columns(self, session, cls_, repository_review, component):
- create_time = datetime.now()
- update_time = create_time + timedelta(hours=1)
- comment = "a"
- private = True
- approved = "b"
- rating = 1
- deleted = True
-
- obj = cls_()
- obj.create_time = create_time
- obj.update_time = update_time
- obj.repository_review = repository_review
- obj.component = component
- obj.comment = comment
- obj.private = private
- obj.approved = approved
- obj.rating = rating
- obj.deleted = deleted
-
- with dbcleanup(session, obj) as obj_id:
- stored_obj = get_stored_obj(session, cls_, obj_id)
- assert stored_obj.id == obj_id
- assert stored_obj.create_time == create_time
- assert stored_obj.update_time == update_time
- assert stored_obj.repository_review_id == repository_review.id
- assert stored_obj.component_id == component.id
- assert stored_obj.comment == comment
- assert stored_obj.private == private
- assert stored_obj.approved == approved
- assert stored_obj.rating == rating
- assert stored_obj.deleted == deleted
-
- def test_relationships(self, session, cls_, repository_review, component):
- obj = cls_()
- obj.repository_review = repository_review
- obj.component = component
-
- with dbcleanup(session, obj) as obj_id:
- stored_obj = get_stored_obj(session, cls_, obj_id)
- assert stored_obj.repository_review.id == repository_review.id
- assert stored_obj.component.id == component.id
-
-
class TestGalaxySession(BaseTest):
def test_table(self, cls_):
assert cls_.__tablename__ == "galaxy_session"
@@ -364,9 +301,7 @@ class TestRepository(BaseTest):
repository_rating_association,
repository_metadata_factory,
repository_role_association,
- repository_review_factory,
user,
- user_factory,
):
obj = cls_()
obj.user = user
@@ -374,16 +309,6 @@ class TestRepository(BaseTest):
obj.ratings.append(repository_rating_association)
obj.roles.append(repository_role_association)
- reviewer1 = user_factory()
- review1 = repository_review_factory()
- review1.user = reviewer1
- review1.repository = obj
-
- reviewer2 = user_factory()
- review2 = repository_review_factory()
- review2.user = reviewer2
- review2.repository = obj
-
metadata1 = repository_metadata_factory()
metadata1.repository = obj
metadata1.downloadable = False
@@ -400,12 +325,10 @@ class TestRepository(BaseTest):
assert stored_obj.categories == [repository_category_association]
assert stored_obj.ratings == [repository_rating_association]
assert stored_obj.roles == [repository_role_association]
- assert collection_consists_of_objects(stored_obj.reviews, review1, review2)
- assert collection_consists_of_objects(stored_obj.reviewers, reviewer1, reviewer2)
assert collection_consists_of_objects(stored_obj.metadata_revisions, metadata1, metadata2)
assert stored_obj.downloadable_revisions == [metadata2]
- delete_from_database(session, [reviewer1, reviewer2, review1, review2, metadata1, metadata2])
+ delete_from_database(session, [metadata1, metadata2])
class TestRepositoryCategoryAssociation(BaseTest):
@@ -491,7 +414,6 @@ class TestRepositoryMetadata(BaseTest):
session,
cls_,
repository,
- repository_review_factory,
user,
):
@@ -499,38 +421,6 @@ class TestRepositoryMetadata(BaseTest):
obj.repository = repository
obj.changeset_revision = "nonempty"
- # create 3 reviews
- review1 = repository_review_factory()
- review2 = repository_review_factory()
- review3 = repository_review_factory()
-
- # set the same user for all reviews
- review1.user = user
- review2.user = user
- review3.user = user
-
- # set the same repository for all reviews
- review1.repository = obj.repository
- review2.repository = obj.repository
- review3.repository = obj.repository
-
- # set the same changeset for reviews 1,2
- review1.changeset_revision = obj.changeset_revision
- review2.changeset_revision = obj.changeset_revision
- review3.changeset_revision = "something else" # this won't be in reviews for this metadata
-
- # add to session
- session.add(review1)
- session.add(review2)
- session.add(review3)
-
- with dbcleanup(session, obj) as obj_id:
- stored_obj = get_stored_obj(session, cls_, obj_id)
- assert stored_obj.repository.id == repository.id
- assert collection_consists_of_objects(stored_obj.reviews, review1, review2)
-
- delete_from_database(session, [review1, review2, review3])
-
class TestRepositoryRatingAssociation(BaseTest):
def test_table(self, cls_):
@@ -571,106 +461,6 @@ class TestRepositoryRatingAssociation(BaseTest):
assert stored_obj.user.id == user.id
-class TestRepositoryReview(BaseTest):
- def test_table(self, cls_):
- assert cls_.__tablename__ == "repository_review"
-
- def test_columns(self, session, cls_, repository, user):
- create_time = datetime.now()
- update_time = create_time + timedelta(hours=1)
- changeset_revision = "a"
- approved = "b"
- rating = 1
- deleted = True
-
- obj = cls_()
- obj.create_time = create_time
- obj.update_time = update_time
- obj.repository = repository
- obj.changeset_revision = changeset_revision
- obj.user = user
- obj.approved = approved
- obj.rating = rating
- obj.deleted = deleted
-
- with dbcleanup(session, obj) as obj_id:
- stored_obj = get_stored_obj(session, cls_, obj_id)
- assert stored_obj.id == obj_id
- assert stored_obj.create_time == create_time
- assert stored_obj.update_time == update_time
- assert stored_obj.repository_id == repository.id
- assert stored_obj.changeset_revision == changeset_revision
- assert stored_obj.user_id == user.id
- assert stored_obj.approved == approved
- assert stored_obj.rating == rating
- assert stored_obj.deleted == deleted
-
- def test_relationships(
- self, session, cls_, repository, user, repository_metadata_factory, component_review_factory
- ):
- obj = cls_()
- changeset = "nonempty"
- obj.changeset_revision = changeset
- obj.repository = repository
- obj.user = user
-
- metadata1 = repository_metadata_factory()
- metadata2 = repository_metadata_factory()
- metadata1.repository = repository
- metadata2.repository = repository
- metadata1.changeset_revision = changeset
- metadata2.changeset_revision = "something else"
-
- component_review1 = component_review_factory()
- component_review1.repository_review = obj
- component_review1.deleted = False
-
- component_review2 = component_review_factory()
- component_review2.repository_review = obj
- component_review2.deleted = False
- component_review2.private = True
-
- session.add_all([metadata1, metadata2, component_review1, component_review2])
-
- with dbcleanup(session, obj) as obj_id:
- stored_obj = get_stored_obj(session, cls_, obj_id)
- assert stored_obj.repository.id == repository.id
- assert stored_obj.user.id == user.id
- assert stored_obj.repository_metadata == metadata1
- assert collection_consists_of_objects(stored_obj.component_reviews, component_review1, component_review2)
- assert stored_obj.private_component_reviews == [component_review2]
-
- delete_from_database(session, [component_review1, component_review2, metadata1, metadata2])
-
-
-class TestRepositoryRoleAssociation(BaseTest):
- def test_table(self, cls_):
- assert cls_.__tablename__ == "repository_role_association"
-
- def test_columns(self, session, cls_, repository, role):
- create_time = datetime.now()
- update_time = create_time + timedelta(hours=1)
- obj = cls_(repository, role)
- obj.create_time = create_time
- obj.update_time = update_time
-
- with dbcleanup(session, obj) as obj_id:
- stored_obj = get_stored_obj(session, cls_, obj_id)
- assert stored_obj.id == obj_id
- assert stored_obj.repository_id == repository.id
- assert stored_obj.role_id == role.id
- assert stored_obj.create_time == create_time
- assert stored_obj.update_time == update_time
-
- def test_relationships(self, session, cls_, repository, role):
- obj = cls_(repository, role)
-
- with dbcleanup(session, obj) as obj_id:
- stored_obj = get_stored_obj(session, cls_, obj_id)
- assert stored_obj.repository.id == repository.id
- assert stored_obj.role.id == role.id
-
-
class TestRole(BaseTest):
def test_table(self, cls_):
assert cls_.__tablename__ == "role"
@@ -808,7 +598,6 @@ class TestUser(BaseTest):
repository,
galaxy_session,
api_keys,
- repository_review,
role,
group,
password_reset_token,
@@ -825,7 +614,6 @@ class TestUser(BaseTest):
obj.api_keys.append(api_keys)
obj.reset_tokens.append(password_reset_token)
obj.groups.append(user_group_association)
- obj.repository_reviews.append(repository_review)
_private_role = role_factory(name=obj.email)
private_user_role = user_role_association_factory(obj, _private_role)
@@ -842,7 +630,6 @@ class TestUser(BaseTest):
assert stored_obj.api_keys == [api_keys]
assert stored_obj.reset_tokens == [password_reset_token]
assert stored_obj.groups == [user_group_association]
- assert stored_obj.repository_reviews == [repository_review]
assert collection_consists_of_objects(stored_obj.roles, private_user_role, non_private_user_role)
assert stored_obj.non_private_roles == [non_private_user_role]
@@ -948,12 +735,6 @@ def category(model, session):
yield from dbcleanup_wrapper(session, instance)
-@pytest.fixture
-def component(model, session):
- instance = model.Component()
- yield from dbcleanup_wrapper(session, instance)
-
-
@pytest.fixture
def galaxy_session(model, session):
instance = model.GalaxySession(session_key=get_unique_value())
@@ -992,13 +773,6 @@ def repository_metadata(model, session):
yield from dbcleanup_wrapper(session, instance)
-@pytest.fixture
-def repository_review(model, session, user):
- instance = model.RepositoryReview()
- instance.user = user
- yield from dbcleanup_wrapper(session, instance)
-
-
@pytest.fixture
def repository_category_association(model, session, repository, category):
instance = model.RepositoryCategoryAssociation(repository, category)
@@ -1044,14 +818,6 @@ def user_role_association(model, session, user, role):
# Fixtures yielding factory functions.
-@pytest.fixture
-def component_review_factory(model):
- def make_instance(*args, **kwds):
- return model.ComponentReview(*args, **kwds)
-
- return make_instance
-
-
@pytest.fixture
def group_role_association_factory(model):
def make_instance(*args, **kwds):
@@ -1068,14 +834,6 @@ def repository_metadata_factory(model):
return make_instance
-@pytest.fixture
-def repository_review_factory(model):
- def make_instance(*args, **kwds):
- return model.RepositoryReview(*args, **kwds)
-
- return make_instance
-
-
@pytest.fixture
def role_factory(model):
def make_instance(*args, **kwds):