Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test failures with Python 3.11: TypeError: super(type, obj): obj must be an instance or subtype of type #28

Closed
mgorny opened this issue Jun 3, 2022 · 2 comments

Comments

@mgorny
Copy link

mgorny commented Jun 3, 2022

The following tests are failing with Python 3.11.0b3:

FAILED tests/functional/shell/test_daemon.py::test_daemon_process_termination - TypeError: super(type, obj): obj must be an instance...
FAILED tests/functional/shell/test_daemon.py::test_started_context_manager[0.1] - TypeError: super(type, obj): obj must be an instan...
FAILED tests/functional/shell/test_daemon.py::test_started_context_manager[0.3] - TypeError: super(type, obj): obj must be an instan...
FAILED tests/functional/shell/test_daemon.py::test_stopped_context_manager_raises_FactoryNotRunning - TypeError: super(type, obj): o...
FAILED tests/functional/shell/test_daemon.py::test_stopped_context_manager - TypeError: super(type, obj): obj must be an instance or...
FAILED tests/functional/shell/test_daemon.py::test_daemon_callbacks - TypeError: super(type, obj): obj must be an instance or subtyp...
FAILED tests/functional/shell/test_daemon.py::test_daemon_start_check_callbacks - TypeError: super(type, obj): obj must be an instan...
FAILED tests/functional/shell/test_daemon.py::test_daemon_no_start_check_callbacks - TypeError: super(type, obj): obj must be an ins...
FAILED tests/functional/shell/test_daemon.py::test_daemon_start_check_callbacks_factory_not_running - TypeError: super(type, obj): o...
FAILED tests/functional/shell/test_daemon.py::test_context_manager_returns_class_instance - TypeError: super(type, obj): obj must be...
FAILED tests/functional/shell/test_daemon.py::test_exact_max_start_attempts[1] - TypeError: super(type, obj): obj must be an instanc...
FAILED tests/functional/shell/test_daemon.py::test_exact_max_start_attempts[2] - TypeError: super(type, obj): obj must be an instanc...
FAILED tests/functional/shell/test_daemon.py::test_exact_max_start_attempts[3] - TypeError: super(type, obj): obj must be an instanc...

They all seem to have a common cause:

__________________________________________________ test_exact_max_start_attempts[3] ___________________________________________________

tempfiles = <tests.conftest.Tempfiles object at 0x7fd176a05a10>, caplog = <_pytest.logging.LogCaptureFixture object at 0x7fd176a06850>
max_start_attempts = 3

    @pytest.mark.parametrize("max_start_attempts", [1, 2, 3])
    def test_exact_max_start_attempts(
        tempfiles: Tempfiles, caplog: LogCaptureFixture, max_start_attempts: int
    ) -> None:
        """
        This test asserts that we properly report max_start_attempts.
        """
        script = tempfiles.makepyfile(
            r"""
            # coding=utf-8
    
            import sys
            import time
            import multiprocessing
    
            def main():
                time.sleep(0.125)
                sys.exit(1)
    
            # Support for windows test runs
            if __name__ == '__main__':
                multiprocessing.freeze_support()
                main()
            """,
            executable=True,
        )
>       daemon = Daemon(
            script_name=sys.executable,
            base_script_args=[script],
            start_timeout=0.1,
            max_start_attempts=max_start_attempts,
            check_ports=[12345],
        )

tests/functional/shell/test_daemon.py:737: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<attrs generated init pytestshellutils.shell.Daemon>:41: in __init__
    self.__attrs_post_init__()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = Daemon(cwd=PosixPath('/tmp/pytest-shell-utilities'), slow_stop=True, timeout=None, script_name='/tmp/pytest-shell-util...thon', base_script_args=['/tmp/tmpzx__va2d.py'], check_ports=[12345], extra_cli_arguments_after_first_start_failure=[])

    def __attrs_post_init__(self) -> None:
        """
        Post ``attrs`` class initialization routines.
        """
>       super().__attrs_post_init__()
E       TypeError: super(type, obj): obj must be an instance or subtype of type

.venv/lib/python3.11/site-packages/pytestshellutils/shell.py:917: TypeError
---------------------------------------------------------- Captured log call ----------------------------------------------------------
DEBUG    tests.conftest:conftest.py:78 Created python file with contents:
>>>>> /tmp/tmpzx__va2d.py >>>>>
# coding=utf-8

import sys
import time
import multiprocessing

def main():
    time.sleep(0.125)
    sys.exit(1)

# Support for windows test runs
if __name__ == '__main__':
    multiprocessing.freeze_support()
    main()
<<<<< /tmp/tmpzx__va2d.py <<<<<

There's also this warning on top, so perhaps the problem is in attrs:

/tmp/pytest-shell-utilities/.venv/lib/python3.11/site-packages/attr/_make.py:918: RuntimeWarning: Running interpreter doesn't sufficiently support code object introspection.  Some features like bare super() or accessing __class__ will not work with slotted classes.
  set_closure_cell(cell, cls)
