From a146ac6df0633f51ec12f4dae3c1c556527ef8f5 Mon Sep 17 00:00:00 2001 From: Greg Von Kuster Date: Wed, 4 Apr 2012 13:36:37 -0400 Subject: [PATCH] Add the ability to browse invalid tools in the tool shed - current user is restricted to seeing only their invalid tools if not an admin. Also a bit of cleanup in tool shed statistics. --- lib/galaxy/util/shed_util.py | 9 +++- .../webapps/community/controllers/admin.py | 41 +++++++++++-------- .../community/controllers/repository.py | 32 +++++++++++++++ templates/webapps/community/admin/index.mako | 3 ++ .../admin/reset_all_repository_metadata.mako | 19 +++++++++ .../webapps/community/admin/statistics.mako | 2 +- templates/webapps/community/index.mako | 3 ++ .../repository/browse_invalid_tools.mako | 38 +++++++++++++++++ 8 files changed, 127 insertions(+), 20 deletions(-) create mode 100644 templates/webapps/community/admin/reset_all_repository_metadata.mako create mode 100644 templates/webapps/community/repository/browse_invalid_tools.mako diff --git a/lib/galaxy/util/shed_util.py b/lib/galaxy/util/shed_util.py index f023dc12f73..b794bbc9fec 100644 --- a/lib/galaxy/util/shed_util.py +++ b/lib/galaxy/util/shed_util.py @@ -50,9 +50,14 @@ class ShedCounter( object ): for repository in self.sa_session.query( self.model.Repository ): self.repositories += 1 self.total_clones += repository.times_downloaded - if repository.deleted: + is_deleted = repository.deleted + is_new = repository.is_new + if is_deleted and is_new: self.deleted_repositories += 1 - elif repository.is_new: + self.new_repositories += 1 + elif is_deleted: + self.deleted_repositories += 1 + elif is_new: self.new_repositories += 1 else: processed_guids = [] diff --git a/lib/galaxy/webapps/community/controllers/admin.py b/lib/galaxy/webapps/community/controllers/admin.py index 41f1c9efd8b..6168f4e0ddd 100644 --- a/lib/galaxy/webapps/community/controllers/admin.py +++ b/lib/galaxy/webapps/community/controllers/admin.py @@ -461,21 +461,25 @@ class AdminController( BaseUIController, Admin ): params = util.Params( kwd ) message = util.restore_text( params.get( 'message', '' ) ) status = params.get( 'status', 'done' ) - count = 0 - for repository in trans.sa_session.query( trans.model.Repository ) \ - .filter( trans.model.Repository.table.c.deleted == False ): - try: - reset_all_repository_metadata( trans, trans.security.encode_id( repository.id ) ) - log.debug( "Reset metadata on repository %s" % repository.name ) - count += 1 - except Exception, e: - log.debug( "Error attempting to reset metadata on repository %s: %s" % ( repository.name, str( e ) ) ) - message = "Reset metadata on %d repositories" % count - trans.response.send_redirect( web.url_for( controller='admin', - action='browse_repository_metadata', - webapp='community', - message=util.sanitize_text( message ), - status=status ) ) + if 'reset_all_repository_metadata_button' in kwd: + count = 0 + for repository in trans.sa_session.query( trans.model.Repository ) \ + .filter( trans.model.Repository.table.c.deleted == False ): + try: + reset_all_repository_metadata( trans, trans.security.encode_id( repository.id ) ) + log.debug( "Reset metadata on repository %s" % repository.name ) + count += 1 + except Exception, e: + log.debug( "Error attempting to reset metadata on repository %s: %s" % ( repository.name, str( e ) ) ) + message = "Reset metadata on %d repositories" % count + trans.response.send_redirect( web.url_for( controller='admin', + action='browse_repository_metadata', + webapp='community', + message=util.sanitize_text( message ), + status=status ) ) + return trans.fill_template( '/webapps/community/admin/reset_all_repository_metadata.mako', + message=message, + status=status ) @web.expose @web.require_admin def browse_repositories( self, trans, **kwd ): @@ -549,12 +553,15 @@ class AdminController( BaseUIController, Admin ): @web.expose @web.require_admin def regenerate_statistics( self, trans, **kwd ): + params = util.Params( kwd ) + message = util.restore_text( params.get( 'message', '' ) ) + status = params.get( 'status', 'done' ) if 'regenerate_statistics_button' in kwd: trans.app.shed_counter.generate_statistics() - message = "Successfully regenerated statistics" + message = "Successfully regenerated statistics" return trans.fill_template( '/webapps/community/admin/statistics.mako', message=message, - status='done' ) + status=status ) @web.expose @web.require_admin def delete_repository( self, trans, **kwd ): diff --git a/lib/galaxy/webapps/community/controllers/repository.py b/lib/galaxy/webapps/community/controllers/repository.py index 20ecc6daad5..72a9857fe30 100644 --- a/lib/galaxy/webapps/community/controllers/repository.py +++ b/lib/galaxy/webapps/community/controllers/repository.py @@ -400,6 +400,38 @@ class RepositoryController( BaseUIController, ItemRatings ): # Render the list view return self.valid_repository_list_grid( trans, **kwd ) @web.expose + def browse_invalid_tools( self, trans, **kwd ): + params = util.Params( kwd ) + message = util.restore_text( params.get( 'message', '' ) ) + status = params.get( 'status', 'done' ) + webapp = params.get( 'webapp', 'community' ) + is_admin = trans.user_is_admin() + invalid_tools_dict = odict() + if is_admin: + for repository in trans.sa_session.query( trans.model.Repository ) \ + .filter( trans.model.Repository.table.c.deleted == False ) \ + .order_by( trans.model.Repository.table.c.name ): + for downloadable_revision in repository.downloadable_revisions: + metadata = downloadable_revision.metadata + invalid_tools = metadata.get( 'invalid_tools', [] ) + for invalid_tool_config in invalid_tools: + invalid_tools_dict[ invalid_tool_config ] = ( repository.id, repository.name, downloadable_revision.changeset_revision ) + else: + for repository in trans.sa_session.query( trans.model.Repository ) \ + .filter( and_( trans.model.Repository.table.c.deleted == False, + trans.model.Repository.table.c.user_id == trans.user.id ) ) \ + .order_by( trans.model.Repository.table.c.name ): + for downloadable_revision in repository.downloadable_revisions: + metadata = downloadable_revision.metadata + invalid_tools = metadata.get( 'invalid_tools', [] ) + for invalid_tool_config in invalid_tools: + invalid_tools_dict[ invalid_tool_config ] = ( repository.id, repository.name, downloadable_revision.changeset_revision ) + return trans.fill_template( '/webapps/community/repository/browse_invalid_tools.mako', + invalid_tools_dict=invalid_tools_dict, + webapp=webapp, + message=message, + status=status ) + @web.expose def find_workflows( self, trans, **kwd ): params = util.Params( kwd ) message = util.restore_text( params.get( 'message', '' ) ) diff --git a/templates/webapps/community/admin/index.mako b/templates/webapps/community/admin/index.mako index 84c3300a539..06763c0d9c2 100644 --- a/templates/webapps/community/admin/index.mako +++ b/templates/webapps/community/admin/index.mako @@ -60,6 +60,9 @@
Browse metadata
+
+ Browse invalid tools +
diff --git a/templates/webapps/community/admin/reset_all_repository_metadata.mako b/templates/webapps/community/admin/reset_all_repository_metadata.mako new file mode 100644 index 00000000000..ba1c6c2e044 --- /dev/null +++ b/templates/webapps/community/admin/reset_all_repository_metadata.mako @@ -0,0 +1,19 @@ +<%inherit file="/base.mako"/> +<%namespace file="/message.mako" import="render_msg" /> + +%if message: + ${render_msg( message, status )} +%endif + +
+
Reset metadata on each change set of the repositories in this tool shed
+
+
+ Click the button below to reset metadata on each change set of the repositories in this tool shed. +
+
+ +
+
+
+
diff --git a/templates/webapps/community/admin/statistics.mako b/templates/webapps/community/admin/statistics.mako index b68a64846a1..e9a266a0877 100644 --- a/templates/webapps/community/admin/statistics.mako +++ b/templates/webapps/community/admin/statistics.mako @@ -19,7 +19,7 @@ ${trans.app.shed_counter.repositories} - New repositories + Empty repositories ${trans.app.shed_counter.new_repositories} diff --git a/templates/webapps/community/index.mako b/templates/webapps/community/index.mako index 65a984e946d..2eaf1d94691 100644 --- a/templates/webapps/community/index.mako +++ b/templates/webapps/community/index.mako @@ -71,6 +71,9 @@
Browse my repositories
+
+ Browse my invalid tools +
%endif diff --git a/templates/webapps/community/repository/browse_invalid_tools.mako b/templates/webapps/community/repository/browse_invalid_tools.mako new file mode 100644 index 00000000000..e0ccf159324 --- /dev/null +++ b/templates/webapps/community/repository/browse_invalid_tools.mako @@ -0,0 +1,38 @@ +<%inherit file="/base.mako"/> +<%namespace file="/message.mako" import="render_msg" /> + +%if message: + ${render_msg( message, status )} +%endif + +
+ %if invalid_tools_dict: +
Invalid tools - click the tool config file name to see why the tool is invalid
+
+ + + + + + + %for invalid_tool_config, repository_tup in invalid_tools_dict.items(): + <% repository_id, repository_name, changeset_revision = repository_tup %> + + + + + + %endfor +
Tool configRepository nameChangeset revision
+ + ${invalid_tool_config} + + ${repository_name}${changeset_revision}
+
+
+ %else: +
+ You do not own any repositories that contain invalid tools. +
+ %endif +