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