Issue #1863
closedException using regex in filters against associate endpoint
Description
Hi,
When using filters, I am seeing exceptions against associate, but not search/units
[root@waterloo ~]# rpm -q pulp-server
pulp-server-2.8.3-0.1.beta.el7.noarch
[root@waterloo ~]# pulp-admin rpm repo content rpm --repo-id centos7-live-debug --fields filename
Filename: ipa-python-4.2.0-15.el7.centos.3.x86_64.rpm
Filename: kernel-debug-3.10.0-327.13.1.el7.x86_64.rpm
Filename: ipa-mincho-fonts-003.03-5.el7.noarch.rpm
Filename: ipa-server-trust-ad-4.2.0-15.0.1.el7.centos.6.x86_64.rpm
Filename: java-1.8.0-openjdk-debug-1.8.0.91-0.b14.el7_2.x86_64.rpm
Filename: ipa-server-trust-ad-4.2.0-15.0.1.el7.centos.6.1.x86_64.rpm
Filename: libblkid-2.23.2-26.el7_2.2.i686.rpm
Filename: ipa-client-4.2.0-15.0.1.el7.centos.6.1.x86_64.rpm
Filename: ipa-pgothic-fonts-003.03-5.el7.noarch.rpm
Using the following filter to avoid any "ipa" packages that are not version 4.1.0:
filters = {
"unit": {
'$or': [
{ "name": { "$not": '^(ipa.*)(?<!fonts)$' } },
{ "version": '4.1.0' }
]
}
}
It succeeds when running against repositories/x/search/units:
[root@waterloo ~]# ./test.py
kernel-debug-3.10.0-327.13.1.el7.x86_64
ipa-mincho-fonts-003.03-5.el7.noarch
java-1.8.0-openjdk-debug-1.8.0.91-0.b14.el7_2.x86_64
libblkid-2.23.2-26.el7_2.2.i686
ipa-pgothic-fonts-003.03-5.el7.noarch
But when I try and use the exact same filter with associate:
{
"exception": [
"EncodeError: <_sre.SRE_Pattern object at 0x7ff5000f0bd0> is not JSON serializable\n"
],
"traceback": [
" File \"/usr/lib/python2.7/site-packages/django/core/handlers/base.py\", line 112, 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 69, in view\n return self.dispatch(request, *args, **kwargs)\n",
" File \"/usr/lib/python2.7/site-packages/django/views/generic/base.py\", line 87, 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/util.py\", line 130, in wrapper\n return func(*args, **kwargs)\n",
" File \"/usr/lib/python2.7/site-packages/pulp/server/webservices/views/repositories.py\", line 1170, in post\n {'criteria': criteria.to_dict(), 'import_config_override': overrides}, tags=task_tags)\n",
" File \"/usr/lib/python2.7/site-packages/pulp/server/async/tasks.py\", line 400, in apply_async_with_reservation\n queue=RESOURCE_MANAGER_QUEUE)\n",
" File \"/usr/lib/python2.7/site-packages/pulp/server/async/tasks.py\", line 95, in apply_async\n return super(PulpTask, self).apply_async(*args, **kwargs)\n",
" File \"/usr/lib/python2.7/site-packages/celery/app/task.py\", line 555, in apply_async\n **dict(self._get_exec_options(), **options)\n",
" File \"/usr/lib/python2.7/site-packages/celery/app/base.py\", line 351, in send_task\n reply_to=reply_to or self.oid, **options\n",
" File \"/usr/lib/python2.7/site-packages/celery/app/amqp.py\", line 305, in publish_task\n **kwargs\n",
" File \"/usr/lib/python2.7/site-packages/kombu/messaging.py\", line 165, in publish\n compression, headers)\n",
" File \"/usr/lib/python2.7/site-packages/kombu/messaging.py\", line 241, in _prepare\n body) = dumps(body, serializer=serializer)\n",
" File \"/usr/lib/python2.7/site-packages/kombu/serialization.py\", line 164, in dumps\n payload = encoder(data)\n",
" File \"/usr/lib64/python2.7/contextlib.py\", line 35, inexit\n self.gen.throw(type, value, traceback)\n",
" File \"/usr/lib/python2.7/site-packages/kombu/serialization.py\", line 59, in _reraise_errors\n reraise(wrapper, wrapper(exc), sys.exc_info()[2])\n",
" File \"/usr/lib/python2.7/site-packages/kombu/serialization.py\", line 55, in _reraise_errors\n yield\n",
" File \"/usr/lib/python2.7/site-packages/kombu/serialization.py\", line 164, in dumps\n payload = encoder(data)\n",
" File \"/usr/lib/python2.7/site-packages/anyjson/_init__.py\", line 141, in dumps\n return implementation.dumps(value)\n",
" File \"/usr/lib/python2.7/site-packages/anyjson/__init__.py\", line 87, in dumps\n return self._encode(data)\n",
" File \"/usr/lib64/python2.7/site-packages/simplejson/__init__.py\", line 354, in dumps\n return _default_encoder.encode(obj)\n",
" File \"/usr/lib64/python2.7/site-packages/simplejson/encoder.py\", line 262, in encode\n chunks = self.iterencode(o, _one_shot=True)\n",
" File \"/usr/lib64/python2.7/site-packages/simplejson/encoder.py\", line 340, in iterencode\n return _iterencode(o, 0)\n",
" File \"/usr/lib64/python2.7/site-packages/simplejson/encoder.py\", line 239, in default\n raise TypeError(repr(o) + \" is not JSON serializable\")\n"
],
"_href": "/pulp/api/v2/repositories/centos7-development-debug/actions/associate/",
"error_message": "<_sre.SRE_Pattern object at 0x7ff5000f0bd0> is not JSON serializable",
"http_request_method": "POST",
"http_status": 500
}
Please see the attached test.py use case which is equivalent to what I'm trying within our scripts
Files
Related issues
Fix regex handling for the
$not
operator in filterscloses #1863 https://pulp.plan.io/issues/1863