From 02dd62936b24b43a56befa9aa4c5ccbbc87fef05 Mon Sep 17 00:00:00 2001 From: ci-bot Date: Mon, 18 Aug 2025 13:53:56 +0000 Subject: [PATCH] CI: update test report and coverage files --- markdown/TEST-REPORT.md | 2058 ++++++++++++++++++++++++++++------ markdown/coverage-summary.md | 227 ++++ markdown/pytest-report.json | 2 +- markdown/runtime_params.json | 27 +- 4 files changed, 1916 insertions(+), 398 deletions(-) diff --git a/markdown/TEST-REPORT.md b/markdown/TEST-REPORT.md index 671c3ef2b..0266077b2 100644 --- a/markdown/TEST-REPORT.md +++ b/markdown/TEST-REPORT.md @@ -1,286 +1,34 @@ # ๐Ÿงช Test Report -*Generated on 2025-08-18 14:47:13 CEST* +*Generated on 2025-08-18 15:53:55 CEST* ## ๐Ÿงพ General Info -- **duration**: 5.467590093612671 +- **duration**: 1.397437334060669 - **root**: /workspace/tligui_y/slic - **environment**: {} ## ๐Ÿ“‹ Summary -- **Passed**: 5 -- **Failed**: 1 -- **Total**: 6 -- **Collected**: 6 +- **Error**: 7 +- **Total**: 7 +- **Collected**: 7 ## ๐Ÿ”Ž Tests
-โœ… Passed (5) +โŒ Error (7) -
- ๐Ÿ“„ test_utils_duo.py + ๐Ÿ“„ test_utils_dbusnotify.py - โ†ณ Function: TestPickledDictReal + โ†ณ Function: test_notify_create -
- โœ… Test 1 + โŒ Test 1 **_*๐Ÿ“Œ Setup phase*_** **duration:** ```python - 0.0003845398314297199 - ``` - - **outcome:** - - ```python - passed - ``` - - **_*๐Ÿ“Œ Call phase*_** - - **duration:** - - ```python - 0.029990892857313156 - ``` - - **outcome:** - - ```python - passed - ``` - - **_*๐Ÿ“Œ Teardown phase*_** - - **duration:** - - ```python - 0.0003507360816001892 - ``` - - **outcome:** - - ```python - passed - ``` -
- -
- โœ… Test 2 - - **_*๐Ÿ“Œ Setup phase*_** - - **duration:** - - ```python - 0.00014052679762244225 - ``` - - **outcome:** - - ```python - passed - ``` - - **_*๐Ÿ“Œ Call phase*_** - - **duration:** - - ```python - 0.019240790978074074 - ``` - - **outcome:** - - ```python - passed - ``` - - **_*๐Ÿ“Œ Teardown phase*_** - - **duration:** - - ```python - 0.00017424626275897026 - ``` - - **outcome:** - - ```python - passed - ``` -
- โ†ณ Function: TestSecrets - -
- โœ… Test 3 - - **_*๐Ÿ“Œ Setup phase*_** - - **duration:** - - ```python - 0.0008502216078341007 - ``` - - **outcome:** - - ```python - passed - ``` - - **_*๐Ÿ“Œ Call phase*_** - - **duration:** - - ```python - 0.011314416769891977 - ``` - - **outcome:** - - ```python - passed - ``` - - **_*๐Ÿ“Œ Teardown phase*_** - - **duration:** - - ```python - 0.000452475156635046 - ``` - - **outcome:** - - ```python - passed - ``` -
- -
- โœ… Test 4 - - **_*๐Ÿ“Œ Setup phase*_** - - **duration:** - - ```python - 0.0007388610392808914 - ``` - - **outcome:** - - ```python - passed - ``` - - **_*๐Ÿ“Œ Call phase*_** - - **duration:** - - ```python - 0.0041467780247330666 - ``` - - **outcome:** - - ```python - passed - ``` - - **_*๐Ÿ“Œ Teardown phase*_** - - **duration:** - - ```python - 0.0021499176509678364 - ``` - - **outcome:** - - ```python - passed - ``` -
- -
- โœ… Test 5 - - **_*๐Ÿ“Œ Setup phase*_** - - **duration:** - - ```python - 0.0006002751179039478 - ``` - - **outcome:** - - ```python - passed - ``` - - **_*๐Ÿ“Œ Call phase*_** - - **duration:** - - ```python - 0.0007952856831252575 - ``` - - **outcome:** - - ```python - passed - ``` - - **_*๐Ÿ“Œ Teardown phase*_** - - **duration:** - - ```python - 0.00032347580417990685 - ``` - - **outcome:** - - ```python - passed - ``` -
-
- -
- -
-โŒ Failed (1) - - -
- ๐Ÿ“„ test_utils_duo.py - - โ†ณ Function: test_list_pgroups - -
- โŒ Test 6 - - **_*๐Ÿ“Œ Setup phase*_** - - **duration:** - - ```python - 0.0001274608075618744 - ``` - - **outcome:** - - ```python - passed - ``` - - **_*๐Ÿ“Œ Call phase*_** - - **duration:** - - ```python - 0.0537314279936254 + 0.004251067992299795 ``` **outcome:** @@ -292,69 +40,213 @@ **crash:** ```python - path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/requests/models.py - lineno: 1024 - message: requests.exceptions.HTTPError: 404 Client Error: Unknown p-group: for url: https://duo.psi.ch/duo/api.php/v1/CalendarInfos/pgroup/ + 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:** ```python - - path: tests/test_utils_duo.py - lineno: 143 + - path: tests/test_utils_dbusnotify.py + lineno: 29 message: None - - path: .pixi/envs/default/lib/python3.8/site-packages/requests/models.py - lineno: 1024 - message: HTTPError + - 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 - def test_list_pgroups(): - """Return the list of available pgroups (IDs and names).""" - KEY = "fried-BRAN-gorgon-togo-fledge-mummify-dustbin-advert" - headers = {"x-api-secret": KEY} + @pytest.fixture(scope="session", autouse=True) + def mako_daemon(): + """Start mako in headless logger mode and ensure cleanup.""" + global _MAKO_PROC - resp = requests.get(URL, headers=headers) - > resp.raise_for_status() + # 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_duo.py:143: + 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 = + 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 raise_for_status(self): - """Raises :class:`HTTPError`, if one occurred.""" + 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)""" - http_error_msg = "" - if isinstance(self.reason, bytes): - # We attempt to decode utf-8 first because some servers - # choose to localize their reason strings. If the string - # isn't utf-8, we fall back to iso-8859-1 for all other - # encodings. (See PR #3538) - try: - reason = self.reason.decode("utf-8") - except UnicodeDecodeError: - reason = self.reason.decode("iso-8859-1") + 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: - reason = self.reason + args = list(args) - if 400 <= self.status_code < 500: - http_error_msg = ( - f"{self.status_code} Client Error: {reason} for url: {self.url}" - ) + 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 - elif 500 <= self.status_code < 600: - http_error_msg = ( - f"{self.status_code} Server Error: {reason} for url: {self.url}" - ) + if executable is None: + executable = args[0] - if http_error_msg: - > raise HTTPError(http_error_msg, response=self) - E requests.exceptions.HTTPError: 404 Client Error: Unknown p-group: for url: https://duo.psi.ch/duo/api.php/v1/CalendarInfos/pgroup/ + 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/site-packages/requests/models.py:1024: HTTPError + .pixi/envs/default/lib/python3.8/subprocess.py:1720: FileNotFoundError ``` **_*๐Ÿ“Œ Teardown phase*_** @@ -362,7 +254,1471 @@ **duration:** ```python - 0.00021975208073854446 + 0.0003444352187216282 + ``` + + **outcome:** + + ```python + passed + ``` +
+ โ†ณ Function: test_notify_update + -
+ โŒ Test 2 + + **_*๐Ÿ“Œ Setup phase*_** + + **duration:** + + ```python + 0.0002047787420451641 + ``` + + **outcome:** + + ```python + failed + ``` + + **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' + ``` + + **traceback:** + + ```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 + ``` + + **_*๐Ÿ“Œ Teardown phase*_** + + **duration:** + + ```python + 0.00022171391174197197 + ``` + + **outcome:** + + ```python + passed + ``` +
+ โ†ณ Function: test_get_server_info + -
+ โŒ Test 3 + + **_*๐Ÿ“Œ Setup phase*_** + + **duration:** + + ```python + 0.00018394412472844124 + ``` + + **outcome:** + + ```python + failed + ``` + + **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' + ``` + + **traceback:** + + ```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 + ``` + + **_*๐Ÿ“Œ Teardown phase*_** + + **duration:** + + ```python + 0.0002314755693078041 + ``` + + **outcome:** + + ```python + passed + ``` +
+ โ†ณ Function: test_get_capabilities + -
+ โŒ Test 4 + + **_*๐Ÿ“Œ Setup phase*_** + + **duration:** + + ```python + 0.00018874090164899826 + ``` + + **outcome:** + + ```python + failed + ``` + + **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' + ``` + + **traceback:** + + ```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 + ``` + + **_*๐Ÿ“Œ Teardown phase*_** + + **duration:** + + ```python + 0.0002180039882659912 + ``` + + **outcome:** + + ```python + passed + ``` +
+ โ†ณ Function: test_notify_and_close + -
+ โŒ Test 5 + + **_*๐Ÿ“Œ Setup phase*_** + + **duration:** + + ```python + 0.0001881709322333336 + ``` + + **outcome:** + + ```python + failed + ``` + + **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' + ``` + + **traceback:** + + ```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 + ``` + + **_*๐Ÿ“Œ Teardown phase*_** + + **duration:** + + ```python + 0.00021681608632206917 + ``` + + **outcome:** + + ```python + passed + ``` +
+ โ†ณ Function: test_notify_invalid_value + -
+ โŒ Test 6 + + **_*๐Ÿ“Œ Setup phase*_** + + **duration:** + + ```python + 0.00023002317175269127 + ``` + + **outcome:** + + ```python + failed + ``` + + **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' + ``` + + **traceback:** + + ```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 + ``` + + **_*๐Ÿ“Œ Teardown phase*_** + + **duration:** + + ```python + 0.00021888269111514091 + ``` + + **outcome:** + + ```python + passed + ``` +
+ โ†ณ Function: test_convert_dbus_strings + -
+ โŒ Test 7 + + **_*๐Ÿ“Œ Setup phase*_** + + **duration:** + + ```python + 0.00018321815878152847 + ``` + + **outcome:** + + ```python + failed + ``` + + **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' + ``` + + **traceback:** + + ```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 + ``` + + **_*๐Ÿ“Œ Teardown phase*_** + + **duration:** + + ```python + 0.00028424011543393135 ``` **outcome:** @@ -387,97 +1743,57 @@ - **result:** ```python - - nodeid: tests/test_utils_duo.py + - nodeid: tests/test_utils_dbusnotify.py type: Module ```
-โœ… tests (3 tests) +โœ… tests (2 tests) -
- โœ… tests/test_utils_duo.py + โœ… tests/test_utils_dbusnotify.py - **Outcome:** `passed` - **result:** ```python - - nodeid: tests/test_utils_duo.py::TestPickledDictReal - type: Class - - nodeid: tests/test_utils_duo.py::TestSecrets - type: Class - - nodeid: tests/test_utils_duo.py::test_list_pgroups + - nodeid: tests/test_utils_dbusnotify.py::DBusTestCase + type: UnitTestCase + - nodeid: tests/test_utils_dbusnotify.py::test_notify_create type: Function - lineno: 136 + 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/test_utils_duo.py::TestPickledDictReal + โœ… tests/test_utils_dbusnotify.py::DBusTestCase - **Outcome:** `passed` - **result:** ```python - - nodeid: tests/test_utils_duo.py::TestPickledDictReal::test_set_get - type: Function - lineno: 16 - - nodeid: tests/test_utils_duo.py::TestPickledDictReal::test_load - type: Function - lineno: 50 - ``` -
- - -
- โœ… tests/test_utils_duo.py::TestSecrets - - - **Outcome:** `passed` - - **result:** - - ```python - - nodeid: tests/test_utils_duo.py::TestSecrets::test_secret_workflow - type: Function - lineno: 94 - - nodeid: tests/test_utils_duo.py::TestSecrets::test_multiple_secrets - type: Function - lineno: 111 - - nodeid: tests/test_utils_duo.py::TestSecrets::test_keyboard_interrupt - type: Function - lineno: 123 + [] ```
-## โš ๏ธ Warnings - -
-
-Warnings nยบ1 - -```python -message: invalid escape sequence \- -category: DeprecationWarning -when: collect -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: collect -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 79ead1176..91083c6b4 100644 --- a/markdown/coverage-summary.md +++ b/markdown/coverage-summary.md @@ -52036,3 +52036,230 @@ | slic/utils/utils.py | 17 | 8 | 53% | | slic/utils/xrange.py | 33 | 30 | 9% | | **TOTAL** | **9984** | **7442** | **25%** | +| Name | Stmts | Miss | Cover | +|----------------------------------------------- | -------: | -------: | -----: | +| slic/\_\_init\_\_.py | 20 | 20 | 0% | +| slic/core/\_\_init\_\_.py | 5 | 5 | 0% | +| slic/core/acquisition/\_\_init\_\_.py | 7 | 7 | 0% | +| slic/core/acquisition/acquisition.py | 56 | 56 | 0% | +| slic/core/acquisition/baseacquisition.py | 5 | 5 | 0% | +| slic/core/acquisition/broker/\_\_init\_\_.py | 2 | 2 | 0% | +| slic/core/acquisition/broker/brokerclient.py | 104 | 104 | 0% | +| slic/core/acquisition/broker/brokerconfig.py | 102 | 102 | 0% | +| slic/core/acquisition/broker/pedestal.py | 66 | 66 | 0% | +| slic/core/acquisition/broker/pids.py | 17 | 17 | 0% | +| slic/core/acquisition/broker/post\_retrieve.py | 120 | 120 | 0% | +| slic/core/acquisition/broker/requeststatus.py | 77 | 77 | 0% | +| slic/core/acquisition/broker/restapi.py | 147 | 147 | 0% | +| slic/core/acquisition/broker/tools.py | 52 | 52 | 0% | +| slic/core/acquisition/bsacquisition.py | 10 | 10 | 0% | +| slic/core/acquisition/bschannels.py | 30 | 30 | 0% | +| slic/core/acquisition/channels.py | 51 | 51 | 0% | +| slic/core/acquisition/dbacquisition.py | 19 | 19 | 0% | +| slic/core/acquisition/detcfg.py | 82 | 82 | 0% | +| 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 | 76 | 0% | +| slic/core/acquisition/pedestals.py | 69 | 69 | 0% | +| slic/core/acquisition/pvacquisition.py | 60 | 60 | 0% | +| slic/core/acquisition/pvchannels.py | 13 | 13 | 0% | +| slic/core/acquisition/sfacquisition.py | 159 | 159 | 0% | +| slic/core/acquisition/sfpaths.py | 23 | 23 | 0% | +| slic/core/acquisition/spreadsheet.py | 45 | 45 | 0% | +| slic/core/adjustable/\_\_init\_\_.py | 11 | 11 | 0% | +| slic/core/adjustable/adjustable.py | 50 | 50 | 0% | +| slic/core/adjustable/baseadjustable.py | 28 | 28 | 0% | +| slic/core/adjustable/collection.py | 22 | 22 | 0% | +| slic/core/adjustable/combined.py | 15 | 15 | 0% | +| slic/core/adjustable/convenience.py | 35 | 35 | 0% | +| slic/core/adjustable/converted.py | 16 | 16 | 0% | +| slic/core/adjustable/dummyadjustable.py | 41 | 41 | 0% | +| slic/core/adjustable/error.py | 2 | 2 | 0% | +| slic/core/adjustable/genericadjustable.py | 32 | 32 | 0% | +| slic/core/adjustable/limited.py | 29 | 29 | 0% | +| slic/core/adjustable/linked.py | 22 | 22 | 0% | +| slic/core/adjustable/pvadjustable.py | 119 | 119 | 0% | +| slic/core/adjustable/pvchangemon.py | 77 | 77 | 0% | +| slic/core/adjustable/pvenumadjustable.py | 38 | 38 | 0% | +| slic/core/adjustable/scaler.py | 22 | 22 | 0% | +| slic/core/condition/\_\_init\_\_.py | 2 | 2 | 0% | +| slic/core/condition/basecondition.py | 8 | 8 | 0% | +| slic/core/condition/condition.py | 107 | 107 | 0% | +| slic/core/condition/pvcondition.py | 21 | 21 | 0% | +| slic/core/condition/valuecondition.py | 22 | 22 | 0% | +| slic/core/device/\_\_init\_\_.py | 2 | 2 | 0% | +| slic/core/device/auto.py | 12 | 12 | 0% | +| slic/core/device/basedevice.py | 2 | 2 | 0% | +| slic/core/device/device.py | 46 | 46 | 0% | +| slic/core/device/filtered.py | 23 | 23 | 0% | +| slic/core/device/simpledevice.py | 6 | 6 | 0% | +| slic/core/scanner/\_\_init\_\_.py | 1 | 1 | 0% | +| slic/core/scanner/runname.py | 36 | 36 | 0% | +| slic/core/scanner/scanbackend.py | 232 | 232 | 0% | +| slic/core/scanner/scaninfo.py | 45 | 45 | 0% | +| slic/core/scanner/scanner.py | 136 | 136 | 0% | +| slic/core/sensor/\_\_init\_\_.py | 8 | 8 | 0% | +| slic/core/sensor/basesensor.py | 12 | 12 | 0% | +| slic/core/sensor/bscombined.py | 9 | 9 | 0% | +| slic/core/sensor/bsmonitor.py | 102 | 102 | 0% | +| slic/core/sensor/bsnorm.py | 12 | 12 | 0% | +| slic/core/sensor/bssensor.py | 6 | 6 | 0% | +| slic/core/sensor/combined.py | 31 | 31 | 0% | +| slic/core/sensor/monitor.py | 62 | 62 | 0% | +| slic/core/sensor/norm.py | 9 | 9 | 0% | +| slic/core/sensor/pvsensor.py | 32 | 32 | 0% | +| slic/core/sensor/remoteplot.py | 15 | 15 | 0% | +| slic/core/sensor/sensor.py | 60 | 60 | 0% | +| slic/core/task/\_\_init\_\_.py | 4 | 4 | 0% | +| slic/core/task/basetask.py | 11 | 11 | 0% | +| slic/core/task/daqtask.py | 23 | 23 | 0% | +| slic/core/task/loop.py | 57 | 57 | 0% | +| slic/core/task/producer.py | 25 | 25 | 0% | +| slic/core/task/task.py | 62 | 62 | 0% | +| slic/devices/\_\_init\_\_.py | 7 | 7 | 0% | +| slic/devices/cameras/\_\_init\_\_.py | 4 | 4 | 0% | +| slic/devices/cameras/basler.py | 8 | 8 | 0% | +| slic/devices/cameras/camera\_bs.py | 13 | 13 | 0% | +| slic/devices/cameras/camera\_ca.py | 34 | 34 | 0% | +| slic/devices/cameras/camerabase.py | 17 | 17 | 0% | +| slic/devices/cameras/screenpanel.py | 31 | 31 | 0% | +| slic/devices/endstations/\_\_init\_\_.py | 3 | 3 | 0% | +| slic/devices/endstations/alvra\_flex.py | 10 | 10 | 0% | +| slic/devices/endstations/alvra\_huber.py | 8 | 8 | 0% | +| slic/devices/endstations/alvra\_prime.py | 48 | 48 | 0% | +| 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 | 4 | 0% | +| slic/devices/general/delay\_compensation.py | 13 | 13 | 0% | +| slic/devices/general/delay\_stage.py | 57 | 57 | 0% | +| slic/devices/general/detectors/\_\_init\_\_.py | 2 | 2 | 0% | +| slic/devices/general/detectors/buffer.py | 66 | 66 | 0% | +| slic/devices/general/detectors/digitizer.py | 13 | 13 | 0% | +| slic/devices/general/detectors/pvdatastream.py | 33 | 33 | 0% | +| slic/devices/general/detectors/timer.py | 15 | 15 | 0% | +| slic/devices/general/micosstage.py | 7 | 7 | 0% | +| slic/devices/general/motor.py | 128 | 128 | 0% | +| slic/devices/general/shutter.py | 22 | 22 | 0% | +| slic/devices/general/shutterctx.py | 18 | 18 | 0% | +| slic/devices/general/smaract.py | 169 | 169 | 0% | +| slic/devices/loptics/\_\_init\_\_.py | 2 | 2 | 0% | +| slic/devices/loptics/alvra\_explaser.py | 29 | 29 | 0% | +| slic/devices/loptics/bernina\_explaser.py | 28 | 28 | 0% | +| slic/devices/loptics/lasershutter.py | 22 | 22 | 0% | +| 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 | 253 | 0% | +| slic/devices/xdiagnostics/\_\_init\_\_.py | 2 | 2 | 0% | +| slic/devices/xdiagnostics/intensitymonitor.py | 124 | 124 | 0% | +| slic/devices/xdiagnostics/profilemonitor.py | 19 | 19 | 0% | +| slic/devices/xdiagnostics/timetools.py | 48 | 48 | 0% | +| slic/devices/xoptics/\_\_init\_\_.py | 7 | 7 | 0% | +| slic/devices/xoptics/aramis\_attenuator.py | 96 | 96 | 0% | +| slic/devices/xoptics/aramis\_reflaser.py | 23 | 23 | 0% | +| slic/devices/xoptics/dcm.py | 211 | 211 | 0% | +| slic/devices/xoptics/kb.py | 30 | 30 | 0% | +| slic/devices/xoptics/offsetmirrors.py | 9 | 9 | 0% | +| slic/devices/xoptics/pulsepicker.py | 56 | 56 | 0% | +| slic/devices/xoptics/slits/\_\_init\_\_.py | 5 | 5 | 0% | +| slic/devices/xoptics/slits/slitblades.py | 66 | 66 | 0% | +| slic/devices/xoptics/slits/slittwinunit.py | 12 | 12 | 0% | +| slic/devices/xoptics/slits/slitunit.py | 14 | 14 | 0% | +| slic/devices/xoptics/slits/slitunitcw.py | 7 | 7 | 0% | +| slic/devices/xoptics/slits/slitunitjj.py | 8 | 8 | 0% | +| slic/gui/\_\_init\_\_.py | 1 | 1 | 0% | +| slic/gui/daqframe.py | 75 | 75 | 0% | +| slic/gui/daqpanels/\_\_init\_\_.py | 6 | 6 | 0% | +| slic/gui/daqpanels/config.py | 98 | 98 | 0% | +| slic/gui/daqpanels/goto.py | 92 | 92 | 0% | +| slic/gui/daqpanels/run.py | 56 | 56 | 0% | +| slic/gui/daqpanels/scan2d.py | 77 | 77 | 0% | +| slic/gui/daqpanels/scan.py | 63 | 63 | 0% | +| slic/gui/daqpanels/sfx.py | 77 | 77 | 0% | +| slic/gui/daqpanels/special.py | 63 | 63 | 0% | +| slic/gui/daqpanels/static.py | 46 | 46 | 0% | +| slic/gui/daqpanels/tools.py | 140 | 140 | 0% | +| slic/gui/daqpanels/tweak.py | 149 | 149 | 0% | +| slic/gui/gui.py | 16 | 16 | 0% | +| slic/gui/icon.py | 8 | 8 | 0% | +| slic/gui/persist.py | 68 | 68 | 0% | +| slic/gui/widgets/\_\_init\_\_.py | 11 | 11 | 0% | +| slic/gui/widgets/alarm.py | 21 | 21 | 0% | +| slic/gui/widgets/alternative.py | 51 | 51 | 0% | +| slic/gui/widgets/boxes.py | 33 | 33 | 0% | +| slic/gui/widgets/checkbox.py | 8 | 8 | 0% | +| slic/gui/widgets/completers.py | 27 | 27 | 0% | +| slic/gui/widgets/dyncombo.py | 49 | 49 | 0% | +| slic/gui/widgets/entries.py | 253 | 253 | 0% | +| slic/gui/widgets/exc2warn.py | 15 | 15 | 0% | +| slic/gui/widgets/fname.py | 60 | 60 | 0% | +| slic/gui/widgets/jfcfg.py | 290 | 290 | 0% | +| slic/gui/widgets/jfmodcoords.py | 88 | 88 | 0% | +| slic/gui/widgets/labeled.py | 19 | 19 | 0% | +| slic/gui/widgets/lists.py | 96 | 96 | 0% | +| slic/gui/widgets/mods.py | 25 | 25 | 0% | +| slic/gui/widgets/nope.py | 26 | 26 | 0% | +| slic/gui/widgets/plotting.py | 68 | 68 | 0% | +| slic/gui/widgets/tools.py | 11 | 11 | 0% | +| slic/gui/widgets/twobuttons.py | 43 | 43 | 0% | +| slic/gui/wxdebug.py | 15 | 15 | 0% | +| slic/utils/\_\_init\_\_.py | 24 | 24 | 0% | +| slic/utils/argfwd.py | 53 | 53 | 0% | +| slic/utils/ask\_yes\_no.py | 27 | 27 | 0% | +| slic/utils/channels.py | 17 | 17 | 0% | +| slic/utils/config.py | 5 | 5 | 0% | +| slic/utils/cprint.py | 41 | 41 | 0% | +| slic/utils/dbusnotify.py | 40 | 40 | 0% | +| slic/utils/debug.py | 16 | 16 | 0% | +| slic/utils/dictext.py | 30 | 30 | 0% | +| slic/utils/dotdir.py | 10 | 10 | 0% | +| slic/utils/duo.py | 77 | 77 | 0% | +| slic/utils/elog.py | 31 | 31 | 0% | +| slic/utils/eval.py | 49 | 49 | 0% | +| slic/utils/exceptions.py | 22 | 22 | 0% | +| slic/utils/get\_adj.py | 17 | 17 | 0% | +| slic/utils/hastyepics.py | 37 | 37 | 0% | +| 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 | 22 | 0% | +| slic/utils/jsonext.py | 24 | 24 | 0% | +| 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 | 52 | 0% | +| slic/utils/logign.py | 22 | 22 | 0% | +| slic/utils/marker.py | 48 | 48 | 0% | +| slic/utils/metaclasses.py | 8 | 8 | 0% | +| slic/utils/namespace.py | 5 | 5 | 0% | +| slic/utils/npy.py | 71 | 71 | 0% | +| slic/utils/opmsg.py | 122 | 122 | 0% | +| slic/utils/path.py | 32 | 32 | 0% | +| slic/utils/picklio.py | 7 | 7 | 0% | +| slic/utils/printing.py | 77 | 77 | 0% | +| slic/utils/pv.py | 30 | 30 | 0% | +| slic/utils/pvpreload.py | 50 | 50 | 0% | +| slic/utils/pyepics.py | 64 | 64 | 0% | +| slic/utils/rangebar.py | 92 | 92 | 0% | +| slic/utils/readable.py | 12 | 12 | 0% | +| slic/utils/registry.py | 33 | 33 | 0% | +| slic/utils/reprate.py | 55 | 55 | 0% | +| slic/utils/richcfg.py | 21 | 21 | 0% | +| slic/utils/run\_later.py | 64 | 64 | 0% | +| slic/utils/screenshot.py | 30 | 30 | 0% | +| slic/utils/sendmail.py | 49 | 49 | 0% | +| slic/utils/sendsms.py | 5 | 5 | 0% | +| slic/utils/shortcut.py | 38 | 38 | 0% | +| slic/utils/snapshot.py | 6 | 6 | 0% | +| slic/utils/termtitle.py | 3 | 3 | 0% | +| slic/utils/tqdm\_mod.py | 28 | 28 | 0% | +| slic/utils/trinary.py | 4 | 4 | 0% | +| slic/utils/typecast.py | 19 | 19 | 0% | +| slic/utils/utils.py | 17 | 17 | 0% | +| slic/utils/xrange.py | 33 | 33 | 0% | +| **TOTAL** | **9984** | **9984** | **0%** | diff --git a/markdown/pytest-report.json b/markdown/pytest-report.json index 75b5637e9..fc77d6211 100644 --- a/markdown/pytest-report.json +++ b/markdown/pytest-report.json @@ -1 +1 @@ -{"created": 1755521231.8154826, "duration": 5.467590093612671, "exitcode": 1, "root": "/workspace/tligui_y/slic", "environment": {}, "summary": {"passed": 5, "failed": 1, "total": 6, "collected": 6}, "collectors": [{"nodeid": "", "outcome": "passed", "result": [{"nodeid": "tests/test_utils_duo.py", "type": "Module"}]}, {"nodeid": "tests/test_utils_duo.py::TestPickledDictReal", "outcome": "passed", "result": [{"nodeid": "tests/test_utils_duo.py::TestPickledDictReal::test_set_get", "type": "Function", "lineno": 16}, {"nodeid": "tests/test_utils_duo.py::TestPickledDictReal::test_load", "type": "Function", "lineno": 50}]}, {"nodeid": "tests/test_utils_duo.py::TestSecrets", "outcome": "passed", "result": [{"nodeid": "tests/test_utils_duo.py::TestSecrets::test_secret_workflow", "type": "Function", "lineno": 94}, {"nodeid": "tests/test_utils_duo.py::TestSecrets::test_multiple_secrets", "type": "Function", "lineno": 111}, {"nodeid": "tests/test_utils_duo.py::TestSecrets::test_keyboard_interrupt", "type": "Function", "lineno": 123}]}, {"nodeid": "tests/test_utils_duo.py", "outcome": "passed", "result": [{"nodeid": "tests/test_utils_duo.py::TestPickledDictReal", "type": "Class"}, {"nodeid": "tests/test_utils_duo.py::TestSecrets", "type": "Class"}, {"nodeid": "tests/test_utils_duo.py::test_list_pgroups", "type": "Function", "lineno": 136}]}], "tests": [{"nodeid": "tests/test_utils_duo.py::TestPickledDictReal::test_set_get", "lineno": 16, "outcome": "passed", "keywords": ["test_set_get", "TestPickledDictReal", "test_utils_duo.py", "tests", "slic", ""], "setup": {"duration": 0.0003845398314297199, "outcome": "passed"}, "call": {"duration": 0.029990892857313156, "outcome": "passed"}, "teardown": {"duration": 0.0003507360816001892, "outcome": "passed"}}, {"nodeid": "tests/test_utils_duo.py::TestPickledDictReal::test_load", "lineno": 50, "outcome": "passed", "keywords": ["test_load", "TestPickledDictReal", "test_utils_duo.py", "tests", "slic", ""], "setup": {"duration": 0.00014052679762244225, "outcome": "passed"}, "call": {"duration": 0.019240790978074074, "outcome": "passed"}, "teardown": {"duration": 0.00017424626275897026, "outcome": "passed"}}, {"nodeid": "tests/test_utils_duo.py::TestSecrets::test_secret_workflow", "lineno": 94, "outcome": "passed", "keywords": ["test_secret_workflow", "TestSecrets", "test_utils_duo.py", "tests", "slic", ""], "setup": {"duration": 0.0008502216078341007, "outcome": "passed"}, "call": {"duration": 0.011314416769891977, "outcome": "passed"}, "teardown": {"duration": 0.000452475156635046, "outcome": "passed"}}, {"nodeid": "tests/test_utils_duo.py::TestSecrets::test_multiple_secrets", "lineno": 111, "outcome": "passed", "keywords": ["test_multiple_secrets", "TestSecrets", "test_utils_duo.py", "tests", "slic", ""], "setup": {"duration": 0.0007388610392808914, "outcome": "passed"}, "call": {"duration": 0.0041467780247330666, "outcome": "passed"}, "teardown": {"duration": 0.0021499176509678364, "outcome": "passed"}}, {"nodeid": "tests/test_utils_duo.py::TestSecrets::test_keyboard_interrupt", "lineno": 123, "outcome": "passed", "keywords": ["test_keyboard_interrupt", "TestSecrets", "test_utils_duo.py", "tests", "slic", ""], "setup": {"duration": 0.0006002751179039478, "outcome": "passed"}, "call": {"duration": 0.0007952856831252575, "outcome": "passed"}, "teardown": {"duration": 0.00032347580417990685, "outcome": "passed"}}, {"nodeid": "tests/test_utils_duo.py::test_list_pgroups", "lineno": 136, "outcome": "failed", "keywords": ["test_list_pgroups", "test_utils_duo.py", "tests", "slic", ""], "setup": {"duration": 0.0001274608075618744, "outcome": "passed"}, "call": {"duration": 0.0537314279936254, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/requests/models.py", "lineno": 1024, "message": "requests.exceptions.HTTPError: 404 Client Error: Unknown p-group: for url: https://duo.psi.ch/duo/api.php/v1/CalendarInfos/pgroup/"}, "traceback": [{"path": "tests/test_utils_duo.py", "lineno": 143, "message": ""}, {"path": ".pixi/envs/default/lib/python3.8/site-packages/requests/models.py", "lineno": 1024, "message": "HTTPError"}], "longrepr": "def test_list_pgroups():\n \"\"\"Return the list of available pgroups (IDs and names).\"\"\"\n KEY = \"fried-BRAN-gorgon-togo-fledge-mummify-dustbin-advert\"\n headers = {\"x-api-secret\": KEY}\n \n resp = requests.get(URL, headers=headers)\n> resp.raise_for_status()\n\ntests/test_utils_duo.py:143: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \n\n def raise_for_status(self):\n \"\"\"Raises :class:`HTTPError`, if one occurred.\"\"\"\n \n http_error_msg = \"\"\n if isinstance(self.reason, bytes):\n # We attempt to decode utf-8 first because some servers\n # choose to localize their reason strings. If the string\n # isn't utf-8, we fall back to iso-8859-1 for all other\n # encodings. (See PR #3538)\n try:\n reason = self.reason.decode(\"utf-8\")\n except UnicodeDecodeError:\n reason = self.reason.decode(\"iso-8859-1\")\n else:\n reason = self.reason\n \n if 400 <= self.status_code < 500:\n http_error_msg = (\n f\"{self.status_code} Client Error: {reason} for url: {self.url}\"\n )\n \n elif 500 <= self.status_code < 600:\n http_error_msg = (\n f\"{self.status_code} Server Error: {reason} for url: {self.url}\"\n )\n \n if http_error_msg:\n> raise HTTPError(http_error_msg, response=self)\nE requests.exceptions.HTTPError: 404 Client Error: Unknown p-group: for url: https://duo.psi.ch/duo/api.php/v1/CalendarInfos/pgroup/\n\n.pixi/envs/default/lib/python3.8/site-packages/requests/models.py:1024: HTTPError"}, "teardown": {"duration": 0.00021975208073854446, "outcome": "passed"}}], "warnings": [{"message": "invalid escape sequence \\-", "category": "DeprecationWarning", "when": "collect", "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": "collect", "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 +{"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 diff --git a/markdown/runtime_params.json b/markdown/runtime_params.json index dfb2584be..0637a088a 100644 --- a/markdown/runtime_params.json +++ b/markdown/runtime_params.json @@ -1,26 +1 @@ -[ - { - "nodeid": "tests/test_utils_duo.py::TestPickledDictReal::test_set_get", - "callspec": null - }, - { - "nodeid": "tests/test_utils_duo.py::TestPickledDictReal::test_load", - "callspec": null - }, - { - "nodeid": "tests/test_utils_duo.py::TestSecrets::test_secret_workflow", - "callspec": null - }, - { - "nodeid": "tests/test_utils_duo.py::TestSecrets::test_multiple_secrets", - "callspec": null - }, - { - "nodeid": "tests/test_utils_duo.py::TestSecrets::test_keyboard_interrupt", - "callspec": null - }, - { - "nodeid": "tests/test_utils_duo.py::test_list_pgroups", - "callspec": null - } -] \ No newline at end of file +[] \ No newline at end of file