Your message dated Tue, 21 Jul 2026 13:04:44 +0000
with message-id <[email protected]>
and subject line Bug#1142373: fixed in python-softlayer 6.2.5-3
has caused the Debian Bug report #1142373,
regarding python-softlayer: autopkgtest fails with python3-click 8.3.3
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
1142373: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1142373
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Source: python-softlayer
Version: 6.2.5-2
Severity: important
Tags: ftbfs

Dear Maintainer,

To reproduce this locally, you need to install python3-click from experimental
on an unstable system or build chroot. Like this:

autopkgtest --add-apt-source='deb http://deb.debian.org/debian experimental 
main' --pin-package=experimental=src:python-click -U . -- unshare -r unstable 
-t ~/.cache/sbuild/unstable-amd64.tar

The full build log is available at
https://ci.debian.net/packages/p/python-softlayer/unstable/amd64/72934393/

Relevant part (hopefully):

=================================== FAILURES ===================================
_________________ DedicatedHostsTests.test_cancel_guests_abort _________________

self = <tests.CLI.modules.dedicatedhost_tests.DedicatedHostsTests 
testMethod=test_cancel_guests_abort>

    def test_cancel_guests_abort(self):
        result = self.run_command(['dedicatedhost', 'cancel-guests', '12345'])
>       self.assertEqual(result.exit_code, 2)
E       AssertionError: 1 != 2

tests/CLI/modules/dedicatedhost_tests.py:388: AssertionError
__________________ DedicatedHostsTests.test_cancel_host_abort __________________

self = <tests.CLI.modules.dedicatedhost_tests.DedicatedHostsTests 
testMethod=test_cancel_host_abort>

    def test_cancel_host_abort(self):
        result = self.run_command(['dedicatedhost', 'cancel', '12345'])
>       self.assertEqual(result.exit_code, 2)
E       AssertionError: 1 != 2

tests/CLI/modules/dedicatedhost_tests.py:359: AssertionError
__________________ FileTests.test_file_snapshot_cancel_force ___________________

self = <tests.CLI.modules.file_tests.FileTests 
testMethod=test_file_snapshot_cancel_force>
confirm_mock = <MagicMock name='confirm' id='140113372920336'>

    @mock.patch('SoftLayer.CLI.formatting.confirm')
    def test_file_snapshot_cancel_force(self, confirm_mock):
        confirm_mock.return_value = False
        result = self.run_command(['file', 'snapshot-cancel', '4917309'])
>       self.assertEqual(2, result.exit_code)
E       AssertionError: 2 != 1

tests/CLI/modules/file_tests.py:814: AssertionError
___________________ FileTests.test_file_volume_cancel_force ____________________

self = <tests.CLI.modules.file_tests.FileTests 
testMethod=test_file_volume_cancel_force>
confirm_mock = <MagicMock name='confirm' id='140113372919664'>

    @mock.patch('SoftLayer.CLI.formatting.confirm')
    def test_file_volume_cancel_force(self, confirm_mock):
        confirm_mock.return_value = False
        result = self.run_command(['file', 'volume-cancel', '1234'])
>       self.assertEqual(2, result.exit_code)
E       AssertionError: 2 != 1

tests/CLI/modules/file_tests.py:821: AssertionError
________________ HardwareCLITests.test_hardware_cancel_no_force ________________

self = <hardware_basic_tests.HardwareCLITests 
testMethod=test_hardware_cancel_no_force>
confirm_mock = <MagicMock name='confirm' id='140113356721520'>

    @mock.patch('SoftLayer.CLI.formatting.confirm')
    def test_hardware_cancel_no_force(self, confirm_mock):
        confirm_mock.return_value = False
        result = self.run_command(['hardware', 'cancel', '102'])
    
>       self.assertEqual(2, result.exit_code)
E       AssertionError: 2 != 1

tests/CLI/modules/hardware/hardware_basic_tests.py:1011: AssertionError
_________________________ SubnetTests.test_cancel_fail _________________________

self = <tests.CLI.modules.subnet_tests.SubnetTests testMethod=test_cancel_fail>

    def test_cancel_fail(self):
        result = self.run_command(['subnet', 'cancel', '1234'])
>       self.assertEqual(result.exit_code, 2)
E       AssertionError: 1 != 2

tests/CLI/modules/subnet_tests.py:186: AssertionError
_______________________ VirtCreateTests.test_create_like _______________________

self = <CommandLoader cli>
args = ['vs', 'create', '--like=123', '--san', '--billing=hourly']
prog_name = 'cli', complete_var = None, standalone_mode = True
windows_expand_args = True
extra = {'obj': <SoftLayer.CLI.environment.Environment object at 
0x7f6eaebca150>}

    def main(
        self,
        args: cabc.Sequence[str] | None = None,
        prog_name: str | None = None,
        complete_var: str | None = None,
        standalone_mode: bool = True,
        windows_expand_args: bool = True,
        **extra: t.Any,
    ) -> t.Any:
        """This is the way to invoke a script with all the bells and
        whistles as a command line application.  This will always terminate
        the application after a call.  If this is not wanted, ``SystemExit``
        needs to be caught.
    
        This method is also available by directly calling the instance of
        a :class:`Command`.
    
        :param args: the arguments that should be used for parsing.  If not
                     provided, ``sys.argv[1:]`` is used.
        :param prog_name: the program name that should be used.  By default
                          the program name is constructed by taking the file
                          name from ``sys.argv[0]``.
        :param complete_var: the environment variable that controls the
                             bash completion support.  The default is
                             ``"_<prog_name>_COMPLETE"`` with prog_name in
                             uppercase.
        :param standalone_mode: the default behavior is to invoke the script
                                in standalone mode.  Click will then
                                handle exceptions and convert them into
                                error messages and the function will never
                                return but shut down the interpreter.  If
                                this is set to `False` they will be
                                propagated to the caller and the return
                                value of this function is the return value
                                of :meth:`invoke`.
        :param windows_expand_args: Expand glob patterns, user dir, and
            env vars in command line args on Windows.
        :param extra: extra keyword arguments are forwarded to the context
                      constructor.  See :class:`Context` for more information.
    
        .. versionchanged:: 8.0.1
            Added the ``windows_expand_args`` parameter to allow
            disabling command line arg expansion on Windows.
    
        .. versionchanged:: 8.0
            When taking arguments from ``sys.argv`` on Windows, glob
            patterns, user dir, and env vars are expanded.
    
        .. versionchanged:: 3.0
           Added the ``standalone_mode`` parameter.
        """
        if args is None:
            args = sys.argv[1:]
    
            if os.name == "nt" and windows_expand_args:
                args = _expand_args(args)
        else:
            args = list(args)
    
        if prog_name is None:
            prog_name = _detect_program_name()
    
        # Process shell completion requests and exit early.
        self._main_shell_completion(extra, prog_name, complete_var)
    
        try:
            try:
                with self.make_context(prog_name, args, **extra) as ctx:
>                   rv = self.invoke(ctx)
                         ^^^^^^^^^^^^^^^^

/usr/lib/python3/dist-packages/click/core.py:1435: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3/dist-packages/click/core.py:1902: in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:1900: in invoke
    sub_ctx = cmd.make_context(cmd_name, args, parent=ctx)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:1245: in make_context
    self.parse_args(ctx, args)