Full output
$ pytest
/tmp/pytest-shell-utilities/.venv/lib/python3.11/site-packages/attr/_make.py:918: RuntimeWarning: Running interpreter doesn't sufficiently support code object introspection.  Some features like bare super() or accessing __class__ will not work with slotted classes.
  set_closure_cell(cell, cls)
========================================================= test session starts =========================================================
platform linux -- Python 3.11.0b1, pytest-7.1.2, pluggy-1.0.0
rootdir: /tmp/pytest-shell-utilities, configfile: pytest.ini, testpaths: tests/
plugins: shell-utilities-1.5.0, helpers-namespace-2021.12.29, skip-markers-1.3.0, subtests-0.8.0
collected 78 items                                                                                                                    

tests/functional/test_exceptions.py ........                                                                                    [ 10%]
tests/functional/shell/test_daemon.py FsFFFFFFFFFFFF                                                                            [ 28%]
tests/functional/shell/test_fixture.py .                                                                                        [ 29%]
tests/functional/shell/test_script_subprocess.py .................,,,.                                                          [ 52%]
tests/functional/shell/test_subprocess.py .................                                                                     [ 74%]
tests/unit/customtypes/test_callback.py .....                                                                                   [ 80%]
tests/unit/utils/test_format_callback_to_string.py .....                                                                        [ 87%]
tests/unit/utils/test_ports.py .                                                                                                [ 88%]
tests/unit/utils/test_time.py .                                                                                                 [ 89%]
tests/unit/utils/processes/test_processresult.py ....,,,,.,,,,.                                                                 [ 97%]
tests/unit/utils/processes/test_processresult_matcher.py ..                                                                     [100%]

============================================================== FAILURES ===============================================================
___________________________________________________ test_daemon_process_termination ___________________________________________________

request = <FixtureRequest for <Function test_daemon_process_termination>>
tempfiles = <tests.conftest.Tempfiles object at 0x7fd176945e90>

    def test_daemon_process_termination(request: FixtureRequest, tempfiles: Tempfiles) -> None:
        primary_childrend_count = 5
        secondary_children_count = 3
        script = tempfiles.makepyfile(
            """
            #!{shebang}
            # coding=utf-8
    
            import time
            import multiprocessing
    
            def spin():
                while True:
                    try:
                        time.sleep(0.25)
                    except KeyboardInterrupt:
                        break
    
            def spin_children():
                procs = []
                for idx in range({secondary_children_count}):
                    proc = multiprocessing.Process(target=spin)
                    proc.daemon = True
                    proc.start()
                    procs.append(proc)
    
                while True:
                    try:
                        time.sleep(0.25)
                    except KeyboardInterrupt:
                        break
    
    
            def main():
                procs = []
    
                for idx in range({primary_childrend_count}):
                    proc = multiprocessing.Process(target=spin_children)
                    procs.append(proc)
                    proc.start()
    
                while True:
                    try:
                        time.sleep(0.25)
                    except KeyboardInterrupt:
                        break
    
                # We're not terminating child processes on purpose. Our code should handle it.
    
            # Support for windows test runs
            if __name__ == '__main__':
                multiprocessing.freeze_support()
                main()
            """.format(
                shebang=sys.executable,
                primary_childrend_count=primary_childrend_count,
                secondary_children_count=secondary_children_count,
            ),
            executable=True,
        )
        if not platform.is_windows():
>           daemon = Daemon(start_timeout=1, script_name=script)

tests/functional/shell/test_daemon.py:102: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<attrs generated init pytestshellutils.shell.Daemon>:41: in __init__
    self.__attrs_post_init__()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = Daemon(cwd=PosixPath('/tmp/pytest-shell-utilities'), slow_stop=True, timeout=None, script_name='/tmp/tmp8pn5zdel.py', base_script_args=[], check_ports=[], extra_cli_arguments_after_first_start_failure=[])

    def __attrs_post_init__(self) -> None:
        """
        Post ``attrs`` class initialization routines.
        """
>       super().__attrs_post_init__()
E       TypeError: super(type, obj): obj must be an instance or subtype of type

.venv/lib/python3.11/site-packages/pytestshellutils/shell.py:917: TypeError
---------------------------------------------------------- Captured log call ----------------------------------------------------------
DEBUG    tests.conftest:conftest.py:78 Created python file with contents:
>>>>> /tmp/tmp8pn5zdel.py >>>>>
#!/tmp/pytest-shell-utilities/.venv/bin/python
# coding=utf-8

import time
import multiprocessing

def spin():
    while True:
        try:
            time.sleep(0.25)
        except KeyboardInterrupt:
            break

def spin_children():
    procs = []
    for idx in range(3):
        proc = multiprocessing.Process(target=spin)
        proc.daemon = True
        proc.start()
        procs.append(proc)

    while True:
        try:
            time.sleep(0.25)
        except KeyboardInterrupt:
            break


def main():
    procs = []

    for idx in range(5):
        proc = multiprocessing.Process(target=spin_children)
        procs.append(proc)
        proc.start()

    while True:
        try:
            time.sleep(0.25)
        except KeyboardInterrupt:
            break

    # We're not terminating child processes on purpose. Our code should handle it.

# Support for windows test runs
if __name__ == '__main__':
    multiprocessing.freeze_support()
    main()
