diff --git a/lib/galaxy/webapps/tool_shed/api/repositories.py b/lib/galaxy/webapps/tool_shed/api/repositories.py index 55f04a4cf48..095076f130a 100644 --- a/lib/galaxy/webapps/tool_shed/api/repositories.py +++ b/lib/galaxy/webapps/tool_shed/api/repositories.py @@ -330,6 +330,9 @@ class RepositoriesController( BaseAPIController ): :param page: (optional)requested page of the search :type page: int + :param page_size: (optional)requested page_size of the search + :type page_size: int + :param jsonp: (optional)flag whether to use jsonp format response, defaults to False :type jsonp: bool @@ -357,13 +360,15 @@ class RepositoriesController( BaseAPIController ): q = kwd.get( 'q', '' ) if q: page = kwd.get( 'page', 1 ) + page_size = kwd.get( 'page_size', 10 ) try: page = int( page ) + page_size = int( page_size ) except ValueError: - raise RequestParameterInvalidException( 'The "page" requested has to be an integer.' ) + raise RequestParameterInvalidException( 'The "page" and "page_size" parameters have to be integers.' ) return_jsonp = util.asbool( kwd.get( 'jsonp', False ) ) callback = kwd.get( 'callback', 'callback' ) - search_results = self._search( trans, q, page ) + search_results = self._search( trans, q, page, page_size ) if return_jsonp: response = str( '%s(%s);' % ( callback, json.dumps( search_results ) ) ) else: @@ -387,7 +392,7 @@ class RepositoriesController( BaseAPIController ): repository_dicts.append( repository_dict ) return json.dumps( repository_dicts ) - def _search( self, trans, q, page=1 ): + def _search( self, trans, q, page=1, page_size=10 ): """ Perform the search over TS repositories. Note that search works over the Whoosh index which you have @@ -422,6 +427,7 @@ class RepositoriesController( BaseAPIController ): results = repo_search.search( trans, search_term, page, + page_size, boosts ) results[ 'hostname' ] = web.url_for( '/', qualified = True ) return results diff --git a/lib/galaxy/webapps/tool_shed/api/tools.py b/lib/galaxy/webapps/tool_shed/api/tools.py index 19b48ae68c9..113fc05bb44 100644 --- a/lib/galaxy/webapps/tool_shed/api/tools.py +++ b/lib/galaxy/webapps/tool_shed/api/tools.py @@ -28,6 +28,9 @@ class ToolsController( BaseAPIController ): :param page: (optional)requested page of the search :type page: int + :param page_size: (optional)requested page_size of the search + :type page_size: int + :param jsonp: (optional)flag whether to use jsonp format response, defaults to False :type jsonp: bool @@ -46,20 +49,22 @@ class ToolsController( BaseAPIController ): raise NotImplemented( 'Listing of all the tools is not implemented. Provide parameter "q" to search instead.' ) else: page = kwd.get( 'page', 1 ) + page_size = kwd.get( 'page_size', 10 ) try: page = int( page ) + page_size = int ( page_size ) except ValueError: - raise RequestParameterInvalidException( 'The "page" requested has to be an integer.' ) + raise RequestParameterInvalidException( 'The "page" and "page_size" have to be integers.' ) return_jsonp = util.asbool( kwd.get( 'jsonp', False ) ) callback = kwd.get( 'callback', 'callback' ) - search_results = self._search( trans, q, page ) + search_results = self._search( trans, q, page, page_size ) if return_jsonp: response = str( '%s(%s);' % ( callback, json.dumps( search_results ) ) ) else: response = json.dumps( search_results ) return response - def _search( self, trans, q, page=1 ): + def _search( self, trans, q, page=1, page_size=10 ): """ Perform the search over TS tools index. Note that search works over the Whoosh index which you have @@ -90,6 +95,7 @@ class ToolsController( BaseAPIController ): results = tool_search.search( trans, search_term, page, + page_size, boosts ) results[ 'hostname' ] = web.url_for( '/', qualified = True ) return results diff --git a/lib/galaxy/webapps/tool_shed/search/repo_search.py b/lib/galaxy/webapps/tool_shed/search/repo_search.py index bf59bcf69b3..43320bbac8d 100644 --- a/lib/galaxy/webapps/tool_shed/search/repo_search.py +++ b/lib/galaxy/webapps/tool_shed/search/repo_search.py @@ -37,8 +37,6 @@ class RepoWeighting( scoring.BM25F ): use_final = True def final( self, searcher, docnum, score ): - # log.debug('score before: ' + str(score) ) - # Arbitrary for now reasonable_hits = 100.0 @@ -51,21 +49,18 @@ class RepoWeighting( scoring.BM25F ): if times_downloaded == 0: times_downloaded = 1 popularity_modifier = ( times_downloaded / reasonable_hits ) - # log.debug('popularity_modifier: ' + str(popularity_modifier) ) cert_modifier = 2 if searcher.stored_fields( docnum )[ "approved" ] == 'yes' else 1 - # log.debug('cert_modifier: ' + str(cert_modifier) ) # Adjust the computed score for this document by the popularity # and by the certification level. final_score = score * popularity_modifier * cert_modifier - # log.debug('score after: ' + str( final_score ) ) return final_score class RepoSearch( object ): - def search( self, trans, search_term, page, boosts ): + def search( self, trans, search_term, page, page_size, boosts ): """ Perform the search on the given search_term @@ -103,7 +98,7 @@ class RepoSearch( object ): user_query = parser.parse( '*' + search_term + '*' ) try: - hits = searcher.search_page( user_query, page, pagelen = 10, terms = True ) + hits = searcher.search_page( user_query, page, pagelen = page_size, terms = True ) except ValueError: raise ObjectNotFound( 'The requested page does not exist.' ) @@ -112,6 +107,8 @@ class RepoSearch( object ): log.debug( 'scored hits: ' + str( hits.scored_length() ) ) results = {} results[ 'total_results'] = str( len( hits ) ) + results[ 'page'] = str( page ) + results[ 'page_size'] = str( page_size ) results[ 'hits' ] = [] for hit in hits: hit_dict = {} diff --git a/lib/galaxy/webapps/tool_shed/search/tool_search.py b/lib/galaxy/webapps/tool_shed/search/tool_search.py index e49820ca1d9..19d324166e0 100644 --- a/lib/galaxy/webapps/tool_shed/search/tool_search.py +++ b/lib/galaxy/webapps/tool_shed/search/tool_search.py @@ -31,7 +31,7 @@ tool_schema = Schema( class ToolSearch( object ): - def search( self, trans, search_term, page, boosts ): + def search( self, trans, search_term, page, page_size, boosts ): """ Perform the search on the given search_term @@ -63,7 +63,7 @@ class ToolSearch( object ): user_query = parser.parse( '*' + search_term + '*' ) try: - hits = searcher.search_page( user_query, page, pagelen = 10, terms = True ) + hits = searcher.search_page( user_query, page, pagelen = page_size, terms = True ) except ValueError: raise ObjectNotFound( 'The requested page does not exist.' ) @@ -72,6 +72,8 @@ class ToolSearch( object ): log.debug( 'scored hits: ' + str( hits.scored_length() ) ) results = {} results[ 'total_results'] = str( len( hits ) ) + results[ 'page'] = str( page ) + results[ 'page_size'] = str( page_size ) results[ 'hits' ] = [] for hit in hits: hit_dict = {}