/usr/lib/python3/dist-packages/click/core.py:1256: in parse_args
    _, args = param.handle_parse_result(ctx, opts, args)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:2583: in handle_parse_result
    value, source = self.consume_value(ctx, opts)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:3354: in consume_value
    value = self.prompt_for_value(ctx)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:3215: in prompt_for_value
    return prompt(
/usr/lib/python3/dist-packages/click/termui.py:179: in prompt
    value = prompt_func(prompt)
            ^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

text = 'Hostname [vs-test-like]: '

    def prompt_func(text: str) -> str:
        f = hidden_prompt_func if hide_input else visible_prompt_func
        try:
            # Write the prompt separately so that we get nice
            # coloring through colorama on Windows
            echo(text[:-1], nl=False, err=err)
            # Echo the last character to stdout to work around an issue where
            # readline causes backspace to clear the whole line.
            return f(text[-1:])
        except (KeyboardInterrupt, EOFError):
            # getpass doesn't print a newline if the user aborts input with ^C.
            # Allegedly this behavior is inherited from getpass(3).
            # A doc bug has been filed at https://bugs.python.org/issue24711
            if hide_input:
                echo(None, err=err)
>           raise Abort() from None
E           click.exceptions.Abort

/usr/lib/python3/dist-packages/click/termui.py:162: Abort

During handling of the above exception, another exception occurred:

self = <tests.CLI.modules.vs.vs_create_tests.VirtCreateTests 
testMethod=test_create_like>
confirm_mock = <MagicMock name='confirm' id='140113450989760'>

    @mock.patch('SoftLayer.CLI.formatting.confirm')
    def test_create_like(self, confirm_mock):
        mock = self.set_mock('SoftLayer_Virtual_Guest', 'getObject')
        mock.return_value = {
            'hostname': 'vs-test-like',
            'domain': 'test.sftlyr.ws',
            'maxCpu': 2,
            'maxMemory': 1024,
            'datacenter': {'name': 'dal05'},
            'networkComponents': [{'maxSpeed': 100}],
            'dedicatedAccountHostOnlyFlag': False,
            'privateNetworkOnlyFlag': False,
            'billingItem': {'orderItem': {'preset': {}}},
            'operatingSystem': {'softwareLicense': {
                'softwareDescription': {'referenceCode': 'UBUNTU_LATEST'}
            }},
            'hourlyBillingFlag': False,
            'localDiskFlag': True,
            'userData': {}
        }
    
        confirm_mock.return_value = True
        result = self.run_command(['vs', 'create',
                                   '--like=123',
                                   '--san',
                                   '--billing=hourly'])
    
>       self.assert_no_fail(result)

tests/CLI/modules/vs/vs_create_tests.py:390: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3/dist-packages/SoftLayer/testing/__init__.py:159: in 
assert_no_fail
    raise result.exception
/usr/lib/python3/dist-packages/click/testing.py:596: in invoke
    return_value = cli.main(args=args or (), prog_name=prog_name, **extra)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <CommandLoader cli>
args = ['vs', 'create', '--like=123', '--san', '--billing=hourly']
prog_name = 'cli', complete_var = None, standalone_mode = True
windows_expand_args = True
extra = {'obj': <SoftLayer.CLI.environment.Environment object at 
0x7f6eaebca150>}

    def main(
        self,
        args: cabc.Sequence[str] | None = None,
        prog_name: str | None = None,
        complete_var: str | None = None,
        standalone_mode: bool = True,
        windows_expand_args: bool = True,
        **extra: t.Any,
    ) -> t.Any:
        """This is the way to invoke a script with all the bells and
        whistles as a command line application.  This will always terminate
        the application after a call.  If this is not wanted, ``SystemExit``
        needs to be caught.
    
        This method is also available by directly calling the instance of
        a :class:`Command`.
    
        :param args: the arguments that should be used for parsing.  If not
                     provided, ``sys.argv[1:]`` is used.
        :param prog_name: the program name that should be used.  By default
                          the program name is constructed by taking the file
                          name from ``sys.argv[0]``.
        :param complete_var: the environment variable that controls the
                             bash completion support.  The default is
                             ``"_<prog_name>_COMPLETE"`` with prog_name in
                             uppercase.
        :param standalone_mode: the default behavior is to invoke the script
                                in standalone mode.  Click will then
                                handle exceptions and convert them into
                                error messages and the function will never
                                return but shut down the interpreter.  If
                                this is set to `False` they will be
                                propagated to the caller and the return
                                value of this function is the return value
                                of :meth:`invoke`.
        :param windows_expand_args: Expand glob patterns, user dir, and
            env vars in command line args on Windows.
        :param extra: extra keyword arguments are forwarded to the context
                      constructor.  See :class:`Context` for more information.
    
        .. versionchanged:: 8.0.1
            Added the ``windows_expand_args`` parameter to allow
            disabling command line arg expansion on Windows.
    
        .. versionchanged:: 8.0
            When taking arguments from ``sys.argv`` on Windows, glob
            patterns, user dir, and env vars are expanded.
    
        .. versionchanged:: 3.0
           Added the ``standalone_mode`` parameter.
        """
        if args is None:
            args = sys.argv[1:]
    
            if os.name == "nt" and windows_expand_args:
                args = _expand_args(args)
        else:
            args = list(args)
    
        if prog_name is None:
            prog_name = _detect_program_name()
    
        # Process shell completion requests and exit early.
        self._main_shell_completion(extra, prog_name, complete_var)
    
        try:
            try:
                with self.make_context(prog_name, args, **extra) as ctx:
                    rv = self.invoke(ctx)
                    if not standalone_mode:
                        return rv
                    # it's not safe to `ctx.exit(rv)` here!
                    # note that `rv` may actually contain data like "1" which
                    # has obvious effects
                    # more subtle case: `rv=[None, None]` can come out of
                    # chained commands which all returned `None` -- so it's not
                    # even always obvious that `rv` indicates success/failure
                    # by its truthiness/falsiness
                    ctx.exit()
            except (EOFError, KeyboardInterrupt) as e:
                echo(file=sys.stderr)
                raise Abort() from e
            except ClickException as e:
                if not standalone_mode:
                    raise
                e.show()
                sys.exit(e.exit_code)
            except OSError as e:
                if e.errno == errno.EPIPE:
                    sys.stdout = t.cast(t.TextIO, 
PacifyFlushWrapper(sys.stdout))
                    sys.stderr = t.cast(t.TextIO, 
PacifyFlushWrapper(sys.stderr))
                    sys.exit(1)
                else:
                    raise
        except Exit as e:
            if standalone_mode:
                sys.exit(e.exit_code)
            else:
                # in non-standalone mode, return the exit code
                # note that this is only reached if `self.invoke` above raises
                # an Exit explicitly -- thus bypassing the check there which
                # would return its result
                # the results of non-standalone execution may therefore be
                # somewhat ambiguous: if there are codepaths which lead to
                # `ctx.exit(1)` and to `return 1`, the caller won't be able to
                # tell the difference between the two
                return e.exit_code
        except Abort:
            if not standalone_mode:
                raise
            echo(_("Aborted!"), file=sys.stderr)
>           sys.exit(1)
E           SystemExit: 1

/usr/lib/python3/dist-packages/click/core.py:1478: SystemExit
----------------------------- Captured stdout call -----------------------------
1
___________________ VirtCreateTests.test_create_like_flavor ____________________

self = <CommandLoader cli>, args = ['vs', 'create', '--like=123']
prog_name = 'cli', complete_var = None, standalone_mode = True
windows_expand_args = True
extra = {'obj': <SoftLayer.CLI.environment.Environment object at 
0x7f6eaebca410>}

    def main(
        self,
        args: cabc.Sequence[str] | None = None,
        prog_name: str | None = None,
        complete_var: str | None = None,
        standalone_mode: bool = True,
        windows_expand_args: bool = True,
        **extra: t.Any,
    ) -> t.Any:
        """This is the way to invoke a script with all the bells and
        whistles as a command line application.  This will always terminate
        the application after a call.  If this is not wanted, ``SystemExit``
        needs to be caught.
    
        This method is also available by directly calling the instance of
        a :class:`Command`.
    
        :param args: the arguments that should be used for parsing.  If not
                     provided, ``sys.argv[1:]`` is used.
        :param prog_name: the program name that should be used.  By default
                          the program name is constructed by taking the file
                          name from ``sys.argv[0]``.
        :param complete_var: the environment variable that controls the
                             bash completion support.  The default is
                             ``"_<prog_name>_COMPLETE"`` with prog_name in
                             uppercase.
        :param standalone_mode: the default behavior is to invoke the script
                                in standalone mode.  Click will then
                                handle exceptions and convert them into
                                error messages and the function will never
                                return but shut down the interpreter.  If
                                this is set to `False` they will be
                                propagated to the caller and the return
                                value of this function is the return value
                                of :meth:`invoke`.
        :param windows_expand_args: Expand glob patterns, user dir, and
            env vars in command line args on Windows.
        :param extra: extra keyword arguments are forwarded to the context
                      constructor.  See :class:`Context` for more information.
    
        .. versionchanged:: 8.0.1
            Added the ``windows_expand_args`` parameter to allow
            disabling command line arg expansion on Windows.
    
        .. versionchanged:: 8.0
            When taking arguments from ``sys.argv`` on Windows, glob
            patterns, user dir, and env vars are expanded.
    
        .. versionchanged:: 3.0
           Added the ``standalone_mode`` parameter.
        """
        if args is None:
            args = sys.argv[1:]
    
            if os.name == "nt" and windows_expand_args:
                args = _expand_args(args)
        else:
            args = list(args)
    
        if prog_name is None:
            prog_name = _detect_program_name()
    
        # Process shell completion requests and exit early.
        self._main_shell_completion(extra, prog_name, complete_var)
    
        try:
            try:
                with self.make_context(prog_name, args, **extra) as ctx:
>                   rv = self.invoke(ctx)
                         ^^^^^^^^^^^^^^^^

/usr/lib/python3/dist-packages/click/core.py:1435: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3/dist-packages/click/core.py:1902: in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:1900: in invoke
    sub_ctx = cmd.make_context(cmd_name, args, parent=ctx)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:1245: in make_context
    self.parse_args(ctx, args)
/usr/lib/python3/dist-packages/click/core.py:1256: in parse_args
    _, args = param.handle_parse_result(ctx, opts, args)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:2583: in handle_parse_result
    value, source = self.consume_value(ctx, opts)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:3354: in consume_value
    value = self.prompt_for_value(ctx)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:3215: in prompt_for_value
    return prompt(
/usr/lib/python3/dist-packages/click/termui.py:179: in prompt
    value = prompt_func(prompt)
            ^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

text = 'Hostname [vs-test-like]: '

    def prompt_func(text: str) -> str:
        f = hidden_prompt_func if hide_input else visible_prompt_func
        try:
            # Write the prompt separately so that we get nice
            # coloring through colorama on Windows
            echo(text[:-1], nl=False, err=err)
            # Echo the last character to stdout to work around an issue where
            # readline causes backspace to clear the whole line.
            return f(text[-1:])
        except (KeyboardInterrupt, EOFError):
            # getpass doesn't print a newline if the user aborts input with ^C.
            # Allegedly this behavior is inherited from getpass(3).
            # A doc bug has been filed at https://bugs.python.org/issue24711
            if hide_input:
                echo(None, err=err)
>           raise Abort() from None
E           click.exceptions.Abort

/usr/lib/python3/dist-packages/click/termui.py:162: Abort

During handling of the above exception, another exception occurred:

self = <tests.CLI.modules.vs.vs_create_tests.VirtCreateTests 
testMethod=test_create_like_flavor>
confirm_mock = <MagicMock name='confirm' id='140113372789264'>

    @mock.patch('SoftLayer.CLI.formatting.confirm')
    def test_create_like_flavor(self, confirm_mock):
        mock = self.set_mock('SoftLayer_Virtual_Guest', 'getObject')
        mock.return_value = {
            'hostname': 'vs-test-like',
            'domain': 'test.sftlyr.ws',
            'maxCpu': 2,
            'maxMemory': 1024,
            'datacenter': {'name': 'dal05'},
            'networkComponents': [{'maxSpeed': 100}],
            'dedicatedAccountHostOnlyFlag': False,
            'privateNetworkOnlyFlag': False,
            'billingItem': {'orderItem': {'preset': {'keyName': 'B1_1X2X25'}}},
            'operatingSystem': {'softwareLicense': {
                'softwareDescription': {'referenceCode': 'UBUNTU_LATEST'}
            }},
            'hourlyBillingFlag': True,
            'localDiskFlag': False,
            'userData': {}
        }
    
        confirm_mock.return_value = True
        result = self.run_command(['vs', 'create', '--like=123'])
    
>       self.assert_no_fail(result)

tests/CLI/modules/vs/vs_create_tests.py:504: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3/dist-packages/SoftLayer/testing/__init__.py:159: in 
assert_no_fail
    raise result.exception
/usr/lib/python3/dist-packages/click/testing.py:596: in invoke
    return_value = cli.main(args=args or (), prog_name=prog_name, **extra)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <CommandLoader cli>, args = ['vs', 'create', '--like=123']
prog_name = 'cli', complete_var = None, standalone_mode = True
windows_expand_args = True
extra = {'obj': <SoftLayer.CLI.environment.Environment object at 
0x7f6eaebca410>}

    def main(
        self,
        args: cabc.Sequence[str] | None = None,
        prog_name: str | None = None,
        complete_var: str | None = None,
        standalone_mode: bool = True,
        windows_expand_args: bool = True,
        **extra: t.Any,
    ) -> t.Any:
        """This is the way to invoke a script with all the bells and
        whistles as a command line application.  This will always terminate
        the application after a call.  If this is not wanted, ``SystemExit``
        needs to be caught.
    
        This method is also available by directly calling the instance of
        a :class:`Command`.
    
        :param args: the arguments that should be used for parsing.  If not
                     provided, ``sys.argv[1:]`` is used.
        :param prog_name: the program name that should be used.  By default
                          the program name is constructed by taking the file
                          name from ``sys.argv[0]``.
        :param complete_var: the environment variable that controls the
                             bash completion support.  The default is
                             ``"_<prog_name>_COMPLETE"`` with prog_name in
                             uppercase.
        :param standalone_mode: the default behavior is to invoke the script
                                in standalone mode.  Click will then
                                handle exceptions and convert them into
                                error messages and the function will never
                                return but shut down the interpreter.  If
                                this is set to `False` they will be
                                propagated to the caller and the return
                                value of this function is the return value
                                of :meth:`invoke`.
        :param windows_expand_args: Expand glob patterns, user dir, and
            env vars in command line args on Windows.
        :param extra: extra keyword arguments are forwarded to the context
                      constructor.  See :class:`Context` for more information.
    
        .. versionchanged:: 8.0.1
            Added the ``windows_expand_args`` parameter to allow
            disabling command line arg expansion on Windows.
    
        .. versionchanged:: 8.0
            When taking arguments from ``sys.argv`` on Windows, glob
            patterns, user dir, and env vars are expanded.
    
        .. versionchanged:: 3.0
           Added the ``standalone_mode`` parameter.
        """
        if args is None:
            args = sys.argv[1:]
    
            if os.name == "nt" and windows_expand_args:
                args = _expand_args(args)
        else:
            args = list(args)
    
        if prog_name is None:
            prog_name = _detect_program_name()
    
        # Process shell completion requests and exit early.
        self._main_shell_completion(extra, prog_name, complete_var)
    
        try:
            try:
                with self.make_context(prog_name, args, **extra) as ctx:
                    rv = self.invoke(ctx)
                    if not standalone_mode:
                        return rv
                    # it's not safe to `ctx.exit(rv)` here!
                    # note that `rv` may actually contain data like "1" which
                    # has obvious effects
                    # more subtle case: `rv=[None, None]` can come out of
                    # chained commands which all returned `None` -- so it's not
                    # even always obvious that `rv` indicates success/failure
                    # by its truthiness/falsiness
                    ctx.exit()
            except (EOFError, KeyboardInterrupt) as e:
                echo(file=sys.stderr)
                raise Abort() from e
            except ClickException as e:
                if not standalone_mode:
                    raise
                e.show()
                sys.exit(e.exit_code)
            except OSError as e:
                if e.errno == errno.EPIPE:
                    sys.stdout = t.cast(t.TextIO, 
PacifyFlushWrapper(sys.stdout))
                    sys.stderr = t.cast(t.TextIO, 
PacifyFlushWrapper(sys.stderr))
                    sys.exit(1)
                else:
                    raise
        except Exit as e:
            if standalone_mode:
                sys.exit(e.exit_code)
            else:
                # in non-standalone mode, return the exit code
                # note that this is only reached if `self.invoke` above raises
                # an Exit explicitly -- thus bypassing the check there which
                # would return its result
                # the results of non-standalone execution may therefore be
                # somewhat ambiguous: if there are codepaths which lead to
                # `ctx.exit(1)` and to `return 1`, the caller won't be able to
                # tell the difference between the two
                return e.exit_code
        except Abort:
            if not standalone_mode:
                raise
            echo(_("Aborted!"), file=sys.stderr)
>           sys.exit(1)
E           SystemExit: 1

/usr/lib/python3/dist-packages/click/core.py:1478: SystemExit
----------------------------- Captured stdout call -----------------------------
1
____________________ VirtCreateTests.test_create_like_image ____________________

self = <CommandLoader cli>
args = ['vs', 'create', '--like=123', '--san', '--billing=hourly']
prog_name = 'cli', complete_var = None, standalone_mode = True
windows_expand_args = True
extra = {'obj': <SoftLayer.CLI.environment.Environment object at 
0x7f6eaebca8e0>}

    def main(
        self,
        args: cabc.Sequence[str] | None = None,
        prog_name: str | None = None,
        complete_var: str | None = None,
        standalone_mode: bool = True,
        windows_expand_args: bool = True,
        **extra: t.Any,
    ) -> t.Any:
        """This is the way to invoke a script with all the bells and
        whistles as a command line application.  This will always terminate
        the application after a call.  If this is not wanted, ``SystemExit``
        needs to be caught.
    
        This method is also available by directly calling the instance of
        a :class:`Command`.
    
        :param args: the arguments that should be used for parsing.  If not
                     provided, ``sys.argv[1:]`` is used.
        :param prog_name: the program name that should be used.  By default
                          the program name is constructed by taking the file
                          name from ``sys.argv[0]``.
        :param complete_var: the environment variable that controls the
                             bash completion support.  The default is
                             ``"_<prog_name>_COMPLETE"`` with prog_name in
                             uppercase.
        :param standalone_mode: the default behavior is to invoke the script
                                in standalone mode.  Click will then
                                handle exceptions and convert them into
                                error messages and the function will never
                                return but shut down the interpreter.  If
                                this is set to `False` they will be
                                propagated to the caller and the return
                                value of this function is the return value
                                of :meth:`invoke`.
        :param windows_expand_args: Expand glob patterns, user dir, and
            env vars in command line args on Windows.
        :param extra: extra keyword arguments are forwarded to the context
                      constructor.  See :class:`Context` for more information.
    
        .. versionchanged:: 8.0.1
            Added the ``windows_expand_args`` parameter to allow
            disabling command line arg expansion on Windows.
    
        .. versionchanged:: 8.0
            When taking arguments from ``sys.argv`` on Windows, glob
            patterns, user dir, and env vars are expanded.
    
        .. versionchanged:: 3.0
           Added the ``standalone_mode`` parameter.
        """
        if args is None:
            args = sys.argv[1:]
    
            if os.name == "nt" and windows_expand_args:
                args = _expand_args(args)
        else:
            args = list(args)
    
        if prog_name is None:
            prog_name = _detect_program_name()
    
        # Process shell completion requests and exit early.
        self._main_shell_completion(extra, prog_name, complete_var)
    
        try:
            try:
                with self.make_context(prog_name, args, **extra) as ctx:
>                   rv = self.invoke(ctx)
                         ^^^^^^^^^^^^^^^^

/usr/lib/python3/dist-packages/click/core.py:1435: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3/dist-packages/click/core.py:1902: in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:1900: in invoke
    sub_ctx = cmd.make_context(cmd_name, args, parent=ctx)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:1245: in make_context
    self.parse_args(ctx, args)
/usr/lib/python3/dist-packages/click/core.py:1256: in parse_args
    _, args = param.handle_parse_result(ctx, opts, args)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:2583: in handle_parse_result
    value, source = self.consume_value(ctx, opts)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:3354: in consume_value
    value = self.prompt_for_value(ctx)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:3215: in prompt_for_value
    return prompt(
/usr/lib/python3/dist-packages/click/termui.py:179: in prompt
    value = prompt_func(prompt)
            ^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

text = 'Hostname [vs-test-like]: '

    def prompt_func(text: str) -> str:
        f = hidden_prompt_func if hide_input else visible_prompt_func
        try:
            # Write the prompt separately so that we get nice
            # coloring through colorama on Windows
            echo(text[:-1], nl=False, err=err)
            # Echo the last character to stdout to work around an issue where
            # readline causes backspace to clear the whole line.
            return f(text[-1:])
        except (KeyboardInterrupt, EOFError):
            # getpass doesn't print a newline if the user aborts input with ^C.
            # Allegedly this behavior is inherited from getpass(3).
            # A doc bug has been filed at https://bugs.python.org/issue24711
            if hide_input:
                echo(None, err=err)
>           raise Abort() from None
E           click.exceptions.Abort

/usr/lib/python3/dist-packages/click/termui.py:162: Abort

During handling of the above exception, another exception occurred:

self = <tests.CLI.modules.vs.vs_create_tests.VirtCreateTests 
testMethod=test_create_like_image>
confirm_mock = <MagicMock name='confirm' id='140113450988752'>

    @mock.patch('SoftLayer.CLI.formatting.confirm')
    def test_create_like_image(self, confirm_mock):
        mock = self.set_mock('SoftLayer_Virtual_Guest', 'getObject')
        mock.return_value = {
            'hostname': 'vs-test-like',
            'domain': 'test.sftlyr.ws',
            'maxCpu': 2,
            'maxMemory': 1024,
            'datacenter': {'name': 'dal05'},
            'networkComponents': [{'maxSpeed': 100}],
            'dedicatedAccountHostOnlyFlag': False,
            'privateNetworkOnlyFlag': False,
            'billingItem': {'orderItem': {'preset': {}}},
            'blockDeviceTemplateGroup': {'globalIdentifier': 'aaa1xxx1122233'},
            'hourlyBillingFlag': False,
            'localDiskFlag': True,
            'userData': {},
        }
    
        confirm_mock.return_value = True
        result = self.run_command(['vs', 'create',
                                   '--like=123',
                                   '--san',
                                   '--billing=hourly'])
    
>       self.assert_no_fail(result)

tests/CLI/modules/vs/vs_create_tests.py:465: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3/dist-packages/SoftLayer/testing/__init__.py:159: in 
assert_no_fail
    raise result.exception
/usr/lib/python3/dist-packages/click/testing.py:596: in invoke
    return_value = cli.main(args=args or (), prog_name=prog_name, **extra)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <CommandLoader cli>
args = ['vs', 'create', '--like=123', '--san', '--billing=hourly']
prog_name = 'cli', complete_var = None, standalone_mode = True
windows_expand_args = True
extra = {'obj': <SoftLayer.CLI.environment.Environment object at 
0x7f6eaebca8e0>}

    def main(
        self,
        args: cabc.Sequence[str] | None = None,
        prog_name: str | None = None,
        complete_var: str | None = None,
        standalone_mode: bool = True,
        windows_expand_args: bool = True,
        **extra: t.Any,
    ) -> t.Any:
        """This is the way to invoke a script with all the bells and
        whistles as a command line application.  This will always terminate
        the application after a call.  If this is not wanted, ``SystemExit``
        needs to be caught.
    
        This method is also available by directly calling the instance of
        a :class:`Command`.
    
        :param args: the arguments that should be used for parsing.  If not
                     provided, ``sys.argv[1:]`` is used.
        :param prog_name: the program name that should be used.  By default
                          the program name is constructed by taking the file
                          name from ``sys.argv[0]``.
        :param complete_var: the environment variable that controls the
                             bash completion support.  The default is
                             ``"_<prog_name>_COMPLETE"`` with prog_name in
                             uppercase.
        :param standalone_mode: the default behavior is to invoke the script
                                in standalone mode.  Click will then
                                handle exceptions and convert them into
                                error messages and the function will never
                                return but shut down the interpreter.  If
                                this is set to `False` they will be
                                propagated to the caller and the return
                                value of this function is the return value
                                of :meth:`invoke`.
        :param windows_expand_args: Expand glob patterns, user dir, and
            env vars in command line args on Windows.
        :param extra: extra keyword arguments are forwarded to the context
                      constructor.  See :class:`Context` for more information.
    
        .. versionchanged:: 8.0.1
            Added the ``windows_expand_args`` parameter to allow
            disabling command line arg expansion on Windows.
    
        .. versionchanged:: 8.0
            When taking arguments from ``sys.argv`` on Windows, glob
            patterns, user dir, and env vars are expanded.
    
        .. versionchanged:: 3.0
           Added the ``standalone_mode`` parameter.
        """
        if args is None:
            args = sys.argv[1:]
    
            if os.name == "nt" and windows_expand_args:
                args = _expand_args(args)
        else:
            args = list(args)
    
        if prog_name is None:
            prog_name = _detect_program_name()
    
        # Process shell completion requests and exit early.
        self._main_shell_completion(extra, prog_name, complete_var)
    
        try:
            try:
                with self.make_context(prog_name, args, **extra) as ctx:
                    rv = self.invoke(ctx)
                    if not standalone_mode:
                        return rv
                    # it's not safe to `ctx.exit(rv)` here!
                    # note that `rv` may actually contain data like "1" which
                    # has obvious effects
                    # more subtle case: `rv=[None, None]` can come out of
                    # chained commands which all returned `None` -- so it's not
                    # even always obvious that `rv` indicates success/failure
                    # by its truthiness/falsiness
                    ctx.exit()
            except (EOFError, KeyboardInterrupt) as e:
                echo(file=sys.stderr)
                raise Abort() from e
            except ClickException as e:
                if not standalone_mode:
                    raise
                e.show()
                sys.exit(e.exit_code)
            except OSError as e:
                if e.errno == errno.EPIPE:
                    sys.stdout = t.cast(t.TextIO, 
PacifyFlushWrapper(sys.stdout))
                    sys.stderr = t.cast(t.TextIO, 
PacifyFlushWrapper(sys.stderr))
                    sys.exit(1)
                else:
                    raise
        except Exit as e:
            if standalone_mode:
                sys.exit(e.exit_code)
            else:
                # in non-standalone mode, return the exit code
                # note that this is only reached if `self.invoke` above raises
                # an Exit explicitly -- thus bypassing the check there which
                # would return its result
                # the results of non-standalone execution may therefore be
                # somewhat ambiguous: if there are codepaths which lead to
                # `ctx.exit(1)` and to `return 1`, the caller won't be able to
                # tell the difference between the two
                return e.exit_code
        except Abort:
            if not standalone_mode:
                raise
            echo(_("Aborted!"), file=sys.stderr)
>           sys.exit(1)
E           SystemExit: 1

/usr/lib/python3/dist-packages/click/core.py:1478: SystemExit
----------------------------- Captured stdout call -----------------------------
1
____________________ VirtCreateTests.test_create_like_tags _____________________

self = <CommandLoader cli>
args = ['vs', 'create', '--like=123', '--san', '--billing=hourly']
prog_name = 'cli', complete_var = None, standalone_mode = True
windows_expand_args = True
extra = {'obj': <SoftLayer.CLI.environment.Environment object at 
0x7f6eaebcac50>}

    def main(
        self,
        args: cabc.Sequence[str] | None = None,
        prog_name: str | None = None,
        complete_var: str | None = None,
        standalone_mode: bool = True,
        windows_expand_args: bool = True,
        **extra: t.Any,
    ) -> t.Any:
        """This is the way to invoke a script with all the bells and
        whistles as a command line application.  This will always terminate
        the application after a call.  If this is not wanted, ``SystemExit``
        needs to be caught.
    
        This method is also available by directly calling the instance of
        a :class:`Command`.
    
        :param args: the arguments that should be used for parsing.  If not
                     provided, ``sys.argv[1:]`` is used.
        :param prog_name: the program name that should be used.  By default
                          the program name is constructed by taking the file
                          name from ``sys.argv[0]``.
        :param complete_var: the environment variable that controls the
                             bash completion support.  The default is
                             ``"_<prog_name>_COMPLETE"`` with prog_name in
                             uppercase.
        :param standalone_mode: the default behavior is to invoke the script
                                in standalone mode.  Click will then
                                handle exceptions and convert them into
                                error messages and the function will never
                                return but shut down the interpreter.  If
                                this is set to `False` they will be
                                propagated to the caller and the return
                                value of this function is the return value
                                of :meth:`invoke`.
        :param windows_expand_args: Expand glob patterns, user dir, and
            env vars in command line args on Windows.
        :param extra: extra keyword arguments are forwarded to the context
                      constructor.  See :class:`Context` for more information.
    
        .. versionchanged:: 8.0.1
            Added the ``windows_expand_args`` parameter to allow
            disabling command line arg expansion on Windows.
    
        .. versionchanged:: 8.0
            When taking arguments from ``sys.argv`` on Windows, glob
            patterns, user dir, and env vars are expanded.
    
        .. versionchanged:: 3.0
           Added the ``standalone_mode`` parameter.
        """
        if args is None:
            args = sys.argv[1:]
    
            if os.name == "nt" and windows_expand_args:
                args = _expand_args(args)
        else:
            args = list(args)
    
        if prog_name is None:
            prog_name = _detect_program_name()
    
        # Process shell completion requests and exit early.
        self._main_shell_completion(extra, prog_name, complete_var)
    
        try:
            try:
                with self.make_context(prog_name, args, **extra) as ctx:
>                   rv = self.invoke(ctx)
                         ^^^^^^^^^^^^^^^^

/usr/lib/python3/dist-packages/click/core.py:1435: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3/dist-packages/click/core.py:1902: in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:1900: in invoke
    sub_ctx = cmd.make_context(cmd_name, args, parent=ctx)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:1245: in make_context
    self.parse_args(ctx, args)
/usr/lib/python3/dist-packages/click/core.py:1256: in parse_args
    _, args = param.handle_parse_result(ctx, opts, args)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:2583: in handle_parse_result
    value, source = self.consume_value(ctx, opts)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:3354: in consume_value
    value = self.prompt_for_value(ctx)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:3215: in prompt_for_value
    return prompt(
/usr/lib/python3/dist-packages/click/termui.py:179: in prompt
    value = prompt_func(prompt)
            ^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

text = 'Hostname [vs-test-like]: '

    def prompt_func(text: str) -> str:
        f = hidden_prompt_func if hide_input else visible_prompt_func
        try:
            # Write the prompt separately so that we get nice
            # coloring through colorama on Windows
            echo(text[:-1], nl=False, err=err)
            # Echo the last character to stdout to work around an issue where
            # readline causes backspace to clear the whole line.
            return f(text[-1:])
        except (KeyboardInterrupt, EOFError):
            # getpass doesn't print a newline if the user aborts input with ^C.
            # Allegedly this behavior is inherited from getpass(3).
            # A doc bug has been filed at https://bugs.python.org/issue24711
            if hide_input:
                echo(None, err=err)
>           raise Abort() from None
E           click.exceptions.Abort

/usr/lib/python3/dist-packages/click/termui.py:162: Abort

During handling of the above exception, another exception occurred:

self = <tests.CLI.modules.vs.vs_create_tests.VirtCreateTests 
testMethod=test_create_like_tags>
confirm_mock = <MagicMock name='confirm' id='140113372918656'>

    @mock.patch('SoftLayer.CLI.formatting.confirm')
    def test_create_like_tags(self, confirm_mock):
        mock = self.set_mock('SoftLayer_Virtual_Guest', 'getObject')
        mock.return_value = {
            'hostname': 'vs-test-like',
            'domain': 'test.sftlyr.ws',
            'maxCpu': 2,
            'maxMemory': 1024,
            'datacenter': {'name': 'dal05'},
            'networkComponents': [{'maxSpeed': 100}],
            'dedicatedAccountHostOnlyFlag': False,
            'privateNetworkOnlyFlag': False,
            'billingItem': {'orderItem': {'preset': {}}},
            'operatingSystem': {'softwareLicense': {
                'softwareDescription': {'referenceCode': 'UBUNTU_LATEST'}
            }},
            'hourlyBillingFlag': False,
            'localDiskFlag': True,
            'userData': {},
            'tagReferences': [{'tag': {'name': 'production'}}],
        }
    
        confirm_mock.return_value = True
        result = self.run_command(['vs', 'create',
                                   '--like=123',
                                   '--san',
                                   '--billing=hourly'])
    
>       self.assert_no_fail(result)

tests/CLI/modules/vs/vs_create_tests.py:434: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3/dist-packages/SoftLayer/testing/__init__.py:159: in 
assert_no_fail
    raise result.exception
/usr/lib/python3/dist-packages/click/testing.py:596: in invoke
    return_value = cli.main(args=args or (), prog_name=prog_name, **extra)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <CommandLoader cli>
args = ['vs', 'create', '--like=123', '--san', '--billing=hourly']
prog_name = 'cli', complete_var = None, standalone_mode = True
windows_expand_args = True
extra = {'obj': <SoftLayer.CLI.environment.Environment object at 
0x7f6eaebcac50>}

    def main(
        self,
        args: cabc.Sequence[str] | None = None,
        prog_name: str | None = None,
        complete_var: str | None = None,
        standalone_mode: bool = True,
        windows_expand_args: bool = True,
        **extra: t.Any,
    ) -> t.Any:
        """This is the way to invoke a script with all the bells and
        whistles as a command line application.  This will always terminate
        the application after a call.  If this is not wanted, ``SystemExit``
        needs to be caught.
    
        This method is also available by directly calling the instance of
        a :class:`Command`.
    
        :param args: the arguments that should be used for parsing.  If not
                     provided, ``sys.argv[1:]`` is used.
        :param prog_name: the program name that should be used.  By default
                          the program name is constructed by taking the file
                          name from ``sys.argv[0]``.
        :param complete_var: the environment variable that controls the
                             bash completion support.  The default is
                             ``"_<prog_name>_COMPLETE"`` with prog_name in
                             uppercase.
        :param standalone_mode: the default behavior is to invoke the script
                                in standalone mode.  Click will then
                                handle exceptions and convert them into
                                error messages and the function will never
                                return but shut down the interpreter.  If
                                this is set to `False` they will be
                                propagated to the caller and the return
                                value of this function is the return value
                                of :meth:`invoke`.
        :param windows_expand_args: Expand glob patterns, user dir, and
            env vars in command line args on Windows.
        :param extra: extra keyword arguments are forwarded to the context
                      constructor.  See :class:`Context` for more information.
    
        .. versionchanged:: 8.0.1
            Added the ``windows_expand_args`` parameter to allow
            disabling command line arg expansion on Windows.
    
        .. versionchanged:: 8.0
            When taking arguments from ``sys.argv`` on Windows, glob
            patterns, user dir, and env vars are expanded.
    
        .. versionchanged:: 3.0
           Added the ``standalone_mode`` parameter.
        """
        if args is None:
            args = sys.argv[1:]
    
            if os.name == "nt" and windows_expand_args:
                args = _expand_args(args)
        else:
            args = list(args)
    
        if prog_name is None:
            prog_name = _detect_program_name()
    
        # Process shell completion requests and exit early.
        self._main_shell_completion(extra, prog_name, complete_var)
    
        try:
            try:
                with self.make_context(prog_name, args, **extra) as ctx:
                    rv = self.invoke(ctx)
                    if not standalone_mode:
                        return rv
                    # it's not safe to `ctx.exit(rv)` here!
                    # note that `rv` may actually contain data like "1" which
                    # has obvious effects
                    # more subtle case: `rv=[None, None]` can come out of
                    # chained commands which all returned `None` -- so it's not
                    # even always obvious that `rv` indicates success/failure
                    # by its truthiness/falsiness
                    ctx.exit()
            except (EOFError, KeyboardInterrupt) as e:
                echo(file=sys.stderr)
                raise Abort() from e
            except ClickException as e:
                if not standalone_mode:
                    raise
                e.show()
                sys.exit(e.exit_code)
            except OSError as e:
                if e.errno == errno.EPIPE:
                    sys.stdout = t.cast(t.TextIO, 
PacifyFlushWrapper(sys.stdout))
                    sys.stderr = t.cast(t.TextIO, 
PacifyFlushWrapper(sys.stderr))
                    sys.exit(1)
                else:
                    raise
        except Exit as e:
            if standalone_mode:
                sys.exit(e.exit_code)
            else:
                # in non-standalone mode, return the exit code
                # note that this is only reached if `self.invoke` above raises
                # an Exit explicitly -- thus bypassing the check there which
                # would return its result
                # the results of non-standalone execution may therefore be
                # somewhat ambiguous: if there are codepaths which lead to
                # `ctx.exit(1)` and to `return 1`, the caller won't be able to
                # tell the difference between the two
                return e.exit_code
        except Abort:
            if not standalone_mode:
                raise
            echo(_("Aborted!"), file=sys.stderr)
>           sys.exit(1)
E           SystemExit: 1

/usr/lib/python3/dist-packages/click/core.py:1478: SystemExit
----------------------------- Captured stdout call -----------------------------
1
__________________ VirtCreateTests.test_create_like_transient __________________

self = <CommandLoader cli>, args = ['vs', 'create', '--like=123']
prog_name = 'cli', complete_var = None, standalone_mode = True
windows_expand_args = True
extra = {'obj': <SoftLayer.CLI.environment.Environment object at 
0x7f6eaebcaf10>}

    def main(
        self,
        args: cabc.Sequence[str] | None = None,
        prog_name: str | None = None,
        complete_var: str | None = None,
        standalone_mode: bool = True,
        windows_expand_args: bool = True,
        **extra: t.Any,
    ) -> t.Any:
        """This is the way to invoke a script with all the bells and
        whistles as a command line application.  This will always terminate
        the application after a call.  If this is not wanted, ``SystemExit``
        needs to be caught.
    
        This method is also available by directly calling the instance of
        a :class:`Command`.
    
        :param args: the arguments that should be used for parsing.  If not
                     provided, ``sys.argv[1:]`` is used.
        :param prog_name: the program name that should be used.  By default
                          the program name is constructed by taking the file
                          name from ``sys.argv[0]``.
        :param complete_var: the environment variable that controls the
                             bash completion support.  The default is
                             ``"_<prog_name>_COMPLETE"`` with prog_name in
                             uppercase.
        :param standalone_mode: the default behavior is to invoke the script
                                in standalone mode.  Click will then
                                handle exceptions and convert them into
                                error messages and the function will never
                                return but shut down the interpreter.  If
                                this is set to `False` they will be
                                propagated to the caller and the return
                                value of this function is the return value
                                of :meth:`invoke`.
        :param windows_expand_args: Expand glob patterns, user dir, and
            env vars in command line args on Windows.
        :param extra: extra keyword arguments are forwarded to the context
                      constructor.  See :class:`Context` for more information.
    
        .. versionchanged:: 8.0.1
            Added the ``windows_expand_args`` parameter to allow
            disabling command line arg expansion on Windows.
    
        .. versionchanged:: 8.0
            When taking arguments from ``sys.argv`` on Windows, glob
            patterns, user dir, and env vars are expanded.
    
        .. versionchanged:: 3.0
           Added the ``standalone_mode`` parameter.
        """
        if args is None:
            args = sys.argv[1:]
    
            if os.name == "nt" and windows_expand_args:
                args = _expand_args(args)
        else:
            args = list(args)
    
        if prog_name is None:
            prog_name = _detect_program_name()
    
        # Process shell completion requests and exit early.
        self._main_shell_completion(extra, prog_name, complete_var)
    
        try:
            try:
                with self.make_context(prog_name, args, **extra) as ctx:
>                   rv = self.invoke(ctx)
                         ^^^^^^^^^^^^^^^^

/usr/lib/python3/dist-packages/click/core.py:1435: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3/dist-packages/click/core.py:1902: in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:1900: in invoke
    sub_ctx = cmd.make_context(cmd_name, args, parent=ctx)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:1245: in make_context
    self.parse_args(ctx, args)
/usr/lib/python3/dist-packages/click/core.py:1256: in parse_args
    _, args = param.handle_parse_result(ctx, opts, args)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:2583: in handle_parse_result
    value, source = self.consume_value(ctx, opts)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:3354: in consume_value
    value = self.prompt_for_value(ctx)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/click/core.py:3215: in prompt_for_value
    return prompt(
/usr/lib/python3/dist-packages/click/termui.py:179: in prompt
    value = prompt_func(prompt)
            ^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

text = 'Hostname [vs-test-like]: '

    def prompt_func(text: str) -> str:
        f = hidden_prompt_func if hide_input else visible_prompt_func
        try:
            # Write the prompt separately so that we get nice
            # coloring through colorama on Windows
            echo(text[:-1], nl=False, err=err)
            # Echo the last character to stdout to work around an issue where
            # readline causes backspace to clear the whole line.
            return f(text[-1:])
        except (KeyboardInterrupt, EOFError):
            # getpass doesn't print a newline if the user aborts input with ^C.
            # Allegedly this behavior is inherited from getpass(3).
            # A doc bug has been filed at https://bugs.python.org/issue24711
            if hide_input:
                echo(None, err=err)
>           raise Abort() from None
E           click.exceptions.Abort

/usr/lib/python3/dist-packages/click/termui.py:162: Abort

During handling of the above exception, another exception occurred:

self = <tests.CLI.modules.vs.vs_create_tests.VirtCreateTests 
testMethod=test_create_like_transient>
confirm_mock = <MagicMock name='confirm' id='140113450990096'>

    @mock.patch('SoftLayer.CLI.formatting.confirm')
    def test_create_like_transient(self, confirm_mock):
        mock = self.set_mock('SoftLayer_Virtual_Guest', 'getObject')
        mock.return_value = {
            'hostname': 'vs-test-like',
            'domain': 'test.sftlyr.ws',
            'datacenter': {'name': 'dal05'},
            'networkComponents': [{'maxSpeed': 100}],
            'dedicatedAccountHostOnlyFlag': False,
            'privateNetworkOnlyFlag': False,
            'billingItem': {'orderItem': {'preset': {'keyName': 'B1_1X2X25'}}},
            'operatingSystem': {'softwareLicense': {
                'softwareDescription': {'referenceCode': 'UBUNTU_LATEST'}
            }},
            'hourlyBillingFlag': True,
            'localDiskFlag': False,
            'transientGuestFlag': True,
            'userData': {}
        }
    
        confirm_mock.return_value = True
        result = self.run_command(['vs', 'create', '--like=123'])
    
>       self.assert_no_fail(result)

tests/CLI/modules/vs/vs_create_tests.py:545: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3/dist-packages/SoftLayer/testing/__init__.py:159: in 
assert_no_fail
    raise result.exception
/usr/lib/python3/dist-packages/click/testing.py:596: in invoke
    return_value = cli.main(args=args or (), prog_name=prog_name, **extra)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <CommandLoader cli>, args = ['vs', 'create', '--like=123']
prog_name = 'cli', complete_var = None, standalone_mode = True
windows_expand_args = True
extra = {'obj': <SoftLayer.CLI.environment.Environment object at 
0x7f6eaebcaf10>}

    def main(
        self,
        args: cabc.Sequence[str] | None = None,
        prog_name: str | None = None,
        complete_var: str | None = None,
        standalone_mode: bool = True,
        windows_expand_args: bool = True,
        **extra: t.Any,
    ) -> t.Any:
        """This is the way to invoke a script with all the bells and
        whistles as a command line application.  This will always terminate
        the application after a call.  If this is not wanted, ``SystemExit``
        needs to be caught.
    
        This method is also available by directly calling the instance of
        a :class:`Command`.
    
        :param args: the arguments that should be used for parsing.  If not
                     provided, ``sys.argv[1:]`` is used.
        :param prog_name: the program name that should be used.  By default
                          the program name is constructed by taking the file
                          name from ``sys.argv[0]``.
        :param complete_var: the environment variable that controls the
                             bash completion support.  The default is
                             ``"_<prog_name>_COMPLETE"`` with prog_name in
                             uppercase.
        :param standalone_mode: the default behavior is to invoke the script
                                in standalone mode.  Click will then
                                handle exceptions and convert them into
                                error messages and the function will never
                                return but shut down the interpreter.  If
                                this is set to `False` they will be
                                propagated to the caller and the return
                                value of this function is the return value
                                of :meth:`invoke`.
        :param windows_expand_args: Expand glob patterns, user dir, and
            env vars in command line args on Windows.
        :param extra: extra keyword arguments are forwarded to the context
                      constructor.  See :class:`Context` for more information.
    
        .. versionchanged:: 8.0.1
            Added the ``windows_expand_args`` parameter to allow
            disabling command line arg expansion on Windows.
    
        .. versionchanged:: 8.0
            When taking arguments from ``sys.argv`` on Windows, glob
            patterns, user dir, and env vars are expanded.
    
        .. versionchanged:: 3.0
           Added the ``standalone_mode`` parameter.
        """
        if args is None:
            args = sys.argv[1:]
    
            if os.name == "nt" and windows_expand_args:
                args = _expand_args(args)
        else:
            args = list(args)
    
        if prog_name is None:
            prog_name = _detect_program_name()
    
        # Process shell completion requests and exit early.
        self._main_shell_completion(extra, prog_name, complete_var)
    
        try:
            try:
                with self.make_context(prog_name, args, **extra) as ctx:
                    rv = self.invoke(ctx)
                    if not standalone_mode:
                        return rv
                    # it's not safe to `ctx.exit(rv)` here!
                    # note that `rv` may actually contain data like "1" which
                    # has obvious effects
                    # more subtle case: `rv=[None, None]` can come out of
                    # chained commands which all returned `None` -- so it's not
                    # even always obvious that `rv` indicates success/failure
                    # by its truthiness/falsiness
                    ctx.exit()
            except (EOFError, KeyboardInterrupt) as e:
                echo(file=sys.stderr)
                raise Abort() from e
            except ClickException as e:
                if not standalone_mode:
                    raise
                e.show()
                sys.exit(e.exit_code)
            except OSError as e:
                if e.errno == errno.EPIPE:
                    sys.stdout = t.cast(t.TextIO, 
PacifyFlushWrapper(sys.stdout))
                    sys.stderr = t.cast(t.TextIO, 
PacifyFlushWrapper(sys.stderr))
                    sys.exit(1)
                else:
                    raise
        except Exit as e:
            if standalone_mode:
                sys.exit(e.exit_code)
            else:
                # in non-standalone mode, return the exit code
                # note that this is only reached if `self.invoke` above raises
                # an Exit explicitly -- thus bypassing the check there which
                # would return its result
                # the results of non-standalone execution may therefore be
                # somewhat ambiguous: if there are codepaths which lead to
                # `ctx.exit(1)` and to `return 1`, the caller won't be able to
                # tell the difference between the two
                return e.exit_code
        except Abort:
            if not standalone_mode:
                raise
            echo(_("Aborted!"), file=sys.stderr)
>           sys.exit(1)
E           SystemExit: 1

/usr/lib/python3/dist-packages/click/core.py:1478: SystemExit
----------------------------- Captured stdout call -----------------------------
1
___________________ BlockTests.test_snapshot_cancel_no_force ___________________

self = <tests.managers.block_tests.BlockTests 
testMethod=test_snapshot_cancel_no_force>
confirm_mock = <MagicMock name='confirm' id='140113522550032'>

    @mock.patch('SoftLayer.CLI.formatting.confirm')
    def test_snapshot_cancel_no_force(self, confirm_mock):
        confirm_mock.return_value = False
        result = self.run_command(['block', 'snapshot-cancel', '102'])
    
>       self.assertEqual(2, result.exit_code)
E       AssertionError: 2 != 1

tests/managers/block_tests.py:290: AssertionError
=============================== warnings summary ===============================
tests/CLI/core_tests.py::CoreTests::test_build_client
tests/CLI/core_tests.py::CoreTests::test_diagnostics
tests/CLI/core_tests.py::CoreTests::test_load_all
tests/CLI/core_tests.py::CoreTests::test_verbose_max
tests/CLI/modules/vs/vs_tests.py::VirtTests::test_list_vs
tests/CLI/modules/vs/vs_tests.py::VirtTests::test_list_vs_search_args
tests/CLI/modules/vs/vs_tests.py::VirtTests::test_list_vs_search_noargs
tests/CLI/modules/vs/vs_tests.py::VirtTests::test_list_vs_search_noargs_domain
  /usr/lib/python3/dist-packages/click/core.py:1252: UserWarning: The parameter 
--tag is used more than once. Remove its duplicate as parameters should be 
unique.
    parser = self.make_parser(ctx)

tests/CLI/core_tests.py::CoreTests::test_build_client
tests/CLI/core_tests.py::CoreTests::test_diagnostics
tests/CLI/core_tests.py::CoreTests::test_load_all
tests/CLI/core_tests.py::CoreTests::test_verbose_max
tests/CLI/modules/vs/vs_tests.py::VirtTests::test_list_vs
tests/CLI/modules/vs/vs_tests.py::VirtTests::test_list_vs_search_args
tests/CLI/modules/vs/vs_tests.py::VirtTests::test_list_vs_search_noargs
tests/CLI/modules/vs/vs_tests.py::VirtTests::test_list_vs_search_noargs_domain
  /usr/lib/python3/dist-packages/click/core.py:1245: UserWarning: The parameter 
--tag is used more than once. Remove its duplicate as parameters should be 
unique.
    self.parse_args(ctx, args)

tests/CLI/core_tests.py::CoreTests::test_load_all
  /usr/lib/python3/dist-packages/SoftLayer/CLI/command.py:177: UserWarning: The 
parameter --tag is used more than once. Remove its duplicate as parameters 
should be unique.
    pieces = self.collect_usage_pieces(ctx)

tests/CLI/core_tests.py::CoreTests::test_load_all
  /usr/lib/python3/dist-packages/click/core.py:1163: UserWarning: The parameter 
--tag is used more than once. Remove its duplicate as parameters should be 
unique.
    self.format_options(ctx, formatter)

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED 
tests/CLI/modules/dedicatedhost_tests.py::DedicatedHostsTests::test_cancel_guests_abort
FAILED 
tests/CLI/modules/dedicatedhost_tests.py::DedicatedHostsTests::test_cancel_host_abort
FAILED 
tests/CLI/modules/file_tests.py::FileTests::test_file_snapshot_cancel_force
FAILED tests/CLI/modules/file_tests.py::FileTests::test_file_volume_cancel_force
FAILED 
tests/CLI/modules/hardware/hardware_basic_tests.py::HardwareCLITests::test_hardware_cancel_no_force
FAILED tests/CLI/modules/subnet_tests.py::SubnetTests::test_cancel_fail - Ass...
FAILED 
tests/CLI/modules/vs/vs_create_tests.py::VirtCreateTests::test_create_like
FAILED 
tests/CLI/modules/vs/vs_create_tests.py::VirtCreateTests::test_create_like_flavor
FAILED 
tests/CLI/modules/vs/vs_create_tests.py::VirtCreateTests::test_create_like_image
FAILED 
tests/CLI/modules/vs/vs_create_tests.py::VirtCreateTests::test_create_like_tags
FAILED 
tests/CLI/modules/vs/vs_create_tests.py::VirtCreateTests::test_create_like_transient
FAILED tests/managers/block_tests.py::BlockTests::test_snapshot_cancel_no_force
=========== 12 failed, 2022 passed, 6 skipped, 18 warnings in 22.61s ===========
autopkgtest [16:28:26]: test py3: -----------------------]
autopkgtest [16:28:27]: test py3:  - - - - - - - - - - results - - - - - - - - 
- -
py3                  FAIL non-zero exit status 1
autopkgtest [16:28:27]: @@@@@@@@@@@@@@@@@@@@ summary
py3                  FAIL non-zero exit status 1

Attachment: signature.asc
Description: PGP signature


--- End Message ---
--- Begin Message ---
Source: python-softlayer
Source-Version: 6.2.5-3
Done: Colin Watson <[email protected]>

We believe that the bug you reported is fixed in the latest version of
python-softlayer, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to [email protected],
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Colin Watson <[email protected]> (supplier of updated python-softlayer 
package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing [email protected])


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Format: 1.8
Date: Tue, 21 Jul 2026 13:36:55 +0100
Source: python-softlayer
Architecture: source
Version: 6.2.5-3
Distribution: unstable
Urgency: medium
Maintainer: Debian Python Team <[email protected]>
Changed-By: Colin Watson <[email protected]>
Closes: 1142373
Changes:
 python-softlayer (6.2.5-3) unstable; urgency=medium
 .
   * Team upload.
   * Support Click 8.2+; fix vs_create_tests for Click 8.3+ (closes:
     #1142373).
Checksums-Sha1:
 db95a58a955501630141406858e01a54e52dc3b7 2455 python-softlayer_6.2.5-3.dsc
 00838405e011f8ffd89db6e508a7240fbc667b9c 6696 
python-softlayer_6.2.5-3.debian.tar.xz
 0358271ebc4b2360d110591c804f38171326fc3f 3248576 
python-softlayer_6.2.5-3.git.tar.xz
 6aa72970e31b81344c60a1316b26ae6eed0aadb7 17582 
python-softlayer_6.2.5-3_source.buildinfo
Checksums-Sha256:
 ae8d5136dc4839969b81a377fb4945cd0bbce85c2a1d9046e68f2432cf4c5902 2455 
python-softlayer_6.2.5-3.dsc
 3f4def1d56b6c605a1c2bb012c9796bb67a172498c9254831a15ae7f9c485bca 6696 
python-softlayer_6.2.5-3.debian.tar.xz
 2cf73fb6a409d5d16611c32d73999c29c5a13c60ae82ac2221545fbbd65a506a 3248576 
python-softlayer_6.2.5-3.git.tar.xz
 43593b958342c2ccacb0eb42e84f1c6b442e314c636765593abd6000bf28ebb3 17582 
python-softlayer_6.2.5-3_source.buildinfo
Files:
 b3f30629fc8cb666a3084e4369b30a5f 2455 python optional 
python-softlayer_6.2.5-3.dsc
 09743b1a5e1ac293a7bb3c227ad30727 6696 python optional 
python-softlayer_6.2.5-3.debian.tar.xz
 7c35af7ebab35408349ed7d50089ae92 3248576 python None 
python-softlayer_6.2.5-3.git.tar.xz
 f6658f8a5965e03e7ffe1d66ffe992c0 17582 python optional 
python-softlayer_6.2.5-3_source.buildinfo
Git-Tag-Info: tag=c3c479e0f12864ccc2fa929e2d651c1a5cbb5df2 
fp=ac0a4ff12611b6fccf01c111393587d97d86500b
Git-Tag-Tagger: Colin Watson <[email protected]>

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEN02M5NuW6cvUwJcqYG0ITkaDwHkFAmpfaOcACgkQYG0ITkaD
wHkRaQ/+K3zWYu1zmUeF+gLVrV7jxzgWCcZGtW1vdSeE6fjFV/c3txBDQt0s1Qy8
mnZLIvOylnFXVw9iVLKxXGR/zExq+b08DuT28K9zugXfJxIrAsmBmJeiD0ZyPTo6
ud3goZvxu0t4Ry+kAvKqGEnz7IxJQZQD2+GNcxzZRYtK5SZoYAUSEHW+EMRysjvH
KI/3CjHWWJKtekCGOi6STbpmt6L4Zx0wV4xgCMyunhrNReFr2IM5OA2BWqnZpozW
89C+6g8IV6z+ymQx2gELGmnjwTioTGacEXr3I8ht5Unt8FCYE7dc/xuXgklYkXYY
SYxUaV+HUtlYxSK4v3gypg9hxJ3beBjpNNXjU7xEEWzNoOjfD/ogB6BX2kLNYKBt
n3mKxtfTAk/DGYn3uPrKyes3yOrzLyesYq8PTl3OLGZduPpfJ/kelw4e9nFUylYg
AvGQFW+OhXs7WS12RqRlStlLub06ON6XBszBylLUilJllovQy15kBUg/oo7y2O6D
lD16lHex3kZxT3OusOMzlxb+cD0pCR0icTBhS7IgSYvhs5nVtHnX95+iGC3OfTt7
tqP9QWCtBA3PSHFDEe6SnUuiGKFqOGqdSsAcO99nmw83kM6/DdB7lBZNXZHfYBO5
7EbX3d+KHoztv6rzJ8rNbIg4spnO8SouNO+dNx4281O2XxpE0EU=
=DTky
-----END PGP SIGNATURE-----

Attachment: pgpzpZ_r2BY06.pgp
Description: PGP signature


--- End Message ---

Reply via email to