Skip to content

Failed

OmeroWeb.test.integration.test_csrf.TestCsrf.test_ome_tiff_script (from pytest)

Failing for the past 5 builds (Since #516 )
Took 1.1 sec.

Error Message

TypeError: Object of type datetime is not JSON serializable

Stacktrace

self = <test_csrf.TestCsrf object at 0x7f3f7467b510>

    def test_ome_tiff_script(self):
    
        """
        CSRF protection does not check `GET` requests so we need to be sure
        that this request results in an HTTP 405 (method not allowed) status
        code.
        """
    
        img = self.create_test_image(session=self.sf)
    
        request_url = reverse('ome_tiff_script', args=[img.id.val])
    
>       post(self.django_client, request_url, {})

test/integration/test_csrf.py:251: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../../../../.venv3/lib64/python3.11/site-packages/omeroweb/testlib/__init__.py:191: in post
    return csrf_response(
../../../../.venv3/lib64/python3.11/site-packages/omeroweb/testlib/__init__.py:162: in csrf_response
    return _response(
../../../../.venv3/lib64/python3.11/site-packages/omeroweb/testlib/__init__.py:119: in _response
    response = getattr(django_client, method)(
../../../../.venv3/lib64/python3.11/site-packages/django/test/client.py:1153: in post
    response = super().post(
../../../../.venv3/lib64/python3.11/site-packages/django/test/client.py:499: in post
    return self.generic(
../../../../.venv3/lib64/python3.11/site-packages/django/test/client.py:671: in generic
    return self.request(**r)
           ^^^^^^^^^^^^^^^^^
../../../../.venv3/lib64/python3.11/site-packages/django/test/client.py:1087: in request
    self.check_exception(response)
../../../../.venv3/lib64/python3.11/site-packages/django/test/client.py:802: in check_exception
    raise exc_value
../../../../.venv3/lib64/python3.11/site-packages/django/core/handlers/exception.py:55: in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
../../../../.venv3/lib64/python3.11/site-packages/django/utils/deprecation.py:122: in __call__
    response = self.process_response(request, response)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../../../../.venv3/lib64/python3.11/site-packages/django/contrib/sessions/middleware.py:59: in process_response
    request.session.save()
../../../../.venv3/lib64/python3.11/site-packages/django/contrib/sessions/backends/file.py:171: in save
    os.write(output_file_fd, self.encode(session_data).encode())
                             ^^^^^^^^^^^^^^^^^^^^^^^^^
../../../../.venv3/lib64/python3.11/site-packages/django/contrib/sessions/backends/base.py:124: in encode
    return signing.dumps(
../../../../.venv3/lib64/python3.11/site-packages/django/core/signing.py:150: in dumps
    return TimestampSigner(key=key, salt=salt).sign_object(
../../../../.venv3/lib64/python3.11/site-packages/django/core/signing.py:225: in sign_object
    data = serializer().dumps(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^
../../../../.venv3/lib64/python3.11/site-packages/django/core/signing.py:125: in dumps
    return json.dumps(obj, separators=(",", ":")).encode("latin-1")
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib64/python3.11/json/__init__.py:238: in dumps
    **kw).encode(obj)
          ^^^^^^^^^^^
/usr/lib64/python3.11/json/encoder.py:200: in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib64/python3.11/json/encoder.py:258: in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <json.encoder.JSONEncoder object at 0x7f3f70a0e250>
o = datetime.datetime(2025, 10, 20, 4, 21, 47, 268787)

    def default(self, o):
        """Implement this method in a subclass such that it returns
        a serializable object for ``o``, or calls the base implementation
        (to raise a ``TypeError``).
    
        For example, to support arbitrary iterators, you could
        implement default like this::
    
            def default(self, o):
                try:
                    iterable = iter(o)
                except TypeError:
                    pass
                else:
                    return list(iterable)
                # Let the base class default method raise the TypeError
                return super().default(o)
    
        """
>       raise TypeError(f'Object of type {o.__class__.__name__} '
                        f'is not JSON serializable')
E       TypeError: Object of type datetime is not JSON serializable

/usr/lib64/python3.11/json/encoder.py:180: TypeError