Project

Profile

Help

Issue #6898

closed

Pulp 2 - REST API for Search ignores critera or raises errors when field or filter is specified

Added by Anonymous almost 4 years ago. Updated almost 4 years ago.

Status:
CLOSED - NOTABUG
Priority:
Normal
Assignee:
-
Category:
-
Sprint/Milestone:
-
Start date:
Due date:
Estimated time:
Severity:
1. Low
Version:
2.16.1
Platform Release:
OS:
CentOS 7
Triaged:
No
Groomed:
No
Sprint Candidate:
No
Tags:
Pulp 2
Sprint:
Quarter:

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 with criteria 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

Also available in: Atom PDF