pytest-xdist icon indicating copy to clipboard operation
pytest-xdist copied to clipboard

Serialization error with StrEnum obj

Open yugokato opened this issue 1 year ago • 0 comments

pytest-xdist currently doesn't handle a StrEnum obj as str when it is serialized, which causes a "execnet.gateway_base.DumpError" error. The issue is seen when a StrEnum obj is passed as pytest-subtests subtest message.

Here is the minimum code to reproduce the issue:

from enum import StrEnum, auto

import pytest
from pytest_subtests import SubTests


class MyEnum(StrEnum):
    FOO = auto()


@pytest.mark.parametrize("p", range(2))
def test_something(subtests: SubTests, p):
    with subtests.test(MyEnum.FOO):
        pass

Running the above test with pytest-xdist (with -n 2, for example) results in the following error:

self = <execnet.gateway_base._Serializer object at 0x105c4d760>, obj = <MyEnum.FOO: 'foo'>

    def _save(self, obj: object) -> None:
        tp = type(obj)
        try:
            dispatch = self._dispatch[tp]
        except KeyError:
            methodname = "save_" + tp.__name__
            meth: Callable[[_Serializer, object], None] | None = getattr(
                self.__class__, methodname, None
            )
            if meth is None:
>               raise DumpError(f"can't serialize {tp}") from None
E               execnet.gateway_base.DumpError: can't serialize <enum 'MyEnum'>

Environment

  • Python 3.12
  • pytest==8.3.4
  • pytest-subtests==0.13.1
  • pytest-xdist==3.6.1

NOTE: I originally opened this issue in pytest-subtests but I was advised that it's actually a pytest-xdist issue.

yugokato avatar Dec 04 '24 23:12 yugokato