##// END OF EJS Templates
Issue #5548 - Pass repo_group_name
pc -
r3508:46984709 tip default
parent child Browse files
Show More
@@ -1,109 +1,109 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2011-2018 RhodeCode GmbH
3 # Copyright (C) 2011-2018 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21
21
22 import logging
22 import logging
23
23
24 from rhodecode.api import jsonrpc_method
24 from rhodecode.api import jsonrpc_method
25 from rhodecode.api.exc import JSONRPCValidationError
25 from rhodecode.api.exc import JSONRPCValidationError
26 from rhodecode.api.utils import Optional
26 from rhodecode.api.utils import Optional
27 from rhodecode.lib.index import searcher_from_config
27 from rhodecode.lib.index import searcher_from_config
28 from rhodecode.model import validation_schema
28 from rhodecode.model import validation_schema
29 from rhodecode.model.validation_schema.schemas import search_schema
29 from rhodecode.model.validation_schema.schemas import search_schema
30
30
31 log = logging.getLogger(__name__)
31 log = logging.getLogger(__name__)
32
32
33
33
34 @jsonrpc_method()
34 @jsonrpc_method()
35 def search(request, apiuser, search_query, search_type, page_limit=Optional(10), page=Optional(1), search_sort=Optional('newfirst'), repo_name=Optional(None), repo_group_name=Optional(None)):
35 def search(request, apiuser, search_query, search_type, page_limit=Optional(10), page=Optional(1), search_sort=Optional('newfirst'), repo_name=Optional(None), repo_group_name=Optional(None)):
36 """
36 """
37 Search
37 Search
38
38
39 :param apiuser: This is filled automatically from the |authtoken|.
39 :param apiuser: This is filled automatically from the |authtoken|.
40 :type apiuser: AuthUser
40 :type apiuser: AuthUser
41 :param search_query: Search query.
41 :param search_query: Search query.
42 :type search_query: str
42 :type search_query: str
43 :param search_type: Search type. The following are valid options:
43 :param search_type: Search type. The following are valid options:
44 * commit
44 * commit
45 * content
45 * content
46 * path
46 * path
47 :type search_type: str
47 :type search_type: str
48 :param page_limit: Page item limit, from 1 to 500. Default 10 items.
48 :param page_limit: Page item limit, from 1 to 500. Default 10 items.
49 :type page_limit: Optional(int)
49 :type page_limit: Optional(int)
50 :param page: Page number. Default first page.
50 :param page: Page number. Default first page.
51 :type page: Optional(int)
51 :type page: Optional(int)
52 :param search_sort: Search sort order. Default newfirst. The following are valid options:
52 :param search_sort: Search sort order. Default newfirst. The following are valid options:
53 * newfirst
53 * newfirst
54 * oldfirst
54 * oldfirst
55 :type search_sort: Optional(str)
55 :type search_sort: Optional(str)
56 :param repo_name: Filter by one repo. Default is all.
56 :param repo_name: Filter by one repo. Default is all.
57 :type repo_name: Optional(str)
57 :type repo_name: Optional(str)
58 :param repo_group_name: Filter by one repo group. Default is all.
58 :param repo_group_name: Filter by one repo group. Default is all.
59 :type repo_group_name: Optional(str)
59 :type repo_group_name: Optional(str)
60 """
60 """
61
61
62 searcher = searcher_from_config(request.registry.settings)
62 searcher = searcher_from_config(request.registry.settings)
63 data = {'execution_time': ''}
63 data = {'execution_time': ''}
64 repo_name = Optional.extract(repo_name)
64 repo_name = Optional.extract(repo_name)
65 repo_group_name = Optional.extract(repo_group_name)
65 repo_group_name = Optional.extract(repo_group_name)
66
66
67 schema = search_schema.SearchParamsSchema()
67 schema = search_schema.SearchParamsSchema()
68
68
69 search_params = {}
69 search_params = {}
70 try:
70 try:
71 search_params = schema.deserialize(
71 search_params = schema.deserialize(
72 dict(search_query=search_query,
72 dict(search_query=search_query,
73 search_type=search_type,
73 search_type=search_type,
74 search_sort=Optional.extract(search_sort),
74 search_sort=Optional.extract(search_sort),
75 page_limit=Optional.extract(page_limit),
75 page_limit=Optional.extract(page_limit),
76 requested_page=Optional.extract(page))
76 requested_page=Optional.extract(page))
77 )
77 )
78 except validation_schema.Invalid as err:
78 except validation_schema.Invalid as err:
79 raise JSONRPCValidationError(colander_exc=err)
79 raise JSONRPCValidationError(colander_exc=err)
80
80
81 search_query = search_params.get('search_query')
81 search_query = search_params.get('search_query')
82 search_type = search_params.get('search_type')
82 search_type = search_params.get('search_type')
83 search_sort = search_params.get('search_sort')
83 search_sort = search_params.get('search_sort')
84
84
85 if search_params.get('search_query'):
85 if search_params.get('search_query'):
86 page_limit = search_params['page_limit']
86 page_limit = search_params['page_limit']
87 requested_page = search_params['requested_page']
87 requested_page = search_params['requested_page']
88
88
89 try:
89 try:
90 search_result = searcher.search(
90 search_result = searcher.search(
91 search_query, search_type, apiuser, repo_name,
91 search_query, search_type, apiuser, repo_name, repo_group_name,
92 requested_page, page_limit, search_sort)
92 requested_page=requested_page, page_limit=page_limit, sort=search_sort)
93
93
94 data.update(dict(
94 data.update(dict(
95 results=list(search_result['results']), page=requested_page,
95 results=list(search_result['results']), page=requested_page,
96 item_count=search_result['count'],
96 item_count=search_result['count'],
97 items_per_page=page_limit))
97 items_per_page=page_limit))
98 finally:
98 finally:
99 searcher.cleanup()
99 searcher.cleanup()
100
100
101 if not search_result['error']:
101 if not search_result['error']:
102 data['execution_time'] = '%s results (%.3f seconds)' % (
102 data['execution_time'] = '%s results (%.3f seconds)' % (
103 search_result['count'],
103 search_result['count'],
104 search_result['runtime'])
104 search_result['runtime'])
105 else:
105 else:
106 node = schema['search_query']
106 node = schema['search_query']
107 raise JSONRPCValidationError(colander_exc=validation_schema.Invalid(node, search_result['error']))
107 raise JSONRPCValidationError(colander_exc=validation_schema.Invalid(node, search_result['error']))
108
108
109 return data
109 return data
General Comments 11
Under Review
pc
author

Auto status change to "Under Review"

Approved

CLA FOUND and APPROVED

Under Review
pc
author

Pull request updated. Auto status change to "Under Review"

Changed commits:
  * 2 added
  * 0 removed

Changed files:
  * M rhodecode/api/views/search_api.py
Approved

CLA FOUND and APPROVED

Approved

Status change > Approved

Approved

Thanks for contribution. We'll merge this manually.

You need to be logged in to leave comments. Login now