diff --git a/markdown/TEST-REPORT.md b/markdown/TEST-REPORT.md
index 0266077b2..700ea2ede 100644
--- a/markdown/TEST-REPORT.md
+++ b/markdown/TEST-REPORT.md
@@ -1,20 +1,21 @@
# ๐งช Test Report
-*Generated on 2025-08-18 15:53:55 CEST*
+*Generated on 2025-08-18 15:57:57 CEST*
## ๐งพ General Info
-- **duration**: 1.397437334060669
+- **duration**: 5.419815540313721
- **root**: /workspace/tligui_y/slic
- **environment**: {}
## ๐ Summary
-- **Error**: 7
+- **Error**: 6
+- **Passed**: 1
- **Total**: 7
- **Collected**: 7
## ๐ Tests
-โ Error (7)
+โ Error (6)
-
๐ test_utils_dbusnotify.py
@@ -28,7 +29,7 @@
**duration:**
```python
- 0.004251067992299795
+ 3.9401007685810328
```
**outcome:**
@@ -40,213 +41,168 @@
**crash:**
```python
- path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 1720
- message: FileNotFoundError: [Errno 2] No such file or directory: 'mako'
+ path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py
+ lineno: 634
+ message: dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5
```
**traceback:**
```python
- path: tests/test_utils_dbusnotify.py
- lineno: 29
+ lineno: 24
message: None
- - path: .pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 858
+ - path: slic/utils/dbusnotify.py
+ lineno: 15
message: in __init__
- - path: .pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 1720
- message: FileNotFoundError
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py
+ lineno: 237
+ message: in get_object
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py
+ lineno: 250
+ message: in __init__
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py
+ lineno: 178
+ message: in activate_name_owner
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py
+ lineno: 273
+ message: in start_service_by_name
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py
+ lineno: 634
+ message: DBusException
```
**longrepr:**
```python
- @pytest.fixture(scope="session", autouse=True)
- def mako_daemon():
- """Start mako in headless logger mode and ensure cleanup."""
- global _MAKO_PROC
-
- # Ensure old log removed
- if os.path.exists(_MAKO_LOGFILE):
- os.remove(_MAKO_LOGFILE)
-
- # Launch mako with --output (no graphical deps, only logs)
- > _MAKO_PROC = subprocess.Popen(
- ["mako", f"--output={_MAKO_LOGFILE}"],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- )
+ self =
+ bus_name = 'org.freedesktop.Notifications'
- tests/test_utils_dbusnotify.py:29:
+ def activate_name_owner(self, bus_name):
+ if (bus_name is not None and bus_name[:1] != ':'
+ and bus_name != BUS_DAEMON_NAME):
+ try:
+ > return self.get_name_owner(bus_name)
+
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:173:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- .pixi/envs/default/lib/python3.8/subprocess.py:858: in __init__
- self._execute_child(args, executable, preexec_fn, close_fds,
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:348: in get_name_owner
+ return self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self =
- args = ['mako', '--output=/tmp/mako-test.log'], executable = b'mako'
- preexec_fn = None, close_fds = True, pass_fds = (), cwd = None, env = None
- startupinfo = None, creationflags = 0, shell = False, p2cread = -1
- p2cwrite = -1, c2pread = 12, c2pwrite = 13, errread = 14, errwrite = 15
- restore_signals = True, start_new_session = False
+ self =
+ bus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'
+ dbus_interface = 'org.freedesktop.DBus', method = 'GetNameOwner'
+ signature = 's', args = ('org.freedesktop.Notifications',), timeout = -1.0
+ byte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}
+ message =
- def _execute_child(self, args, executable, preexec_fn, close_fds,
- pass_fds, cwd, env,
- startupinfo, creationflags, shell,
- p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite,
- restore_signals, start_new_session):
- """Execute program (POSIX version)"""
+ def call_blocking(self, bus_name, object_path, dbus_interface, method,
+ signature, args, timeout=-1.0,
+ byte_arrays=False, **kwargs):
+ """Call the given method, synchronously.
+ :Since: 0.81.0
+ """
+ if object_path == LOCAL_PATH:
+ raise DBusException('Methods may not be called on the reserved '
+ 'path %s' % LOCAL_PATH)
+ if dbus_interface == LOCAL_IFACE:
+ raise DBusException('Methods may not be called on the reserved '
+ 'interface %s' % LOCAL_IFACE)
+ # no need to validate other args - MethodCallMessage ctor will do
- if isinstance(args, (str, bytes)):
- args = [args]
- elif isinstance(args, os.PathLike):
- if shell:
- raise TypeError('path-like args is not allowed when '
- 'shell is true')
- args = [args]
- else:
- args = list(args)
+ get_args_opts = dict(byte_arrays=byte_arrays)
+ if 'utf8_strings' in kwargs:
+ raise TypeError("unexpected keyword argument 'utf8_strings'")
- if shell:
- # On Android the default shell is at '/system/bin/sh'.
- unix_shell = ('/system/bin/sh' if
- hasattr(sys, 'getandroidapilevel') else '/bin/sh')
- args = [unix_shell, "-c"] + args
- if executable:
- args[0] = executable
-
- if executable is None:
- executable = args[0]
-
- sys.audit("subprocess.Popen", executable, args, cwd, env)
-
- if (_USE_POSIX_SPAWN
- and os.path.dirname(executable)
- and preexec_fn is None
- and not close_fds
- and not pass_fds
- and cwd is None
- and (p2cread == -1 or p2cread > 2)
- and (c2pwrite == -1 or c2pwrite > 2)
- and (errwrite == -1 or errwrite > 2)
- and not start_new_session):
- self._posix_spawn(args, executable, env, restore_signals,
- p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite)
- return
-
- orig_executable = executable
-
- # For transferring possible exec failure from child to parent.
- # Data format: "exception name:hex errno:description"
- # Pickle is not used; it is complex and involves memory allocation.
- errpipe_read, errpipe_write = os.pipe()
- # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
- low_fds_to_close = []
- while errpipe_write < 3:
- low_fds_to_close.append(errpipe_write)
- errpipe_write = os.dup(errpipe_write)
- for low_fd in low_fds_to_close:
- os.close(low_fd)
+ message = MethodCallMessage(destination=bus_name,
+ path=object_path,
+ interface=dbus_interface,
+ method=method)
+ # Add the arguments to the function
try:
- try:
- # We must avoid complex work that could involve
- # malloc or free in the child process to avoid
- # potential deadlocks, thus we do all this here.
- # and pass it to fork_exec()
+ message.append(signature=signature, *args)
+ except Exception as e:
+ logging.basicConfig()
+ _logger.error('Unable to set arguments %r according to '
+ 'signature %r: %s: %s',
+ args, signature, e.__class__, e)
+ raise
- if env is not None:
- env_list = []
- for k, v in env.items():
- k = os.fsencode(k)
- if b'=' in k:
- raise ValueError("illegal environment variable name")
- env_list.append(k + b'=' + os.fsencode(v))
- else:
- env_list = None # Use execv instead of execve.
- executable = os.fsencode(executable)
- if os.path.dirname(executable):
- executable_list = (executable,)
- else:
- # This matches the behavior of os._execvpe().
- executable_list = tuple(
- os.path.join(os.fsencode(dir), executable)
- for dir in os.get_exec_path(env))
- fds_to_keep = set(pass_fds)
- fds_to_keep.add(errpipe_write)
- self.pid = _posixsubprocess.fork_exec(
- args, executable_list,
- close_fds, tuple(sorted(map(int, fds_to_keep))),
- cwd, env_list,
- p2cread, p2cwrite, c2pread, c2pwrite,
- errread, errwrite,
- errpipe_read, errpipe_write,
- restore_signals, start_new_session, preexec_fn)
- self._child_created = True
- finally:
- # be sure the FD is closed no matter what
- os.close(errpipe_write)
-
- self._close_pipe_fds(p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite)
-
- # Wait for exec to fail or succeed; possibly raising an
- # exception (limited in size)
- errpipe_data = bytearray()
- while True:
- part = os.read(errpipe_read, 50000)
- errpipe_data += part
- if not part or len(errpipe_data) > 50000:
- break
- finally:
- # be sure the FD is closed no matter what
- os.close(errpipe_read)
-
- if errpipe_data:
- try:
- pid, sts = os.waitpid(self.pid, 0)
- if pid == self.pid:
- self._handle_exitstatus(sts)
- else:
- self.returncode = sys.maxsize
- except ChildProcessError:
- pass
-
- try:
- exception_name, hex_errno, err_msg = (
- errpipe_data.split(b':', 2))
- # The encoding here should match the encoding
- # written in by the subprocess implementations
- # like _posixsubprocess
- err_msg = err_msg.decode()
- except ValueError:
- exception_name = b'SubprocessError'
- hex_errno = b'0'
- err_msg = 'Bad exception data from child: {!r}'.format(
- bytes(errpipe_data))
- child_exception_type = getattr(
- builtins, exception_name.decode('ascii'),
- SubprocessError)
- if issubclass(child_exception_type, OSError) and hex_errno:
- errno_num = int(hex_errno, 16)
- child_exec_never_called = (err_msg == "noexec")
- if child_exec_never_called:
- err_msg = ""
- # The error must be from chdir(cwd).
- err_filename = cwd
- else:
- err_filename = orig_executable
- if errno_num != 0:
- err_msg = os.strerror(errno_num)
- > raise child_exception_type(errno_num, err_msg, err_filename)
- E FileNotFoundError: [Errno 2] No such file or directory: 'mako'
+ # make a blocking call
+ > reply_message = self.send_message_with_reply_and_block(
+ message, timeout)
+ E dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NameHasNoOwner: Could not get owner of name 'org.freedesktop.Notifications': no such name
- .pixi/envs/default/lib/python3.8/subprocess.py:1720: FileNotFoundError
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException
+
+ During handling of the above exception, another exception occurred:
+
+ @pytest.fixture(scope="session")
+ def notifier():
+ """Importe DBusNotify avec un SessionBus actif (dunst -print)."""
+ import slic.utils.dbusnotify as dbn
+ > return dbn.DBusNotify()
+
+ tests/test_utils_dbusnotify.py:24:
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ slic/utils/dbusnotify.py:15: in __init__
+ obj = bus.get_object(BUS_NAME, OBJECT_PATH)
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:237: in get_object
+ return self.ProxyObjectClass(self, bus_name, object_path,
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py:250: in __init__
+ self._named_service = conn.activate_name_owner(bus_name)
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:178: in activate_name_owner
+ self.start_service_by_name(bus_name)
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:273: in start_service_by_name
+ return (True, self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+
+ self =
+ bus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'
+ dbus_interface = 'org.freedesktop.DBus', method = 'StartServiceByName'
+ signature = 'su', args = ('org.freedesktop.Notifications', 0), timeout = -1.0
+ byte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}
+ message =
+
+ def call_blocking(self, bus_name, object_path, dbus_interface, method,
+ signature, args, timeout=-1.0,
+ byte_arrays=False, **kwargs):
+ """Call the given method, synchronously.
+ :Since: 0.81.0
+ """
+ if object_path == LOCAL_PATH:
+ raise DBusException('Methods may not be called on the reserved '
+ 'path %s' % LOCAL_PATH)
+ if dbus_interface == LOCAL_IFACE:
+ raise DBusException('Methods may not be called on the reserved '
+ 'interface %s' % LOCAL_IFACE)
+ # no need to validate other args - MethodCallMessage ctor will do
+
+ get_args_opts = dict(byte_arrays=byte_arrays)
+ if 'utf8_strings' in kwargs:
+ raise TypeError("unexpected keyword argument 'utf8_strings'")
+
+ message = MethodCallMessage(destination=bus_name,
+ path=object_path,
+ interface=dbus_interface,
+ method=method)
+ # Add the arguments to the function
+ try:
+ message.append(signature=signature, *args)
+ except Exception as e:
+ logging.basicConfig()
+ _logger.error('Unable to set arguments %r according to '
+ 'signature %r: %s: %s',
+ args, signature, e.__class__, e)
+ raise
+
+ # make a blocking call
+ > reply_message = self.send_message_with_reply_and_block(
+ message, timeout)
+ E dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5
+
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException
```
**_*๐ Teardown phase*_**
@@ -254,7 +210,7 @@
**duration:**
```python
- 0.0003444352187216282
+ 0.0003401096910238266
```
**outcome:**
@@ -272,7 +228,7 @@
**duration:**
```python
- 0.0002047787420451641
+ 0.00022817589342594147
```
**outcome:**
@@ -284,213 +240,168 @@
**crash:**
```python
- path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 1720
- message: FileNotFoundError: [Errno 2] No such file or directory: 'mako'
+ path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py
+ lineno: 634
+ message: dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5
```
**traceback:**
```python
- path: tests/test_utils_dbusnotify.py
- lineno: 29
+ lineno: 24
message: None
- - path: .pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 858
+ - path: slic/utils/dbusnotify.py
+ lineno: 15
message: in __init__
- - path: .pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 1720
- message: FileNotFoundError
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py
+ lineno: 237
+ message: in get_object
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py
+ lineno: 250
+ message: in __init__
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py
+ lineno: 178
+ message: in activate_name_owner
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py
+ lineno: 273
+ message: in start_service_by_name
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py
+ lineno: 634
+ message: DBusException
```
**longrepr:**
```python
- @pytest.fixture(scope="session", autouse=True)
- def mako_daemon():
- """Start mako in headless logger mode and ensure cleanup."""
- global _MAKO_PROC
-
- # Ensure old log removed
- if os.path.exists(_MAKO_LOGFILE):
- os.remove(_MAKO_LOGFILE)
-
- # Launch mako with --output (no graphical deps, only logs)
- > _MAKO_PROC = subprocess.Popen(
- ["mako", f"--output={_MAKO_LOGFILE}"],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- )
+ self =
+ bus_name = 'org.freedesktop.Notifications'
- tests/test_utils_dbusnotify.py:29:
+ def activate_name_owner(self, bus_name):
+ if (bus_name is not None and bus_name[:1] != ':'
+ and bus_name != BUS_DAEMON_NAME):
+ try:
+ > return self.get_name_owner(bus_name)
+
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:173:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- .pixi/envs/default/lib/python3.8/subprocess.py:858: in __init__
- self._execute_child(args, executable, preexec_fn, close_fds,
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:348: in get_name_owner
+ return self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self =
- args = ['mako', '--output=/tmp/mako-test.log'], executable = b'mako'
- preexec_fn = None, close_fds = True, pass_fds = (), cwd = None, env = None
- startupinfo = None, creationflags = 0, shell = False, p2cread = -1
- p2cwrite = -1, c2pread = 12, c2pwrite = 13, errread = 14, errwrite = 15
- restore_signals = True, start_new_session = False
+ self =
+ bus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'
+ dbus_interface = 'org.freedesktop.DBus', method = 'GetNameOwner'
+ signature = 's', args = ('org.freedesktop.Notifications',), timeout = -1.0
+ byte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}
+ message =
- def _execute_child(self, args, executable, preexec_fn, close_fds,
- pass_fds, cwd, env,
- startupinfo, creationflags, shell,
- p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite,
- restore_signals, start_new_session):
- """Execute program (POSIX version)"""
+ def call_blocking(self, bus_name, object_path, dbus_interface, method,
+ signature, args, timeout=-1.0,
+ byte_arrays=False, **kwargs):
+ """Call the given method, synchronously.
+ :Since: 0.81.0
+ """
+ if object_path == LOCAL_PATH:
+ raise DBusException('Methods may not be called on the reserved '
+ 'path %s' % LOCAL_PATH)
+ if dbus_interface == LOCAL_IFACE:
+ raise DBusException('Methods may not be called on the reserved '
+ 'interface %s' % LOCAL_IFACE)
+ # no need to validate other args - MethodCallMessage ctor will do
- if isinstance(args, (str, bytes)):
- args = [args]
- elif isinstance(args, os.PathLike):
- if shell:
- raise TypeError('path-like args is not allowed when '
- 'shell is true')
- args = [args]
- else:
- args = list(args)
+ get_args_opts = dict(byte_arrays=byte_arrays)
+ if 'utf8_strings' in kwargs:
+ raise TypeError("unexpected keyword argument 'utf8_strings'")
- if shell:
- # On Android the default shell is at '/system/bin/sh'.
- unix_shell = ('/system/bin/sh' if
- hasattr(sys, 'getandroidapilevel') else '/bin/sh')
- args = [unix_shell, "-c"] + args
- if executable:
- args[0] = executable
-
- if executable is None:
- executable = args[0]
-
- sys.audit("subprocess.Popen", executable, args, cwd, env)
-
- if (_USE_POSIX_SPAWN
- and os.path.dirname(executable)
- and preexec_fn is None
- and not close_fds
- and not pass_fds
- and cwd is None
- and (p2cread == -1 or p2cread > 2)
- and (c2pwrite == -1 or c2pwrite > 2)
- and (errwrite == -1 or errwrite > 2)
- and not start_new_session):
- self._posix_spawn(args, executable, env, restore_signals,
- p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite)
- return
-
- orig_executable = executable
-
- # For transferring possible exec failure from child to parent.
- # Data format: "exception name:hex errno:description"
- # Pickle is not used; it is complex and involves memory allocation.
- errpipe_read, errpipe_write = os.pipe()
- # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
- low_fds_to_close = []
- while errpipe_write < 3:
- low_fds_to_close.append(errpipe_write)
- errpipe_write = os.dup(errpipe_write)
- for low_fd in low_fds_to_close:
- os.close(low_fd)
+ message = MethodCallMessage(destination=bus_name,
+ path=object_path,
+ interface=dbus_interface,
+ method=method)
+ # Add the arguments to the function
try:
- try:
- # We must avoid complex work that could involve
- # malloc or free in the child process to avoid
- # potential deadlocks, thus we do all this here.
- # and pass it to fork_exec()
+ message.append(signature=signature, *args)
+ except Exception as e:
+ logging.basicConfig()
+ _logger.error('Unable to set arguments %r according to '
+ 'signature %r: %s: %s',
+ args, signature, e.__class__, e)
+ raise
- if env is not None:
- env_list = []
- for k, v in env.items():
- k = os.fsencode(k)
- if b'=' in k:
- raise ValueError("illegal environment variable name")
- env_list.append(k + b'=' + os.fsencode(v))
- else:
- env_list = None # Use execv instead of execve.
- executable = os.fsencode(executable)
- if os.path.dirname(executable):
- executable_list = (executable,)
- else:
- # This matches the behavior of os._execvpe().
- executable_list = tuple(
- os.path.join(os.fsencode(dir), executable)
- for dir in os.get_exec_path(env))
- fds_to_keep = set(pass_fds)
- fds_to_keep.add(errpipe_write)
- self.pid = _posixsubprocess.fork_exec(
- args, executable_list,
- close_fds, tuple(sorted(map(int, fds_to_keep))),
- cwd, env_list,
- p2cread, p2cwrite, c2pread, c2pwrite,
- errread, errwrite,
- errpipe_read, errpipe_write,
- restore_signals, start_new_session, preexec_fn)
- self._child_created = True
- finally:
- # be sure the FD is closed no matter what
- os.close(errpipe_write)
-
- self._close_pipe_fds(p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite)
-
- # Wait for exec to fail or succeed; possibly raising an
- # exception (limited in size)
- errpipe_data = bytearray()
- while True:
- part = os.read(errpipe_read, 50000)
- errpipe_data += part
- if not part or len(errpipe_data) > 50000:
- break
- finally:
- # be sure the FD is closed no matter what
- os.close(errpipe_read)
-
- if errpipe_data:
- try:
- pid, sts = os.waitpid(self.pid, 0)
- if pid == self.pid:
- self._handle_exitstatus(sts)
- else:
- self.returncode = sys.maxsize
- except ChildProcessError:
- pass
-
- try:
- exception_name, hex_errno, err_msg = (
- errpipe_data.split(b':', 2))
- # The encoding here should match the encoding
- # written in by the subprocess implementations
- # like _posixsubprocess
- err_msg = err_msg.decode()
- except ValueError:
- exception_name = b'SubprocessError'
- hex_errno = b'0'
- err_msg = 'Bad exception data from child: {!r}'.format(
- bytes(errpipe_data))
- child_exception_type = getattr(
- builtins, exception_name.decode('ascii'),
- SubprocessError)
- if issubclass(child_exception_type, OSError) and hex_errno:
- errno_num = int(hex_errno, 16)
- child_exec_never_called = (err_msg == "noexec")
- if child_exec_never_called:
- err_msg = ""
- # The error must be from chdir(cwd).
- err_filename = cwd
- else:
- err_filename = orig_executable
- if errno_num != 0:
- err_msg = os.strerror(errno_num)
- > raise child_exception_type(errno_num, err_msg, err_filename)
- E FileNotFoundError: [Errno 2] No such file or directory: 'mako'
+ # make a blocking call
+ > reply_message = self.send_message_with_reply_and_block(
+ message, timeout)
+ E dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NameHasNoOwner: Could not get owner of name 'org.freedesktop.Notifications': no such name
- .pixi/envs/default/lib/python3.8/subprocess.py:1720: FileNotFoundError
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException
+
+ During handling of the above exception, another exception occurred:
+
+ @pytest.fixture(scope="session")
+ def notifier():
+ """Importe DBusNotify avec un SessionBus actif (dunst -print)."""
+ import slic.utils.dbusnotify as dbn
+ > return dbn.DBusNotify()
+
+ tests/test_utils_dbusnotify.py:24:
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ slic/utils/dbusnotify.py:15: in __init__
+ obj = bus.get_object(BUS_NAME, OBJECT_PATH)
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:237: in get_object
+ return self.ProxyObjectClass(self, bus_name, object_path,
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py:250: in __init__
+ self._named_service = conn.activate_name_owner(bus_name)
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:178: in activate_name_owner
+ self.start_service_by_name(bus_name)
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:273: in start_service_by_name
+ return (True, self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+
+ self =
+ bus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'
+ dbus_interface = 'org.freedesktop.DBus', method = 'StartServiceByName'
+ signature = 'su', args = ('org.freedesktop.Notifications', 0), timeout = -1.0
+ byte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}
+ message =
+
+ def call_blocking(self, bus_name, object_path, dbus_interface, method,
+ signature, args, timeout=-1.0,
+ byte_arrays=False, **kwargs):
+ """Call the given method, synchronously.
+ :Since: 0.81.0
+ """
+ if object_path == LOCAL_PATH:
+ raise DBusException('Methods may not be called on the reserved '
+ 'path %s' % LOCAL_PATH)
+ if dbus_interface == LOCAL_IFACE:
+ raise DBusException('Methods may not be called on the reserved '
+ 'interface %s' % LOCAL_IFACE)
+ # no need to validate other args - MethodCallMessage ctor will do
+
+ get_args_opts = dict(byte_arrays=byte_arrays)
+ if 'utf8_strings' in kwargs:
+ raise TypeError("unexpected keyword argument 'utf8_strings'")
+
+ message = MethodCallMessage(destination=bus_name,
+ path=object_path,
+ interface=dbus_interface,
+ method=method)
+ # Add the arguments to the function
+ try:
+ message.append(signature=signature, *args)
+ except Exception as e:
+ logging.basicConfig()
+ _logger.error('Unable to set arguments %r according to '
+ 'signature %r: %s: %s',
+ args, signature, e.__class__, e)
+ raise
+
+ # make a blocking call
+ > reply_message = self.send_message_with_reply_and_block(
+ message, timeout)
+ E dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5
+
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException
```
**_*๐ Teardown phase*_**
@@ -498,7 +409,7 @@
**duration:**
```python
- 0.00022171391174197197
+ 0.00025309203192591667
```
**outcome:**
@@ -516,7 +427,7 @@
**duration:**
```python
- 0.00018394412472844124
+ 0.00018474413082003593
```
**outcome:**
@@ -528,213 +439,168 @@
**crash:**
```python
- path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 1720
- message: FileNotFoundError: [Errno 2] No such file or directory: 'mako'
+ path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py
+ lineno: 634
+ message: dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5
```
**traceback:**
```python
- path: tests/test_utils_dbusnotify.py
- lineno: 29
+ lineno: 24
message: None
- - path: .pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 858
+ - path: slic/utils/dbusnotify.py
+ lineno: 15
message: in __init__
- - path: .pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 1720
- message: FileNotFoundError
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py
+ lineno: 237
+ message: in get_object
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py
+ lineno: 250
+ message: in __init__
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py
+ lineno: 178
+ message: in activate_name_owner
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py
+ lineno: 273
+ message: in start_service_by_name
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py
+ lineno: 634
+ message: DBusException
```
**longrepr:**
```python
- @pytest.fixture(scope="session", autouse=True)
- def mako_daemon():
- """Start mako in headless logger mode and ensure cleanup."""
- global _MAKO_PROC
-
- # Ensure old log removed
- if os.path.exists(_MAKO_LOGFILE):
- os.remove(_MAKO_LOGFILE)
-
- # Launch mako with --output (no graphical deps, only logs)
- > _MAKO_PROC = subprocess.Popen(
- ["mako", f"--output={_MAKO_LOGFILE}"],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- )
+ self =
+ bus_name = 'org.freedesktop.Notifications'
- tests/test_utils_dbusnotify.py:29:
+ def activate_name_owner(self, bus_name):
+ if (bus_name is not None and bus_name[:1] != ':'
+ and bus_name != BUS_DAEMON_NAME):
+ try:
+ > return self.get_name_owner(bus_name)
+
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:173:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- .pixi/envs/default/lib/python3.8/subprocess.py:858: in __init__
- self._execute_child(args, executable, preexec_fn, close_fds,
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:348: in get_name_owner
+ return self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self =
- args = ['mako', '--output=/tmp/mako-test.log'], executable = b'mako'
- preexec_fn = None, close_fds = True, pass_fds = (), cwd = None, env = None
- startupinfo = None, creationflags = 0, shell = False, p2cread = -1
- p2cwrite = -1, c2pread = 12, c2pwrite = 13, errread = 14, errwrite = 15
- restore_signals = True, start_new_session = False
+ self =
+ bus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'
+ dbus_interface = 'org.freedesktop.DBus', method = 'GetNameOwner'
+ signature = 's', args = ('org.freedesktop.Notifications',), timeout = -1.0
+ byte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}
+ message =
- def _execute_child(self, args, executable, preexec_fn, close_fds,
- pass_fds, cwd, env,
- startupinfo, creationflags, shell,
- p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite,
- restore_signals, start_new_session):
- """Execute program (POSIX version)"""
+ def call_blocking(self, bus_name, object_path, dbus_interface, method,
+ signature, args, timeout=-1.0,
+ byte_arrays=False, **kwargs):
+ """Call the given method, synchronously.
+ :Since: 0.81.0
+ """
+ if object_path == LOCAL_PATH:
+ raise DBusException('Methods may not be called on the reserved '
+ 'path %s' % LOCAL_PATH)
+ if dbus_interface == LOCAL_IFACE:
+ raise DBusException('Methods may not be called on the reserved '
+ 'interface %s' % LOCAL_IFACE)
+ # no need to validate other args - MethodCallMessage ctor will do
- if isinstance(args, (str, bytes)):
- args = [args]
- elif isinstance(args, os.PathLike):
- if shell:
- raise TypeError('path-like args is not allowed when '
- 'shell is true')
- args = [args]
- else:
- args = list(args)
+ get_args_opts = dict(byte_arrays=byte_arrays)
+ if 'utf8_strings' in kwargs:
+ raise TypeError("unexpected keyword argument 'utf8_strings'")
- if shell:
- # On Android the default shell is at '/system/bin/sh'.
- unix_shell = ('/system/bin/sh' if
- hasattr(sys, 'getandroidapilevel') else '/bin/sh')
- args = [unix_shell, "-c"] + args
- if executable:
- args[0] = executable
-
- if executable is None:
- executable = args[0]
-
- sys.audit("subprocess.Popen", executable, args, cwd, env)
-
- if (_USE_POSIX_SPAWN
- and os.path.dirname(executable)
- and preexec_fn is None
- and not close_fds
- and not pass_fds
- and cwd is None
- and (p2cread == -1 or p2cread > 2)
- and (c2pwrite == -1 or c2pwrite > 2)
- and (errwrite == -1 or errwrite > 2)
- and not start_new_session):
- self._posix_spawn(args, executable, env, restore_signals,
- p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite)
- return
-
- orig_executable = executable
-
- # For transferring possible exec failure from child to parent.
- # Data format: "exception name:hex errno:description"
- # Pickle is not used; it is complex and involves memory allocation.
- errpipe_read, errpipe_write = os.pipe()
- # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
- low_fds_to_close = []
- while errpipe_write < 3:
- low_fds_to_close.append(errpipe_write)
- errpipe_write = os.dup(errpipe_write)
- for low_fd in low_fds_to_close:
- os.close(low_fd)
+ message = MethodCallMessage(destination=bus_name,
+ path=object_path,
+ interface=dbus_interface,
+ method=method)
+ # Add the arguments to the function
try:
- try:
- # We must avoid complex work that could involve
- # malloc or free in the child process to avoid
- # potential deadlocks, thus we do all this here.
- # and pass it to fork_exec()
+ message.append(signature=signature, *args)
+ except Exception as e:
+ logging.basicConfig()
+ _logger.error('Unable to set arguments %r according to '
+ 'signature %r: %s: %s',
+ args, signature, e.__class__, e)
+ raise
- if env is not None:
- env_list = []
- for k, v in env.items():
- k = os.fsencode(k)
- if b'=' in k:
- raise ValueError("illegal environment variable name")
- env_list.append(k + b'=' + os.fsencode(v))
- else:
- env_list = None # Use execv instead of execve.
- executable = os.fsencode(executable)
- if os.path.dirname(executable):
- executable_list = (executable,)
- else:
- # This matches the behavior of os._execvpe().
- executable_list = tuple(
- os.path.join(os.fsencode(dir), executable)
- for dir in os.get_exec_path(env))
- fds_to_keep = set(pass_fds)
- fds_to_keep.add(errpipe_write)
- self.pid = _posixsubprocess.fork_exec(
- args, executable_list,
- close_fds, tuple(sorted(map(int, fds_to_keep))),
- cwd, env_list,
- p2cread, p2cwrite, c2pread, c2pwrite,
- errread, errwrite,
- errpipe_read, errpipe_write,
- restore_signals, start_new_session, preexec_fn)
- self._child_created = True
- finally:
- # be sure the FD is closed no matter what
- os.close(errpipe_write)
-
- self._close_pipe_fds(p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite)
-
- # Wait for exec to fail or succeed; possibly raising an
- # exception (limited in size)
- errpipe_data = bytearray()
- while True:
- part = os.read(errpipe_read, 50000)
- errpipe_data += part
- if not part or len(errpipe_data) > 50000:
- break
- finally:
- # be sure the FD is closed no matter what
- os.close(errpipe_read)
-
- if errpipe_data:
- try:
- pid, sts = os.waitpid(self.pid, 0)
- if pid == self.pid:
- self._handle_exitstatus(sts)
- else:
- self.returncode = sys.maxsize
- except ChildProcessError:
- pass
-
- try:
- exception_name, hex_errno, err_msg = (
- errpipe_data.split(b':', 2))
- # The encoding here should match the encoding
- # written in by the subprocess implementations
- # like _posixsubprocess
- err_msg = err_msg.decode()
- except ValueError:
- exception_name = b'SubprocessError'
- hex_errno = b'0'
- err_msg = 'Bad exception data from child: {!r}'.format(
- bytes(errpipe_data))
- child_exception_type = getattr(
- builtins, exception_name.decode('ascii'),
- SubprocessError)
- if issubclass(child_exception_type, OSError) and hex_errno:
- errno_num = int(hex_errno, 16)
- child_exec_never_called = (err_msg == "noexec")
- if child_exec_never_called:
- err_msg = ""
- # The error must be from chdir(cwd).
- err_filename = cwd
- else:
- err_filename = orig_executable
- if errno_num != 0:
- err_msg = os.strerror(errno_num)
- > raise child_exception_type(errno_num, err_msg, err_filename)
- E FileNotFoundError: [Errno 2] No such file or directory: 'mako'
+ # make a blocking call
+ > reply_message = self.send_message_with_reply_and_block(
+ message, timeout)
+ E dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NameHasNoOwner: Could not get owner of name 'org.freedesktop.Notifications': no such name
- .pixi/envs/default/lib/python3.8/subprocess.py:1720: FileNotFoundError
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException
+
+ During handling of the above exception, another exception occurred:
+
+ @pytest.fixture(scope="session")
+ def notifier():
+ """Importe DBusNotify avec un SessionBus actif (dunst -print)."""
+ import slic.utils.dbusnotify as dbn
+ > return dbn.DBusNotify()
+
+ tests/test_utils_dbusnotify.py:24:
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ slic/utils/dbusnotify.py:15: in __init__
+ obj = bus.get_object(BUS_NAME, OBJECT_PATH)
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:237: in get_object
+ return self.ProxyObjectClass(self, bus_name, object_path,
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py:250: in __init__
+ self._named_service = conn.activate_name_owner(bus_name)
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:178: in activate_name_owner
+ self.start_service_by_name(bus_name)
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:273: in start_service_by_name
+ return (True, self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+
+ self =
+ bus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'
+ dbus_interface = 'org.freedesktop.DBus', method = 'StartServiceByName'
+ signature = 'su', args = ('org.freedesktop.Notifications', 0), timeout = -1.0
+ byte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}
+ message =
+
+ def call_blocking(self, bus_name, object_path, dbus_interface, method,
+ signature, args, timeout=-1.0,
+ byte_arrays=False, **kwargs):
+ """Call the given method, synchronously.
+ :Since: 0.81.0
+ """
+ if object_path == LOCAL_PATH:
+ raise DBusException('Methods may not be called on the reserved '
+ 'path %s' % LOCAL_PATH)
+ if dbus_interface == LOCAL_IFACE:
+ raise DBusException('Methods may not be called on the reserved '
+ 'interface %s' % LOCAL_IFACE)
+ # no need to validate other args - MethodCallMessage ctor will do
+
+ get_args_opts = dict(byte_arrays=byte_arrays)
+ if 'utf8_strings' in kwargs:
+ raise TypeError("unexpected keyword argument 'utf8_strings'")
+
+ message = MethodCallMessage(destination=bus_name,
+ path=object_path,
+ interface=dbus_interface,
+ method=method)
+ # Add the arguments to the function
+ try:
+ message.append(signature=signature, *args)
+ except Exception as e:
+ logging.basicConfig()
+ _logger.error('Unable to set arguments %r according to '
+ 'signature %r: %s: %s',
+ args, signature, e.__class__, e)
+ raise
+
+ # make a blocking call
+ > reply_message = self.send_message_with_reply_and_block(
+ message, timeout)
+ E dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5
+
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException
```
**_*๐ Teardown phase*_**
@@ -742,7 +608,7 @@
**duration:**
```python
- 0.0002314755693078041
+ 0.00022685201838612556
```
**outcome:**
@@ -760,7 +626,7 @@
**duration:**
```python
- 0.00018874090164899826
+ 0.0001901029609143734
```
**outcome:**
@@ -772,213 +638,168 @@
**crash:**
```python
- path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 1720
- message: FileNotFoundError: [Errno 2] No such file or directory: 'mako'
+ path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py
+ lineno: 634
+ message: dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5
```
**traceback:**
```python
- path: tests/test_utils_dbusnotify.py
- lineno: 29
+ lineno: 24
message: None
- - path: .pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 858
+ - path: slic/utils/dbusnotify.py
+ lineno: 15
message: in __init__
- - path: .pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 1720
- message: FileNotFoundError
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py
+ lineno: 237
+ message: in get_object
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py
+ lineno: 250
+ message: in __init__
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py
+ lineno: 178
+ message: in activate_name_owner
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py
+ lineno: 273
+ message: in start_service_by_name
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py
+ lineno: 634
+ message: DBusException
```
**longrepr:**
```python
- @pytest.fixture(scope="session", autouse=True)
- def mako_daemon():
- """Start mako in headless logger mode and ensure cleanup."""
- global _MAKO_PROC
-
- # Ensure old log removed
- if os.path.exists(_MAKO_LOGFILE):
- os.remove(_MAKO_LOGFILE)
-
- # Launch mako with --output (no graphical deps, only logs)
- > _MAKO_PROC = subprocess.Popen(
- ["mako", f"--output={_MAKO_LOGFILE}"],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- )
+ self =
+ bus_name = 'org.freedesktop.Notifications'
- tests/test_utils_dbusnotify.py:29:
+ def activate_name_owner(self, bus_name):
+ if (bus_name is not None and bus_name[:1] != ':'
+ and bus_name != BUS_DAEMON_NAME):
+ try:
+ > return self.get_name_owner(bus_name)
+
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:173:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- .pixi/envs/default/lib/python3.8/subprocess.py:858: in __init__
- self._execute_child(args, executable, preexec_fn, close_fds,
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:348: in get_name_owner
+ return self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self =
- args = ['mako', '--output=/tmp/mako-test.log'], executable = b'mako'
- preexec_fn = None, close_fds = True, pass_fds = (), cwd = None, env = None
- startupinfo = None, creationflags = 0, shell = False, p2cread = -1
- p2cwrite = -1, c2pread = 12, c2pwrite = 13, errread = 14, errwrite = 15
- restore_signals = True, start_new_session = False
+ self =
+ bus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'
+ dbus_interface = 'org.freedesktop.DBus', method = 'GetNameOwner'
+ signature = 's', args = ('org.freedesktop.Notifications',), timeout = -1.0
+ byte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}
+ message =
- def _execute_child(self, args, executable, preexec_fn, close_fds,
- pass_fds, cwd, env,
- startupinfo, creationflags, shell,
- p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite,
- restore_signals, start_new_session):
- """Execute program (POSIX version)"""
+ def call_blocking(self, bus_name, object_path, dbus_interface, method,
+ signature, args, timeout=-1.0,
+ byte_arrays=False, **kwargs):
+ """Call the given method, synchronously.
+ :Since: 0.81.0
+ """
+ if object_path == LOCAL_PATH:
+ raise DBusException('Methods may not be called on the reserved '
+ 'path %s' % LOCAL_PATH)
+ if dbus_interface == LOCAL_IFACE:
+ raise DBusException('Methods may not be called on the reserved '
+ 'interface %s' % LOCAL_IFACE)
+ # no need to validate other args - MethodCallMessage ctor will do
- if isinstance(args, (str, bytes)):
- args = [args]
- elif isinstance(args, os.PathLike):
- if shell:
- raise TypeError('path-like args is not allowed when '
- 'shell is true')
- args = [args]
- else:
- args = list(args)
+ get_args_opts = dict(byte_arrays=byte_arrays)
+ if 'utf8_strings' in kwargs:
+ raise TypeError("unexpected keyword argument 'utf8_strings'")
- if shell:
- # On Android the default shell is at '/system/bin/sh'.
- unix_shell = ('/system/bin/sh' if
- hasattr(sys, 'getandroidapilevel') else '/bin/sh')
- args = [unix_shell, "-c"] + args
- if executable:
- args[0] = executable
-
- if executable is None:
- executable = args[0]
-
- sys.audit("subprocess.Popen", executable, args, cwd, env)
-
- if (_USE_POSIX_SPAWN
- and os.path.dirname(executable)
- and preexec_fn is None
- and not close_fds
- and not pass_fds
- and cwd is None
- and (p2cread == -1 or p2cread > 2)
- and (c2pwrite == -1 or c2pwrite > 2)
- and (errwrite == -1 or errwrite > 2)
- and not start_new_session):
- self._posix_spawn(args, executable, env, restore_signals,
- p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite)
- return
-
- orig_executable = executable
-
- # For transferring possible exec failure from child to parent.
- # Data format: "exception name:hex errno:description"
- # Pickle is not used; it is complex and involves memory allocation.
- errpipe_read, errpipe_write = os.pipe()
- # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
- low_fds_to_close = []
- while errpipe_write < 3:
- low_fds_to_close.append(errpipe_write)
- errpipe_write = os.dup(errpipe_write)
- for low_fd in low_fds_to_close:
- os.close(low_fd)
+ message = MethodCallMessage(destination=bus_name,
+ path=object_path,
+ interface=dbus_interface,
+ method=method)
+ # Add the arguments to the function
try:
- try:
- # We must avoid complex work that could involve
- # malloc or free in the child process to avoid
- # potential deadlocks, thus we do all this here.
- # and pass it to fork_exec()
+ message.append(signature=signature, *args)
+ except Exception as e:
+ logging.basicConfig()
+ _logger.error('Unable to set arguments %r according to '
+ 'signature %r: %s: %s',
+ args, signature, e.__class__, e)
+ raise
- if env is not None:
- env_list = []
- for k, v in env.items():
- k = os.fsencode(k)
- if b'=' in k:
- raise ValueError("illegal environment variable name")
- env_list.append(k + b'=' + os.fsencode(v))
- else:
- env_list = None # Use execv instead of execve.
- executable = os.fsencode(executable)
- if os.path.dirname(executable):
- executable_list = (executable,)
- else:
- # This matches the behavior of os._execvpe().
- executable_list = tuple(
- os.path.join(os.fsencode(dir), executable)
- for dir in os.get_exec_path(env))
- fds_to_keep = set(pass_fds)
- fds_to_keep.add(errpipe_write)
- self.pid = _posixsubprocess.fork_exec(
- args, executable_list,
- close_fds, tuple(sorted(map(int, fds_to_keep))),
- cwd, env_list,
- p2cread, p2cwrite, c2pread, c2pwrite,
- errread, errwrite,
- errpipe_read, errpipe_write,
- restore_signals, start_new_session, preexec_fn)
- self._child_created = True
- finally:
- # be sure the FD is closed no matter what
- os.close(errpipe_write)
-
- self._close_pipe_fds(p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite)
-
- # Wait for exec to fail or succeed; possibly raising an
- # exception (limited in size)
- errpipe_data = bytearray()
- while True:
- part = os.read(errpipe_read, 50000)
- errpipe_data += part
- if not part or len(errpipe_data) > 50000:
- break
- finally:
- # be sure the FD is closed no matter what
- os.close(errpipe_read)
-
- if errpipe_data:
- try:
- pid, sts = os.waitpid(self.pid, 0)
- if pid == self.pid:
- self._handle_exitstatus(sts)
- else:
- self.returncode = sys.maxsize
- except ChildProcessError:
- pass
-
- try:
- exception_name, hex_errno, err_msg = (
- errpipe_data.split(b':', 2))
- # The encoding here should match the encoding
- # written in by the subprocess implementations
- # like _posixsubprocess
- err_msg = err_msg.decode()
- except ValueError:
- exception_name = b'SubprocessError'
- hex_errno = b'0'
- err_msg = 'Bad exception data from child: {!r}'.format(
- bytes(errpipe_data))
- child_exception_type = getattr(
- builtins, exception_name.decode('ascii'),
- SubprocessError)
- if issubclass(child_exception_type, OSError) and hex_errno:
- errno_num = int(hex_errno, 16)
- child_exec_never_called = (err_msg == "noexec")
- if child_exec_never_called:
- err_msg = ""
- # The error must be from chdir(cwd).
- err_filename = cwd
- else:
- err_filename = orig_executable
- if errno_num != 0:
- err_msg = os.strerror(errno_num)
- > raise child_exception_type(errno_num, err_msg, err_filename)
- E FileNotFoundError: [Errno 2] No such file or directory: 'mako'
+ # make a blocking call
+ > reply_message = self.send_message_with_reply_and_block(
+ message, timeout)
+ E dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NameHasNoOwner: Could not get owner of name 'org.freedesktop.Notifications': no such name
- .pixi/envs/default/lib/python3.8/subprocess.py:1720: FileNotFoundError
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException
+
+ During handling of the above exception, another exception occurred:
+
+ @pytest.fixture(scope="session")
+ def notifier():
+ """Importe DBusNotify avec un SessionBus actif (dunst -print)."""
+ import slic.utils.dbusnotify as dbn
+ > return dbn.DBusNotify()
+
+ tests/test_utils_dbusnotify.py:24:
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ slic/utils/dbusnotify.py:15: in __init__
+ obj = bus.get_object(BUS_NAME, OBJECT_PATH)
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:237: in get_object
+ return self.ProxyObjectClass(self, bus_name, object_path,
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py:250: in __init__
+ self._named_service = conn.activate_name_owner(bus_name)
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:178: in activate_name_owner
+ self.start_service_by_name(bus_name)
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:273: in start_service_by_name
+ return (True, self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+
+ self =
+ bus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'
+ dbus_interface = 'org.freedesktop.DBus', method = 'StartServiceByName'
+ signature = 'su', args = ('org.freedesktop.Notifications', 0), timeout = -1.0
+ byte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}
+ message =
+
+ def call_blocking(self, bus_name, object_path, dbus_interface, method,
+ signature, args, timeout=-1.0,
+ byte_arrays=False, **kwargs):
+ """Call the given method, synchronously.
+ :Since: 0.81.0
+ """
+ if object_path == LOCAL_PATH:
+ raise DBusException('Methods may not be called on the reserved '
+ 'path %s' % LOCAL_PATH)
+ if dbus_interface == LOCAL_IFACE:
+ raise DBusException('Methods may not be called on the reserved '
+ 'interface %s' % LOCAL_IFACE)
+ # no need to validate other args - MethodCallMessage ctor will do
+
+ get_args_opts = dict(byte_arrays=byte_arrays)
+ if 'utf8_strings' in kwargs:
+ raise TypeError("unexpected keyword argument 'utf8_strings'")
+
+ message = MethodCallMessage(destination=bus_name,
+ path=object_path,
+ interface=dbus_interface,
+ method=method)
+ # Add the arguments to the function
+ try:
+ message.append(signature=signature, *args)
+ except Exception as e:
+ logging.basicConfig()
+ _logger.error('Unable to set arguments %r according to '
+ 'signature %r: %s: %s',
+ args, signature, e.__class__, e)
+ raise
+
+ # make a blocking call
+ > reply_message = self.send_message_with_reply_and_block(
+ message, timeout)
+ E dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5
+
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException
```
**_*๐ Teardown phase*_**
@@ -986,7 +807,7 @@
**duration:**
```python
- 0.0002180039882659912
+ 0.00026099616661667824
```
**outcome:**
@@ -1004,7 +825,7 @@
**duration:**
```python
- 0.0001881709322333336
+ 0.0002445271238684654
```
**outcome:**
@@ -1016,213 +837,168 @@
**crash:**
```python
- path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 1720
- message: FileNotFoundError: [Errno 2] No such file or directory: 'mako'
+ path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py
+ lineno: 634
+ message: dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5
```
**traceback:**
```python
- path: tests/test_utils_dbusnotify.py
- lineno: 29
+ lineno: 24
message: None
- - path: .pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 858
+ - path: slic/utils/dbusnotify.py
+ lineno: 15
message: in __init__
- - path: .pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 1720
- message: FileNotFoundError
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py
+ lineno: 237
+ message: in get_object
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py
+ lineno: 250
+ message: in __init__
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py
+ lineno: 178
+ message: in activate_name_owner
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py
+ lineno: 273
+ message: in start_service_by_name
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py
+ lineno: 634
+ message: DBusException
```
**longrepr:**
```python
- @pytest.fixture(scope="session", autouse=True)
- def mako_daemon():
- """Start mako in headless logger mode and ensure cleanup."""
- global _MAKO_PROC
-
- # Ensure old log removed
- if os.path.exists(_MAKO_LOGFILE):
- os.remove(_MAKO_LOGFILE)
-
- # Launch mako with --output (no graphical deps, only logs)
- > _MAKO_PROC = subprocess.Popen(
- ["mako", f"--output={_MAKO_LOGFILE}"],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- )
+ self =
+ bus_name = 'org.freedesktop.Notifications'
- tests/test_utils_dbusnotify.py:29:
+ def activate_name_owner(self, bus_name):
+ if (bus_name is not None and bus_name[:1] != ':'
+ and bus_name != BUS_DAEMON_NAME):
+ try:
+ > return self.get_name_owner(bus_name)
+
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:173:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- .pixi/envs/default/lib/python3.8/subprocess.py:858: in __init__
- self._execute_child(args, executable, preexec_fn, close_fds,
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:348: in get_name_owner
+ return self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self =
- args = ['mako', '--output=/tmp/mako-test.log'], executable = b'mako'
- preexec_fn = None, close_fds = True, pass_fds = (), cwd = None, env = None
- startupinfo = None, creationflags = 0, shell = False, p2cread = -1
- p2cwrite = -1, c2pread = 12, c2pwrite = 13, errread = 14, errwrite = 15
- restore_signals = True, start_new_session = False
+ self =
+ bus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'
+ dbus_interface = 'org.freedesktop.DBus', method = 'GetNameOwner'
+ signature = 's', args = ('org.freedesktop.Notifications',), timeout = -1.0
+ byte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}
+ message =
- def _execute_child(self, args, executable, preexec_fn, close_fds,
- pass_fds, cwd, env,
- startupinfo, creationflags, shell,
- p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite,
- restore_signals, start_new_session):
- """Execute program (POSIX version)"""
+ def call_blocking(self, bus_name, object_path, dbus_interface, method,
+ signature, args, timeout=-1.0,
+ byte_arrays=False, **kwargs):
+ """Call the given method, synchronously.
+ :Since: 0.81.0
+ """
+ if object_path == LOCAL_PATH:
+ raise DBusException('Methods may not be called on the reserved '
+ 'path %s' % LOCAL_PATH)
+ if dbus_interface == LOCAL_IFACE:
+ raise DBusException('Methods may not be called on the reserved '
+ 'interface %s' % LOCAL_IFACE)
+ # no need to validate other args - MethodCallMessage ctor will do
- if isinstance(args, (str, bytes)):
- args = [args]
- elif isinstance(args, os.PathLike):
- if shell:
- raise TypeError('path-like args is not allowed when '
- 'shell is true')
- args = [args]
- else:
- args = list(args)
+ get_args_opts = dict(byte_arrays=byte_arrays)
+ if 'utf8_strings' in kwargs:
+ raise TypeError("unexpected keyword argument 'utf8_strings'")
- if shell:
- # On Android the default shell is at '/system/bin/sh'.
- unix_shell = ('/system/bin/sh' if
- hasattr(sys, 'getandroidapilevel') else '/bin/sh')
- args = [unix_shell, "-c"] + args
- if executable:
- args[0] = executable
-
- if executable is None:
- executable = args[0]
-
- sys.audit("subprocess.Popen", executable, args, cwd, env)
-
- if (_USE_POSIX_SPAWN
- and os.path.dirname(executable)
- and preexec_fn is None
- and not close_fds
- and not pass_fds
- and cwd is None
- and (p2cread == -1 or p2cread > 2)
- and (c2pwrite == -1 or c2pwrite > 2)
- and (errwrite == -1 or errwrite > 2)
- and not start_new_session):
- self._posix_spawn(args, executable, env, restore_signals,
- p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite)
- return
-
- orig_executable = executable
-
- # For transferring possible exec failure from child to parent.
- # Data format: "exception name:hex errno:description"
- # Pickle is not used; it is complex and involves memory allocation.
- errpipe_read, errpipe_write = os.pipe()
- # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
- low_fds_to_close = []
- while errpipe_write < 3:
- low_fds_to_close.append(errpipe_write)
- errpipe_write = os.dup(errpipe_write)
- for low_fd in low_fds_to_close:
- os.close(low_fd)
+ message = MethodCallMessage(destination=bus_name,
+ path=object_path,
+ interface=dbus_interface,
+ method=method)
+ # Add the arguments to the function
try:
- try:
- # We must avoid complex work that could involve
- # malloc or free in the child process to avoid
- # potential deadlocks, thus we do all this here.
- # and pass it to fork_exec()
+ message.append(signature=signature, *args)
+ except Exception as e:
+ logging.basicConfig()
+ _logger.error('Unable to set arguments %r according to '
+ 'signature %r: %s: %s',
+ args, signature, e.__class__, e)
+ raise
- if env is not None:
- env_list = []
- for k, v in env.items():
- k = os.fsencode(k)
- if b'=' in k:
- raise ValueError("illegal environment variable name")
- env_list.append(k + b'=' + os.fsencode(v))
- else:
- env_list = None # Use execv instead of execve.
- executable = os.fsencode(executable)
- if os.path.dirname(executable):
- executable_list = (executable,)
- else:
- # This matches the behavior of os._execvpe().
- executable_list = tuple(
- os.path.join(os.fsencode(dir), executable)
- for dir in os.get_exec_path(env))
- fds_to_keep = set(pass_fds)
- fds_to_keep.add(errpipe_write)
- self.pid = _posixsubprocess.fork_exec(
- args, executable_list,
- close_fds, tuple(sorted(map(int, fds_to_keep))),
- cwd, env_list,
- p2cread, p2cwrite, c2pread, c2pwrite,
- errread, errwrite,
- errpipe_read, errpipe_write,
- restore_signals, start_new_session, preexec_fn)
- self._child_created = True
- finally:
- # be sure the FD is closed no matter what
- os.close(errpipe_write)
-
- self._close_pipe_fds(p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite)
-
- # Wait for exec to fail or succeed; possibly raising an
- # exception (limited in size)
- errpipe_data = bytearray()
- while True:
- part = os.read(errpipe_read, 50000)
- errpipe_data += part
- if not part or len(errpipe_data) > 50000:
- break
- finally:
- # be sure the FD is closed no matter what
- os.close(errpipe_read)
-
- if errpipe_data:
- try:
- pid, sts = os.waitpid(self.pid, 0)
- if pid == self.pid:
- self._handle_exitstatus(sts)
- else:
- self.returncode = sys.maxsize
- except ChildProcessError:
- pass
-
- try:
- exception_name, hex_errno, err_msg = (
- errpipe_data.split(b':', 2))
- # The encoding here should match the encoding
- # written in by the subprocess implementations
- # like _posixsubprocess
- err_msg = err_msg.decode()
- except ValueError:
- exception_name = b'SubprocessError'
- hex_errno = b'0'
- err_msg = 'Bad exception data from child: {!r}'.format(
- bytes(errpipe_data))
- child_exception_type = getattr(
- builtins, exception_name.decode('ascii'),
- SubprocessError)
- if issubclass(child_exception_type, OSError) and hex_errno:
- errno_num = int(hex_errno, 16)
- child_exec_never_called = (err_msg == "noexec")
- if child_exec_never_called:
- err_msg = ""
- # The error must be from chdir(cwd).
- err_filename = cwd
- else:
- err_filename = orig_executable
- if errno_num != 0:
- err_msg = os.strerror(errno_num)
- > raise child_exception_type(errno_num, err_msg, err_filename)
- E FileNotFoundError: [Errno 2] No such file or directory: 'mako'
+ # make a blocking call
+ > reply_message = self.send_message_with_reply_and_block(
+ message, timeout)
+ E dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NameHasNoOwner: Could not get owner of name 'org.freedesktop.Notifications': no such name
- .pixi/envs/default/lib/python3.8/subprocess.py:1720: FileNotFoundError
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException
+
+ During handling of the above exception, another exception occurred:
+
+ @pytest.fixture(scope="session")
+ def notifier():
+ """Importe DBusNotify avec un SessionBus actif (dunst -print)."""
+ import slic.utils.dbusnotify as dbn
+ > return dbn.DBusNotify()
+
+ tests/test_utils_dbusnotify.py:24:
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ slic/utils/dbusnotify.py:15: in __init__
+ obj = bus.get_object(BUS_NAME, OBJECT_PATH)
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:237: in get_object
+ return self.ProxyObjectClass(self, bus_name, object_path,
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py:250: in __init__
+ self._named_service = conn.activate_name_owner(bus_name)
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:178: in activate_name_owner
+ self.start_service_by_name(bus_name)
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:273: in start_service_by_name
+ return (True, self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+
+ self =
+ bus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'
+ dbus_interface = 'org.freedesktop.DBus', method = 'StartServiceByName'
+ signature = 'su', args = ('org.freedesktop.Notifications', 0), timeout = -1.0
+ byte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}
+ message =
+
+ def call_blocking(self, bus_name, object_path, dbus_interface, method,
+ signature, args, timeout=-1.0,
+ byte_arrays=False, **kwargs):
+ """Call the given method, synchronously.
+ :Since: 0.81.0
+ """
+ if object_path == LOCAL_PATH:
+ raise DBusException('Methods may not be called on the reserved '
+ 'path %s' % LOCAL_PATH)
+ if dbus_interface == LOCAL_IFACE:
+ raise DBusException('Methods may not be called on the reserved '
+ 'interface %s' % LOCAL_IFACE)
+ # no need to validate other args - MethodCallMessage ctor will do
+
+ get_args_opts = dict(byte_arrays=byte_arrays)
+ if 'utf8_strings' in kwargs:
+ raise TypeError("unexpected keyword argument 'utf8_strings'")
+
+ message = MethodCallMessage(destination=bus_name,
+ path=object_path,
+ interface=dbus_interface,
+ method=method)
+ # Add the arguments to the function
+ try:
+ message.append(signature=signature, *args)
+ except Exception as e:
+ logging.basicConfig()
+ _logger.error('Unable to set arguments %r according to '
+ 'signature %r: %s: %s',
+ args, signature, e.__class__, e)
+ raise
+
+ # make a blocking call
+ > reply_message = self.send_message_with_reply_and_block(
+ message, timeout)
+ E dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5
+
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException
```
**_*๐ Teardown phase*_**
@@ -1230,7 +1006,7 @@
**duration:**
```python
- 0.00021681608632206917
+ 0.00022699404507875443
```
**outcome:**
@@ -1248,7 +1024,7 @@
**duration:**
```python
- 0.00023002317175269127
+ 0.00017999298870563507
```
**outcome:**
@@ -1260,213 +1036,168 @@
**crash:**
```python
- path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 1720
- message: FileNotFoundError: [Errno 2] No such file or directory: 'mako'
+ path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py
+ lineno: 634
+ message: dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5
```
**traceback:**
```python
- path: tests/test_utils_dbusnotify.py
- lineno: 29
+ lineno: 24
message: None
- - path: .pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 858
+ - path: slic/utils/dbusnotify.py
+ lineno: 15
message: in __init__
- - path: .pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 1720
- message: FileNotFoundError
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py
+ lineno: 237
+ message: in get_object
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py
+ lineno: 250
+ message: in __init__
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py
+ lineno: 178
+ message: in activate_name_owner
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py
+ lineno: 273
+ message: in start_service_by_name
+ - path: .pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py
+ lineno: 634
+ message: DBusException
```
**longrepr:**
```python
- @pytest.fixture(scope="session", autouse=True)
- def mako_daemon():
- """Start mako in headless logger mode and ensure cleanup."""
- global _MAKO_PROC
-
- # Ensure old log removed
- if os.path.exists(_MAKO_LOGFILE):
- os.remove(_MAKO_LOGFILE)
-
- # Launch mako with --output (no graphical deps, only logs)
- > _MAKO_PROC = subprocess.Popen(
- ["mako", f"--output={_MAKO_LOGFILE}"],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- )
+ self =
+ bus_name = 'org.freedesktop.Notifications'
- tests/test_utils_dbusnotify.py:29:
+ def activate_name_owner(self, bus_name):
+ if (bus_name is not None and bus_name[:1] != ':'
+ and bus_name != BUS_DAEMON_NAME):
+ try:
+ > return self.get_name_owner(bus_name)
+
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:173:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- .pixi/envs/default/lib/python3.8/subprocess.py:858: in __init__
- self._execute_child(args, executable, preexec_fn, close_fds,
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:348: in get_name_owner
+ return self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self =
- args = ['mako', '--output=/tmp/mako-test.log'], executable = b'mako'
- preexec_fn = None, close_fds = True, pass_fds = (), cwd = None, env = None
- startupinfo = None, creationflags = 0, shell = False, p2cread = -1
- p2cwrite = -1, c2pread = 12, c2pwrite = 13, errread = 14, errwrite = 15
- restore_signals = True, start_new_session = False
+ self =
+ bus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'
+ dbus_interface = 'org.freedesktop.DBus', method = 'GetNameOwner'
+ signature = 's', args = ('org.freedesktop.Notifications',), timeout = -1.0
+ byte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}
+ message =
- def _execute_child(self, args, executable, preexec_fn, close_fds,
- pass_fds, cwd, env,
- startupinfo, creationflags, shell,
- p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite,
- restore_signals, start_new_session):
- """Execute program (POSIX version)"""
+ def call_blocking(self, bus_name, object_path, dbus_interface, method,
+ signature, args, timeout=-1.0,
+ byte_arrays=False, **kwargs):
+ """Call the given method, synchronously.
+ :Since: 0.81.0
+ """
+ if object_path == LOCAL_PATH:
+ raise DBusException('Methods may not be called on the reserved '
+ 'path %s' % LOCAL_PATH)
+ if dbus_interface == LOCAL_IFACE:
+ raise DBusException('Methods may not be called on the reserved '
+ 'interface %s' % LOCAL_IFACE)
+ # no need to validate other args - MethodCallMessage ctor will do
- if isinstance(args, (str, bytes)):
- args = [args]
- elif isinstance(args, os.PathLike):
- if shell:
- raise TypeError('path-like args is not allowed when '
- 'shell is true')
- args = [args]
- else:
- args = list(args)
+ get_args_opts = dict(byte_arrays=byte_arrays)
+ if 'utf8_strings' in kwargs:
+ raise TypeError("unexpected keyword argument 'utf8_strings'")
- if shell:
- # On Android the default shell is at '/system/bin/sh'.
- unix_shell = ('/system/bin/sh' if
- hasattr(sys, 'getandroidapilevel') else '/bin/sh')
- args = [unix_shell, "-c"] + args
- if executable:
- args[0] = executable
-
- if executable is None:
- executable = args[0]
-
- sys.audit("subprocess.Popen", executable, args, cwd, env)
-
- if (_USE_POSIX_SPAWN
- and os.path.dirname(executable)
- and preexec_fn is None
- and not close_fds
- and not pass_fds
- and cwd is None
- and (p2cread == -1 or p2cread > 2)
- and (c2pwrite == -1 or c2pwrite > 2)
- and (errwrite == -1 or errwrite > 2)
- and not start_new_session):
- self._posix_spawn(args, executable, env, restore_signals,
- p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite)
- return
-
- orig_executable = executable
-
- # For transferring possible exec failure from child to parent.
- # Data format: "exception name:hex errno:description"
- # Pickle is not used; it is complex and involves memory allocation.
- errpipe_read, errpipe_write = os.pipe()
- # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
- low_fds_to_close = []
- while errpipe_write < 3:
- low_fds_to_close.append(errpipe_write)
- errpipe_write = os.dup(errpipe_write)
- for low_fd in low_fds_to_close:
- os.close(low_fd)
+ message = MethodCallMessage(destination=bus_name,
+ path=object_path,
+ interface=dbus_interface,
+ method=method)
+ # Add the arguments to the function
try:
- try:
- # We must avoid complex work that could involve
- # malloc or free in the child process to avoid
- # potential deadlocks, thus we do all this here.
- # and pass it to fork_exec()
+ message.append(signature=signature, *args)
+ except Exception as e:
+ logging.basicConfig()
+ _logger.error('Unable to set arguments %r according to '
+ 'signature %r: %s: %s',
+ args, signature, e.__class__, e)
+ raise
- if env is not None:
- env_list = []
- for k, v in env.items():
- k = os.fsencode(k)
- if b'=' in k:
- raise ValueError("illegal environment variable name")
- env_list.append(k + b'=' + os.fsencode(v))
- else:
- env_list = None # Use execv instead of execve.
- executable = os.fsencode(executable)
- if os.path.dirname(executable):
- executable_list = (executable,)
- else:
- # This matches the behavior of os._execvpe().
- executable_list = tuple(
- os.path.join(os.fsencode(dir), executable)
- for dir in os.get_exec_path(env))
- fds_to_keep = set(pass_fds)
- fds_to_keep.add(errpipe_write)
- self.pid = _posixsubprocess.fork_exec(
- args, executable_list,
- close_fds, tuple(sorted(map(int, fds_to_keep))),
- cwd, env_list,
- p2cread, p2cwrite, c2pread, c2pwrite,
- errread, errwrite,
- errpipe_read, errpipe_write,
- restore_signals, start_new_session, preexec_fn)
- self._child_created = True
- finally:
- # be sure the FD is closed no matter what
- os.close(errpipe_write)
-
- self._close_pipe_fds(p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite)
-
- # Wait for exec to fail or succeed; possibly raising an
- # exception (limited in size)
- errpipe_data = bytearray()
- while True:
- part = os.read(errpipe_read, 50000)
- errpipe_data += part
- if not part or len(errpipe_data) > 50000:
- break
- finally:
- # be sure the FD is closed no matter what
- os.close(errpipe_read)
-
- if errpipe_data:
- try:
- pid, sts = os.waitpid(self.pid, 0)
- if pid == self.pid:
- self._handle_exitstatus(sts)
- else:
- self.returncode = sys.maxsize
- except ChildProcessError:
- pass
-
- try:
- exception_name, hex_errno, err_msg = (
- errpipe_data.split(b':', 2))
- # The encoding here should match the encoding
- # written in by the subprocess implementations
- # like _posixsubprocess
- err_msg = err_msg.decode()
- except ValueError:
- exception_name = b'SubprocessError'
- hex_errno = b'0'
- err_msg = 'Bad exception data from child: {!r}'.format(
- bytes(errpipe_data))
- child_exception_type = getattr(
- builtins, exception_name.decode('ascii'),
- SubprocessError)
- if issubclass(child_exception_type, OSError) and hex_errno:
- errno_num = int(hex_errno, 16)
- child_exec_never_called = (err_msg == "noexec")
- if child_exec_never_called:
- err_msg = ""
- # The error must be from chdir(cwd).
- err_filename = cwd
- else:
- err_filename = orig_executable
- if errno_num != 0:
- err_msg = os.strerror(errno_num)
- > raise child_exception_type(errno_num, err_msg, err_filename)
- E FileNotFoundError: [Errno 2] No such file or directory: 'mako'
+ # make a blocking call
+ > reply_message = self.send_message_with_reply_and_block(
+ message, timeout)
+ E dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NameHasNoOwner: Could not get owner of name 'org.freedesktop.Notifications': no such name
- .pixi/envs/default/lib/python3.8/subprocess.py:1720: FileNotFoundError
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException
+
+ During handling of the above exception, another exception occurred:
+
+ @pytest.fixture(scope="session")
+ def notifier():
+ """Importe DBusNotify avec un SessionBus actif (dunst -print)."""
+ import slic.utils.dbusnotify as dbn
+ > return dbn.DBusNotify()
+
+ tests/test_utils_dbusnotify.py:24:
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ slic/utils/dbusnotify.py:15: in __init__
+ obj = bus.get_object(BUS_NAME, OBJECT_PATH)
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:237: in get_object
+ return self.ProxyObjectClass(self, bus_name, object_path,
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py:250: in __init__
+ self._named_service = conn.activate_name_owner(bus_name)
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:178: in activate_name_owner
+ self.start_service_by_name(bus_name)
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:273: in start_service_by_name
+ return (True, self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+
+ self =
+ bus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'
+ dbus_interface = 'org.freedesktop.DBus', method = 'StartServiceByName'
+ signature = 'su', args = ('org.freedesktop.Notifications', 0), timeout = -1.0
+ byte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}
+ message =
+
+ def call_blocking(self, bus_name, object_path, dbus_interface, method,
+ signature, args, timeout=-1.0,
+ byte_arrays=False, **kwargs):
+ """Call the given method, synchronously.
+ :Since: 0.81.0
+ """
+ if object_path == LOCAL_PATH:
+ raise DBusException('Methods may not be called on the reserved '
+ 'path %s' % LOCAL_PATH)
+ if dbus_interface == LOCAL_IFACE:
+ raise DBusException('Methods may not be called on the reserved '
+ 'interface %s' % LOCAL_IFACE)
+ # no need to validate other args - MethodCallMessage ctor will do
+
+ get_args_opts = dict(byte_arrays=byte_arrays)
+ if 'utf8_strings' in kwargs:
+ raise TypeError("unexpected keyword argument 'utf8_strings'")
+
+ message = MethodCallMessage(destination=bus_name,
+ path=object_path,
+ interface=dbus_interface,
+ method=method)
+ # Add the arguments to the function
+ try:
+ message.append(signature=signature, *args)
+ except Exception as e:
+ logging.basicConfig()
+ _logger.error('Unable to set arguments %r according to '
+ 'signature %r: %s: %s',
+ args, signature, e.__class__, e)
+ raise
+
+ # make a blocking call
+ > reply_message = self.send_message_with_reply_and_block(
+ message, timeout)
+ E dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5
+
+ .pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException
```
**_*๐ Teardown phase*_**
@@ -1474,7 +1205,7 @@
**duration:**
```python
- 0.00021888269111514091
+ 0.00022597983479499817
```
**outcome:**
@@ -1483,234 +1214,46 @@
passed
```
+
+
+
+
+
+โ
Passed (1)
+
+ -
+ ๐ test_utils_dbusnotify.py
+
โณ Function: test_convert_dbus_strings
-
- โ Test 7
+ โ
Test 7
**_*๐ Setup phase*_**
**duration:**
```python
- 0.00018321815878152847
+ 0.00013469718396663666
```
**outcome:**
```python
- failed
+ passed
```
- **crash:**
+ **_*๐ Call phase*_**
+
+ **duration:**
```python
- path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 1720
- message: FileNotFoundError: [Errno 2] No such file or directory: 'mako'
+ 0.00020747492089867592
```
- **traceback:**
+ **outcome:**
```python
- - path: tests/test_utils_dbusnotify.py
- lineno: 29
- message: None
- - path: .pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 858
- message: in __init__
- - path: .pixi/envs/default/lib/python3.8/subprocess.py
- lineno: 1720
- message: FileNotFoundError
- ```
-
- **longrepr:**
-
- ```python
- @pytest.fixture(scope="session", autouse=True)
- def mako_daemon():
- """Start mako in headless logger mode and ensure cleanup."""
- global _MAKO_PROC
-
- # Ensure old log removed
- if os.path.exists(_MAKO_LOGFILE):
- os.remove(_MAKO_LOGFILE)
-
- # Launch mako with --output (no graphical deps, only logs)
- > _MAKO_PROC = subprocess.Popen(
- ["mako", f"--output={_MAKO_LOGFILE}"],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- )
-
- tests/test_utils_dbusnotify.py:29:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- .pixi/envs/default/lib/python3.8/subprocess.py:858: in __init__
- self._execute_child(args, executable, preexec_fn, close_fds,
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-
- self =
- args = ['mako', '--output=/tmp/mako-test.log'], executable = b'mako'
- preexec_fn = None, close_fds = True, pass_fds = (), cwd = None, env = None
- startupinfo = None, creationflags = 0, shell = False, p2cread = -1
- p2cwrite = -1, c2pread = 12, c2pwrite = 13, errread = 14, errwrite = 15
- restore_signals = True, start_new_session = False
-
- def _execute_child(self, args, executable, preexec_fn, close_fds,
- pass_fds, cwd, env,
- startupinfo, creationflags, shell,
- p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite,
- restore_signals, start_new_session):
- """Execute program (POSIX version)"""
-
- if isinstance(args, (str, bytes)):
- args = [args]
- elif isinstance(args, os.PathLike):
- if shell:
- raise TypeError('path-like args is not allowed when '
- 'shell is true')
- args = [args]
- else:
- args = list(args)
-
- if shell:
- # On Android the default shell is at '/system/bin/sh'.
- unix_shell = ('/system/bin/sh' if
- hasattr(sys, 'getandroidapilevel') else '/bin/sh')
- args = [unix_shell, "-c"] + args
- if executable:
- args[0] = executable
-
- if executable is None:
- executable = args[0]
-
- sys.audit("subprocess.Popen", executable, args, cwd, env)
-
- if (_USE_POSIX_SPAWN
- and os.path.dirname(executable)
- and preexec_fn is None
- and not close_fds
- and not pass_fds
- and cwd is None
- and (p2cread == -1 or p2cread > 2)
- and (c2pwrite == -1 or c2pwrite > 2)
- and (errwrite == -1 or errwrite > 2)
- and not start_new_session):
- self._posix_spawn(args, executable, env, restore_signals,
- p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite)
- return
-
- orig_executable = executable
-
- # For transferring possible exec failure from child to parent.
- # Data format: "exception name:hex errno:description"
- # Pickle is not used; it is complex and involves memory allocation.
- errpipe_read, errpipe_write = os.pipe()
- # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
- low_fds_to_close = []
- while errpipe_write < 3:
- low_fds_to_close.append(errpipe_write)
- errpipe_write = os.dup(errpipe_write)
- for low_fd in low_fds_to_close:
- os.close(low_fd)
- try:
- try:
- # We must avoid complex work that could involve
- # malloc or free in the child process to avoid
- # potential deadlocks, thus we do all this here.
- # and pass it to fork_exec()
-
- if env is not None:
- env_list = []
- for k, v in env.items():
- k = os.fsencode(k)
- if b'=' in k:
- raise ValueError("illegal environment variable name")
- env_list.append(k + b'=' + os.fsencode(v))
- else:
- env_list = None # Use execv instead of execve.
- executable = os.fsencode(executable)
- if os.path.dirname(executable):
- executable_list = (executable,)
- else:
- # This matches the behavior of os._execvpe().
- executable_list = tuple(
- os.path.join(os.fsencode(dir), executable)
- for dir in os.get_exec_path(env))
- fds_to_keep = set(pass_fds)
- fds_to_keep.add(errpipe_write)
- self.pid = _posixsubprocess.fork_exec(
- args, executable_list,
- close_fds, tuple(sorted(map(int, fds_to_keep))),
- cwd, env_list,
- p2cread, p2cwrite, c2pread, c2pwrite,
- errread, errwrite,
- errpipe_read, errpipe_write,
- restore_signals, start_new_session, preexec_fn)
- self._child_created = True
- finally:
- # be sure the FD is closed no matter what
- os.close(errpipe_write)
-
- self._close_pipe_fds(p2cread, p2cwrite,
- c2pread, c2pwrite,
- errread, errwrite)
-
- # Wait for exec to fail or succeed; possibly raising an
- # exception (limited in size)
- errpipe_data = bytearray()
- while True:
- part = os.read(errpipe_read, 50000)
- errpipe_data += part
- if not part or len(errpipe_data) > 50000:
- break
- finally:
- # be sure the FD is closed no matter what
- os.close(errpipe_read)
-
- if errpipe_data:
- try:
- pid, sts = os.waitpid(self.pid, 0)
- if pid == self.pid:
- self._handle_exitstatus(sts)
- else:
- self.returncode = sys.maxsize
- except ChildProcessError:
- pass
-
- try:
- exception_name, hex_errno, err_msg = (
- errpipe_data.split(b':', 2))
- # The encoding here should match the encoding
- # written in by the subprocess implementations
- # like _posixsubprocess
- err_msg = err_msg.decode()
- except ValueError:
- exception_name = b'SubprocessError'
- hex_errno = b'0'
- err_msg = 'Bad exception data from child: {!r}'.format(
- bytes(errpipe_data))
- child_exception_type = getattr(
- builtins, exception_name.decode('ascii'),
- SubprocessError)
- if issubclass(child_exception_type, OSError) and hex_errno:
- errno_num = int(hex_errno, 16)
- child_exec_never_called = (err_msg == "noexec")
- if child_exec_never_called:
- err_msg = ""
- # The error must be from chdir(cwd).
- err_filename = cwd
- else:
- err_filename = orig_executable
- if errno_num != 0:
- err_msg = os.strerror(errno_num)
- > raise child_exception_type(errno_num, err_msg, err_filename)
- E FileNotFoundError: [Errno 2] No such file or directory: 'mako'
-
- .pixi/envs/default/lib/python3.8/subprocess.py:1720: FileNotFoundError
+ passed
```
**_*๐ Teardown phase*_**
@@ -1718,7 +1261,7 @@
**duration:**
```python
- 0.00028424011543393135
+ 0.00016357796266674995
```
**outcome:**
@@ -1763,25 +1306,25 @@
type: UnitTestCase
- nodeid: tests/test_utils_dbusnotify.py::test_notify_create
type: Function
- lineno: 74
+ lineno: 26
- nodeid: tests/test_utils_dbusnotify.py::test_notify_update
type: Function
- lineno: 88
+ lineno: 36
- nodeid: tests/test_utils_dbusnotify.py::test_get_server_info
type: Function
- lineno: 101
+ lineno: 45
- nodeid: tests/test_utils_dbusnotify.py::test_get_capabilities
type: Function
- lineno: 112
+ lineno: 56
- nodeid: tests/test_utils_dbusnotify.py::test_notify_and_close
type: Function
- lineno: 127
+ lineno: 71
- nodeid: tests/test_utils_dbusnotify.py::test_notify_invalid_value
type: Function
- lineno: 138
+ lineno: 81
- nodeid: tests/test_utils_dbusnotify.py::test_convert_dbus_strings
type: Function
- lineno: 144
+ lineno: 87
```
@@ -1797,3 +1340,35 @@
+## โ ๏ธ Warnings
+
+
+
+Warnings nยบ1
+
+```python
+message: invalid escape sequence \-
+category: DeprecationWarning
+when: runtest
+filename: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/bsread/h5.py
+lineno: 207
+```
+
+
+
+
+
+
+Warnings nยบ2
+
+```python
+message: The module numpy.dual is deprecated. Instead of using dual, use the functions directly from numpy or scipy.
+category: DeprecationWarning
+when: runtest
+filename: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/scipy/fft/__init__.py
+lineno: 97
+```
+
+
+
+
diff --git a/markdown/coverage-summary.md b/markdown/coverage-summary.md
index 91083c6b4..dd68fe83a 100644
--- a/markdown/coverage-summary.md
+++ b/markdown/coverage-summary.md
@@ -52263,3 +52263,230 @@
| slic/utils/utils.py | 17 | 17 | 0% |
| slic/utils/xrange.py | 33 | 33 | 0% |
| **TOTAL** | **9984** | **9984** | **0%** |
+| Name | Stmts | Miss | Cover |
+|----------------------------------------------- | -------: | -------: | ------: |
+| slic/\_\_init\_\_.py | 20 | 2 | 90% |
+| slic/core/\_\_init\_\_.py | 5 | 0 | 100% |
+| slic/core/acquisition/\_\_init\_\_.py | 7 | 0 | 100% |
+| slic/core/acquisition/acquisition.py | 56 | 42 | 25% |
+| slic/core/acquisition/baseacquisition.py | 5 | 1 | 80% |
+| slic/core/acquisition/broker/\_\_init\_\_.py | 2 | 0 | 100% |
+| slic/core/acquisition/broker/brokerclient.py | 104 | 80 | 23% |
+| slic/core/acquisition/broker/brokerconfig.py | 102 | 87 | 15% |
+| slic/core/acquisition/broker/pedestal.py | 66 | 57 | 14% |
+| slic/core/acquisition/broker/pids.py | 17 | 12 | 29% |
+| slic/core/acquisition/broker/post\_retrieve.py | 120 | 120 | 0% |
+| slic/core/acquisition/broker/requeststatus.py | 77 | 73 | 5% |
+| slic/core/acquisition/broker/restapi.py | 147 | 107 | 27% |
+| slic/core/acquisition/broker/tools.py | 52 | 18 | 65% |
+| slic/core/acquisition/bsacquisition.py | 10 | 3 | 70% |
+| slic/core/acquisition/bschannels.py | 30 | 19 | 37% |
+| slic/core/acquisition/channels.py | 51 | 30 | 41% |
+| slic/core/acquisition/dbacquisition.py | 19 | 12 | 37% |
+| slic/core/acquisition/detcfg.py | 82 | 35 | 57% |
+| slic/core/acquisition/diaacquisition.py | 111 | 111 | 0% |
+| slic/core/acquisition/diaconfig.py | 36 | 36 | 0% |
+| slic/core/acquisition/dummyacquisition.py | 12 | 12 | 0% |
+| slic/core/acquisition/fakeacquisition.py | 76 | 53 | 30% |
+| slic/core/acquisition/pedestals.py | 69 | 69 | 0% |
+| slic/core/acquisition/pvacquisition.py | 60 | 47 | 22% |
+| slic/core/acquisition/pvchannels.py | 13 | 7 | 46% |
+| slic/core/acquisition/sfacquisition.py | 159 | 129 | 19% |
+| slic/core/acquisition/sfpaths.py | 23 | 19 | 17% |
+| slic/core/acquisition/spreadsheet.py | 45 | 45 | 0% |
+| slic/core/adjustable/\_\_init\_\_.py | 11 | 0 | 100% |
+| slic/core/adjustable/adjustable.py | 50 | 30 | 40% |
+| slic/core/adjustable/baseadjustable.py | 28 | 18 | 36% |
+| slic/core/adjustable/collection.py | 22 | 14 | 36% |
+| slic/core/adjustable/combined.py | 15 | 8 | 47% |
+| slic/core/adjustable/convenience.py | 35 | 20 | 43% |
+| slic/core/adjustable/converted.py | 16 | 10 | 38% |
+| slic/core/adjustable/dummyadjustable.py | 41 | 30 | 27% |
+| slic/core/adjustable/error.py | 2 | 0 | 100% |
+| slic/core/adjustable/genericadjustable.py | 32 | 24 | 25% |
+| slic/core/adjustable/limited.py | 29 | 18 | 38% |
+| slic/core/adjustable/linked.py | 22 | 15 | 32% |
+| slic/core/adjustable/pvadjustable.py | 119 | 91 | 24% |
+| slic/core/adjustable/pvchangemon.py | 77 | 56 | 27% |
+| slic/core/adjustable/pvenumadjustable.py | 38 | 22 | 42% |
+| slic/core/adjustable/scaler.py | 22 | 16 | 27% |
+| slic/core/condition/\_\_init\_\_.py | 2 | 0 | 100% |
+| slic/core/condition/basecondition.py | 8 | 2 | 75% |
+| slic/core/condition/condition.py | 107 | 79 | 26% |
+| slic/core/condition/pvcondition.py | 21 | 12 | 43% |
+| slic/core/condition/valuecondition.py | 22 | 15 | 32% |
+| slic/core/device/\_\_init\_\_.py | 2 | 0 | 100% |
+| slic/core/device/auto.py | 12 | 12 | 0% |
+| slic/core/device/basedevice.py | 2 | 0 | 100% |
+| slic/core/device/device.py | 46 | 35 | 24% |
+| slic/core/device/filtered.py | 23 | 23 | 0% |
+| slic/core/device/simpledevice.py | 6 | 2 | 67% |
+| slic/core/scanner/\_\_init\_\_.py | 1 | 0 | 100% |
+| slic/core/scanner/runname.py | 36 | 23 | 36% |
+| slic/core/scanner/scanbackend.py | 232 | 197 | 15% |
+| slic/core/scanner/scaninfo.py | 45 | 35 | 22% |
+| slic/core/scanner/scanner.py | 136 | 89 | 35% |
+| slic/core/sensor/\_\_init\_\_.py | 8 | 0 | 100% |
+| slic/core/sensor/basesensor.py | 12 | 3 | 75% |
+| slic/core/sensor/bscombined.py | 9 | 5 | 44% |
+| slic/core/sensor/bsmonitor.py | 102 | 73 | 28% |
+| slic/core/sensor/bsnorm.py | 12 | 7 | 42% |
+| slic/core/sensor/bssensor.py | 6 | 2 | 67% |
+| slic/core/sensor/combined.py | 31 | 20 | 35% |
+| slic/core/sensor/monitor.py | 62 | 51 | 18% |
+| slic/core/sensor/norm.py | 9 | 5 | 44% |
+| slic/core/sensor/pvsensor.py | 32 | 20 | 38% |
+| slic/core/sensor/remoteplot.py | 15 | 10 | 33% |
+| slic/core/sensor/sensor.py | 60 | 42 | 30% |
+| slic/core/task/\_\_init\_\_.py | 4 | 0 | 100% |
+| slic/core/task/basetask.py | 11 | 3 | 73% |
+| slic/core/task/daqtask.py | 23 | 16 | 30% |
+| slic/core/task/loop.py | 57 | 40 | 30% |
+| slic/core/task/producer.py | 25 | 18 | 28% |
+| slic/core/task/task.py | 62 | 46 | 26% |
+| slic/devices/\_\_init\_\_.py | 7 | 0 | 100% |
+| slic/devices/cameras/\_\_init\_\_.py | 4 | 0 | 100% |
+| slic/devices/cameras/basler.py | 8 | 4 | 50% |
+| slic/devices/cameras/camera\_bs.py | 13 | 8 | 38% |
+| slic/devices/cameras/camera\_ca.py | 34 | 19 | 44% |
+| slic/devices/cameras/camerabase.py | 17 | 12 | 29% |
+| slic/devices/cameras/screenpanel.py | 31 | 21 | 32% |
+| slic/devices/endstations/\_\_init\_\_.py | 3 | 0 | 100% |
+| slic/devices/endstations/alvra\_flex.py | 10 | 5 | 50% |
+| slic/devices/endstations/alvra\_huber.py | 8 | 4 | 50% |
+| slic/devices/endstations/alvra\_prime.py | 48 | 34 | 29% |
+| slic/devices/endstations/alvra\_xtg.py | 8 | 8 | 0% |
+| slic/devices/endstations/bernina\_cameras.py | 33 | 33 | 0% |
+| slic/devices/endstations/bernina\_platform.py | 46 | 46 | 0% |
+| slic/devices/general/\_\_init\_\_.py | 4 | 0 | 100% |
+| slic/devices/general/delay\_compensation.py | 13 | 13 | 0% |
+| slic/devices/general/delay\_stage.py | 57 | 30 | 47% |
+| slic/devices/general/detectors/\_\_init\_\_.py | 2 | 0 | 100% |
+| slic/devices/general/detectors/buffer.py | 66 | 35 | 47% |
+| slic/devices/general/detectors/digitizer.py | 13 | 7 | 46% |
+| slic/devices/general/detectors/pvdatastream.py | 33 | 24 | 27% |
+| slic/devices/general/detectors/timer.py | 15 | 9 | 40% |
+| slic/devices/general/micosstage.py | 7 | 7 | 0% |
+| slic/devices/general/motor.py | 128 | 88 | 31% |
+| slic/devices/general/shutter.py | 22 | 12 | 45% |
+| slic/devices/general/shutterctx.py | 18 | 7 | 61% |
+| slic/devices/general/smaract.py | 169 | 125 | 26% |
+| slic/devices/loptics/\_\_init\_\_.py | 2 | 0 | 100% |
+| slic/devices/loptics/alvra\_explaser.py | 29 | 21 | 28% |
+| slic/devices/loptics/bernina\_explaser.py | 28 | 28 | 0% |
+| slic/devices/loptics/lasershutter.py | 22 | 14 | 36% |
+| slic/devices/timing/\_\_init\_\_.py | 0 | 0 | 100% |
+| slic/devices/timing/events/\_\_init\_\_.py | 3 | 3 | 0% |
+| slic/devices/timing/events/codes.py | 5 | 5 | 0% |
+| slic/devices/timing/events/ctaseq.py | 190 | 190 | 0% |
+| slic/devices/timing/events/evr.py | 37 | 37 | 0% |
+| slic/devices/timing/events/tma.py | 40 | 40 | 0% |
+| slic/devices/timing/lasertiming.py | 253 | 184 | 27% |
+| slic/devices/xdiagnostics/\_\_init\_\_.py | 2 | 0 | 100% |
+| slic/devices/xdiagnostics/intensitymonitor.py | 124 | 92 | 26% |
+| slic/devices/xdiagnostics/profilemonitor.py | 19 | 9 | 53% |
+| slic/devices/xdiagnostics/timetools.py | 48 | 48 | 0% |
+| slic/devices/xoptics/\_\_init\_\_.py | 7 | 0 | 100% |
+| slic/devices/xoptics/aramis\_attenuator.py | 96 | 66 | 31% |
+| slic/devices/xoptics/aramis\_reflaser.py | 23 | 15 | 35% |
+| slic/devices/xoptics/dcm.py | 211 | 162 | 23% |
+| slic/devices/xoptics/kb.py | 30 | 18 | 40% |
+| slic/devices/xoptics/offsetmirrors.py | 9 | 5 | 44% |
+| slic/devices/xoptics/pulsepicker.py | 56 | 34 | 39% |
+| slic/devices/xoptics/slits/\_\_init\_\_.py | 5 | 0 | 100% |
+| slic/devices/xoptics/slits/slitblades.py | 66 | 48 | 27% |
+| slic/devices/xoptics/slits/slittwinunit.py | 12 | 6 | 50% |
+| slic/devices/xoptics/slits/slitunit.py | 14 | 8 | 43% |
+| slic/devices/xoptics/slits/slitunitcw.py | 7 | 3 | 57% |
+| slic/devices/xoptics/slits/slitunitjj.py | 8 | 5 | 38% |
+| slic/gui/\_\_init\_\_.py | 1 | 0 | 100% |
+| slic/gui/daqframe.py | 75 | 54 | 28% |
+| slic/gui/daqpanels/\_\_init\_\_.py | 6 | 0 | 100% |
+| slic/gui/daqpanels/config.py | 98 | 80 | 18% |
+| slic/gui/daqpanels/goto.py | 92 | 76 | 17% |
+| slic/gui/daqpanels/run.py | 56 | 46 | 18% |
+| slic/gui/daqpanels/scan2d.py | 77 | 66 | 14% |
+| slic/gui/daqpanels/scan.py | 63 | 54 | 14% |
+| slic/gui/daqpanels/sfx.py | 77 | 60 | 22% |
+| slic/gui/daqpanels/special.py | 63 | 54 | 14% |
+| slic/gui/daqpanels/static.py | 46 | 37 | 20% |
+| slic/gui/daqpanels/tools.py | 140 | 114 | 19% |
+| slic/gui/daqpanels/tweak.py | 149 | 127 | 15% |
+| slic/gui/gui.py | 16 | 10 | 38% |
+| slic/gui/icon.py | 8 | 4 | 50% |
+| slic/gui/persist.py | 68 | 48 | 29% |
+| slic/gui/widgets/\_\_init\_\_.py | 11 | 0 | 100% |
+| slic/gui/widgets/alarm.py | 21 | 9 | 57% |
+| slic/gui/widgets/alternative.py | 51 | 40 | 22% |
+| slic/gui/widgets/boxes.py | 33 | 26 | 21% |
+| slic/gui/widgets/checkbox.py | 8 | 4 | 50% |
+| slic/gui/widgets/completers.py | 27 | 19 | 30% |
+| slic/gui/widgets/dyncombo.py | 49 | 49 | 0% |
+| slic/gui/widgets/entries.py | 253 | 195 | 23% |
+| slic/gui/widgets/exc2warn.py | 15 | 13 | 13% |
+| slic/gui/widgets/fname.py | 60 | 47 | 22% |
+| slic/gui/widgets/jfcfg.py | 290 | 230 | 21% |
+| slic/gui/widgets/jfmodcoords.py | 88 | 70 | 20% |
+| slic/gui/widgets/labeled.py | 19 | 7 | 63% |
+| slic/gui/widgets/lists.py | 96 | 73 | 24% |
+| slic/gui/widgets/mods.py | 25 | 17 | 32% |
+| slic/gui/widgets/nope.py | 26 | 19 | 27% |
+| slic/gui/widgets/plotting.py | 68 | 47 | 31% |
+| slic/gui/widgets/tools.py | 11 | 7 | 36% |
+| slic/gui/widgets/twobuttons.py | 43 | 30 | 30% |
+| slic/gui/wxdebug.py | 15 | 7 | 53% |
+| slic/utils/\_\_init\_\_.py | 24 | 0 | 100% |
+| slic/utils/argfwd.py | 53 | 14 | 74% |
+| slic/utils/ask\_yes\_no.py | 27 | 20 | 26% |
+| slic/utils/channels.py | 17 | 12 | 29% |
+| slic/utils/config.py | 5 | 2 | 60% |
+| slic/utils/cprint.py | 41 | 16 | 61% |
+| slic/utils/dbusnotify.py | 40 | 23 | 42% |
+| slic/utils/debug.py | 16 | 12 | 25% |
+| slic/utils/dictext.py | 30 | 19 | 37% |
+| slic/utils/dotdir.py | 10 | 1 | 90% |
+| slic/utils/duo.py | 77 | 45 | 42% |
+| slic/utils/elog.py | 31 | 21 | 32% |
+| slic/utils/eval.py | 49 | 37 | 24% |
+| slic/utils/exceptions.py | 22 | 14 | 36% |
+| slic/utils/get\_adj.py | 17 | 11 | 35% |
+| slic/utils/hastyepics.py | 37 | 25 | 32% |
+| slic/utils/ioc/\_\_init\_\_.py | 1 | 1 | 0% |
+| slic/utils/ioc/adjdrv.py | 31 | 31 | 0% |
+| slic/utils/ioc/ioc.py | 63 | 63 | 0% |
+| slic/utils/ipy.py | 22 | 15 | 32% |
+| slic/utils/jsonext.py | 24 | 16 | 33% |
+| slic/utils/lazypv.py | 12 | 12 | 0% |
+| slic/utils/logbook.py | 442 | 442 | 0% |
+| slic/utils/logbook\_exceptions.py | 13 | 13 | 0% |
+| slic/utils/logcfg.py | 52 | 2 | 96% |
+| slic/utils/logign.py | 22 | 14 | 36% |
+| slic/utils/marker.py | 48 | 31 | 35% |
+| slic/utils/metaclasses.py | 8 | 0 | 100% |
+| slic/utils/namespace.py | 5 | 1 | 80% |
+| slic/utils/npy.py | 71 | 56 | 21% |
+| slic/utils/opmsg.py | 122 | 122 | 0% |
+| slic/utils/path.py | 32 | 24 | 25% |
+| slic/utils/picklio.py | 7 | 3 | 57% |
+| slic/utils/printing.py | 77 | 61 | 21% |
+| slic/utils/pv.py | 30 | 20 | 33% |
+| slic/utils/pvpreload.py | 50 | 19 | 62% |
+| slic/utils/pyepics.py | 64 | 39 | 39% |
+| slic/utils/rangebar.py | 92 | 61 | 34% |
+| slic/utils/readable.py | 12 | 9 | 25% |
+| slic/utils/registry.py | 33 | 19 | 42% |
+| slic/utils/reprate.py | 55 | 42 | 24% |
+| slic/utils/richcfg.py | 21 | 11 | 48% |
+| slic/utils/run\_later.py | 64 | 64 | 0% |
+| slic/utils/screenshot.py | 30 | 21 | 30% |
+| slic/utils/sendmail.py | 49 | 49 | 0% |
+| slic/utils/sendsms.py | 5 | 5 | 0% |
+| slic/utils/shortcut.py | 38 | 20 | 47% |
+| slic/utils/snapshot.py | 6 | 3 | 50% |
+| slic/utils/termtitle.py | 3 | 0 | 100% |
+| slic/utils/tqdm\_mod.py | 28 | 18 | 36% |
+| slic/utils/trinary.py | 4 | 2 | 50% |
+| slic/utils/typecast.py | 19 | 19 | 0% |
+| slic/utils/utils.py | 17 | 8 | 53% |
+| slic/utils/xrange.py | 33 | 30 | 9% |
+| **TOTAL** | **9984** | **7452** | **25%** |
diff --git a/markdown/pytest-report.json b/markdown/pytest-report.json
index fc77d6211..bcdd8fd93 100644
--- a/markdown/pytest-report.json
+++ b/markdown/pytest-report.json
@@ -1 +1 @@
-{"created": 1755525234.2244782, "duration": 1.397437334060669, "exitcode": 1, "root": "/workspace/tligui_y/slic", "environment": {}, "summary": {"error": 7, "total": 7, "collected": 7}, "collectors": [{"nodeid": "", "outcome": "passed", "result": [{"nodeid": "tests/test_utils_dbusnotify.py", "type": "Module"}]}, {"nodeid": "tests/test_utils_dbusnotify.py::DBusTestCase", "outcome": "passed", "result": []}, {"nodeid": "tests/test_utils_dbusnotify.py", "outcome": "passed", "result": [{"nodeid": "tests/test_utils_dbusnotify.py::DBusTestCase", "type": "UnitTestCase"}, {"nodeid": "tests/test_utils_dbusnotify.py::test_notify_create", "type": "Function", "lineno": 74}, {"nodeid": "tests/test_utils_dbusnotify.py::test_notify_update", "type": "Function", "lineno": 88}, {"nodeid": "tests/test_utils_dbusnotify.py::test_get_server_info", "type": "Function", "lineno": 101}, {"nodeid": "tests/test_utils_dbusnotify.py::test_get_capabilities", "type": "Function", "lineno": 112}, {"nodeid": "tests/test_utils_dbusnotify.py::test_notify_and_close", "type": "Function", "lineno": 127}, {"nodeid": "tests/test_utils_dbusnotify.py::test_notify_invalid_value", "type": "Function", "lineno": 138}, {"nodeid": "tests/test_utils_dbusnotify.py::test_convert_dbus_strings", "type": "Function", "lineno": 144}]}], "tests": [{"nodeid": "tests/test_utils_dbusnotify.py::test_notify_create", "lineno": 74, "outcome": "error", "keywords": ["test_notify_create", "test_utils_dbusnotify.py", "tests", "slic", ""], "setup": {"duration": 0.004251067992299795, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 1720, "message": "FileNotFoundError: [Errno 2] No such file or directory: 'mako'"}, "traceback": [{"path": "tests/test_utils_dbusnotify.py", "lineno": 29, "message": ""}, {"path": ".pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 858, "message": "in __init__"}, {"path": ".pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 1720, "message": "FileNotFoundError"}], "longrepr": "@pytest.fixture(scope=\"session\", autouse=True)\n def mako_daemon():\n \"\"\"Start mako in headless logger mode and ensure cleanup.\"\"\"\n global _MAKO_PROC\n \n # Ensure old log removed\n if os.path.exists(_MAKO_LOGFILE):\n os.remove(_MAKO_LOGFILE)\n \n # Launch mako with --output (no graphical deps, only logs)\n> _MAKO_PROC = subprocess.Popen(\n [\"mako\", f\"--output={_MAKO_LOGFILE}\"],\n stdout=subprocess.PIPE,\n stderr=subprocess.PIPE,\n )\n\ntests/test_utils_dbusnotify.py:29: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.pixi/envs/default/lib/python3.8/subprocess.py:858: in __init__\n self._execute_child(args, executable, preexec_fn, close_fds,\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ['mako', '--output=/tmp/mako-test.log'], executable = b'mako'\npreexec_fn = None, close_fds = True, pass_fds = (), cwd = None, env = None\nstartupinfo = None, creationflags = 0, shell = False, p2cread = -1\np2cwrite = -1, c2pread = 12, c2pwrite = 13, errread = 14, errwrite = 15\nrestore_signals = True, start_new_session = False\n\n def _execute_child(self, args, executable, preexec_fn, close_fds,\n pass_fds, cwd, env,\n startupinfo, creationflags, shell,\n p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite,\n restore_signals, start_new_session):\n \"\"\"Execute program (POSIX version)\"\"\"\n \n if isinstance(args, (str, bytes)):\n args = [args]\n elif isinstance(args, os.PathLike):\n if shell:\n raise TypeError('path-like args is not allowed when '\n 'shell is true')\n args = [args]\n else:\n args = list(args)\n \n if shell:\n # On Android the default shell is at '/system/bin/sh'.\n unix_shell = ('/system/bin/sh' if\n hasattr(sys, 'getandroidapilevel') else '/bin/sh')\n args = [unix_shell, \"-c\"] + args\n if executable:\n args[0] = executable\n \n if executable is None:\n executable = args[0]\n \n sys.audit(\"subprocess.Popen\", executable, args, cwd, env)\n \n if (_USE_POSIX_SPAWN\n and os.path.dirname(executable)\n and preexec_fn is None\n and not close_fds\n and not pass_fds\n and cwd is None\n and (p2cread == -1 or p2cread > 2)\n and (c2pwrite == -1 or c2pwrite > 2)\n and (errwrite == -1 or errwrite > 2)\n and not start_new_session):\n self._posix_spawn(args, executable, env, restore_signals,\n p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite)\n return\n \n orig_executable = executable\n \n # For transferring possible exec failure from child to parent.\n # Data format: \"exception name:hex errno:description\"\n # Pickle is not used; it is complex and involves memory allocation.\n errpipe_read, errpipe_write = os.pipe()\n # errpipe_write must not be in the standard io 0, 1, or 2 fd range.\n low_fds_to_close = []\n while errpipe_write < 3:\n low_fds_to_close.append(errpipe_write)\n errpipe_write = os.dup(errpipe_write)\n for low_fd in low_fds_to_close:\n os.close(low_fd)\n try:\n try:\n # We must avoid complex work that could involve\n # malloc or free in the child process to avoid\n # potential deadlocks, thus we do all this here.\n # and pass it to fork_exec()\n \n if env is not None:\n env_list = []\n for k, v in env.items():\n k = os.fsencode(k)\n if b'=' in k:\n raise ValueError(\"illegal environment variable name\")\n env_list.append(k + b'=' + os.fsencode(v))\n else:\n env_list = None # Use execv instead of execve.\n executable = os.fsencode(executable)\n if os.path.dirname(executable):\n executable_list = (executable,)\n else:\n # This matches the behavior of os._execvpe().\n executable_list = tuple(\n os.path.join(os.fsencode(dir), executable)\n for dir in os.get_exec_path(env))\n fds_to_keep = set(pass_fds)\n fds_to_keep.add(errpipe_write)\n self.pid = _posixsubprocess.fork_exec(\n args, executable_list,\n close_fds, tuple(sorted(map(int, fds_to_keep))),\n cwd, env_list,\n p2cread, p2cwrite, c2pread, c2pwrite,\n errread, errwrite,\n errpipe_read, errpipe_write,\n restore_signals, start_new_session, preexec_fn)\n self._child_created = True\n finally:\n # be sure the FD is closed no matter what\n os.close(errpipe_write)\n \n self._close_pipe_fds(p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite)\n \n # Wait for exec to fail or succeed; possibly raising an\n # exception (limited in size)\n errpipe_data = bytearray()\n while True:\n part = os.read(errpipe_read, 50000)\n errpipe_data += part\n if not part or len(errpipe_data) > 50000:\n break\n finally:\n # be sure the FD is closed no matter what\n os.close(errpipe_read)\n \n if errpipe_data:\n try:\n pid, sts = os.waitpid(self.pid, 0)\n if pid == self.pid:\n self._handle_exitstatus(sts)\n else:\n self.returncode = sys.maxsize\n except ChildProcessError:\n pass\n \n try:\n exception_name, hex_errno, err_msg = (\n errpipe_data.split(b':', 2))\n # The encoding here should match the encoding\n # written in by the subprocess implementations\n # like _posixsubprocess\n err_msg = err_msg.decode()\n except ValueError:\n exception_name = b'SubprocessError'\n hex_errno = b'0'\n err_msg = 'Bad exception data from child: {!r}'.format(\n bytes(errpipe_data))\n child_exception_type = getattr(\n builtins, exception_name.decode('ascii'),\n SubprocessError)\n if issubclass(child_exception_type, OSError) and hex_errno:\n errno_num = int(hex_errno, 16)\n child_exec_never_called = (err_msg == \"noexec\")\n if child_exec_never_called:\n err_msg = \"\"\n # The error must be from chdir(cwd).\n err_filename = cwd\n else:\n err_filename = orig_executable\n if errno_num != 0:\n err_msg = os.strerror(errno_num)\n> raise child_exception_type(errno_num, err_msg, err_filename)\nE FileNotFoundError: [Errno 2] No such file or directory: 'mako'\n\n.pixi/envs/default/lib/python3.8/subprocess.py:1720: FileNotFoundError"}, "teardown": {"duration": 0.0003444352187216282, "outcome": "passed"}}, {"nodeid": "tests/test_utils_dbusnotify.py::test_notify_update", "lineno": 88, "outcome": "error", "keywords": ["test_notify_update", "test_utils_dbusnotify.py", "tests", "slic", ""], "setup": {"duration": 0.0002047787420451641, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 1720, "message": "FileNotFoundError: [Errno 2] No such file or directory: 'mako'"}, "traceback": [{"path": "tests/test_utils_dbusnotify.py", "lineno": 29, "message": ""}, {"path": ".pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 858, "message": "in __init__"}, {"path": ".pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 1720, "message": "FileNotFoundError"}], "longrepr": "@pytest.fixture(scope=\"session\", autouse=True)\n def mako_daemon():\n \"\"\"Start mako in headless logger mode and ensure cleanup.\"\"\"\n global _MAKO_PROC\n \n # Ensure old log removed\n if os.path.exists(_MAKO_LOGFILE):\n os.remove(_MAKO_LOGFILE)\n \n # Launch mako with --output (no graphical deps, only logs)\n> _MAKO_PROC = subprocess.Popen(\n [\"mako\", f\"--output={_MAKO_LOGFILE}\"],\n stdout=subprocess.PIPE,\n stderr=subprocess.PIPE,\n )\n\ntests/test_utils_dbusnotify.py:29: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.pixi/envs/default/lib/python3.8/subprocess.py:858: in __init__\n self._execute_child(args, executable, preexec_fn, close_fds,\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ['mako', '--output=/tmp/mako-test.log'], executable = b'mako'\npreexec_fn = None, close_fds = True, pass_fds = (), cwd = None, env = None\nstartupinfo = None, creationflags = 0, shell = False, p2cread = -1\np2cwrite = -1, c2pread = 12, c2pwrite = 13, errread = 14, errwrite = 15\nrestore_signals = True, start_new_session = False\n\n def _execute_child(self, args, executable, preexec_fn, close_fds,\n pass_fds, cwd, env,\n startupinfo, creationflags, shell,\n p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite,\n restore_signals, start_new_session):\n \"\"\"Execute program (POSIX version)\"\"\"\n \n if isinstance(args, (str, bytes)):\n args = [args]\n elif isinstance(args, os.PathLike):\n if shell:\n raise TypeError('path-like args is not allowed when '\n 'shell is true')\n args = [args]\n else:\n args = list(args)\n \n if shell:\n # On Android the default shell is at '/system/bin/sh'.\n unix_shell = ('/system/bin/sh' if\n hasattr(sys, 'getandroidapilevel') else '/bin/sh')\n args = [unix_shell, \"-c\"] + args\n if executable:\n args[0] = executable\n \n if executable is None:\n executable = args[0]\n \n sys.audit(\"subprocess.Popen\", executable, args, cwd, env)\n \n if (_USE_POSIX_SPAWN\n and os.path.dirname(executable)\n and preexec_fn is None\n and not close_fds\n and not pass_fds\n and cwd is None\n and (p2cread == -1 or p2cread > 2)\n and (c2pwrite == -1 or c2pwrite > 2)\n and (errwrite == -1 or errwrite > 2)\n and not start_new_session):\n self._posix_spawn(args, executable, env, restore_signals,\n p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite)\n return\n \n orig_executable = executable\n \n # For transferring possible exec failure from child to parent.\n # Data format: \"exception name:hex errno:description\"\n # Pickle is not used; it is complex and involves memory allocation.\n errpipe_read, errpipe_write = os.pipe()\n # errpipe_write must not be in the standard io 0, 1, or 2 fd range.\n low_fds_to_close = []\n while errpipe_write < 3:\n low_fds_to_close.append(errpipe_write)\n errpipe_write = os.dup(errpipe_write)\n for low_fd in low_fds_to_close:\n os.close(low_fd)\n try:\n try:\n # We must avoid complex work that could involve\n # malloc or free in the child process to avoid\n # potential deadlocks, thus we do all this here.\n # and pass it to fork_exec()\n \n if env is not None:\n env_list = []\n for k, v in env.items():\n k = os.fsencode(k)\n if b'=' in k:\n raise ValueError(\"illegal environment variable name\")\n env_list.append(k + b'=' + os.fsencode(v))\n else:\n env_list = None # Use execv instead of execve.\n executable = os.fsencode(executable)\n if os.path.dirname(executable):\n executable_list = (executable,)\n else:\n # This matches the behavior of os._execvpe().\n executable_list = tuple(\n os.path.join(os.fsencode(dir), executable)\n for dir in os.get_exec_path(env))\n fds_to_keep = set(pass_fds)\n fds_to_keep.add(errpipe_write)\n self.pid = _posixsubprocess.fork_exec(\n args, executable_list,\n close_fds, tuple(sorted(map(int, fds_to_keep))),\n cwd, env_list,\n p2cread, p2cwrite, c2pread, c2pwrite,\n errread, errwrite,\n errpipe_read, errpipe_write,\n restore_signals, start_new_session, preexec_fn)\n self._child_created = True\n finally:\n # be sure the FD is closed no matter what\n os.close(errpipe_write)\n \n self._close_pipe_fds(p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite)\n \n # Wait for exec to fail or succeed; possibly raising an\n # exception (limited in size)\n errpipe_data = bytearray()\n while True:\n part = os.read(errpipe_read, 50000)\n errpipe_data += part\n if not part or len(errpipe_data) > 50000:\n break\n finally:\n # be sure the FD is closed no matter what\n os.close(errpipe_read)\n \n if errpipe_data:\n try:\n pid, sts = os.waitpid(self.pid, 0)\n if pid == self.pid:\n self._handle_exitstatus(sts)\n else:\n self.returncode = sys.maxsize\n except ChildProcessError:\n pass\n \n try:\n exception_name, hex_errno, err_msg = (\n errpipe_data.split(b':', 2))\n # The encoding here should match the encoding\n # written in by the subprocess implementations\n # like _posixsubprocess\n err_msg = err_msg.decode()\n except ValueError:\n exception_name = b'SubprocessError'\n hex_errno = b'0'\n err_msg = 'Bad exception data from child: {!r}'.format(\n bytes(errpipe_data))\n child_exception_type = getattr(\n builtins, exception_name.decode('ascii'),\n SubprocessError)\n if issubclass(child_exception_type, OSError) and hex_errno:\n errno_num = int(hex_errno, 16)\n child_exec_never_called = (err_msg == \"noexec\")\n if child_exec_never_called:\n err_msg = \"\"\n # The error must be from chdir(cwd).\n err_filename = cwd\n else:\n err_filename = orig_executable\n if errno_num != 0:\n err_msg = os.strerror(errno_num)\n> raise child_exception_type(errno_num, err_msg, err_filename)\nE FileNotFoundError: [Errno 2] No such file or directory: 'mako'\n\n.pixi/envs/default/lib/python3.8/subprocess.py:1720: FileNotFoundError"}, "teardown": {"duration": 0.00022171391174197197, "outcome": "passed"}}, {"nodeid": "tests/test_utils_dbusnotify.py::test_get_server_info", "lineno": 101, "outcome": "error", "keywords": ["test_get_server_info", "test_utils_dbusnotify.py", "tests", "slic", ""], "setup": {"duration": 0.00018394412472844124, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 1720, "message": "FileNotFoundError: [Errno 2] No such file or directory: 'mako'"}, "traceback": [{"path": "tests/test_utils_dbusnotify.py", "lineno": 29, "message": ""}, {"path": ".pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 858, "message": "in __init__"}, {"path": ".pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 1720, "message": "FileNotFoundError"}], "longrepr": "@pytest.fixture(scope=\"session\", autouse=True)\n def mako_daemon():\n \"\"\"Start mako in headless logger mode and ensure cleanup.\"\"\"\n global _MAKO_PROC\n \n # Ensure old log removed\n if os.path.exists(_MAKO_LOGFILE):\n os.remove(_MAKO_LOGFILE)\n \n # Launch mako with --output (no graphical deps, only logs)\n> _MAKO_PROC = subprocess.Popen(\n [\"mako\", f\"--output={_MAKO_LOGFILE}\"],\n stdout=subprocess.PIPE,\n stderr=subprocess.PIPE,\n )\n\ntests/test_utils_dbusnotify.py:29: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.pixi/envs/default/lib/python3.8/subprocess.py:858: in __init__\n self._execute_child(args, executable, preexec_fn, close_fds,\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ['mako', '--output=/tmp/mako-test.log'], executable = b'mako'\npreexec_fn = None, close_fds = True, pass_fds = (), cwd = None, env = None\nstartupinfo = None, creationflags = 0, shell = False, p2cread = -1\np2cwrite = -1, c2pread = 12, c2pwrite = 13, errread = 14, errwrite = 15\nrestore_signals = True, start_new_session = False\n\n def _execute_child(self, args, executable, preexec_fn, close_fds,\n pass_fds, cwd, env,\n startupinfo, creationflags, shell,\n p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite,\n restore_signals, start_new_session):\n \"\"\"Execute program (POSIX version)\"\"\"\n \n if isinstance(args, (str, bytes)):\n args = [args]\n elif isinstance(args, os.PathLike):\n if shell:\n raise TypeError('path-like args is not allowed when '\n 'shell is true')\n args = [args]\n else:\n args = list(args)\n \n if shell:\n # On Android the default shell is at '/system/bin/sh'.\n unix_shell = ('/system/bin/sh' if\n hasattr(sys, 'getandroidapilevel') else '/bin/sh')\n args = [unix_shell, \"-c\"] + args\n if executable:\n args[0] = executable\n \n if executable is None:\n executable = args[0]\n \n sys.audit(\"subprocess.Popen\", executable, args, cwd, env)\n \n if (_USE_POSIX_SPAWN\n and os.path.dirname(executable)\n and preexec_fn is None\n and not close_fds\n and not pass_fds\n and cwd is None\n and (p2cread == -1 or p2cread > 2)\n and (c2pwrite == -1 or c2pwrite > 2)\n and (errwrite == -1 or errwrite > 2)\n and not start_new_session):\n self._posix_spawn(args, executable, env, restore_signals,\n p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite)\n return\n \n orig_executable = executable\n \n # For transferring possible exec failure from child to parent.\n # Data format: \"exception name:hex errno:description\"\n # Pickle is not used; it is complex and involves memory allocation.\n errpipe_read, errpipe_write = os.pipe()\n # errpipe_write must not be in the standard io 0, 1, or 2 fd range.\n low_fds_to_close = []\n while errpipe_write < 3:\n low_fds_to_close.append(errpipe_write)\n errpipe_write = os.dup(errpipe_write)\n for low_fd in low_fds_to_close:\n os.close(low_fd)\n try:\n try:\n # We must avoid complex work that could involve\n # malloc or free in the child process to avoid\n # potential deadlocks, thus we do all this here.\n # and pass it to fork_exec()\n \n if env is not None:\n env_list = []\n for k, v in env.items():\n k = os.fsencode(k)\n if b'=' in k:\n raise ValueError(\"illegal environment variable name\")\n env_list.append(k + b'=' + os.fsencode(v))\n else:\n env_list = None # Use execv instead of execve.\n executable = os.fsencode(executable)\n if os.path.dirname(executable):\n executable_list = (executable,)\n else:\n # This matches the behavior of os._execvpe().\n executable_list = tuple(\n os.path.join(os.fsencode(dir), executable)\n for dir in os.get_exec_path(env))\n fds_to_keep = set(pass_fds)\n fds_to_keep.add(errpipe_write)\n self.pid = _posixsubprocess.fork_exec(\n args, executable_list,\n close_fds, tuple(sorted(map(int, fds_to_keep))),\n cwd, env_list,\n p2cread, p2cwrite, c2pread, c2pwrite,\n errread, errwrite,\n errpipe_read, errpipe_write,\n restore_signals, start_new_session, preexec_fn)\n self._child_created = True\n finally:\n # be sure the FD is closed no matter what\n os.close(errpipe_write)\n \n self._close_pipe_fds(p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite)\n \n # Wait for exec to fail or succeed; possibly raising an\n # exception (limited in size)\n errpipe_data = bytearray()\n while True:\n part = os.read(errpipe_read, 50000)\n errpipe_data += part\n if not part or len(errpipe_data) > 50000:\n break\n finally:\n # be sure the FD is closed no matter what\n os.close(errpipe_read)\n \n if errpipe_data:\n try:\n pid, sts = os.waitpid(self.pid, 0)\n if pid == self.pid:\n self._handle_exitstatus(sts)\n else:\n self.returncode = sys.maxsize\n except ChildProcessError:\n pass\n \n try:\n exception_name, hex_errno, err_msg = (\n errpipe_data.split(b':', 2))\n # The encoding here should match the encoding\n # written in by the subprocess implementations\n # like _posixsubprocess\n err_msg = err_msg.decode()\n except ValueError:\n exception_name = b'SubprocessError'\n hex_errno = b'0'\n err_msg = 'Bad exception data from child: {!r}'.format(\n bytes(errpipe_data))\n child_exception_type = getattr(\n builtins, exception_name.decode('ascii'),\n SubprocessError)\n if issubclass(child_exception_type, OSError) and hex_errno:\n errno_num = int(hex_errno, 16)\n child_exec_never_called = (err_msg == \"noexec\")\n if child_exec_never_called:\n err_msg = \"\"\n # The error must be from chdir(cwd).\n err_filename = cwd\n else:\n err_filename = orig_executable\n if errno_num != 0:\n err_msg = os.strerror(errno_num)\n> raise child_exception_type(errno_num, err_msg, err_filename)\nE FileNotFoundError: [Errno 2] No such file or directory: 'mako'\n\n.pixi/envs/default/lib/python3.8/subprocess.py:1720: FileNotFoundError"}, "teardown": {"duration": 0.0002314755693078041, "outcome": "passed"}}, {"nodeid": "tests/test_utils_dbusnotify.py::test_get_capabilities", "lineno": 112, "outcome": "error", "keywords": ["test_get_capabilities", "test_utils_dbusnotify.py", "tests", "slic", ""], "setup": {"duration": 0.00018874090164899826, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 1720, "message": "FileNotFoundError: [Errno 2] No such file or directory: 'mako'"}, "traceback": [{"path": "tests/test_utils_dbusnotify.py", "lineno": 29, "message": ""}, {"path": ".pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 858, "message": "in __init__"}, {"path": ".pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 1720, "message": "FileNotFoundError"}], "longrepr": "@pytest.fixture(scope=\"session\", autouse=True)\n def mako_daemon():\n \"\"\"Start mako in headless logger mode and ensure cleanup.\"\"\"\n global _MAKO_PROC\n \n # Ensure old log removed\n if os.path.exists(_MAKO_LOGFILE):\n os.remove(_MAKO_LOGFILE)\n \n # Launch mako with --output (no graphical deps, only logs)\n> _MAKO_PROC = subprocess.Popen(\n [\"mako\", f\"--output={_MAKO_LOGFILE}\"],\n stdout=subprocess.PIPE,\n stderr=subprocess.PIPE,\n )\n\ntests/test_utils_dbusnotify.py:29: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.pixi/envs/default/lib/python3.8/subprocess.py:858: in __init__\n self._execute_child(args, executable, preexec_fn, close_fds,\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ['mako', '--output=/tmp/mako-test.log'], executable = b'mako'\npreexec_fn = None, close_fds = True, pass_fds = (), cwd = None, env = None\nstartupinfo = None, creationflags = 0, shell = False, p2cread = -1\np2cwrite = -1, c2pread = 12, c2pwrite = 13, errread = 14, errwrite = 15\nrestore_signals = True, start_new_session = False\n\n def _execute_child(self, args, executable, preexec_fn, close_fds,\n pass_fds, cwd, env,\n startupinfo, creationflags, shell,\n p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite,\n restore_signals, start_new_session):\n \"\"\"Execute program (POSIX version)\"\"\"\n \n if isinstance(args, (str, bytes)):\n args = [args]\n elif isinstance(args, os.PathLike):\n if shell:\n raise TypeError('path-like args is not allowed when '\n 'shell is true')\n args = [args]\n else:\n args = list(args)\n \n if shell:\n # On Android the default shell is at '/system/bin/sh'.\n unix_shell = ('/system/bin/sh' if\n hasattr(sys, 'getandroidapilevel') else '/bin/sh')\n args = [unix_shell, \"-c\"] + args\n if executable:\n args[0] = executable\n \n if executable is None:\n executable = args[0]\n \n sys.audit(\"subprocess.Popen\", executable, args, cwd, env)\n \n if (_USE_POSIX_SPAWN\n and os.path.dirname(executable)\n and preexec_fn is None\n and not close_fds\n and not pass_fds\n and cwd is None\n and (p2cread == -1 or p2cread > 2)\n and (c2pwrite == -1 or c2pwrite > 2)\n and (errwrite == -1 or errwrite > 2)\n and not start_new_session):\n self._posix_spawn(args, executable, env, restore_signals,\n p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite)\n return\n \n orig_executable = executable\n \n # For transferring possible exec failure from child to parent.\n # Data format: \"exception name:hex errno:description\"\n # Pickle is not used; it is complex and involves memory allocation.\n errpipe_read, errpipe_write = os.pipe()\n # errpipe_write must not be in the standard io 0, 1, or 2 fd range.\n low_fds_to_close = []\n while errpipe_write < 3:\n low_fds_to_close.append(errpipe_write)\n errpipe_write = os.dup(errpipe_write)\n for low_fd in low_fds_to_close:\n os.close(low_fd)\n try:\n try:\n # We must avoid complex work that could involve\n # malloc or free in the child process to avoid\n # potential deadlocks, thus we do all this here.\n # and pass it to fork_exec()\n \n if env is not None:\n env_list = []\n for k, v in env.items():\n k = os.fsencode(k)\n if b'=' in k:\n raise ValueError(\"illegal environment variable name\")\n env_list.append(k + b'=' + os.fsencode(v))\n else:\n env_list = None # Use execv instead of execve.\n executable = os.fsencode(executable)\n if os.path.dirname(executable):\n executable_list = (executable,)\n else:\n # This matches the behavior of os._execvpe().\n executable_list = tuple(\n os.path.join(os.fsencode(dir), executable)\n for dir in os.get_exec_path(env))\n fds_to_keep = set(pass_fds)\n fds_to_keep.add(errpipe_write)\n self.pid = _posixsubprocess.fork_exec(\n args, executable_list,\n close_fds, tuple(sorted(map(int, fds_to_keep))),\n cwd, env_list,\n p2cread, p2cwrite, c2pread, c2pwrite,\n errread, errwrite,\n errpipe_read, errpipe_write,\n restore_signals, start_new_session, preexec_fn)\n self._child_created = True\n finally:\n # be sure the FD is closed no matter what\n os.close(errpipe_write)\n \n self._close_pipe_fds(p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite)\n \n # Wait for exec to fail or succeed; possibly raising an\n # exception (limited in size)\n errpipe_data = bytearray()\n while True:\n part = os.read(errpipe_read, 50000)\n errpipe_data += part\n if not part or len(errpipe_data) > 50000:\n break\n finally:\n # be sure the FD is closed no matter what\n os.close(errpipe_read)\n \n if errpipe_data:\n try:\n pid, sts = os.waitpid(self.pid, 0)\n if pid == self.pid:\n self._handle_exitstatus(sts)\n else:\n self.returncode = sys.maxsize\n except ChildProcessError:\n pass\n \n try:\n exception_name, hex_errno, err_msg = (\n errpipe_data.split(b':', 2))\n # The encoding here should match the encoding\n # written in by the subprocess implementations\n # like _posixsubprocess\n err_msg = err_msg.decode()\n except ValueError:\n exception_name = b'SubprocessError'\n hex_errno = b'0'\n err_msg = 'Bad exception data from child: {!r}'.format(\n bytes(errpipe_data))\n child_exception_type = getattr(\n builtins, exception_name.decode('ascii'),\n SubprocessError)\n if issubclass(child_exception_type, OSError) and hex_errno:\n errno_num = int(hex_errno, 16)\n child_exec_never_called = (err_msg == \"noexec\")\n if child_exec_never_called:\n err_msg = \"\"\n # The error must be from chdir(cwd).\n err_filename = cwd\n else:\n err_filename = orig_executable\n if errno_num != 0:\n err_msg = os.strerror(errno_num)\n> raise child_exception_type(errno_num, err_msg, err_filename)\nE FileNotFoundError: [Errno 2] No such file or directory: 'mako'\n\n.pixi/envs/default/lib/python3.8/subprocess.py:1720: FileNotFoundError"}, "teardown": {"duration": 0.0002180039882659912, "outcome": "passed"}}, {"nodeid": "tests/test_utils_dbusnotify.py::test_notify_and_close", "lineno": 127, "outcome": "error", "keywords": ["test_notify_and_close", "test_utils_dbusnotify.py", "tests", "slic", ""], "setup": {"duration": 0.0001881709322333336, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 1720, "message": "FileNotFoundError: [Errno 2] No such file or directory: 'mako'"}, "traceback": [{"path": "tests/test_utils_dbusnotify.py", "lineno": 29, "message": ""}, {"path": ".pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 858, "message": "in __init__"}, {"path": ".pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 1720, "message": "FileNotFoundError"}], "longrepr": "@pytest.fixture(scope=\"session\", autouse=True)\n def mako_daemon():\n \"\"\"Start mako in headless logger mode and ensure cleanup.\"\"\"\n global _MAKO_PROC\n \n # Ensure old log removed\n if os.path.exists(_MAKO_LOGFILE):\n os.remove(_MAKO_LOGFILE)\n \n # Launch mako with --output (no graphical deps, only logs)\n> _MAKO_PROC = subprocess.Popen(\n [\"mako\", f\"--output={_MAKO_LOGFILE}\"],\n stdout=subprocess.PIPE,\n stderr=subprocess.PIPE,\n )\n\ntests/test_utils_dbusnotify.py:29: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.pixi/envs/default/lib/python3.8/subprocess.py:858: in __init__\n self._execute_child(args, executable, preexec_fn, close_fds,\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ['mako', '--output=/tmp/mako-test.log'], executable = b'mako'\npreexec_fn = None, close_fds = True, pass_fds = (), cwd = None, env = None\nstartupinfo = None, creationflags = 0, shell = False, p2cread = -1\np2cwrite = -1, c2pread = 12, c2pwrite = 13, errread = 14, errwrite = 15\nrestore_signals = True, start_new_session = False\n\n def _execute_child(self, args, executable, preexec_fn, close_fds,\n pass_fds, cwd, env,\n startupinfo, creationflags, shell,\n p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite,\n restore_signals, start_new_session):\n \"\"\"Execute program (POSIX version)\"\"\"\n \n if isinstance(args, (str, bytes)):\n args = [args]\n elif isinstance(args, os.PathLike):\n if shell:\n raise TypeError('path-like args is not allowed when '\n 'shell is true')\n args = [args]\n else:\n args = list(args)\n \n if shell:\n # On Android the default shell is at '/system/bin/sh'.\n unix_shell = ('/system/bin/sh' if\n hasattr(sys, 'getandroidapilevel') else '/bin/sh')\n args = [unix_shell, \"-c\"] + args\n if executable:\n args[0] = executable\n \n if executable is None:\n executable = args[0]\n \n sys.audit(\"subprocess.Popen\", executable, args, cwd, env)\n \n if (_USE_POSIX_SPAWN\n and os.path.dirname(executable)\n and preexec_fn is None\n and not close_fds\n and not pass_fds\n and cwd is None\n and (p2cread == -1 or p2cread > 2)\n and (c2pwrite == -1 or c2pwrite > 2)\n and (errwrite == -1 or errwrite > 2)\n and not start_new_session):\n self._posix_spawn(args, executable, env, restore_signals,\n p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite)\n return\n \n orig_executable = executable\n \n # For transferring possible exec failure from child to parent.\n # Data format: \"exception name:hex errno:description\"\n # Pickle is not used; it is complex and involves memory allocation.\n errpipe_read, errpipe_write = os.pipe()\n # errpipe_write must not be in the standard io 0, 1, or 2 fd range.\n low_fds_to_close = []\n while errpipe_write < 3:\n low_fds_to_close.append(errpipe_write)\n errpipe_write = os.dup(errpipe_write)\n for low_fd in low_fds_to_close:\n os.close(low_fd)\n try:\n try:\n # We must avoid complex work that could involve\n # malloc or free in the child process to avoid\n # potential deadlocks, thus we do all this here.\n # and pass it to fork_exec()\n \n if env is not None:\n env_list = []\n for k, v in env.items():\n k = os.fsencode(k)\n if b'=' in k:\n raise ValueError(\"illegal environment variable name\")\n env_list.append(k + b'=' + os.fsencode(v))\n else:\n env_list = None # Use execv instead of execve.\n executable = os.fsencode(executable)\n if os.path.dirname(executable):\n executable_list = (executable,)\n else:\n # This matches the behavior of os._execvpe().\n executable_list = tuple(\n os.path.join(os.fsencode(dir), executable)\n for dir in os.get_exec_path(env))\n fds_to_keep = set(pass_fds)\n fds_to_keep.add(errpipe_write)\n self.pid = _posixsubprocess.fork_exec(\n args, executable_list,\n close_fds, tuple(sorted(map(int, fds_to_keep))),\n cwd, env_list,\n p2cread, p2cwrite, c2pread, c2pwrite,\n errread, errwrite,\n errpipe_read, errpipe_write,\n restore_signals, start_new_session, preexec_fn)\n self._child_created = True\n finally:\n # be sure the FD is closed no matter what\n os.close(errpipe_write)\n \n self._close_pipe_fds(p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite)\n \n # Wait for exec to fail or succeed; possibly raising an\n # exception (limited in size)\n errpipe_data = bytearray()\n while True:\n part = os.read(errpipe_read, 50000)\n errpipe_data += part\n if not part or len(errpipe_data) > 50000:\n break\n finally:\n # be sure the FD is closed no matter what\n os.close(errpipe_read)\n \n if errpipe_data:\n try:\n pid, sts = os.waitpid(self.pid, 0)\n if pid == self.pid:\n self._handle_exitstatus(sts)\n else:\n self.returncode = sys.maxsize\n except ChildProcessError:\n pass\n \n try:\n exception_name, hex_errno, err_msg = (\n errpipe_data.split(b':', 2))\n # The encoding here should match the encoding\n # written in by the subprocess implementations\n # like _posixsubprocess\n err_msg = err_msg.decode()\n except ValueError:\n exception_name = b'SubprocessError'\n hex_errno = b'0'\n err_msg = 'Bad exception data from child: {!r}'.format(\n bytes(errpipe_data))\n child_exception_type = getattr(\n builtins, exception_name.decode('ascii'),\n SubprocessError)\n if issubclass(child_exception_type, OSError) and hex_errno:\n errno_num = int(hex_errno, 16)\n child_exec_never_called = (err_msg == \"noexec\")\n if child_exec_never_called:\n err_msg = \"\"\n # The error must be from chdir(cwd).\n err_filename = cwd\n else:\n err_filename = orig_executable\n if errno_num != 0:\n err_msg = os.strerror(errno_num)\n> raise child_exception_type(errno_num, err_msg, err_filename)\nE FileNotFoundError: [Errno 2] No such file or directory: 'mako'\n\n.pixi/envs/default/lib/python3.8/subprocess.py:1720: FileNotFoundError"}, "teardown": {"duration": 0.00021681608632206917, "outcome": "passed"}}, {"nodeid": "tests/test_utils_dbusnotify.py::test_notify_invalid_value", "lineno": 138, "outcome": "error", "keywords": ["test_notify_invalid_value", "test_utils_dbusnotify.py", "tests", "slic", ""], "setup": {"duration": 0.00023002317175269127, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 1720, "message": "FileNotFoundError: [Errno 2] No such file or directory: 'mako'"}, "traceback": [{"path": "tests/test_utils_dbusnotify.py", "lineno": 29, "message": ""}, {"path": ".pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 858, "message": "in __init__"}, {"path": ".pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 1720, "message": "FileNotFoundError"}], "longrepr": "@pytest.fixture(scope=\"session\", autouse=True)\n def mako_daemon():\n \"\"\"Start mako in headless logger mode and ensure cleanup.\"\"\"\n global _MAKO_PROC\n \n # Ensure old log removed\n if os.path.exists(_MAKO_LOGFILE):\n os.remove(_MAKO_LOGFILE)\n \n # Launch mako with --output (no graphical deps, only logs)\n> _MAKO_PROC = subprocess.Popen(\n [\"mako\", f\"--output={_MAKO_LOGFILE}\"],\n stdout=subprocess.PIPE,\n stderr=subprocess.PIPE,\n )\n\ntests/test_utils_dbusnotify.py:29: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.pixi/envs/default/lib/python3.8/subprocess.py:858: in __init__\n self._execute_child(args, executable, preexec_fn, close_fds,\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ['mako', '--output=/tmp/mako-test.log'], executable = b'mako'\npreexec_fn = None, close_fds = True, pass_fds = (), cwd = None, env = None\nstartupinfo = None, creationflags = 0, shell = False, p2cread = -1\np2cwrite = -1, c2pread = 12, c2pwrite = 13, errread = 14, errwrite = 15\nrestore_signals = True, start_new_session = False\n\n def _execute_child(self, args, executable, preexec_fn, close_fds,\n pass_fds, cwd, env,\n startupinfo, creationflags, shell,\n p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite,\n restore_signals, start_new_session):\n \"\"\"Execute program (POSIX version)\"\"\"\n \n if isinstance(args, (str, bytes)):\n args = [args]\n elif isinstance(args, os.PathLike):\n if shell:\n raise TypeError('path-like args is not allowed when '\n 'shell is true')\n args = [args]\n else:\n args = list(args)\n \n if shell:\n # On Android the default shell is at '/system/bin/sh'.\n unix_shell = ('/system/bin/sh' if\n hasattr(sys, 'getandroidapilevel') else '/bin/sh')\n args = [unix_shell, \"-c\"] + args\n if executable:\n args[0] = executable\n \n if executable is None:\n executable = args[0]\n \n sys.audit(\"subprocess.Popen\", executable, args, cwd, env)\n \n if (_USE_POSIX_SPAWN\n and os.path.dirname(executable)\n and preexec_fn is None\n and not close_fds\n and not pass_fds\n and cwd is None\n and (p2cread == -1 or p2cread > 2)\n and (c2pwrite == -1 or c2pwrite > 2)\n and (errwrite == -1 or errwrite > 2)\n and not start_new_session):\n self._posix_spawn(args, executable, env, restore_signals,\n p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite)\n return\n \n orig_executable = executable\n \n # For transferring possible exec failure from child to parent.\n # Data format: \"exception name:hex errno:description\"\n # Pickle is not used; it is complex and involves memory allocation.\n errpipe_read, errpipe_write = os.pipe()\n # errpipe_write must not be in the standard io 0, 1, or 2 fd range.\n low_fds_to_close = []\n while errpipe_write < 3:\n low_fds_to_close.append(errpipe_write)\n errpipe_write = os.dup(errpipe_write)\n for low_fd in low_fds_to_close:\n os.close(low_fd)\n try:\n try:\n # We must avoid complex work that could involve\n # malloc or free in the child process to avoid\n # potential deadlocks, thus we do all this here.\n # and pass it to fork_exec()\n \n if env is not None:\n env_list = []\n for k, v in env.items():\n k = os.fsencode(k)\n if b'=' in k:\n raise ValueError(\"illegal environment variable name\")\n env_list.append(k + b'=' + os.fsencode(v))\n else:\n env_list = None # Use execv instead of execve.\n executable = os.fsencode(executable)\n if os.path.dirname(executable):\n executable_list = (executable,)\n else:\n # This matches the behavior of os._execvpe().\n executable_list = tuple(\n os.path.join(os.fsencode(dir), executable)\n for dir in os.get_exec_path(env))\n fds_to_keep = set(pass_fds)\n fds_to_keep.add(errpipe_write)\n self.pid = _posixsubprocess.fork_exec(\n args, executable_list,\n close_fds, tuple(sorted(map(int, fds_to_keep))),\n cwd, env_list,\n p2cread, p2cwrite, c2pread, c2pwrite,\n errread, errwrite,\n errpipe_read, errpipe_write,\n restore_signals, start_new_session, preexec_fn)\n self._child_created = True\n finally:\n # be sure the FD is closed no matter what\n os.close(errpipe_write)\n \n self._close_pipe_fds(p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite)\n \n # Wait for exec to fail or succeed; possibly raising an\n # exception (limited in size)\n errpipe_data = bytearray()\n while True:\n part = os.read(errpipe_read, 50000)\n errpipe_data += part\n if not part or len(errpipe_data) > 50000:\n break\n finally:\n # be sure the FD is closed no matter what\n os.close(errpipe_read)\n \n if errpipe_data:\n try:\n pid, sts = os.waitpid(self.pid, 0)\n if pid == self.pid:\n self._handle_exitstatus(sts)\n else:\n self.returncode = sys.maxsize\n except ChildProcessError:\n pass\n \n try:\n exception_name, hex_errno, err_msg = (\n errpipe_data.split(b':', 2))\n # The encoding here should match the encoding\n # written in by the subprocess implementations\n # like _posixsubprocess\n err_msg = err_msg.decode()\n except ValueError:\n exception_name = b'SubprocessError'\n hex_errno = b'0'\n err_msg = 'Bad exception data from child: {!r}'.format(\n bytes(errpipe_data))\n child_exception_type = getattr(\n builtins, exception_name.decode('ascii'),\n SubprocessError)\n if issubclass(child_exception_type, OSError) and hex_errno:\n errno_num = int(hex_errno, 16)\n child_exec_never_called = (err_msg == \"noexec\")\n if child_exec_never_called:\n err_msg = \"\"\n # The error must be from chdir(cwd).\n err_filename = cwd\n else:\n err_filename = orig_executable\n if errno_num != 0:\n err_msg = os.strerror(errno_num)\n> raise child_exception_type(errno_num, err_msg, err_filename)\nE FileNotFoundError: [Errno 2] No such file or directory: 'mako'\n\n.pixi/envs/default/lib/python3.8/subprocess.py:1720: FileNotFoundError"}, "teardown": {"duration": 0.00021888269111514091, "outcome": "passed"}}, {"nodeid": "tests/test_utils_dbusnotify.py::test_convert_dbus_strings", "lineno": 144, "outcome": "error", "keywords": ["test_convert_dbus_strings", "test_utils_dbusnotify.py", "tests", "slic", ""], "setup": {"duration": 0.00018321815878152847, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 1720, "message": "FileNotFoundError: [Errno 2] No such file or directory: 'mako'"}, "traceback": [{"path": "tests/test_utils_dbusnotify.py", "lineno": 29, "message": ""}, {"path": ".pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 858, "message": "in __init__"}, {"path": ".pixi/envs/default/lib/python3.8/subprocess.py", "lineno": 1720, "message": "FileNotFoundError"}], "longrepr": "@pytest.fixture(scope=\"session\", autouse=True)\n def mako_daemon():\n \"\"\"Start mako in headless logger mode and ensure cleanup.\"\"\"\n global _MAKO_PROC\n \n # Ensure old log removed\n if os.path.exists(_MAKO_LOGFILE):\n os.remove(_MAKO_LOGFILE)\n \n # Launch mako with --output (no graphical deps, only logs)\n> _MAKO_PROC = subprocess.Popen(\n [\"mako\", f\"--output={_MAKO_LOGFILE}\"],\n stdout=subprocess.PIPE,\n stderr=subprocess.PIPE,\n )\n\ntests/test_utils_dbusnotify.py:29: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.pixi/envs/default/lib/python3.8/subprocess.py:858: in __init__\n self._execute_child(args, executable, preexec_fn, close_fds,\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ['mako', '--output=/tmp/mako-test.log'], executable = b'mako'\npreexec_fn = None, close_fds = True, pass_fds = (), cwd = None, env = None\nstartupinfo = None, creationflags = 0, shell = False, p2cread = -1\np2cwrite = -1, c2pread = 12, c2pwrite = 13, errread = 14, errwrite = 15\nrestore_signals = True, start_new_session = False\n\n def _execute_child(self, args, executable, preexec_fn, close_fds,\n pass_fds, cwd, env,\n startupinfo, creationflags, shell,\n p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite,\n restore_signals, start_new_session):\n \"\"\"Execute program (POSIX version)\"\"\"\n \n if isinstance(args, (str, bytes)):\n args = [args]\n elif isinstance(args, os.PathLike):\n if shell:\n raise TypeError('path-like args is not allowed when '\n 'shell is true')\n args = [args]\n else:\n args = list(args)\n \n if shell:\n # On Android the default shell is at '/system/bin/sh'.\n unix_shell = ('/system/bin/sh' if\n hasattr(sys, 'getandroidapilevel') else '/bin/sh')\n args = [unix_shell, \"-c\"] + args\n if executable:\n args[0] = executable\n \n if executable is None:\n executable = args[0]\n \n sys.audit(\"subprocess.Popen\", executable, args, cwd, env)\n \n if (_USE_POSIX_SPAWN\n and os.path.dirname(executable)\n and preexec_fn is None\n and not close_fds\n and not pass_fds\n and cwd is None\n and (p2cread == -1 or p2cread > 2)\n and (c2pwrite == -1 or c2pwrite > 2)\n and (errwrite == -1 or errwrite > 2)\n and not start_new_session):\n self._posix_spawn(args, executable, env, restore_signals,\n p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite)\n return\n \n orig_executable = executable\n \n # For transferring possible exec failure from child to parent.\n # Data format: \"exception name:hex errno:description\"\n # Pickle is not used; it is complex and involves memory allocation.\n errpipe_read, errpipe_write = os.pipe()\n # errpipe_write must not be in the standard io 0, 1, or 2 fd range.\n low_fds_to_close = []\n while errpipe_write < 3:\n low_fds_to_close.append(errpipe_write)\n errpipe_write = os.dup(errpipe_write)\n for low_fd in low_fds_to_close:\n os.close(low_fd)\n try:\n try:\n # We must avoid complex work that could involve\n # malloc or free in the child process to avoid\n # potential deadlocks, thus we do all this here.\n # and pass it to fork_exec()\n \n if env is not None:\n env_list = []\n for k, v in env.items():\n k = os.fsencode(k)\n if b'=' in k:\n raise ValueError(\"illegal environment variable name\")\n env_list.append(k + b'=' + os.fsencode(v))\n else:\n env_list = None # Use execv instead of execve.\n executable = os.fsencode(executable)\n if os.path.dirname(executable):\n executable_list = (executable,)\n else:\n # This matches the behavior of os._execvpe().\n executable_list = tuple(\n os.path.join(os.fsencode(dir), executable)\n for dir in os.get_exec_path(env))\n fds_to_keep = set(pass_fds)\n fds_to_keep.add(errpipe_write)\n self.pid = _posixsubprocess.fork_exec(\n args, executable_list,\n close_fds, tuple(sorted(map(int, fds_to_keep))),\n cwd, env_list,\n p2cread, p2cwrite, c2pread, c2pwrite,\n errread, errwrite,\n errpipe_read, errpipe_write,\n restore_signals, start_new_session, preexec_fn)\n self._child_created = True\n finally:\n # be sure the FD is closed no matter what\n os.close(errpipe_write)\n \n self._close_pipe_fds(p2cread, p2cwrite,\n c2pread, c2pwrite,\n errread, errwrite)\n \n # Wait for exec to fail or succeed; possibly raising an\n # exception (limited in size)\n errpipe_data = bytearray()\n while True:\n part = os.read(errpipe_read, 50000)\n errpipe_data += part\n if not part or len(errpipe_data) > 50000:\n break\n finally:\n # be sure the FD is closed no matter what\n os.close(errpipe_read)\n \n if errpipe_data:\n try:\n pid, sts = os.waitpid(self.pid, 0)\n if pid == self.pid:\n self._handle_exitstatus(sts)\n else:\n self.returncode = sys.maxsize\n except ChildProcessError:\n pass\n \n try:\n exception_name, hex_errno, err_msg = (\n errpipe_data.split(b':', 2))\n # The encoding here should match the encoding\n # written in by the subprocess implementations\n # like _posixsubprocess\n err_msg = err_msg.decode()\n except ValueError:\n exception_name = b'SubprocessError'\n hex_errno = b'0'\n err_msg = 'Bad exception data from child: {!r}'.format(\n bytes(errpipe_data))\n child_exception_type = getattr(\n builtins, exception_name.decode('ascii'),\n SubprocessError)\n if issubclass(child_exception_type, OSError) and hex_errno:\n errno_num = int(hex_errno, 16)\n child_exec_never_called = (err_msg == \"noexec\")\n if child_exec_never_called:\n err_msg = \"\"\n # The error must be from chdir(cwd).\n err_filename = cwd\n else:\n err_filename = orig_executable\n if errno_num != 0:\n err_msg = os.strerror(errno_num)\n> raise child_exception_type(errno_num, err_msg, err_filename)\nE FileNotFoundError: [Errno 2] No such file or directory: 'mako'\n\n.pixi/envs/default/lib/python3.8/subprocess.py:1720: FileNotFoundError"}, "teardown": {"duration": 0.00028424011543393135, "outcome": "passed"}}]}
\ No newline at end of file
+{"created": 1755525476.1968436, "duration": 5.419815540313721, "exitcode": 1, "root": "/workspace/tligui_y/slic", "environment": {}, "summary": {"error": 6, "passed": 1, "total": 7, "collected": 7}, "collectors": [{"nodeid": "", "outcome": "passed", "result": [{"nodeid": "tests/test_utils_dbusnotify.py", "type": "Module"}]}, {"nodeid": "tests/test_utils_dbusnotify.py::DBusTestCase", "outcome": "passed", "result": []}, {"nodeid": "tests/test_utils_dbusnotify.py", "outcome": "passed", "result": [{"nodeid": "tests/test_utils_dbusnotify.py::DBusTestCase", "type": "UnitTestCase"}, {"nodeid": "tests/test_utils_dbusnotify.py::test_notify_create", "type": "Function", "lineno": 26}, {"nodeid": "tests/test_utils_dbusnotify.py::test_notify_update", "type": "Function", "lineno": 36}, {"nodeid": "tests/test_utils_dbusnotify.py::test_get_server_info", "type": "Function", "lineno": 45}, {"nodeid": "tests/test_utils_dbusnotify.py::test_get_capabilities", "type": "Function", "lineno": 56}, {"nodeid": "tests/test_utils_dbusnotify.py::test_notify_and_close", "type": "Function", "lineno": 71}, {"nodeid": "tests/test_utils_dbusnotify.py::test_notify_invalid_value", "type": "Function", "lineno": 81}, {"nodeid": "tests/test_utils_dbusnotify.py::test_convert_dbus_strings", "type": "Function", "lineno": 87}]}], "tests": [{"nodeid": "tests/test_utils_dbusnotify.py::test_notify_create", "lineno": 26, "outcome": "error", "keywords": ["test_notify_create", "test_utils_dbusnotify.py", "tests", "slic", ""], "setup": {"duration": 3.9401007685810328, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py", "lineno": 634, "message": "dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5"}, "traceback": [{"path": "tests/test_utils_dbusnotify.py", "lineno": 24, "message": ""}, {"path": "slic/utils/dbusnotify.py", "lineno": 15, "message": "in __init__"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py", "lineno": 237, "message": "in get_object"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py", "lineno": 250, "message": "in __init__"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py", "lineno": 178, "message": "in activate_name_owner"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py", "lineno": 273, "message": "in start_service_by_name"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py", "lineno": 634, "message": "DBusException"}], "longrepr": "self = \nbus_name = 'org.freedesktop.Notifications'\n\n def activate_name_owner(self, bus_name):\n if (bus_name is not None and bus_name[:1] != ':'\n and bus_name != BUS_DAEMON_NAME):\n try:\n> return self.get_name_owner(bus_name)\n\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:173: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:348: in get_name_owner\n return self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nbus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'\ndbus_interface = 'org.freedesktop.DBus', method = 'GetNameOwner'\nsignature = 's', args = ('org.freedesktop.Notifications',), timeout = -1.0\nbyte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}\nmessage = \n\n def call_blocking(self, bus_name, object_path, dbus_interface, method,\n signature, args, timeout=-1.0,\n byte_arrays=False, **kwargs):\n \"\"\"Call the given method, synchronously.\n :Since: 0.81.0\n \"\"\"\n if object_path == LOCAL_PATH:\n raise DBusException('Methods may not be called on the reserved '\n 'path %s' % LOCAL_PATH)\n if dbus_interface == LOCAL_IFACE:\n raise DBusException('Methods may not be called on the reserved '\n 'interface %s' % LOCAL_IFACE)\n # no need to validate other args - MethodCallMessage ctor will do\n \n get_args_opts = dict(byte_arrays=byte_arrays)\n if 'utf8_strings' in kwargs:\n raise TypeError(\"unexpected keyword argument 'utf8_strings'\")\n \n message = MethodCallMessage(destination=bus_name,\n path=object_path,\n interface=dbus_interface,\n method=method)\n # Add the arguments to the function\n try:\n message.append(signature=signature, *args)\n except Exception as e:\n logging.basicConfig()\n _logger.error('Unable to set arguments %r according to '\n 'signature %r: %s: %s',\n args, signature, e.__class__, e)\n raise\n \n # make a blocking call\n> reply_message = self.send_message_with_reply_and_block(\n message, timeout)\nE dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NameHasNoOwner: Could not get owner of name 'org.freedesktop.Notifications': no such name\n\n.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException\n\nDuring handling of the above exception, another exception occurred:\n\n @pytest.fixture(scope=\"session\")\n def notifier():\n \"\"\"Importe DBusNotify avec un SessionBus actif (dunst -print).\"\"\"\n import slic.utils.dbusnotify as dbn\n> return dbn.DBusNotify()\n\ntests/test_utils_dbusnotify.py:24: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \nslic/utils/dbusnotify.py:15: in __init__\n obj = bus.get_object(BUS_NAME, OBJECT_PATH)\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:237: in get_object\n return self.ProxyObjectClass(self, bus_name, object_path,\n.pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py:250: in __init__\n self._named_service = conn.activate_name_owner(bus_name)\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:178: in activate_name_owner\n self.start_service_by_name(bus_name)\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:273: in start_service_by_name\n return (True, self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nbus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'\ndbus_interface = 'org.freedesktop.DBus', method = 'StartServiceByName'\nsignature = 'su', args = ('org.freedesktop.Notifications', 0), timeout = -1.0\nbyte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}\nmessage = \n\n def call_blocking(self, bus_name, object_path, dbus_interface, method,\n signature, args, timeout=-1.0,\n byte_arrays=False, **kwargs):\n \"\"\"Call the given method, synchronously.\n :Since: 0.81.0\n \"\"\"\n if object_path == LOCAL_PATH:\n raise DBusException('Methods may not be called on the reserved '\n 'path %s' % LOCAL_PATH)\n if dbus_interface == LOCAL_IFACE:\n raise DBusException('Methods may not be called on the reserved '\n 'interface %s' % LOCAL_IFACE)\n # no need to validate other args - MethodCallMessage ctor will do\n \n get_args_opts = dict(byte_arrays=byte_arrays)\n if 'utf8_strings' in kwargs:\n raise TypeError(\"unexpected keyword argument 'utf8_strings'\")\n \n message = MethodCallMessage(destination=bus_name,\n path=object_path,\n interface=dbus_interface,\n method=method)\n # Add the arguments to the function\n try:\n message.append(signature=signature, *args)\n except Exception as e:\n logging.basicConfig()\n _logger.error('Unable to set arguments %r according to '\n 'signature %r: %s: %s',\n args, signature, e.__class__, e)\n raise\n \n # make a blocking call\n> reply_message = self.send_message_with_reply_and_block(\n message, timeout)\nE dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5\n\n.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException"}, "teardown": {"duration": 0.0003401096910238266, "outcome": "passed"}}, {"nodeid": "tests/test_utils_dbusnotify.py::test_notify_update", "lineno": 36, "outcome": "error", "keywords": ["test_notify_update", "test_utils_dbusnotify.py", "tests", "slic", ""], "setup": {"duration": 0.00022817589342594147, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py", "lineno": 634, "message": "dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5"}, "traceback": [{"path": "tests/test_utils_dbusnotify.py", "lineno": 24, "message": ""}, {"path": "slic/utils/dbusnotify.py", "lineno": 15, "message": "in __init__"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py", "lineno": 237, "message": "in get_object"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py", "lineno": 250, "message": "in __init__"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py", "lineno": 178, "message": "in activate_name_owner"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py", "lineno": 273, "message": "in start_service_by_name"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py", "lineno": 634, "message": "DBusException"}], "longrepr": "self = \nbus_name = 'org.freedesktop.Notifications'\n\n def activate_name_owner(self, bus_name):\n if (bus_name is not None and bus_name[:1] != ':'\n and bus_name != BUS_DAEMON_NAME):\n try:\n> return self.get_name_owner(bus_name)\n\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:173: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:348: in get_name_owner\n return self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nbus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'\ndbus_interface = 'org.freedesktop.DBus', method = 'GetNameOwner'\nsignature = 's', args = ('org.freedesktop.Notifications',), timeout = -1.0\nbyte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}\nmessage = \n\n def call_blocking(self, bus_name, object_path, dbus_interface, method,\n signature, args, timeout=-1.0,\n byte_arrays=False, **kwargs):\n \"\"\"Call the given method, synchronously.\n :Since: 0.81.0\n \"\"\"\n if object_path == LOCAL_PATH:\n raise DBusException('Methods may not be called on the reserved '\n 'path %s' % LOCAL_PATH)\n if dbus_interface == LOCAL_IFACE:\n raise DBusException('Methods may not be called on the reserved '\n 'interface %s' % LOCAL_IFACE)\n # no need to validate other args - MethodCallMessage ctor will do\n \n get_args_opts = dict(byte_arrays=byte_arrays)\n if 'utf8_strings' in kwargs:\n raise TypeError(\"unexpected keyword argument 'utf8_strings'\")\n \n message = MethodCallMessage(destination=bus_name,\n path=object_path,\n interface=dbus_interface,\n method=method)\n # Add the arguments to the function\n try:\n message.append(signature=signature, *args)\n except Exception as e:\n logging.basicConfig()\n _logger.error('Unable to set arguments %r according to '\n 'signature %r: %s: %s',\n args, signature, e.__class__, e)\n raise\n \n # make a blocking call\n> reply_message = self.send_message_with_reply_and_block(\n message, timeout)\nE dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NameHasNoOwner: Could not get owner of name 'org.freedesktop.Notifications': no such name\n\n.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException\n\nDuring handling of the above exception, another exception occurred:\n\n @pytest.fixture(scope=\"session\")\n def notifier():\n \"\"\"Importe DBusNotify avec un SessionBus actif (dunst -print).\"\"\"\n import slic.utils.dbusnotify as dbn\n> return dbn.DBusNotify()\n\ntests/test_utils_dbusnotify.py:24: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \nslic/utils/dbusnotify.py:15: in __init__\n obj = bus.get_object(BUS_NAME, OBJECT_PATH)\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:237: in get_object\n return self.ProxyObjectClass(self, bus_name, object_path,\n.pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py:250: in __init__\n self._named_service = conn.activate_name_owner(bus_name)\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:178: in activate_name_owner\n self.start_service_by_name(bus_name)\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:273: in start_service_by_name\n return (True, self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nbus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'\ndbus_interface = 'org.freedesktop.DBus', method = 'StartServiceByName'\nsignature = 'su', args = ('org.freedesktop.Notifications', 0), timeout = -1.0\nbyte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}\nmessage = \n\n def call_blocking(self, bus_name, object_path, dbus_interface, method,\n signature, args, timeout=-1.0,\n byte_arrays=False, **kwargs):\n \"\"\"Call the given method, synchronously.\n :Since: 0.81.0\n \"\"\"\n if object_path == LOCAL_PATH:\n raise DBusException('Methods may not be called on the reserved '\n 'path %s' % LOCAL_PATH)\n if dbus_interface == LOCAL_IFACE:\n raise DBusException('Methods may not be called on the reserved '\n 'interface %s' % LOCAL_IFACE)\n # no need to validate other args - MethodCallMessage ctor will do\n \n get_args_opts = dict(byte_arrays=byte_arrays)\n if 'utf8_strings' in kwargs:\n raise TypeError(\"unexpected keyword argument 'utf8_strings'\")\n \n message = MethodCallMessage(destination=bus_name,\n path=object_path,\n interface=dbus_interface,\n method=method)\n # Add the arguments to the function\n try:\n message.append(signature=signature, *args)\n except Exception as e:\n logging.basicConfig()\n _logger.error('Unable to set arguments %r according to '\n 'signature %r: %s: %s',\n args, signature, e.__class__, e)\n raise\n \n # make a blocking call\n> reply_message = self.send_message_with_reply_and_block(\n message, timeout)\nE dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5\n\n.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException"}, "teardown": {"duration": 0.00025309203192591667, "outcome": "passed"}}, {"nodeid": "tests/test_utils_dbusnotify.py::test_get_server_info", "lineno": 45, "outcome": "error", "keywords": ["test_get_server_info", "test_utils_dbusnotify.py", "tests", "slic", ""], "setup": {"duration": 0.00018474413082003593, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py", "lineno": 634, "message": "dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5"}, "traceback": [{"path": "tests/test_utils_dbusnotify.py", "lineno": 24, "message": ""}, {"path": "slic/utils/dbusnotify.py", "lineno": 15, "message": "in __init__"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py", "lineno": 237, "message": "in get_object"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py", "lineno": 250, "message": "in __init__"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py", "lineno": 178, "message": "in activate_name_owner"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py", "lineno": 273, "message": "in start_service_by_name"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py", "lineno": 634, "message": "DBusException"}], "longrepr": "self = \nbus_name = 'org.freedesktop.Notifications'\n\n def activate_name_owner(self, bus_name):\n if (bus_name is not None and bus_name[:1] != ':'\n and bus_name != BUS_DAEMON_NAME):\n try:\n> return self.get_name_owner(bus_name)\n\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:173: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:348: in get_name_owner\n return self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nbus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'\ndbus_interface = 'org.freedesktop.DBus', method = 'GetNameOwner'\nsignature = 's', args = ('org.freedesktop.Notifications',), timeout = -1.0\nbyte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}\nmessage = \n\n def call_blocking(self, bus_name, object_path, dbus_interface, method,\n signature, args, timeout=-1.0,\n byte_arrays=False, **kwargs):\n \"\"\"Call the given method, synchronously.\n :Since: 0.81.0\n \"\"\"\n if object_path == LOCAL_PATH:\n raise DBusException('Methods may not be called on the reserved '\n 'path %s' % LOCAL_PATH)\n if dbus_interface == LOCAL_IFACE:\n raise DBusException('Methods may not be called on the reserved '\n 'interface %s' % LOCAL_IFACE)\n # no need to validate other args - MethodCallMessage ctor will do\n \n get_args_opts = dict(byte_arrays=byte_arrays)\n if 'utf8_strings' in kwargs:\n raise TypeError(\"unexpected keyword argument 'utf8_strings'\")\n \n message = MethodCallMessage(destination=bus_name,\n path=object_path,\n interface=dbus_interface,\n method=method)\n # Add the arguments to the function\n try:\n message.append(signature=signature, *args)\n except Exception as e:\n logging.basicConfig()\n _logger.error('Unable to set arguments %r according to '\n 'signature %r: %s: %s',\n args, signature, e.__class__, e)\n raise\n \n # make a blocking call\n> reply_message = self.send_message_with_reply_and_block(\n message, timeout)\nE dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NameHasNoOwner: Could not get owner of name 'org.freedesktop.Notifications': no such name\n\n.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException\n\nDuring handling of the above exception, another exception occurred:\n\n @pytest.fixture(scope=\"session\")\n def notifier():\n \"\"\"Importe DBusNotify avec un SessionBus actif (dunst -print).\"\"\"\n import slic.utils.dbusnotify as dbn\n> return dbn.DBusNotify()\n\ntests/test_utils_dbusnotify.py:24: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \nslic/utils/dbusnotify.py:15: in __init__\n obj = bus.get_object(BUS_NAME, OBJECT_PATH)\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:237: in get_object\n return self.ProxyObjectClass(self, bus_name, object_path,\n.pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py:250: in __init__\n self._named_service = conn.activate_name_owner(bus_name)\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:178: in activate_name_owner\n self.start_service_by_name(bus_name)\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:273: in start_service_by_name\n return (True, self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nbus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'\ndbus_interface = 'org.freedesktop.DBus', method = 'StartServiceByName'\nsignature = 'su', args = ('org.freedesktop.Notifications', 0), timeout = -1.0\nbyte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}\nmessage = \n\n def call_blocking(self, bus_name, object_path, dbus_interface, method,\n signature, args, timeout=-1.0,\n byte_arrays=False, **kwargs):\n \"\"\"Call the given method, synchronously.\n :Since: 0.81.0\n \"\"\"\n if object_path == LOCAL_PATH:\n raise DBusException('Methods may not be called on the reserved '\n 'path %s' % LOCAL_PATH)\n if dbus_interface == LOCAL_IFACE:\n raise DBusException('Methods may not be called on the reserved '\n 'interface %s' % LOCAL_IFACE)\n # no need to validate other args - MethodCallMessage ctor will do\n \n get_args_opts = dict(byte_arrays=byte_arrays)\n if 'utf8_strings' in kwargs:\n raise TypeError(\"unexpected keyword argument 'utf8_strings'\")\n \n message = MethodCallMessage(destination=bus_name,\n path=object_path,\n interface=dbus_interface,\n method=method)\n # Add the arguments to the function\n try:\n message.append(signature=signature, *args)\n except Exception as e:\n logging.basicConfig()\n _logger.error('Unable to set arguments %r according to '\n 'signature %r: %s: %s',\n args, signature, e.__class__, e)\n raise\n \n # make a blocking call\n> reply_message = self.send_message_with_reply_and_block(\n message, timeout)\nE dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5\n\n.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException"}, "teardown": {"duration": 0.00022685201838612556, "outcome": "passed"}}, {"nodeid": "tests/test_utils_dbusnotify.py::test_get_capabilities", "lineno": 56, "outcome": "error", "keywords": ["test_get_capabilities", "test_utils_dbusnotify.py", "tests", "slic", ""], "setup": {"duration": 0.0001901029609143734, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py", "lineno": 634, "message": "dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5"}, "traceback": [{"path": "tests/test_utils_dbusnotify.py", "lineno": 24, "message": ""}, {"path": "slic/utils/dbusnotify.py", "lineno": 15, "message": "in __init__"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py", "lineno": 237, "message": "in get_object"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py", "lineno": 250, "message": "in __init__"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py", "lineno": 178, "message": "in activate_name_owner"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py", "lineno": 273, "message": "in start_service_by_name"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py", "lineno": 634, "message": "DBusException"}], "longrepr": "self = \nbus_name = 'org.freedesktop.Notifications'\n\n def activate_name_owner(self, bus_name):\n if (bus_name is not None and bus_name[:1] != ':'\n and bus_name != BUS_DAEMON_NAME):\n try:\n> return self.get_name_owner(bus_name)\n\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:173: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:348: in get_name_owner\n return self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nbus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'\ndbus_interface = 'org.freedesktop.DBus', method = 'GetNameOwner'\nsignature = 's', args = ('org.freedesktop.Notifications',), timeout = -1.0\nbyte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}\nmessage = \n\n def call_blocking(self, bus_name, object_path, dbus_interface, method,\n signature, args, timeout=-1.0,\n byte_arrays=False, **kwargs):\n \"\"\"Call the given method, synchronously.\n :Since: 0.81.0\n \"\"\"\n if object_path == LOCAL_PATH:\n raise DBusException('Methods may not be called on the reserved '\n 'path %s' % LOCAL_PATH)\n if dbus_interface == LOCAL_IFACE:\n raise DBusException('Methods may not be called on the reserved '\n 'interface %s' % LOCAL_IFACE)\n # no need to validate other args - MethodCallMessage ctor will do\n \n get_args_opts = dict(byte_arrays=byte_arrays)\n if 'utf8_strings' in kwargs:\n raise TypeError(\"unexpected keyword argument 'utf8_strings'\")\n \n message = MethodCallMessage(destination=bus_name,\n path=object_path,\n interface=dbus_interface,\n method=method)\n # Add the arguments to the function\n try:\n message.append(signature=signature, *args)\n except Exception as e:\n logging.basicConfig()\n _logger.error('Unable to set arguments %r according to '\n 'signature %r: %s: %s',\n args, signature, e.__class__, e)\n raise\n \n # make a blocking call\n> reply_message = self.send_message_with_reply_and_block(\n message, timeout)\nE dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NameHasNoOwner: Could not get owner of name 'org.freedesktop.Notifications': no such name\n\n.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException\n\nDuring handling of the above exception, another exception occurred:\n\n @pytest.fixture(scope=\"session\")\n def notifier():\n \"\"\"Importe DBusNotify avec un SessionBus actif (dunst -print).\"\"\"\n import slic.utils.dbusnotify as dbn\n> return dbn.DBusNotify()\n\ntests/test_utils_dbusnotify.py:24: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \nslic/utils/dbusnotify.py:15: in __init__\n obj = bus.get_object(BUS_NAME, OBJECT_PATH)\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:237: in get_object\n return self.ProxyObjectClass(self, bus_name, object_path,\n.pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py:250: in __init__\n self._named_service = conn.activate_name_owner(bus_name)\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:178: in activate_name_owner\n self.start_service_by_name(bus_name)\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:273: in start_service_by_name\n return (True, self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nbus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'\ndbus_interface = 'org.freedesktop.DBus', method = 'StartServiceByName'\nsignature = 'su', args = ('org.freedesktop.Notifications', 0), timeout = -1.0\nbyte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}\nmessage = \n\n def call_blocking(self, bus_name, object_path, dbus_interface, method,\n signature, args, timeout=-1.0,\n byte_arrays=False, **kwargs):\n \"\"\"Call the given method, synchronously.\n :Since: 0.81.0\n \"\"\"\n if object_path == LOCAL_PATH:\n raise DBusException('Methods may not be called on the reserved '\n 'path %s' % LOCAL_PATH)\n if dbus_interface == LOCAL_IFACE:\n raise DBusException('Methods may not be called on the reserved '\n 'interface %s' % LOCAL_IFACE)\n # no need to validate other args - MethodCallMessage ctor will do\n \n get_args_opts = dict(byte_arrays=byte_arrays)\n if 'utf8_strings' in kwargs:\n raise TypeError(\"unexpected keyword argument 'utf8_strings'\")\n \n message = MethodCallMessage(destination=bus_name,\n path=object_path,\n interface=dbus_interface,\n method=method)\n # Add the arguments to the function\n try:\n message.append(signature=signature, *args)\n except Exception as e:\n logging.basicConfig()\n _logger.error('Unable to set arguments %r according to '\n 'signature %r: %s: %s',\n args, signature, e.__class__, e)\n raise\n \n # make a blocking call\n> reply_message = self.send_message_with_reply_and_block(\n message, timeout)\nE dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5\n\n.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException"}, "teardown": {"duration": 0.00026099616661667824, "outcome": "passed"}}, {"nodeid": "tests/test_utils_dbusnotify.py::test_notify_and_close", "lineno": 71, "outcome": "error", "keywords": ["test_notify_and_close", "test_utils_dbusnotify.py", "tests", "slic", ""], "setup": {"duration": 0.0002445271238684654, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py", "lineno": 634, "message": "dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5"}, "traceback": [{"path": "tests/test_utils_dbusnotify.py", "lineno": 24, "message": ""}, {"path": "slic/utils/dbusnotify.py", "lineno": 15, "message": "in __init__"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py", "lineno": 237, "message": "in get_object"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py", "lineno": 250, "message": "in __init__"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py", "lineno": 178, "message": "in activate_name_owner"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py", "lineno": 273, "message": "in start_service_by_name"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py", "lineno": 634, "message": "DBusException"}], "longrepr": "self = \nbus_name = 'org.freedesktop.Notifications'\n\n def activate_name_owner(self, bus_name):\n if (bus_name is not None and bus_name[:1] != ':'\n and bus_name != BUS_DAEMON_NAME):\n try:\n> return self.get_name_owner(bus_name)\n\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:173: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:348: in get_name_owner\n return self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nbus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'\ndbus_interface = 'org.freedesktop.DBus', method = 'GetNameOwner'\nsignature = 's', args = ('org.freedesktop.Notifications',), timeout = -1.0\nbyte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}\nmessage = \n\n def call_blocking(self, bus_name, object_path, dbus_interface, method,\n signature, args, timeout=-1.0,\n byte_arrays=False, **kwargs):\n \"\"\"Call the given method, synchronously.\n :Since: 0.81.0\n \"\"\"\n if object_path == LOCAL_PATH:\n raise DBusException('Methods may not be called on the reserved '\n 'path %s' % LOCAL_PATH)\n if dbus_interface == LOCAL_IFACE:\n raise DBusException('Methods may not be called on the reserved '\n 'interface %s' % LOCAL_IFACE)\n # no need to validate other args - MethodCallMessage ctor will do\n \n get_args_opts = dict(byte_arrays=byte_arrays)\n if 'utf8_strings' in kwargs:\n raise TypeError(\"unexpected keyword argument 'utf8_strings'\")\n \n message = MethodCallMessage(destination=bus_name,\n path=object_path,\n interface=dbus_interface,\n method=method)\n # Add the arguments to the function\n try:\n message.append(signature=signature, *args)\n except Exception as e:\n logging.basicConfig()\n _logger.error('Unable to set arguments %r according to '\n 'signature %r: %s: %s',\n args, signature, e.__class__, e)\n raise\n \n # make a blocking call\n> reply_message = self.send_message_with_reply_and_block(\n message, timeout)\nE dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NameHasNoOwner: Could not get owner of name 'org.freedesktop.Notifications': no such name\n\n.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException\n\nDuring handling of the above exception, another exception occurred:\n\n @pytest.fixture(scope=\"session\")\n def notifier():\n \"\"\"Importe DBusNotify avec un SessionBus actif (dunst -print).\"\"\"\n import slic.utils.dbusnotify as dbn\n> return dbn.DBusNotify()\n\ntests/test_utils_dbusnotify.py:24: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \nslic/utils/dbusnotify.py:15: in __init__\n obj = bus.get_object(BUS_NAME, OBJECT_PATH)\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:237: in get_object\n return self.ProxyObjectClass(self, bus_name, object_path,\n.pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py:250: in __init__\n self._named_service = conn.activate_name_owner(bus_name)\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:178: in activate_name_owner\n self.start_service_by_name(bus_name)\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:273: in start_service_by_name\n return (True, self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nbus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'\ndbus_interface = 'org.freedesktop.DBus', method = 'StartServiceByName'\nsignature = 'su', args = ('org.freedesktop.Notifications', 0), timeout = -1.0\nbyte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}\nmessage = \n\n def call_blocking(self, bus_name, object_path, dbus_interface, method,\n signature, args, timeout=-1.0,\n byte_arrays=False, **kwargs):\n \"\"\"Call the given method, synchronously.\n :Since: 0.81.0\n \"\"\"\n if object_path == LOCAL_PATH:\n raise DBusException('Methods may not be called on the reserved '\n 'path %s' % LOCAL_PATH)\n if dbus_interface == LOCAL_IFACE:\n raise DBusException('Methods may not be called on the reserved '\n 'interface %s' % LOCAL_IFACE)\n # no need to validate other args - MethodCallMessage ctor will do\n \n get_args_opts = dict(byte_arrays=byte_arrays)\n if 'utf8_strings' in kwargs:\n raise TypeError(\"unexpected keyword argument 'utf8_strings'\")\n \n message = MethodCallMessage(destination=bus_name,\n path=object_path,\n interface=dbus_interface,\n method=method)\n # Add the arguments to the function\n try:\n message.append(signature=signature, *args)\n except Exception as e:\n logging.basicConfig()\n _logger.error('Unable to set arguments %r according to '\n 'signature %r: %s: %s',\n args, signature, e.__class__, e)\n raise\n \n # make a blocking call\n> reply_message = self.send_message_with_reply_and_block(\n message, timeout)\nE dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5\n\n.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException"}, "teardown": {"duration": 0.00022699404507875443, "outcome": "passed"}}, {"nodeid": "tests/test_utils_dbusnotify.py::test_notify_invalid_value", "lineno": 81, "outcome": "error", "keywords": ["test_notify_invalid_value", "test_utils_dbusnotify.py", "tests", "slic", ""], "setup": {"duration": 0.00017999298870563507, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py", "lineno": 634, "message": "dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5"}, "traceback": [{"path": "tests/test_utils_dbusnotify.py", "lineno": 24, "message": ""}, {"path": "slic/utils/dbusnotify.py", "lineno": 15, "message": "in __init__"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py", "lineno": 237, "message": "in get_object"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py", "lineno": 250, "message": "in __init__"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py", "lineno": 178, "message": "in activate_name_owner"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py", "lineno": 273, "message": "in start_service_by_name"}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py", "lineno": 634, "message": "DBusException"}], "longrepr": "self = \nbus_name = 'org.freedesktop.Notifications'\n\n def activate_name_owner(self, bus_name):\n if (bus_name is not None and bus_name[:1] != ':'\n and bus_name != BUS_DAEMON_NAME):\n try:\n> return self.get_name_owner(bus_name)\n\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:173: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:348: in get_name_owner\n return self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nbus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'\ndbus_interface = 'org.freedesktop.DBus', method = 'GetNameOwner'\nsignature = 's', args = ('org.freedesktop.Notifications',), timeout = -1.0\nbyte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}\nmessage = \n\n def call_blocking(self, bus_name, object_path, dbus_interface, method,\n signature, args, timeout=-1.0,\n byte_arrays=False, **kwargs):\n \"\"\"Call the given method, synchronously.\n :Since: 0.81.0\n \"\"\"\n if object_path == LOCAL_PATH:\n raise DBusException('Methods may not be called on the reserved '\n 'path %s' % LOCAL_PATH)\n if dbus_interface == LOCAL_IFACE:\n raise DBusException('Methods may not be called on the reserved '\n 'interface %s' % LOCAL_IFACE)\n # no need to validate other args - MethodCallMessage ctor will do\n \n get_args_opts = dict(byte_arrays=byte_arrays)\n if 'utf8_strings' in kwargs:\n raise TypeError(\"unexpected keyword argument 'utf8_strings'\")\n \n message = MethodCallMessage(destination=bus_name,\n path=object_path,\n interface=dbus_interface,\n method=method)\n # Add the arguments to the function\n try:\n message.append(signature=signature, *args)\n except Exception as e:\n logging.basicConfig()\n _logger.error('Unable to set arguments %r according to '\n 'signature %r: %s: %s',\n args, signature, e.__class__, e)\n raise\n \n # make a blocking call\n> reply_message = self.send_message_with_reply_and_block(\n message, timeout)\nE dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NameHasNoOwner: Could not get owner of name 'org.freedesktop.Notifications': no such name\n\n.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException\n\nDuring handling of the above exception, another exception occurred:\n\n @pytest.fixture(scope=\"session\")\n def notifier():\n \"\"\"Importe DBusNotify avec un SessionBus actif (dunst -print).\"\"\"\n import slic.utils.dbusnotify as dbn\n> return dbn.DBusNotify()\n\ntests/test_utils_dbusnotify.py:24: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \nslic/utils/dbusnotify.py:15: in __init__\n obj = bus.get_object(BUS_NAME, OBJECT_PATH)\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:237: in get_object\n return self.ProxyObjectClass(self, bus_name, object_path,\n.pixi/envs/default/lib/python3.8/site-packages/dbus/proxies.py:250: in __init__\n self._named_service = conn.activate_name_owner(bus_name)\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:178: in activate_name_owner\n self.start_service_by_name(bus_name)\n.pixi/envs/default/lib/python3.8/site-packages/dbus/bus.py:273: in start_service_by_name\n return (True, self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nbus_name = 'org.freedesktop.DBus', object_path = '/org/freedesktop/DBus'\ndbus_interface = 'org.freedesktop.DBus', method = 'StartServiceByName'\nsignature = 'su', args = ('org.freedesktop.Notifications', 0), timeout = -1.0\nbyte_arrays = False, kwargs = {}, get_args_opts = {'byte_arrays': False}\nmessage = \n\n def call_blocking(self, bus_name, object_path, dbus_interface, method,\n signature, args, timeout=-1.0,\n byte_arrays=False, **kwargs):\n \"\"\"Call the given method, synchronously.\n :Since: 0.81.0\n \"\"\"\n if object_path == LOCAL_PATH:\n raise DBusException('Methods may not be called on the reserved '\n 'path %s' % LOCAL_PATH)\n if dbus_interface == LOCAL_IFACE:\n raise DBusException('Methods may not be called on the reserved '\n 'interface %s' % LOCAL_IFACE)\n # no need to validate other args - MethodCallMessage ctor will do\n \n get_args_opts = dict(byte_arrays=byte_arrays)\n if 'utf8_strings' in kwargs:\n raise TypeError(\"unexpected keyword argument 'utf8_strings'\")\n \n message = MethodCallMessage(destination=bus_name,\n path=object_path,\n interface=dbus_interface,\n method=method)\n # Add the arguments to the function\n try:\n message.append(signature=signature, *args)\n except Exception as e:\n logging.basicConfig()\n _logger.error('Unable to set arguments %r according to '\n 'signature %r: %s: %s',\n args, signature, e.__class__, e)\n raise\n \n # make a blocking call\n> reply_message = self.send_message_with_reply_and_block(\n message, timeout)\nE dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildSignaled: Process org.freedesktop.Notifications received signal 5\n\n.pixi/envs/default/lib/python3.8/site-packages/dbus/connection.py:634: DBusException"}, "teardown": {"duration": 0.00022597983479499817, "outcome": "passed"}}, {"nodeid": "tests/test_utils_dbusnotify.py::test_convert_dbus_strings", "lineno": 87, "outcome": "passed", "keywords": ["test_convert_dbus_strings", "test_utils_dbusnotify.py", "tests", "slic", ""], "setup": {"duration": 0.00013469718396663666, "outcome": "passed"}, "call": {"duration": 0.00020747492089867592, "outcome": "passed"}, "teardown": {"duration": 0.00016357796266674995, "outcome": "passed"}}], "warnings": [{"message": "invalid escape sequence \\-", "category": "DeprecationWarning", "when": "runtest", "filename": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/bsread/h5.py", "lineno": 207}, {"message": "The module numpy.dual is deprecated. Instead of using dual, use the functions directly from numpy or scipy.", "category": "DeprecationWarning", "when": "runtest", "filename": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/scipy/fft/__init__.py", "lineno": 97}]}
\ No newline at end of file
diff --git a/markdown/runtime_params.json b/markdown/runtime_params.json
index 0637a088a..ec10543f3 100644
--- a/markdown/runtime_params.json
+++ b/markdown/runtime_params.json
@@ -1 +1,6 @@
-[]
\ No newline at end of file
+[
+ {
+ "nodeid": "tests/test_utils_dbusnotify.py::test_convert_dbus_strings",
+ "callspec": null
+ }
+]
\ No newline at end of file