<<<<< /tmp/tmp8pn5zdel.py <<<<<
__________________________________________________ test_started_context_manager[0.1] __________________________________________________

request = <FixtureRequest for <Function test_started_context_manager[0.1]>>
tempfiles = <tests.conftest.Tempfiles object at 0x7fd1769be790>, start_timeout = 0.1

    @pytest.mark.parametrize("start_timeout", [0.1, 0.3])
    def test_started_context_manager(
        request: FixtureRequest, tempfiles: Tempfiles, start_timeout: float
    ) -> None:
        script = tempfiles.makepyfile(
            r"""
            # coding=utf-8
    
            import sys
            import time
            import multiprocessing
    
            def main():
                time.sleep(3)
                sys.stdout.write("Done!\n")
                sys.stdout.flush()
                sys.exit(0)
    
            # Support for windows test runs
            if __name__ == '__main__':
                multiprocessing.freeze_support()
                main()
            """,
            executable=True,
        )
>       daemon = Daemon(
            script_name=sys.executable,
            base_script_args=[script],
            start_timeout=2,
            max_start_attempts=1,
            check_ports=[12345],
        )

tests/functional/shell/test_daemon.py:263: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<attrs generated init pytestshellutils.shell.Daemon>:41: in __init__
    self.__attrs_post_init__()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = Daemon(cwd=PosixPath('/tmp/pytest-shell-utilities'), slow_stop=True, timeout=None, script_name='/tmp/pytest-shell-util...thon', base_script_args=['/tmp/tmp8jfllzsr.py'], check_ports=[12345], extra_cli_arguments_after_first_start_failure=[])

    def __attrs_post_init__(self) -> None:
        """
        Post ``attrs`` class initialization routines.
        """
>       super().__attrs_post_init__()
E       TypeError: super(type, obj): obj must be an instance or subtype of type

.venv/lib/python3.11/site-packages/pytestshellutils/shell.py:917: TypeError
---------------------------------------------------------- Captured log call ----------------------------------------------------------
DEBUG    tests.conftest:conftest.py:78 Created python file with contents:
>>>>> /tmp/tmp8jfllzsr.py >>>>>
# coding=utf-8

import sys
import time
import multiprocessing

def main():
    time.sleep(3)
    sys.stdout.write("Done!\n")
    sys.stdout.flush()
    sys.exit(0)

# Support for windows test runs
if __name__ == '__main__':
    multiprocessing.freeze_support()
    main()
<<<<< /tmp/tmp8jfllzsr.py <<<<<
__________________________________________________ test_started_context_manager[0.3] __________________________________________________

request = <FixtureRequest for <Function test_started_context_manager[0.3]>>
tempfiles = <tests.conftest.Tempfiles object at 0x7fd176a2bcd0>, start_timeout = 0.3

    @pytest.mark.parametrize("start_timeout", [0.1, 0.3])
    def test_started_context_manager(
        request: FixtureRequest, tempfiles: Tempfiles, start_timeout: float
    ) -> None:
        script = tempfiles.makepyfile(
            r"""
            # coding=utf-8
    
            import sys
            import time
            import multiprocessing
    
            def main():
                time.sleep(3)
                sys.stdout.write("Done!\n")
                sys.stdout.flush()
                sys.exit(0)
    
            # Support for windows test runs
            if __name__ == '__main__':
                multiprocessing.freeze_support()
                main()
            """,
            executable=True,
        )
>       daemon = Daemon(
            script_name=sys.executable,
            base_script_args=[script],
            start_timeout=2,
            max_start_attempts=1,
            check_ports=[12345],
        )

tests/functional/shell/test_daemon.py:263: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<attrs generated init pytestshellutils.shell.Daemon>:41: in __init__
    self.__attrs_post_init__()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = Daemon(cwd=PosixPath('/tmp/pytest-shell-utilities'), slow_stop=True, timeout=None, script_name='/tmp/pytest-shell-util...thon', base_script_args=['/tmp/tmp8rl81ehs.py'], check_ports=[12345], extra_cli_arguments_after_first_start_failure=[])

    def __attrs_post_init__(self) -> None:
        """
        Post ``attrs`` class initialization routines.
        """
>       super().__attrs_post_init__()
E       TypeError: super(type, obj): obj must be an instance or subtype of type

.venv/lib/python3.11/site-packages/pytestshellutils/shell.py:917: TypeError
---------------------------------------------------------- Captured log call ----------------------------------------------------------
DEBUG    tests.conftest:conftest.py:78 Created python file with contents:
>>>>> /tmp/tmp8rl81ehs.py >>>>>
# coding=utf-8

import sys
import time
import multiprocessing

def main():
    time.sleep(3)
    sys.stdout.write("Done!\n")
    sys.stdout.flush()
    sys.exit(0)

# Support for windows test runs
if __name__ == '__main__':
    multiprocessing.freeze_support()
    main()
<<<<< /tmp/tmp8rl81ehs.py <<<<<
________________________________________ test_stopped_context_manager_raises_FactoryNotRunning ________________________________________

