Skip to content

Replace-experiment-client-with-ert-storage-api - #14272

Open
eqbech wants to merge 5 commits into
mainfrom
replace-experiment-client-with-ert-storage-api
Open

Replace-experiment-client-with-ert-storage-api#14272
eqbech wants to merge 5 commits into
mainfrom
replace-experiment-client-with-ert-storage-api

Conversation

@eqbech

@eqbech eqbech commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Issue
Resolves #14244

Approach
Short description of the approach

(Screenshot of new behavior in GUI if applicable)

  • PR title captures the intent of the changes, and is fitting for release notes.
  • Added appropriate release note label
  • Commit history is consistent and clean, in line with the contribution guidelines.
  • Make sure unit tests pass locally after every commit (git rebase -i main --exec 'just rapid-tests')

Stack created with GitHub Stacks CLIGive Feedback 💬

@eqbech
eqbech force-pushed the replace-experiment-client-with-ert-storage-api branch from 99bbd73 to 8989adc Compare August 25, 2026 07:48
@eqbech
eqbech force-pushed the replace-experiment-client-with-ert-storage-api branch 3 times, most recently from bb31223 to b232445 Compare August 25, 2026 08:39
@codecov-commenter

codecov-commenter commented Aug 25, 2026

Copy link
Copy Markdown

❌ 12 Tests Failed:

Tests completed Failed Passed Skipped
4471 12 4459 63
View the top 3 failed test(s) by shortest run time
tests/everest/entry_points/test_everest_entry.py::test_that_run_everest_prints_where_it_runs[slurm-slurm]
Stack Traces | 0.054s run time
server_queue_system = <QueueSystem.SLURM: 'slurm'>
simulator_queue_system = <QueueSystem.SLURM: 'slurm'>
capsys = <_pytest.capture.CaptureFixture object at 0x7fa5b00e7950>
change_to_tmpdir = None

    @pytest.mark.parametrize(
        ("server_queue_system", "simulator_queue_system"),
        [
            (QueueSystem.LSF, QueueSystem.LSF),
            (QueueSystem.SLURM, QueueSystem.LSF),
            (QueueSystem.LOCAL, QueueSystem.LSF),
            (QueueSystem.LSF, QueueSystem.SLURM),
            (QueueSystem.SLURM, QueueSystem.SLURM),
            (QueueSystem.LOCAL, QueueSystem.SLURM),
            (QueueSystem.LOCAL, QueueSystem.LOCAL),
        ],
    )
    @pytest.mark.slow
    def test_that_run_everest_prints_where_it_runs(
        server_queue_system, simulator_queue_system, capsys, change_to_tmpdir
    ):
        everest_config_with_defaults(
            simulator={"queue_system": {"name": simulator_queue_system}},
            server={"queue_system": {"name": server_queue_system}},
        ).write_to_file("config.yml")
    
        with (
            patch(
                "everest.bin.everest_script.ErtClient",
                **{"get_client.side_effect": [TimeoutError(), DEFAULT]},
            ),
            patch(
                "everest.config.ServerConfig.get_server_context_from_conn_info",
                return_value=("a", "b", ("c", "d")),
            ),
            patch("everest.bin.everest_script.start_server"),
            patch("everest.bin.everest_script.wait_for_server"),
        ):
>           everest_entry(["config.yml"])

