← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 2051928] [NEW] tests - Python 3.12 - TypeError: Object of type _SentinelObject is not JSON serializable

 

Public bug reported:

Executing unit tests with Python 3.12 results in some test failures
which I think are todo with the way the unit tests mock the __json__
method in the tools module:

neutron.tests.unit.api.v2.test_base.RegistryNotificationTest.test_networks_create_bulk_registry_publish
-------------------------------------------------------------------------------------------------------

Captured traceback:
~~~~~~~~~~~~~~~~~~~
    Traceback (most recent call last):

      File "/home/jamespage/src/upstream/openstack/neutron/neutron/tests/base.py", line 178, in func
    return f(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^

      File "/home/jamespage/src/upstream/openstack/neutron/neutron/tests/unit/api/v2/test_base.py", line 1300, in test_networks_create_bulk_registry_publish
    self._test_registry_publish('create', 'network', input)

      File "/home/jamespage/src/upstream/openstack/neutron/neutron/tests/unit/api/v2/test_base.py", line 1269, in _test_registry_publish
    res = self.api.post_json(
          ^^^^^^^^^^^^^^^^^^^

No tests were successful during the run
      File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/utils.py", line 34, in wrapper
    return self._gen_request(method, url, **kw)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/app.py", line 749, in _gen_request
    return self.do_request(req, status=status,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/app.py", line 646, in do_request
    self._check_status(status, res)

      File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/app.py", line 675, in _check_status
    raise AppError(

    webtest.app.AppError: Bad response: 500 Internal Server Error (not 200 OK or 3xx redirect for http://localhost/networks)
b'{"NeutronError": {"type": "HTTPInternalServerError", "message": "Request Failed: internal server error while processing your request.", "detail": ""}}'

Captured pythonlogging:
~~~~~~~~~~~~~~~~~~~~~~~
       ERROR [neutron.pecan_wsgi.hooks.translation] POST failed.
Traceback (most recent call last):
  File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/core.py", line 682, in __call__
    self.invoke_controller(controller, args, kwargs, state)
  File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/core.py", line 603, in invoke_controller
    result = self.render(template, result)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/core.py", line 414, in render
    return renderer.render(template, namespace)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/templating.py", line 23, in render
    return encode(namespace)
           ^^^^^^^^^^^^^^^^^
  File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 154, in encode
    return _instance.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 148, in default
    return jsonify(obj)
           ^^^^^^^^^^^^
  File "/usr/lib/python3.12/functools.py", line 909, in wrapper
    return dispatch(args[0].__class__)(*args, **kw)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 143, in jsonify
    return _default.default(obj)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 129, in default
    return JSONEncoder.default(self, obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type _SentinelObject is not JSON serializable

Digging in I can see all of the plugin child calls being updated,
however I don't see them actually called under Python 3.12.

This issue impacts the following unit tests:

FAIL: neutron.tests.unit.api.v2.test_base.RegistryNotificationTest.test_network_create_registry_publish
FAIL: neutron.tests.unit.api.v2.test_base.RegistryNotificationTest.test_network_update_registry_publish
FAIL: neutron.tests.unit.api.v2.test_base.RegistryNotificationTest.test_networks_create_bulk_registry_publish
FAIL: neutron.tests.unit.api.v2.test_base.NotificationTest.test_network_create_notifier
FAIL: neutron.tests.unit.api.v2.test_base.NotificationTest.test_network_update_notifier
FAIL: neutron.tests.unit.api.v2.test_base.QuotaTest.test_create_network_quota_without_limit
FAIL: neutron.tests.unit.extensions.test_providernet.ProvidernetExtensionTestCase.test_network_create_with_provider_attrs
FAIL: neutron.tests.unit.extensions.test_providernet.ProvidernetExtensionTestCase.test_network_update_with_provider_attrs

** Affects: neutron
     Importance: Undecided
         Status: New

** Description changed:

  Executing unit tests with Python 3.12 results in some test failures
  which I think are todo with the way the unit tests mock the __json__
  method in the tools module:
  
  neutron.tests.unit.api.v2.test_base.RegistryNotificationTest.test_networks_create_bulk_registry_publish
  -------------------------------------------------------------------------------------------------------
  
  Captured traceback:
  ~~~~~~~~~~~~~~~~~~~
-     Traceback (most recent call last):
+     Traceback (most recent call last):
  
-       File "/home/jamespage/src/upstream/openstack/neutron/neutron/tests/base.py", line 178, in func
-     return f(self, *args, **kwargs)
-            ^^^^^^^^^^^^^^^^^^^^^^^^
+       File "/home/jamespage/src/upstream/openstack/neutron/neutron/tests/base.py", line 178, in func
+     return f(self, *args, **kwargs)
+            ^^^^^^^^^^^^^^^^^^^^^^^^
  
-       File "/home/jamespage/src/upstream/openstack/neutron/neutron/tests/unit/api/v2/test_base.py", line 1300, in test_networks_create_bulk_registry_publish
-     self._test_registry_publish('create', 'network', input)
+       File "/home/jamespage/src/upstream/openstack/neutron/neutron/tests/unit/api/v2/test_base.py", line 1300, in test_networks_create_bulk_registry_publish
+     self._test_registry_publish('create', 'network', input)
  
-       File "/home/jamespage/src/upstream/openstack/neutron/neutron/tests/unit/api/v2/test_base.py", line 1269, in _test_registry_publish
-     res = self.api.post_json(
-           ^^^^^^^^^^^^^^^^^^^
- 
+       File "/home/jamespage/src/upstream/openstack/neutron/neutron/tests/unit/api/v2/test_base.py", line 1269, in _test_registry_publish
+     res = self.api.post_json(
+           ^^^^^^^^^^^^^^^^^^^
  
  No tests were successful during the run
-       File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/utils.py", line 34, in wrapper
-     return self._gen_request(method, url, **kw)
-            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+       File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/utils.py", line 34, in wrapper
+     return self._gen_request(method, url, **kw)
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  
-       File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/app.py", line 749, in _gen_request
-     return self.do_request(req, status=status,
-            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+       File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/app.py", line 749, in _gen_request
+     return self.do_request(req, status=status,
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  
-       File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/app.py", line 646, in do_request
-     self._check_status(status, res)
+       File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/app.py", line 646, in do_request
+     self._check_status(status, res)
  
-       File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/app.py", line 675, in _check_status
-     raise AppError(
+       File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/app.py", line 675, in _check_status
+     raise AppError(
  
-     webtest.app.AppError: Bad response: 500 Internal Server Error (not 200 OK or 3xx redirect for http://localhost/networks)
+     webtest.app.AppError: Bad response: 500 Internal Server Error (not 200 OK or 3xx redirect for http://localhost/networks)
  b'{"NeutronError": {"type": "HTTPInternalServerError", "message": "Request Failed: internal server error while processing your request.", "detail": ""}}'
- 
  
  Captured pythonlogging:
  ~~~~~~~~~~~~~~~~~~~~~~~
-        ERROR [neutron.pecan_wsgi.hooks.translation] POST failed.
+        ERROR [neutron.pecan_wsgi.hooks.translation] POST failed.
  Traceback (most recent call last):
-   File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/core.py", line 682, in __call__
-     self.invoke_controller(controller, args, kwargs, state)
-   File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/core.py", line 603, in invoke_controller
-     result = self.render(template, result)
-              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/core.py", line 414, in render
-     return renderer.render(template, namespace)
-            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/templating.py", line 23, in render
-     return encode(namespace)
-            ^^^^^^^^^^^^^^^^^
-   File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 154, in encode
-     return _instance.encode(obj)
-            ^^^^^^^^^^^^^^^^^^^^^
-   File "/usr/lib/python3.12/json/encoder.py", line 200, in encode
-     chunks = self.iterencode(o, _one_shot=True)
-              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   File "/usr/lib/python3.12/json/encoder.py", line 258, in iterencode
-     return _iterencode(o, 0)
-            ^^^^^^^^^^^^^^^^^
-   File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 148, in default
-     return jsonify(obj)
-            ^^^^^^^^^^^^
-   File "/usr/lib/python3.12/functools.py", line 909, in wrapper
-     return dispatch(args[0].__class__)(*args, **kw)
-            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 143, in jsonify
-     return _default.default(obj)
-            ^^^^^^^^^^^^^^^^^^^^^
-   File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 129, in default
-     return JSONEncoder.default(self, obj)
-            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   File "/usr/lib/python3.12/json/encoder.py", line 180, in default
-     raise TypeError(f'Object of type {o.__class__.__name__} '
+   File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/core.py", line 682, in __call__
+     self.invoke_controller(controller, args, kwargs, state)
+   File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/core.py", line 603, in invoke_controller
+     result = self.render(template, result)
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/core.py", line 414, in render
+     return renderer.render(template, namespace)
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/templating.py", line 23, in render
+     return encode(namespace)
+            ^^^^^^^^^^^^^^^^^
+   File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 154, in encode
+     return _instance.encode(obj)
+            ^^^^^^^^^^^^^^^^^^^^^
+   File "/usr/lib/python3.12/json/encoder.py", line 200, in encode
+     chunks = self.iterencode(o, _one_shot=True)
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   File "/usr/lib/python3.12/json/encoder.py", line 258, in iterencode
+     return _iterencode(o, 0)
+            ^^^^^^^^^^^^^^^^^
+   File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 148, in default
+     return jsonify(obj)
+            ^^^^^^^^^^^^
+   File "/usr/lib/python3.12/functools.py", line 909, in wrapper
+     return dispatch(args[0].__class__)(*args, **kw)
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 143, in jsonify
+     return _default.default(obj)
+            ^^^^^^^^^^^^^^^^^^^^^
+   File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 129, in default
+     return JSONEncoder.default(self, obj)
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   File "/usr/lib/python3.12/json/encoder.py", line 180, in default
+     raise TypeError(f'Object of type {o.__class__.__name__} '
  TypeError: Object of type _SentinelObject is not JSON serializable
  
+ Digging in I can see all of the plugin child calls being updated,
+ however I don't see them actually called under Python 3.12.
  
- Digging in I can see all of the plugin child calls being updated, however I don't see them actually called under Python 3.12.
+ This issue impacts the following unit tests:
+ 
+ FAIL: neutron.tests.unit.api.v2.test_base.RegistryNotificationTest.test_network_create_registry_publish
+ FAIL: neutron.tests.unit.api.v2.test_base.RegistryNotificationTest.test_network_update_registry_publish
+ FAIL: neutron.tests.unit.api.v2.test_base.RegistryNotificationTest.test_networks_create_bulk_registry_publish
+ FAIL: neutron.tests.unit.api.v2.test_base.NotificationTest.test_network_create_notifier
+ FAIL: neutron.tests.unit.api.v2.test_base.NotificationTest.test_network_update_notifier
+ FAIL: neutron.tests.unit.api.v2.test_base.QuotaTest.test_create_network_quota_without_limit
+ FAIL: neutron.tests.unit.extensions.test_providernet.ProvidernetExtensionTestCase.test_network_create_with_provider_attrs
+ FAIL: neutron.tests.unit.extensions.test_providernet.ProvidernetExtensionTestCase.test_network_update_with_provider_attrs

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/2051928

Title:
  tests - Python 3.12 - TypeError: Object of type _SentinelObject is not
  JSON serializable

Status in neutron:
  New

Bug description:
  Executing unit tests with Python 3.12 results in some test failures
  which I think are todo with the way the unit tests mock the __json__
  method in the tools module:

  neutron.tests.unit.api.v2.test_base.RegistryNotificationTest.test_networks_create_bulk_registry_publish
  -------------------------------------------------------------------------------------------------------

  Captured traceback:
  ~~~~~~~~~~~~~~~~~~~
      Traceback (most recent call last):

        File "/home/jamespage/src/upstream/openstack/neutron/neutron/tests/base.py", line 178, in func
      return f(self, *args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^

        File "/home/jamespage/src/upstream/openstack/neutron/neutron/tests/unit/api/v2/test_base.py", line 1300, in test_networks_create_bulk_registry_publish
      self._test_registry_publish('create', 'network', input)

        File "/home/jamespage/src/upstream/openstack/neutron/neutron/tests/unit/api/v2/test_base.py", line 1269, in _test_registry_publish
      res = self.api.post_json(
            ^^^^^^^^^^^^^^^^^^^

  No tests were successful during the run
        File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/utils.py", line 34, in wrapper
      return self._gen_request(method, url, **kw)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

        File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/app.py", line 749, in _gen_request
      return self.do_request(req, status=status,
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

        File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/app.py", line 646, in do_request
      self._check_status(status, res)

        File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/app.py", line 675, in _check_status
      raise AppError(

      webtest.app.AppError: Bad response: 500 Internal Server Error (not 200 OK or 3xx redirect for http://localhost/networks)
  b'{"NeutronError": {"type": "HTTPInternalServerError", "message": "Request Failed: internal server error while processing your request.", "detail": ""}}'

  Captured pythonlogging:
  ~~~~~~~~~~~~~~~~~~~~~~~
         ERROR [neutron.pecan_wsgi.hooks.translation] POST failed.
  Traceback (most recent call last):
    File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/core.py", line 682, in __call__
      self.invoke_controller(controller, args, kwargs, state)
    File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/core.py", line 603, in invoke_controller
      result = self.render(template, result)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/core.py", line 414, in render
      return renderer.render(template, namespace)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/templating.py", line 23, in render
      return encode(namespace)
             ^^^^^^^^^^^^^^^^^
    File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 154, in encode
      return _instance.encode(obj)
             ^^^^^^^^^^^^^^^^^^^^^
    File "/usr/lib/python3.12/json/encoder.py", line 200, in encode
      chunks = self.iterencode(o, _one_shot=True)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/usr/lib/python3.12/json/encoder.py", line 258, in iterencode
      return _iterencode(o, 0)
             ^^^^^^^^^^^^^^^^^
    File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 148, in default
      return jsonify(obj)
             ^^^^^^^^^^^^
    File "/usr/lib/python3.12/functools.py", line 909, in wrapper
      return dispatch(args[0].__class__)(*args, **kw)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 143, in jsonify
      return _default.default(obj)
             ^^^^^^^^^^^^^^^^^^^^^
    File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 129, in default
      return JSONEncoder.default(self, obj)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/usr/lib/python3.12/json/encoder.py", line 180, in default
      raise TypeError(f'Object of type {o.__class__.__name__} '
  TypeError: Object of type _SentinelObject is not JSON serializable

  Digging in I can see all of the plugin child calls being updated,
  however I don't see them actually called under Python 3.12.

  This issue impacts the following unit tests:

  FAIL: neutron.tests.unit.api.v2.test_base.RegistryNotificationTest.test_network_create_registry_publish
  FAIL: neutron.tests.unit.api.v2.test_base.RegistryNotificationTest.test_network_update_registry_publish
  FAIL: neutron.tests.unit.api.v2.test_base.RegistryNotificationTest.test_networks_create_bulk_registry_publish
  FAIL: neutron.tests.unit.api.v2.test_base.NotificationTest.test_network_create_notifier
  FAIL: neutron.tests.unit.api.v2.test_base.NotificationTest.test_network_update_notifier
  FAIL: neutron.tests.unit.api.v2.test_base.QuotaTest.test_create_network_quota_without_limit
  FAIL: neutron.tests.unit.extensions.test_providernet.ProvidernetExtensionTestCase.test_network_create_with_provider_attrs
  FAIL: neutron.tests.unit.extensions.test_providernet.ProvidernetExtensionTestCase.test_network_update_with_provider_attrs

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/2051928/+subscriptions



Follow ups