request = <FixtureRequest for <Function test_stopped_context_manager_raises_FactoryNotRunning>>
factory_stopped_script = '/tmp/tmpse8wuja_.py'

    def test_stopped_context_manager_raises_FactoryNotRunning(
        request: FixtureRequest, factory_stopped_script: str
    ) -> None:
>       daemon = Daemon(
            script_name=sys.executable,
            base_script_args=[factory_stopped_script],
            start_timeout=3,
            max_start_attempts=1,
            check_ports=[12345],
        )

tests/functional/shell/test_daemon.py:340: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<attrs generated init pytestshellutils.shell.Daemon>:41: in __init__
    self.__attrs_post_init__()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = Daemon(cwd=PosixPath('/tmp/pytest-shell-utilities'), slow_stop=True, timeout=None, script_name='/tmp/pytest-shell-util...thon', base_script_args=['/tmp/tmpse8wuja_.py'], check_ports=[12345], extra_cli_arguments_after_first_start_failure=[])

    def __attrs_post_init__(self) -> None:
        """
        Post ``attrs`` class initialization routines.
        """
>       super().__attrs_post_init__()
E       TypeError: super(type, obj): obj must be an instance or subtype of type

.venv/lib/python3.11/site-packages/pytestshellutils/shell.py:917: TypeError
--------------------------------------------------------- Captured log setup ----------------------------------------------------------
DEBUG    tests.conftest:conftest.py:78 Created python file with contents:
>>>>> /tmp/tmpse8wuja_.py >>>>>
# coding=utf-8

import os
import sys
import time
import socket
import multiprocessing

def main():

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    sock.bind(('127.0.0.1', 12345))
    sock.listen(5)
    try:
        while True:
            connection, address = sock.accept()
            connection.close()
    except (KeyboardInterrupt, SystemExit):
        pass
    finally:
        sock.close()
    sys.exit(0)

# Support for windows test runs
if __name__ == '__main__':
    multiprocessing.freeze_support()
    main()
<<<<< /tmp/tmpse8wuja_.py <<<<<
____________________________________________________ test_stopped_context_manager _____________________________________________________

request = <FixtureRequest for <Function test_stopped_context_manager>>, factory_stopped_script = '/tmp/tmplgb2no_s.py'

    def test_stopped_context_manager(request: FixtureRequest, factory_stopped_script: str) -> None:
>       daemon = Daemon(
            script_name=sys.executable,
            base_script_args=[factory_stopped_script],
            start_timeout=3,
            max_start_attempts=1,
            check_ports=[12345],
        )

tests/functional/shell/test_daemon.py:356: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<attrs generated init pytestshellutils.shell.Daemon>:41: in __init__
    self.__attrs_post_init__()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = Daemon(cwd=PosixPath('/tmp/pytest-shell-utilities'), slow_stop=True, timeout=None, script_name='/tmp/pytest-shell-util...thon', base_script_args=['/tmp/tmplgb2no_s.py'], check_ports=[12345], extra_cli_arguments_after_first_start_failure=[])

    def __attrs_post_init__(self) -> None:
        """
        Post ``attrs`` class initialization routines.
        """
>       super().__attrs_post_init__()
E       TypeError: super(type, obj): obj must be an instance or subtype of type

.venv/lib/python3.11/site-packages/pytestshellutils/shell.py:917: TypeError
--------------------------------------------------------- Captured log setup ----------------------------------------------------------
DEBUG    tests.conftest:conftest.py:78 Created python file with contents:
>>>>> /tmp/tmplgb2no_s.py >>>>>
# coding=utf-8

import os
import sys
import time
import socket
import multiprocessing

def main():

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    sock.bind(('127.0.0.1', 12345))
    sock.listen(5)
    try:
        while True:
            connection, address = sock.accept()
            connection.close()
    except (KeyboardInterrupt, SystemExit):
        pass
    finally:
        sock.close()
    sys.exit(0)

# Support for windows test runs
if __name__ == '__main__':
    multiprocessing.freeze_support()
    main()
<<<<< /tmp/tmplgb2no_s.py <<<<<
________________________________________________________ test_daemon_callbacks ________________________________________________________

request = <FixtureRequest for <Function test_daemon_callbacks>>, factory_stopped_script = '/tmp/tmp70xmlsg7.py'

    def test_daemon_callbacks(request: FixtureRequest, factory_stopped_script: str) -> None:
    
>       daemon = Daemon(
            script_name=sys.executable,
            base_script_args=[factory_stopped_script],
            start_timeout=3,
            max_start_attempts=1,
            check_ports=[12345],
        )

tests/functional/shell/test_daemon.py:420: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<attrs generated init pytestshellutils.shell.Daemon>:41: in __init__
    self.__attrs_post_init__()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = Daemon(cwd=PosixPath('/tmp/pytest-shell-utilities'), slow_stop=True, timeout=None, script_name='/tmp/pytest-shell-util...thon', base_script_args=['/tmp/tmp70xmlsg7.py'], check_ports=[12345], extra_cli_arguments_after_first_start_failure=[])

    def __attrs_post_init__(self) -> None:
        """
        Post ``attrs`` class initialization routines.
        """
