Issue #6898
closedPulp 2 - REST API for Search ignores critera or raises errors when field or filter is specified
Description
Detailed Description¶
Pulp provides REST API at https://docs.pulpproject.org/en/2.21/dev-guide/integration/rest-api/index.html for manipulation users, repositories, content and such.
For Search API https://docs.pulpproject.org/en/2.21/dev-guide/conventions/criteria.html#search-api, pulp provides two options:
-
POST
request withcriteria
object -
GET
request with query arguments
Bug¶
When searching for units https://docs.pulpproject.org/en/2.21/dev-guide/integration/rest-api/repo/content.html#advanced-unit-search, using GET
request it raises error:
Request -> HOSTED_PULP_URL/repositories/external-centos-6-staging/search/units/?field=id&field=display_name&limit=20
Response:
{
"http_request_method":"GET",
"exception":[
"TypeError: pop() takes at most 1 argument (2 given)\n"
],
"error_message":"pop() takes at most 1 argument (2 given)",
"_href":"/pulp/api/v2/repositories/external-centos-6-staging/search/units/?field=id&field=display_name&limit=20",
"http_status":500,
"traceback":[
" File \"/usr/lib/python2.7/site-packages/django/core/handlers/base.py\", line 185, in _get_response\n response = wrapped_callback(request, *callback_args, **callback_kwargs)\n",
" File \"/usr/lib/python2.7/site-packages/django/views/generic/base.py\", line 68, in view\n return self.dispatch(request, *args, **kwargs)\n",
" File \"/usr/lib/python2.7/site-packages/django/views/generic/base.py\", line 88, in dispatch\n return handler(request, *args, **kwargs)\n",
" File \"/usr/lib/python2.7/site-packages/pulp/server/webservices/views/decorators.py\", line 241, in _auth_decorator\n return _verify_auth(self, operation, super_user_only, method, *args, **kwargs)\n",
" File \"/usr/lib/python2.7/site-packages/pulp/server/webservices/views/decorators.py\", line 195, in _verify_auth\n value = method(self, *args, **kwargs)\n",
" File \"/usr/lib/python2.7/site-packages/pulp/server/webservices/views/search.py\", line 108, in get\n return self._generate_response(query, options, *args, **kwargs)\n",
" File \"/usr/lib/python2.7/site-packages/pulp/server/webservices/views/repositories.py\", line 285, in _generate_response\n criteria = UnitAssociationCriteria.from_client_input(query)\n",
" File \"/usr/lib/python2.7/site-packages/pulp/server/db/model/criteria.py\", line 286, in from_client_input\n association_fields = _validate_fields(fields.pop('association', None))\n"
]
}
Specifying without field
works, even though documentation provides example of using field
as query argument.
As for Search using POST request, criteria seems ignored and return everything.
Example critera:
{
"criteria": {
"fields": {
"unit": [
"name",
"version"
]
},
"type_ids": [
"rpm"
],
"limit": 1
}
}
Response: Everything (criteria is ignored)
Maybe I'm missing something, but we are not able to get fields we require since the whole output is huge and it downgrades our user experience.
Thank you.
Your Environment¶
- Version used: 2.16.4