.../everest/entry_points/test_everest_entry.py:426: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../everest/bin/everest_script.py:103: in everest_entry
    asyncio.run(run_everest(options))
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/runners.py:205: in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/runners.py:128: in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/base_events.py:720: in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
.../everest/bin/everest_script.py:268: in run_everest
    run_detached_monitor(
.../everest/bin/utils.py:402: in run_detached_monitor
    start_monitor(server_context, callback=monitor.update, experiment_id=experiment_id)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

server_context = ('a', 'b', ('c', 'd'))
callback = <bound method _DetachedMonitor.update of <everest.bin.utils._DetachedMonitor object at 0x7fa59258d590>>
experiment_id = <MagicMock name='ErtClient.get_client().start_experiment()' id='140349629551280'>
polling_interval = 0.1

    def start_monitor(
        server_context: tuple[str, str, tuple[str, str]],
        callback: Callable[..., None],
        experiment_id: str,
        polling_interval: float = 0.1,
    ) -> None:
        """
        Checks status on EVEREST server and calls callback when status changes
    
        Monitoring stops when the server stops answering.
        """
        from ert.run_models.event import (  # ruff: ignore[import-outside-top-level]
            EverestBatchResultEvent,
            status_event_from_json,
        )
    
        url, cert, auth = server_context
>       ssl_context = ssl.create_default_context()
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
E       AttributeError: '_SentinelObject' object has no attribute 'create_default_context'

.../everest/detached/client.py:200: AttributeError
tests/everest/entry_points/test_everest_entry.py::test_that_run_everest_prints_where_it_runs[local-local]
Stack Traces | 0.056s run time
server_queue_system = <QueueSystem.LOCAL: 'local'>
simulator_queue_system = <QueueSystem.LOCAL: 'local'>
capsys = <_pytest.capture.CaptureFixture object at 0x7fc950f01f90>
change_to_tmpdir = None

    @pytest.mark.parametrize(
        ("server_queue_system", "simulator_queue_system"),
        [
            (QueueSystem.LSF, QueueSystem.LSF),
            (QueueSystem.SLURM, QueueSystem.LSF),
            (QueueSystem.LOCAL, QueueSystem.LSF),
            (QueueSystem.LSF, QueueSystem.SLURM),
            (QueueSystem.SLURM, QueueSystem.SLURM),
            (QueueSystem.LOCAL, QueueSystem.SLURM),
            (QueueSystem.LOCAL, QueueSystem.LOCAL),
        ],
    )
    @pytest.mark.slow
    def test_that_run_everest_prints_where_it_runs(
        server_queue_system, simulator_queue_system, capsys, change_to_tmpdir
    ):
        everest_config_with_defaults(
            simulator={"queue_system": {"name": simulator_queue_system}},
            server={"queue_system": {"name": server_queue_system}},
        ).write_to_file("config.yml")
    
        with (
            patch(
                "everest.bin.everest_script.ErtClient",
                **{"get_client.side_effect": [TimeoutError(), DEFAULT]},
            ),
            patch(
                "everest.config.ServerConfig.get_server_context_from_conn_info",
                return_value=("a", "b", ("c", "d")),
            ),
            patch("everest.bin.everest_script.start_server"),
            patch("everest.bin.everest_script.wait_for_server"),
        ):
>           everest_entry(["config.yml"])

.../everest/entry_points/test_everest_entry.py:426: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../everest/bin/everest_script.py:103: in everest_entry
    asyncio.run(run_everest(options))
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/runners.py:205: in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/runners.py:128: in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/base_events.py:720: in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
.../everest/bin/everest_script.py:268: in run_everest
    run_detached_monitor(
.../everest/bin/utils.py:402: in run_detached_monitor
    start_monitor(server_context, callback=monitor.update, experiment_id=experiment_id)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

server_context = ('a', 'b', ('c', 'd'))
callback = <bound method _DetachedMonitor.update of <everest.bin.utils._DetachedMonitor object at 0x7fc950f00a50>>
experiment_id = <MagicMock name='ErtClient.get_client().start_experiment()' id='140502623228928'>
polling_interval = 0.1

    def start_monitor(
        server_context: tuple[str, str, tuple[str, str]],
        callback: Callable[..., None],
        experiment_id: str,
        polling_interval: float = 0.1,
    ) -> None:
        """
        Checks status on EVEREST server and calls callback when status changes
    
        Monitoring stops when the server stops answering.
        """
        from ert.run_models.event import (  # ruff: ignore[import-outside-top-level]
            EverestBatchResultEvent,
            status_event_from_json,
        )
    
        url, cert, auth = server_context
>       ssl_context = ssl.create_default_context()
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
E       AttributeError: '_SentinelObject' object has no attribute 'create_default_context'

.../everest/detached/client.py:200: AttributeError
tests/everest/entry_points/test_everest_entry.py::test_that_run_everest_prints_where_it_runs[local-slurm]
Stack Traces | 0.059s run time
server_queue_system = <QueueSystem.LOCAL: 'local'>
simulator_queue_system = <QueueSystem.SLURM: 'slurm'>
capsys = <_pytest.capture.CaptureFixture object at 0x7fa5b1ddda90>
change_to_tmpdir = None

    @pytest.mark.parametrize(
        ("server_queue_system", "simulator_queue_system"),
        [
            (QueueSystem.LSF, QueueSystem.LSF),
            (QueueSystem.SLURM, QueueSystem.LSF),
            (QueueSystem.LOCAL, QueueSystem.LSF),
            (QueueSystem.LSF, QueueSystem.SLURM),
            (QueueSystem.SLURM, QueueSystem.SLURM),
            (QueueSystem.LOCAL, QueueSystem.SLURM),
            (QueueSystem.LOCAL, QueueSystem.LOCAL),
        ],
    )
    @pytest.mark.slow
    def test_that_run_everest_prints_where_it_runs(
        server_queue_system, simulator_queue_system, capsys, change_to_tmpdir
    ):
        everest_config_with_defaults(
            simulator={"queue_system": {"name": simulator_queue_system}},
            server={"queue_system": {"name": server_queue_system}},
        ).write_to_file("config.yml")
    
        with (
            patch(
                "everest.bin.everest_script.ErtClient",
                **{"get_client.side_effect": [TimeoutError(), DEFAULT]},
            ),
            patch(
                "everest.config.ServerConfig.get_server_context_from_conn_info",
                return_value=("a", "b", ("c", "d")),
            ),
            patch("everest.bin.everest_script.start_server"),
            patch("everest.bin.everest_script.wait_for_server"),
        ):
>           everest_entry(["config.yml"])

.../everest/entry_points/test_everest_entry.py:426: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../everest/bin/everest_script.py:103: in everest_entry
    asyncio.run(run_everest(options))
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/runners.py:205: in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/runners.py:128: in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/base_events.py:720: in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
.../everest/bin/everest_script.py:268: in run_everest
    run_detached_monitor(
.../everest/bin/utils.py:402: in run_detached_monitor
    start_monitor(server_context, callback=monitor.update, experiment_id=experiment_id)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

server_context = ('a', 'b', ('c', 'd'))
callback = <bound method _DetachedMonitor.update of <everest.bin.utils._DetachedMonitor object at 0x7fa5b0049450>>
experiment_id = <MagicMock name='ErtClient.get_client().start_experiment()' id='140349983767392'>
polling_interval = 0.1

    def start_monitor(
        server_context: tuple[str, str, tuple[str, str]],
        callback: Callable[..., None],
        experiment_id: str,
        polling_interval: float = 0.1,
    ) -> None:
        """
        Checks status on EVEREST server and calls callback when status changes
    
        Monitoring stops when the server stops answering.
        """
        from ert.run_models.event import (  # ruff: ignore[import-outside-top-level]
            EverestBatchResultEvent,
            status_event_from_json,
        )
    
        url, cert, auth = server_context
>       ssl_context = ssl.create_default_context()
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
E       AttributeError: '_SentinelObject' object has no attribute 'create_default_context'

.../everest/detached/client.py:200: AttributeError
tests/everest/entry_points/test_everest_entry.py::test_that_run_everest_prints_where_it_runs[local-lsf]
Stack Traces | 0.062s run time
server_queue_system = <QueueSystem.LOCAL: 'local'>
simulator_queue_system = <QueueSystem.LSF: 'lsf'>
capsys = <_pytest.capture.CaptureFixture object at 0x7fa5b1ddf750>
change_to_tmpdir = None

    @pytest.mark.parametrize(
        ("server_queue_system", "simulator_queue_system"),
        [
            (QueueSystem.LSF, QueueSystem.LSF),
            (QueueSystem.SLURM, QueueSystem.LSF),
            (QueueSystem.LOCAL, QueueSystem.LSF),
            (QueueSystem.LSF, QueueSystem.SLURM),
            (QueueSystem.SLURM, QueueSystem.SLURM),
            (QueueSystem.LOCAL, QueueSystem.SLURM),
            (QueueSystem.LOCAL, QueueSystem.LOCAL),
        ],
    )
    @pytest.mark.slow
    def test_that_run_everest_prints_where_it_runs(
        server_queue_system, simulator_queue_system, capsys, change_to_tmpdir
    ):
        everest_config_with_defaults(
            simulator={"queue_system": {"name": simulator_queue_system}},
            server={"queue_system": {"name": server_queue_system}},
        ).write_to_file("config.yml")
    
        with (
            patch(
                "everest.bin.everest_script.ErtClient",
                **{"get_client.side_effect": [TimeoutError(), DEFAULT]},
            ),
            patch(
                "everest.config.ServerConfig.get_server_context_from_conn_info",
                return_value=("a", "b", ("c", "d")),
            ),
            patch("everest.bin.everest_script.start_server"),
            patch("everest.bin.everest_script.wait_for_server"),
        ):
>           everest_entry(["config.yml"])

.../everest/entry_points/test_everest_entry.py:426: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../everest/bin/everest_script.py:103: in everest_entry
    asyncio.run(run_everest(options))
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/runners.py:205: in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/runners.py:128: in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/base_events.py:720: in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
.../everest/bin/everest_script.py:268: in run_everest
    run_detached_monitor(
.../everest/bin/utils.py:402: in run_detached_monitor
    start_monitor(server_context, callback=monitor.update, experiment_id=experiment_id)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

server_context = ('a', 'b', ('c', 'd'))
callback = <bound method _DetachedMonitor.update of <everest.bin.utils._DetachedMonitor object at 0x7fa5c6ed1010>>
experiment_id = <MagicMock name='ErtClient.get_client().start_experiment()' id='140349629550272'>
polling_interval = 0.1

    def start_monitor(
        server_context: tuple[str, str, tuple[str, str]],
        callback: Callable[..., None],
        experiment_id: str,
        polling_interval: float = 0.1,
    ) -> None:
        """
        Checks status on EVEREST server and calls callback when status changes
    
        Monitoring stops when the server stops answering.
        """
        from ert.run_models.event import (  # ruff: ignore[import-outside-top-level]
            EverestBatchResultEvent,
            status_event_from_json,
        )
    
        url, cert, auth = server_context
>       ssl_context = ssl.create_default_context()
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
E       AttributeError: '_SentinelObject' object has no attribute 'create_default_context'

.../everest/detached/client.py:200: AttributeError
tests/everest/entry_points/test_everest_entry.py::test_that_run_everest_prints_where_it_runs[slurm-lsf]
Stack Traces | 0.068s run time
server_queue_system = <QueueSystem.SLURM: 'slurm'>
simulator_queue_system = <QueueSystem.LSF: 'lsf'>
capsys = <_pytest.capture.CaptureFixture object at 0x7fc950f00e10>
change_to_tmpdir = None

    @pytest.mark.parametrize(
        ("server_queue_system", "simulator_queue_system"),
        [
            (QueueSystem.LSF, QueueSystem.LSF),
            (QueueSystem.SLURM, QueueSystem.LSF),
            (QueueSystem.LOCAL, QueueSystem.LSF),
            (QueueSystem.LSF, QueueSystem.SLURM),
            (QueueSystem.SLURM, QueueSystem.SLURM),
            (QueueSystem.LOCAL, QueueSystem.SLURM),
            (QueueSystem.LOCAL, QueueSystem.LOCAL),
        ],
    )
    @pytest.mark.slow
    def test_that_run_everest_prints_where_it_runs(
        server_queue_system, simulator_queue_system, capsys, change_to_tmpdir
    ):
        everest_config_with_defaults(
            simulator={"queue_system": {"name": simulator_queue_system}},
            server={"queue_system": {"name": server_queue_system}},
        ).write_to_file("config.yml")
    
        with (
            patch(
                "everest.bin.everest_script.ErtClient",
                **{"get_client.side_effect": [TimeoutError(), DEFAULT]},
            ),
            patch(
                "everest.config.ServerConfig.get_server_context_from_conn_info",
                return_value=("a", "b", ("c", "d")),
            ),
            patch("everest.bin.everest_script.start_server"),
            patch("everest.bin.everest_script.wait_for_server"),
        ):
>           everest_entry(["config.yml"])

.../everest/entry_points/test_everest_entry.py:426: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../everest/bin/everest_script.py:103: in everest_entry
    asyncio.run(run_everest(options))
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/runners.py:205: in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/runners.py:128: in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/base_events.py:720: in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
.../everest/bin/everest_script.py:268: in run_everest
    run_detached_monitor(
.../everest/bin/utils.py:402: in run_detached_monitor
    start_monitor(server_context, callback=monitor.update, experiment_id=experiment_id)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

server_context = ('a', 'b', ('c', 'd'))
callback = <bound method _DetachedMonitor.update of <everest.bin.utils._DetachedMonitor object at 0x7fc950f01310>>
experiment_id = <MagicMock name='ErtClient.get_client().start_experiment()' id='140503303042256'>
polling_interval = 0.1

    def start_monitor(
        server_context: tuple[str, str, tuple[str, str]],
        callback: Callable[..., None],
        experiment_id: str,
        polling_interval: float = 0.1,
    ) -> None:
        """
        Checks status on EVEREST server and calls callback when status changes
    
        Monitoring stops when the server stops answering.
        """
        from ert.run_models.event import (  # ruff: ignore[import-outside-top-level]
            EverestBatchResultEvent,
            status_event_from_json,
        )
    
        url, cert, auth = server_context
>       ssl_context = ssl.create_default_context()
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
E       AttributeError: '_SentinelObject' object has no attribute 'create_default_context'

.../everest/detached/client.py:200: AttributeError
tests/everest/entry_points/test_everest_entry.py::test_that_run_everest_prints_where_it_runs[lsf-lsf]
Stack Traces | 0.095s run time
server_queue_system = <QueueSystem.LSF: 'lsf'>
simulator_queue_system = <QueueSystem.LSF: 'lsf'>
capsys = <_pytest.capture.CaptureFixture object at 0x7fc979d2b230>
change_to_tmpdir = None

    @pytest.mark.parametrize(
        ("server_queue_system", "simulator_queue_system"),
        [
            (QueueSystem.LSF, QueueSystem.LSF),
            (QueueSystem.SLURM, QueueSystem.LSF),
            (QueueSystem.LOCAL, QueueSystem.LSF),
            (QueueSystem.LSF, QueueSystem.SLURM),
            (QueueSystem.SLURM, QueueSystem.SLURM),
            (QueueSystem.LOCAL, QueueSystem.SLURM),
            (QueueSystem.LOCAL, QueueSystem.LOCAL),
        ],
    )
    @pytest.mark.slow
    def test_that_run_everest_prints_where_it_runs(
        server_queue_system, simulator_queue_system, capsys, change_to_tmpdir
    ):
        everest_config_with_defaults(
            simulator={"queue_system": {"name": simulator_queue_system}},
            server={"queue_system": {"name": server_queue_system}},
        ).write_to_file("config.yml")
    
        with (
            patch(
                "everest.bin.everest_script.ErtClient",
                **{"get_client.side_effect": [TimeoutError(), DEFAULT]},
            ),
            patch(
                "everest.config.ServerConfig.get_server_context_from_conn_info",
                return_value=("a", "b", ("c", "d")),
            ),
            patch("everest.bin.everest_script.start_server"),
            patch("everest.bin.everest_script.wait_for_server"),
        ):
>           everest_entry(["config.yml"])

.../everest/entry_points/test_everest_entry.py:426: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../everest/bin/everest_script.py:103: in everest_entry
    asyncio.run(run_everest(options))
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/runners.py:205: in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/runners.py:128: in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/base_events.py:720: in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
.../everest/bin/everest_script.py:268: in run_everest
    run_detached_monitor(
.../everest/bin/utils.py:402: in run_detached_monitor
    start_monitor(server_context, callback=monitor.update, experiment_id=experiment_id)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

server_context = ('a', 'b', ('c', 'd'))
callback = <bound method _DetachedMonitor.update of <everest.bin.utils._DetachedMonitor object at 0x7fc950f28980>>
experiment_id = <MagicMock name='ErtClient.get_client().start_experiment()' id='140502623225568'>
polling_interval = 0.1

    def start_monitor(
        server_context: tuple[str, str, tuple[str, str]],
        callback: Callable[..., None],
        experiment_id: str,
        polling_interval: float = 0.1,
    ) -> None:
        """
        Checks status on EVEREST server and calls callback when status changes
    
        Monitoring stops when the server stops answering.
        """
        from ert.run_models.event import (  # ruff: ignore[import-outside-top-level]
            EverestBatchResultEvent,
            status_event_from_json,
        )
    
        url, cert, auth = server_context
>       ssl_context = ssl.create_default_context()
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
E       AttributeError: '_SentinelObject' object has no attribute 'create_default_context'

.../everest/detached/client.py:200: AttributeError
tests/everest/entry_points/test_everest_entry.py::test_that_run_everest_prints_where_it_runs[lsf-slurm]
Stack Traces | 0.105s run time
server_queue_system = <QueueSystem.LSF: 'lsf'>
simulator_queue_system = <QueueSystem.SLURM: 'slurm'>
capsys = <_pytest.capture.CaptureFixture object at 0x7fa592509350>
change_to_tmpdir = None

    @pytest.mark.parametrize(
        ("server_queue_system", "simulator_queue_system"),
        [
            (QueueSystem.LSF, QueueSystem.LSF),
            (QueueSystem.SLURM, QueueSystem.LSF),
            (QueueSystem.LOCAL, QueueSystem.LSF),
            (QueueSystem.LSF, QueueSystem.SLURM),
            (QueueSystem.SLURM, QueueSystem.SLURM),
            (QueueSystem.LOCAL, QueueSystem.SLURM),
            (QueueSystem.LOCAL, QueueSystem.LOCAL),
        ],
    )
    @pytest.mark.slow
    def test_that_run_everest_prints_where_it_runs(
        server_queue_system, simulator_queue_system, capsys, change_to_tmpdir
    ):
        everest_config_with_defaults(
            simulator={"queue_system": {"name": simulator_queue_system}},
            server={"queue_system": {"name": server_queue_system}},
        ).write_to_file("config.yml")
    
        with (
            patch(
                "everest.bin.everest_script.ErtClient",
                **{"get_client.side_effect": [TimeoutError(), DEFAULT]},
            ),
            patch(
                "everest.config.ServerConfig.get_server_context_from_conn_info",
                return_value=("a", "b", ("c", "d")),
            ),
            patch("everest.bin.everest_script.start_server"),
            patch("everest.bin.everest_script.wait_for_server"),
        ):
>           everest_entry(["config.yml"])

.../everest/entry_points/test_everest_entry.py:426: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../everest/bin/everest_script.py:103: in everest_entry
    asyncio.run(run_everest(options))
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/runners.py:205: in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/runners.py:128: in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7........./x64/lib/python3.14/asyncio/base_events.py:720: in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
.../everest/bin/everest_script.py:268: in run_everest
    run_detached_monitor(
.../everest/bin/utils.py:402: in run_detached_monitor
    start_monitor(server_context, callback=monitor.update, experiment_id=experiment_id)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

server_context = ('a', 'b', ('c', 'd'))
callback = <bound method _DetachedMonitor.update of <everest.bin.utils._DetachedMonitor object at 0x7fa592509e00>>
experiment_id = <MagicMock name='ErtClient.get_client().start_experiment()' id='140349629555312'>
polling_interval = 0.1

    def start_monitor(
        server_context: tuple[str, str, tuple[str, str]],
        callback: Callable[..., None],
        experiment_id: str,
        polling_interval: float = 0.1,
    ) -> None:
        """
        Checks status on EVEREST server and calls callback when status changes
    
        Monitoring stops when the server stops answering.
        """
        from ert.run_models.event import (  # ruff: ignore[import-outside-top-level]
            EverestBatchResultEvent,
            status_event_from_json,
        )
    
        url, cert, auth = server_context
>       ssl_context = ssl.create_default_context()
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
E       AttributeError: '_SentinelObject' object has no attribute 'create_default_context'

.../everest/detached/client.py:200: AttributeError
tests/everest/test_everserver.py::test_status_too_few_realizations_succeeded@starts_everest
Stack Traces | 17.2s run time
copy_math_func_test_data_to_tmp = None

    @pytest.mark.skip_mac_ci
    @pytest.mark.slow
    @pytest.mark.xdist_group(name="starts_everest")
    @pytest.mark.timeout(240)
    @patch("sys.argv", ["name", "--output-dir", "everest_output"])
    @pytest.mark.usefixtures("use_site_configurations_with_no_queue_options")
    async def test_status_too_few_realizations_succeeded(copy_math_func_test_data_to_tmp):
        config = EverestConfig.load_file("config_minimal.yml")
        config_dict = {
            **config.model_dump(exclude_none=True),
            "optimization": {"algorithm": "optpp_q_newton", "max_batch_num": 1},
            "simulator": {"queue_system": {"name": "local", "max_running": 2}},
            "model": {"realizations": [0, 1]},
        }
        config_dict["install_jobs"].append(
            {"name": "fail_simulation", "executable": "jobs/fail_simulation.py"}
        )
        config_dict["forward_model"].append("fail_simulation --fail realization-0")
        with pytest.warns(ConfigWarning, match="The `controls.type` field is deprecated"):
            config = EverestConfig.model_validate(config_dict)
    
>       await wait_for_server_to_complete(config)

.../tests/everest/test_everserver.py:177: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../tests/everest/test_everserver.py:74: in wait_for_server_to_complete
    api.start_experiment(config)
.../ert/services/ert_client.py:333: in start_experiment
    response = self._request(
.../ert/services/ert_client.py:389: in _request
    return self._client.request(method, url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../ert/services/shared_client.py:84: in request
    return self._client.request(method, url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_client.py:812: in request
    request = self.build_request(
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_client.py:378: in build_request
    return Request(
.../ert/ert/.venv/lib/python3.14.../site-packages/httpx/_models.py:408: in __init__
    headers, stream = encode_request(
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_content.py:216: in encode_request
    return encode_json(json)
           ^^^^^^^^^^^^^^^^^
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_content.py:177: in encode_json
    body = json_dumps(
.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/__init__.py:242: in dumps
    **kw).encode(obj)
          ^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/encoder.py:202: in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/encoder.py:263: in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <json.encoder.JSONEncoder object at 0x7ff4394f49d0>
o = EverestConfig(controls=[ControlConfig(name='point', type='generic_control', variables=[ControlVariableConfig(name='x',..., config_path=PosixPath('.../popen-gw0/test_status_too_few_realizatio0/config_minimal.yml'))

    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 EverestConfig is not JSON serializable

.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/encoder.py:182: TypeError
tests/everest/test_everserver.py::test_status_contains_max_runtime_failure@starts_everest
Stack Traces | 19.2s run time
change_to_tmpdir = None
min_config = {'model': {'realizations': [0]}, 'controls': [{'name': 'my_control', 'min': 0, 'max': 0.1, 'perturbation_magnitude': 0.01, ...}], 'objective_functions': [{'name': 'my_objective'}], 'config_path': '.', ...}

    @pytest.mark.skip_mac_ci
    @pytest.mark.slow
    @pytest.mark.xdist_group(name="starts_everest")
    @pytest.mark.timeout(240)
    @patch("sys.argv", ["name", "--output-dir", "everest_output"])
    async def test_status_contains_max_runtime_failure(change_to_tmpdir, min_config):
        min_config["simulator"] = {
            "queue_system": {"name": "local", "max_running": 2},
            "max_runtime": 1,
        }
        min_config["forward_model"] = ["sleep 5"]
        min_config["install_jobs"] = [{"name": "sleep", "executable": which("sleep")}]
    
        config = EverestConfig(**min_config)
    
>       await wait_for_server_to_complete(config)

.../tests/everest/test_everserver.py:230: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../tests/everest/test_everserver.py:74: in wait_for_server_to_complete
    api.start_experiment(config)
.../ert/services/ert_client.py:333: in start_experiment
    response = self._request(
.../ert/services/ert_client.py:389: in _request
    return self._client.request(method, url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../ert/services/shared_client.py:84: in request
    return self._client.request(method, url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_client.py:812: in request
    request = self.build_request(
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_client.py:378: in build_request
    return Request(
.../ert/ert/.venv/lib/python3.14.../site-packages/httpx/_models.py:408: in __init__
    headers, stream = encode_request(
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_content.py:216: in encode_request
    return encode_json(json)
           ^^^^^^^^^^^^^^^^^
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_content.py:177: in encode_json
    body = json_dumps(
.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/__init__.py:242: in dumps
    **kw).encode(obj)
          ^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/encoder.py:202: in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/encoder.py:263: in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <json.encoder.JSONEncoder object at 0x7ff43950d250>
o = EverestConfig(controls=[ControlConfig(name='my_control', type='generic_control', variables=[ControlVariableConfig(name...ws=WorkflowConfig(pre_simulation=[], post_simulation=[]), export=ExportConfig(keywords=[]), config_path=PosixPath('.'))

    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 EverestConfig is not JSON serializable

.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/encoder.py:182: TypeError
tests/everest/test_everserver.py::test_status_max_batch_num@starts_everest
Stack Traces | 19.2s run time
copy_math_func_test_data_to_tmp = None

    @pytest.mark.skip_mac_ci
    @pytest.mark.slow
    @pytest.mark.xdist_group(name="starts_everest")
    @pytest.mark.timeout(240)
    @patch("sys.argv", ["name", "--output-dir", "everest_output"])
    @pytest.mark.usefixtures("use_site_configurations_with_no_queue_options")
    async def test_status_max_batch_num(copy_math_func_test_data_to_tmp):
        config = EverestConfig.load_file("config_minimal.yml")
        config_dict = {
            **config.model_dump(exclude_none=True),
            "optimization": {"algorithm": "optpp_q_newton", "max_batch_num": 1},
            "simulator": {"queue_system": {"name": "local", "max_running": 2}},
        }
        with pytest.warns(ConfigWarning, match="The `controls.type` field is deprecated"):
            config = EverestConfig.model_validate(config_dict)
    
>       await wait_for_server_to_complete(config)

.../tests/everest/test_everserver.py:142: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../tests/everest/test_everserver.py:74: in wait_for_server_to_complete
    api.start_experiment(config)
.../ert/services/ert_client.py:333: in start_experiment
    response = self._request(
.../ert/services/ert_client.py:389: in _request
    return self._client.request(method, url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../ert/services/shared_client.py:84: in request
    return self._client.request(method, url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_client.py:812: in request
    request = self.build_request(
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_client.py:378: in build_request
    return Request(
.../ert/ert/.venv/lib/python3.14.../site-packages/httpx/_models.py:408: in __init__
    headers, stream = encode_request(
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_content.py:216: in encode_request
    return encode_json(json)
           ^^^^^^^^^^^^^^^^^
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_content.py:177: in encode_json
    body = json_dumps(
.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/__init__.py:242: in dumps
    **kw).encode(obj)
          ^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/encoder.py:202: in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/encoder.py:263: in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <json.encoder.JSONEncoder object at 0x7ff45185b6f0>
o = EverestConfig(controls=[ControlConfig(name='point', type='generic_control', variables=[ControlVariableConfig(name='x',...s=[]), config_path=PosixPath('.../popen-gw0/test_status_max_batch_num0/config_minimal.yml'))

    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 EverestConfig is not JSON serializable

.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/encoder.py:182: TypeError
tests/everest/test_everserver.py::test_status_all_realizations_failed@starts_everest
Stack Traces | 19.8s run time
copy_math_func_test_data_to_tmp = None

    @pytest.mark.skip_mac_ci
    @pytest.mark.slow
    @pytest.mark.xdist_group(name="starts_everest")
    @pytest.mark.timeout(240)
    @patch("sys.argv", ["name", "--output-dir", "everest_output"])
    @pytest.mark.usefixtures("use_site_configurations_with_no_queue_options")
    async def test_status_all_realizations_failed(copy_math_func_test_data_to_tmp):
        config = EverestConfig.load_file("config_minimal.yml")
        config_dict = {
            **config.model_dump(exclude_none=True),
            "optimization": {"algorithm": "optpp_q_newton", "max_batch_num": 1},
            "simulator": {"queue_system": {"name": "local", "max_running": 2}},
        }
        config_dict["install_jobs"].append({"name": "fail", "executable": which("false")})
        config_dict["forward_model"].append("fail")
        with pytest.warns(ConfigWarning, match="The `controls.type` field is deprecated"):
            config = EverestConfig.model_validate(config_dict)
    
>       await wait_for_server_to_complete(config)

.../tests/everest/test_everserver.py:205: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../tests/everest/test_everserver.py:74: in wait_for_server_to_complete
    api.start_experiment(config)
.../ert/services/ert_client.py:333: in start_experiment
    response = self._request(
.../ert/services/ert_client.py:389: in _request
    return self._client.request(method, url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../ert/services/shared_client.py:84: in request
    return self._client.request(method, url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_client.py:812: in request
    request = self.build_request(
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_client.py:378: in build_request
    return Request(
.../ert/ert/.venv/lib/python3.14.../site-packages/httpx/_models.py:408: in __init__
    headers, stream = encode_request(
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_content.py:216: in encode_request
    return encode_json(json)
           ^^^^^^^^^^^^^^^^^
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_content.py:177: in encode_json
    body = json_dumps(
.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/__init__.py:242: in dumps
    **kw).encode(obj)
          ^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/encoder.py:202: in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/encoder.py:263: in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <json.encoder.JSONEncoder object at 0x7ff451abb4d0>
o = EverestConfig(controls=[ControlConfig(name='point', type='generic_control', variables=[ControlVariableConfig(name='x',..., config_path=PosixPath('.../popen-gw0/test_status_all_realizations_f0/config_minimal.yml'))

    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 EverestConfig is not JSON serializable

.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/encoder.py:182: TypeError
tests/everest/test_everserver.py::test_status_exception@starts_everest
Stack Traces | 20.2s run time
mock_configure_loggers = <MagicMock name='_configure_loggers' id='140687316588192'>
change_to_tmpdir = None
min_config = {'model': {'realizations': [0]}, 'controls': [{'name': 'my_control', 'min': 0, 'max': 0.1, 'perturbation_magnitude': 0.01, ...}], 'objective_functions': [{'name': 'my_objective'}], 'config_path': '.', ...}

    @pytest.mark.skip_mac_ci
    @pytest.mark.slow
    @pytest.mark.xdist_group(name="starts_everest")
    @patch("sys.argv", ["name", "--output-dir", "everest_output"])
    @patch("everest.detached.everserver._configure_loggers")
    async def test_status_exception(mock_configure_loggers, change_to_tmpdir, min_config):
        min_config["simulator"] = {"queue_system": {"name": "local"}}
        config = EverestConfig(**min_config)
    
>       await wait_for_server_to_complete(config)

.../tests/everest/test_everserver.py:117: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../tests/everest/test_everserver.py:74: in wait_for_server_to_complete
    api.start_experiment(config)
.../ert/services/ert_client.py:333: in start_experiment
    response = self._request(
.../ert/services/ert_client.py:389: in _request
    return self._client.request(method, url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../ert/services/shared_client.py:84: in request
    return self._client.request(method, url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_client.py:812: in request
    request = self.build_request(
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_client.py:378: in build_request
    return Request(
.../ert/ert/.venv/lib/python3.14.../site-packages/httpx/_models.py:408: in __init__
    headers, stream = encode_request(
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_content.py:216: in encode_request
    return encode_json(json)
           ^^^^^^^^^^^^^^^^^
.../ert/ert/.venv/lib/python3.14....../site-packages/httpx/_content.py:177: in encode_json
    body = json_dumps(
.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/__init__.py:242: in dumps
    **kw).encode(obj)
          ^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/encoder.py:202: in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/encoder.py:263: in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <json.encoder.JSONEncoder object at 0x7ff43949d7b0>
o = EverestConfig(controls=[ControlConfig(name='my_control', type='generic_control', variables=[ControlVariableConfig(name...ws=WorkflowConfig(pre_simulation=[], post_simulation=[]), export=ExportConfig(keywords=[]), config_path=PosixPath('.'))

    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 EverestConfig is not JSON serializable

.../hostedtoolcache/Python/3.14.7............/x64/lib/python3.14/json/encoder.py:182: TypeError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@eqbech
eqbech force-pushed the replace-experiment-client-with-ert-storage-api branch 2 times, most recently from 5d3e64b to f4dc6c1 Compare August 26, 2026 07:07
@eqbech
eqbech force-pushed the replace-experiment-client-with-ert-storage-api branch from f4dc6c1 to 88c64ef Compare August 26, 2026 10:00
@eqbech
eqbech force-pushed the replace-experiment-client-with-ert-storage-api branch 2 times, most recently from 4be5f87 to c8f1bd0 Compare August 27, 2026 06:03
@eqbech
eqbech force-pushed the replace-experiment-client-with-ert-storage-api branch from c8f1bd0 to ba1be06 Compare August 27, 2026 06:16
@eqbech
eqbech force-pushed the replace-experiment-client-with-ert-storage-api branch 3 times, most recently from 9ca8eec to 79f0cb6 Compare August 27, 2026 07:30
@eqbech
eqbech force-pushed the replace-experiment-client-with-ert-storage-api branch from 79f0cb6 to cb1cf40 Compare August 27, 2026 08:45
@eqbech
eqbech force-pushed the replace-experiment-client-with-ert-storage-api branch from cb1cf40 to 27bbdf6 Compare August 27, 2026 10:06
@eqbech
eqbech force-pushed the replace-experiment-client-with-ert-storage-api branch from 27bbdf6 to 39818c0 Compare August 27, 2026 10:12
ertomatic pushed a commit to equinor/ert-testdata that referenced this pull request Aug 31, 2026
@eqbech
eqbech force-pushed the replace-experiment-client-with-ert-storage-api branch from a705785 to 2727212 Compare August 31, 2026 13:04
ertomatic pushed a commit to equinor/ert-testdata that referenced this pull request Aug 31, 2026
ertomatic pushed a commit to equinor/ert-testdata that referenced this pull request Aug 31, 2026
@eqbech
eqbech force-pushed the replace-experiment-client-with-ert-storage-api branch from 2727212 to bc93bef Compare August 31, 2026 13:33
ertomatic pushed a commit to equinor/ert-testdata that referenced this pull request Aug 31, 2026
ertomatic pushed a commit to equinor/ert-testdata that referenced this pull request Aug 31, 2026
@eqbech
eqbech force-pushed the replace-experiment-client-with-ert-storage-api branch from bc93bef to 16ddc53 Compare August 31, 2026 14:00
@eqbech
eqbech force-pushed the replace-experiment-client-with-ert-storage-api branch from 16ddc53 to 98e5cce Compare August 31, 2026 14:03
ertomatic pushed a commit to equinor/ert-testdata that referenced this pull request Aug 31, 2026
@eqbech
eqbech force-pushed the replace-experiment-client-with-ert-storage-api branch 2 times, most recently from 07efd06 to bd81e6b Compare September 1, 2026 10:46
@eqbech
eqbech force-pushed the replace-experiment-client-with-ert-storage-api branch 2 times, most recently from e3e6157 to 53601ec Compare September 3, 2026 10:51
Comment thread everest_output/logs/everest-log-config-yml-2026-08-27T0849+0200.txt Outdated
Comment thread everest_output/logs/everest-log-config-yml-2026-08-27T0856+0200.txt Outdated
@ertomatic

Copy link
Copy Markdown
Collaborator

Screenshot tests now pass. The baseline update PR equinor/ert-testdata#105 has been closed.


def experiments(self) -> list[dict[str, Any]]:
return list(self._get("/experiments").json())
return self._get("/experiments").json()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This does not match the type hint anymore?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release-notes:improvement Automatically categorise as improvement in release notes

Projects

Status: Ready for Review

Development

Successfully merging this pull request may close these issues.

Create a common ert/everest client

5 participants