>       super().__attrs_post_init__()
E       TypeError: super(type, obj): obj must be an instance or subtype of type

.venv/lib/python3.11/site-packages/pytestshellutils/shell.py:917: TypeError
--------------------------------------------------------- Captured log setup ----------------------------------------------------------
DEBUG    tests.conftest:conftest.py:78 Created python file with contents:
>>>>> /tmp/tmp70xmlsg7.py >>>>>
# coding=utf-8

import os
import sys
import time
import socket
import multiprocessing

def main():

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    sock.bind(('127.0.0.1', 12345))
    sock.listen(5)
    try:
        while True:
            connection, address = sock.accept()
            connection.close()
    except (KeyboardInterrupt, SystemExit):
        pass
    finally:
        sock.close()
    sys.exit(0)

# Support for windows test runs
if __name__ == '__main__':
    multiprocessing.freeze_support()
    main()
<<<<< /tmp/tmp70xmlsg7.py <<<<<
__________________________________________________ test_daemon_start_check_callbacks __________________________________________________

request = <FixtureRequest for <Function test_daemon_start_check_callbacks>>, factory_stopped_script = '/tmp/tmpvnvgj9f0.py'

    def test_daemon_start_check_callbacks(request: FixtureRequest, factory_stopped_script: str) -> None:
    
>       daemon = Daemon(
            script_name=sys.executable,
            base_script_args=[factory_stopped_script],
            start_timeout=3,
            max_start_attempts=1,
            check_ports=[12345],
        )

tests/functional/shell/test_daemon.py:537: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<attrs generated init pytestshellutils.shell.Daemon>:41: in __init__
    self.__attrs_post_init__()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = Daemon(cwd=PosixPath('/tmp/pytest-shell-utilities'), slow_stop=True, timeout=None, script_name='/tmp/pytest-shell-util...thon', base_script_args=['/tmp/tmpvnvgj9f0.py'], check_ports=[12345], extra_cli_arguments_after_first_start_failure=[])

    def __attrs_post_init__(self) -> None:
        """
        Post ``attrs`` class initialization routines.
        """
>       super().__attrs_post_init__()
E       TypeError: super(type, obj): obj must be an instance or subtype of type

.venv/lib/python3.11/site-packages/pytestshellutils/shell.py:917: TypeError
--------------------------------------------------------- Captured log setup ----------------------------------------------------------
DEBUG    tests.conftest:conftest.py:78 Created python file with contents:
>>>>> /tmp/tmpvnvgj9f0.py >>>>>
# coding=utf-8

import os
import sys
import time
import socket
import multiprocessing

def main():

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    sock.bind(('127.0.0.1', 12345))
    sock.listen(5)
    try:
        while True:
            connection, address = sock.accept()
            connection.close()
    except (KeyboardInterrupt, SystemExit):
        pass
    finally:
        sock.close()
    sys.exit(0)

# Support for windows test runs
if __name__ == '__main__':
    multiprocessing.freeze_support()
    main()
<<<<< /tmp/tmpvnvgj9f0.py <<<<<
________________________________________________ test_daemon_no_start_check_callbacks _________________________________________________

request = <FixtureRequest for <Function test_daemon_no_start_check_callbacks>>
tempfiles = <tests.conftest.Tempfiles object at 0x7fd176866ed0>

    def test_daemon_no_start_check_callbacks(request: FixtureRequest, tempfiles: Tempfiles) -> None:
        script = tempfiles.makepyfile(
            r"""
            # coding=utf-8
    
            import sys
            import time
            import multiprocessing
    
            def main():
                time.sleep(3)
                sys.stdout.write("Done!\n")
                sys.stdout.flush()
                sys.exit(0)
    
            # Support for windows test runs
            if __name__ == '__main__':
                multiprocessing.freeze_support()
                main()
            """,
            executable=True,
        )
>       daemon = Daemon(
            script_name=sys.executable,
            base_script_args=[script],
            start_timeout=2,
            max_start_attempts=1,
        )

tests/functional/shell/test_daemon.py:584: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<attrs generated init pytestshellutils.shell.Daemon>:41: in __init__
    self.__attrs_post_init__()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = Daemon(cwd=PosixPath('/tmp/pytest-shell-utilities'), slow_stop=True, timeout=None, script_name='/tmp/pytest-shell-util...in/python', base_script_args=['/tmp/tmpcm8x7zpk.py'], check_ports=[], extra_cli_arguments_after_first_start_failure=[])

    def __attrs_post_init__(self) -> None:
        """
        Post ``attrs`` class initialization routines.
        """
>       super().__attrs_post_init__()
E       TypeError: super(type, obj): obj must be an instance or subtype of type

.venv/lib/python3.11/site-packages/pytestshellutils/shell.py:917: TypeError
---------------------------------------------------------- Captured log call ----------------------------------------------------------
DEBUG    tests.conftest:conftest.py:78 Created python file with contents:
>>>>> /tmp/tmpcm8x7zpk.py >>>>>
# coding=utf-8

import sys
import time
import multiprocessing

def main():
    time.sleep(3)
    sys.stdout.write("Done!\n")
    sys.stdout.flush()
    sys.exit(0)

