Skip to content

Failed

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

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

Error Message

TypeError: Object of type datetime is not JSON serializable

Stacktrace

self = <test_csrf.TestCsrf object at 0x7f3f7467b610>

    def test_script(self):
    
        img = self.create_test_image(session=self.sf)
    
        script_path = "omero/export_scripts/Batch_Image_Export.py"
        script = self.sf.getScriptService().getScriptID(script_path)
    
        request_url = reverse('script_run', args=[script])
        data = {
            "Data_Type": "Image",
            "IDs": img.id.val,
            "Choose_T_Section": "Default-T (last-viewed)",
            "Choose_Z_Section": "Default-Z (last-viewed)",
            "Export_Individual_Channels": "on",
            "Export_Merged_Image": "on",
            "Folder_Name": "Batch_Image_Export",
            "Format": "JPEG",
            "Zoom": "100%"
        }
>       post(self.django_client, request_url, data)

test/integration/test_csrf.py:273: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../../../../.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 0x7f3f73eb6c90>
o = datetime.datetime(2025, 10, 20, 4, 21, 47, 738758)

    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