# Support for windows test runs
if __name__ == '__main__':
    multiprocessing.freeze_support()
    main()
<<<<< /tmp/tmpcm8x7zpk.py <<<<<
________________________________________ test_daemon_start_check_callbacks_factory_not_running ________________________________________

request = <FixtureRequest for <Function test_daemon_start_check_callbacks_factory_not_running>>
tempfiles = <tests.conftest.Tempfiles object at 0x7fd176a07fd0>

    def test_daemon_start_check_callbacks_factory_not_running(
        request: FixtureRequest, tempfiles: Tempfiles
    ) -> None:
        script = tempfiles.makepyfile(
            r"""
            # coding=utf-8
    
            import sys
            import time
            import multiprocessing
    
            def main():
                time.sleep(2)
                sys.stdout.write("Done!\n")
                sys.stdout.flush()
                sys.exit(0)
    
            # Support for windows test runs
            if __name__ == '__main__':
                multiprocessing.freeze_support()
                main()
            """,
            executable=True,
        )
    
        callbacks = DaemonStartCheckCounter()
    
>       daemon = Daemon(
            script_name=sys.executable,
            base_script_args=[script],
            start_timeout=2,
            max_start_attempts=1,
        )

tests/functional/shell/test_daemon.py:627: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<attrs generated init pytestshellutils.shell.Daemon>:41: in __init__
    self.__attrs_post_init__()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = Daemon(cwd=PosixPath('/tmp/pytest-shell-utilities'), slow_stop=True, timeout=None, script_name='/tmp/pytest-shell-util...in/python', base_script_args=['/tmp/tmpcrasxtzx.py'], check_ports=[], extra_cli_arguments_after_first_start_failure=[])

    def __attrs_post_init__(self) -> None:
        """
        Post ``attrs`` class initialization routines.
        """
>       super().__attrs_post_init__()
E       TypeError: super(type, obj): obj must be an instance or subtype of type

.venv/lib/python3.11/site-packages/pytestshellutils/shell.py:917: TypeError
---------------------------------------------------------- Captured log call ----------------------------------------------------------
DEBUG    tests.conftest:conftest.py:78 Created python file with contents:
>>>>> /tmp/tmpcrasxtzx.py >>>>>
# coding=utf-8

import sys
import time
import multiprocessing

def main():
    time.sleep(2)
    sys.stdout.write("Done!\n")
    sys.stdout.flush()
    sys.exit(0)

# Support for windows test runs
if __name__ == '__main__':
    multiprocessing.freeze_support()
    main()
<<<<< /tmp/tmpcrasxtzx.py <<<<<
_____________________________________________ test_context_manager_returns_class_instance _____________________________________________

tempfiles = <tests.conftest.Tempfiles object at 0x7fd176951dd0>

    def test_context_manager_returns_class_instance(tempfiles: Tempfiles) -> None:
        script = tempfiles.makepyfile(
            r"""
            # coding=utf-8
    
            import sys
            import time
            import multiprocessing
    
            def main():
                while True:
                    try:
                        time.sleep(0.1)
                    except KeyboardInterrupt:
                        break
                sys.stdout.write("Done!\n")
                sys.stdout.flush()
                sys.exit(0)
    
            # Support for windows test runs
            if __name__ == '__main__':
                multiprocessing.freeze_support()
                main()
            """,
            executable=True,
        )
>       daemon = Daemon(
            script_name=sys.executable,
            base_script_args=[script],
            start_timeout=1,
            max_start_attempts=1,
        )

tests/functional/shell/test_daemon.py:669: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<attrs generated init pytestshellutils.shell.Daemon>:41: in __init__
    self.__attrs_post_init__()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = Daemon(cwd=PosixPath('/tmp/pytest-shell-utilities'), slow_stop=True, timeout=None, script_name='/tmp/pytest-shell-util...in/python', base_script_args=['/tmp/tmp1s1v6tho.py'], check_ports=[], extra_cli_arguments_after_first_start_failure=[])

    def __attrs_post_init__(self) -> None:
        """
        Post ``attrs`` class initialization routines.
        """
>       super().__attrs_post_init__()
E       TypeError: super(type, obj): obj must be an instance or subtype of type

.venv/lib/python3.11/site-packages/pytestshellutils/shell.py:917: TypeError
---------------------------------------------------------- Captured log call ----------------------------------------------------------
DEBUG    tests.conftest:conftest.py:78 Created python file with contents:
>>>>> /tmp/tmp1s1v6tho.py >>>>>
# coding=utf-8

import sys
import time
import multiprocessing

def main():
    while True:
        try:
            time.sleep(0.1)
        except KeyboardInterrupt:
            break
    sys.stdout.write("Done!\n")
    sys.stdout.flush()
    sys.exit(0)

# Support for windows test runs
if __name__ == '__main__':
    multiprocessing.freeze_support()
    main()
<<<<< /tmp/tmp1s1v6tho.py <<<<<
__________________________________________________ test_exact_max_start_attempts[1] ___________________________________________________

tempfiles = <tests.conftest.Tempfiles object at 0x7fd17720cb10>, caplog = <_pytest.logging.LogCaptureFixture object at 0x7fd17720ead0>
max_start_attempts = 1

    @pytest.mark.parametrize("max_start_attempts", [1, 2, 3])
    def test_exact_max_start_attempts(
        tempfiles: Tempfiles, caplog: LogCaptureFixture, max_start_attempts: int
    ) -> None:
        """
        This test asserts that we properly report max_start_attempts.
        """
        script = tempfiles.makepyfile(
            r"""
            # coding=utf-8
    
            import sys
            import time
            import multiprocessing
    
            def main():
                time.sleep(0.125)
                sys.exit(1)
    
            # Support for windows test runs
            if __name__ == '__main__':
                multiprocessing.freeze_support()
                main()
            """,
            executable=True,
        )
>       daemon = Daemon(
            script_name=sys.executable,
            base_script_args=[script],
            start_timeout=0.1,
            max_start_attempts=max_start_attempts,
            check_ports=[12345],
        )

tests/functional/shell/test_daemon.py:737: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<attrs generated init pytestshellutils.shell.Daemon>:41: in __init__
    self.__attrs_post_init__()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = Daemon(cwd=PosixPath('/tmp/pytest-shell-utilities'), slow_stop=True, timeout=None, script_name='/tmp/pytest-shell-util...thon', base_script_args=['/tmp/tmpcuvn3fc5.py'], check_ports=[12345], extra_cli_arguments_after_first_start_failure=[])

    def __attrs_post_init__(self) -> None:
        """
        Post ``attrs`` class initialization routines.
        """
>       super().__attrs_post_init__()
E       TypeError: super(type, obj): obj must be an instance or subtype of type

.venv/lib/python3.11/site-packages/pytestshellutils/shell.py:917: TypeError
---------------------------------------------------------- Captured log call ----------------------------------------------------------
DEBUG    tests.conftest:conftest.py:78 Created python file with contents:
>>>>> /tmp/tmpcuvn3fc5.py >>>>>
# coding=utf-8

import sys
import time
import multiprocessing

def main():
    time.sleep(0.125)
    sys.exit(1)

# Support for windows test runs
if __name__ == '__main__':
    multiprocessing.freeze_support()
    main()
<<<<< /tmp/tmpcuvn3fc5.py <<<<<
__________________________________________________ test_exact_max_start_attempts[2] ___________________________________________________

tempfiles = <tests.conftest.Tempfiles object at 0x7fd176862fd0>, caplog = <_pytest.logging.LogCaptureFixture object at 0x7fd1768637d0>
max_start_attempts = 2

    @pytest.mark.parametrize("max_start_attempts", [1, 2, 3])
    def test_exact_max_start_attempts(
        tempfiles: Tempfiles, caplog: LogCaptureFixture, max_start_attempts: int
    ) -> None:
        """
        This test asserts that we properly report max_start_attempts.
        """
        script = tempfiles.makepyfile(
            r"""
            # coding=utf-8
    
            import sys
            import time
            import multiprocessing
    
            def main():
                time.sleep(0.125)
                sys.exit(1)
    
            # Support for windows test runs
            if __name__ == '__main__':
                multiprocessing.freeze_support()
                main()
            """,
            executable=True,
        )
>       daemon = Daemon(
            script_name=sys.executable,
            base_script_args=[script],
            start_timeout=0.1,
            max_start_attempts=max_start_attempts,
            check_ports=[12345],
        )

tests/functional/shell/test_daemon.py:737: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<attrs generated init pytestshellutils.shell.Daemon>:41: in __init__
    self.__attrs_post_init__()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = Daemon(cwd=PosixPath('/tmp/pytest-shell-utilities'), slow_stop=True, timeout=None, script_name='/tmp/pytest-shell-util...thon', base_script_args=['/tmp/tmpu0ohx8bm.py'], check_ports=[12345], extra_cli_arguments_after_first_start_failure=[])

    def __attrs_post_init__(self) -> None:
        """
        Post ``attrs`` class initialization routines.
        """
>       super().__attrs_post_init__()
E       TypeError: super(type, obj): obj must be an instance or subtype of type

.venv/lib/python3.11/site-packages/pytestshellutils/shell.py:917: TypeError
---------------------------------------------------------- Captured log call ----------------------------------------------------------
DEBUG    tests.conftest:conftest.py:78 Created python file with contents:
>>>>> /tmp/tmpu0ohx8bm.py >>>>>
# coding=utf-8

import sys
import time
import multiprocessing

def main():
    time.sleep(0.125)
    sys.exit(1)

# Support for windows test runs
if __name__ == '__main__':
    multiprocessing.freeze_support()
    main()
<<<<< /tmp/tmpu0ohx8bm.py <<<<<
__________________________________________________ test_exact_max_start_attempts[3] ___________________________________________________

tempfiles = <tests.conftest.Tempfiles object at 0x7fd176a05a10>, caplog = <_pytest.logging.LogCaptureFixture object at 0x7fd176a06850>
max_start_attempts = 3

    @pytest.mark.parametrize("max_start_attempts", [1, 2, 3])
    def test_exact_max_start_attempts(
        tempfiles: Tempfiles, caplog: LogCaptureFixture, max_start_attempts: int
    ) -> None:
        """
        This test asserts that we properly report max_start_attempts.
        """
        script = tempfiles.makepyfile(
            r"""
            # coding=utf-8
    
            import sys
            import time
            import multiprocessing
    
            def main():
                time.sleep(0.125)
                sys.exit(1)
    
            # Support for windows test runs
            if __name__ == '__main__':
                multiprocessing.freeze_support()
                main()
            """,
            executable=True,
        )
>       daemon = Daemon(
            script_name=sys.executable,
            base_script_args=[script],
            start_timeout=0.1,
            max_start_attempts=max_start_attempts,
            check_ports=[12345],
        )

tests/functional/shell/test_daemon.py:737: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<attrs generated init pytestshellutils.shell.Daemon>:41: in __init__
    self.__attrs_post_init__()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = Daemon(cwd=PosixPath('/tmp/pytest-shell-utilities'), slow_stop=True, timeout=None, script_name='/tmp/pytest-shell-util...thon', base_script_args=['/tmp/tmpzx__va2d.py'], check_ports=[12345], extra_cli_arguments_after_first_start_failure=[])

    def __attrs_post_init__(self) -> None:
        """
        Post ``attrs`` class initialization routines.
        """
>       super().__attrs_post_init__()
E       TypeError: super(type, obj): obj must be an instance or subtype of type

.venv/lib/python3.11/site-packages/pytestshellutils/shell.py:917: TypeError
---------------------------------------------------------- Captured log call ----------------------------------------------------------
DEBUG    tests.conftest:conftest.py:78 Created python file with contents:
>>>>> /tmp/tmpzx__va2d.py >>>>>
# coding=utf-8

import sys
import time
import multiprocessing

def main():
    time.sleep(0.125)
    sys.exit(1)

# Support for windows test runs
if __name__ == '__main__':
    multiprocessing.freeze_support()
    main()
<<<<< /tmp/tmpzx__va2d.py <<<<<
========================================================== warnings summary ===========================================================
tests/functional/shell/test_daemon.py: 13 warnings
tests/functional/shell/test_fixture.py: 1 warning
tests/functional/shell/test_script_subprocess.py: 20 warnings
tests/functional/shell/test_subprocess.py: 17 warnings
  /tmp/pytest-shell-utilities/.venv/lib/python3.11/site-packages/pytestshellutils/shell.py:378: DeprecationWarning: Use setlocale(), getencoding() and getlocale() instead
    encoding = locale.getdefaultlocale()[-1]

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
======================================================= short test summary info =======================================================
FAILED tests/functional/shell/test_daemon.py::test_daemon_process_termination - TypeError: super(type, obj): obj must be an instance...
FAILED tests/functional/shell/test_daemon.py::test_started_context_manager[0.1] - TypeError: super(type, obj): obj must be an instan...
FAILED tests/functional/shell/test_daemon.py::test_started_context_manager[0.3] - TypeError: super(type, obj): obj must be an instan...
FAILED tests/functional/shell/test_daemon.py::test_stopped_context_manager_raises_FactoryNotRunning - TypeError: super(type, obj): o...
FAILED tests/functional/shell/test_daemon.py::test_stopped_context_manager - TypeError: super(type, obj): obj must be an instance or...
FAILED tests/functional/shell/test_daemon.py::test_daemon_callbacks - TypeError: super(type, obj): obj must be an instance or subtyp...
FAILED tests/functional/shell/test_daemon.py::test_daemon_start_check_callbacks - TypeError: super(type, obj): obj must be an instan...
FAILED tests/functional/shell/test_daemon.py::test_daemon_no_start_check_callbacks - TypeError: super(type, obj): obj must be an ins...
FAILED tests/functional/shell/test_daemon.py::test_daemon_start_check_callbacks_factory_not_running - TypeError: super(type, obj): o...
FAILED tests/functional/shell/test_daemon.py::test_context_manager_returns_class_instance - TypeError: super(type, obj): obj must be...
FAILED tests/functional/shell/test_daemon.py::test_exact_max_start_attempts[1] - TypeError: super(type, obj): obj must be an instanc...
FAILED tests/functional/shell/test_daemon.py::test_exact_max_start_attempts[2] - TypeError: super(type, obj): obj must be an instanc...
FAILED tests/functional/shell/test_daemon.py::test_exact_max_start_attempts[3] - TypeError: super(type, obj): obj must be an instanc...
============================== 13 failed, 64 passed, 1 skipped, 51 warnings, 11 subtests passed in 5.45s ==============================
@mgorny
Copy link
Author

mgorny commented Jun 3, 2022

Oh, it's probably python-attrs/attrs#907, and this is the first package I found to be affected by it.

@mgorny
Copy link
Author

mgorny commented Jun 3, 2022

One possible workaround is not to use slots=True.

s0undt3ch added a commit to s0undt3ch/pytest-shell-utilities that referenced this issue Jul 1, 2023
Fixes saltstack#28

Signed-off-by: Pedro Algarvio <palgarvio@vmware.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant