ewels / rich-click

Format click help output nicely with rich.
https://ewels.github.io/rich-click/
MIT License
583 stars 33 forks source link

'RichGroup' object has no attribute 'isolation' #188

Closed ocervell closed 2 months ago

ocervell commented 2 months ago

Trying to add tests for my CLI following the click guide (https://click.palletsprojects.com/en/8.1.x/testing/).

$ pip freeze | grep click
click==8.1.7
click-didyoumean==0.3.1
click-plugins==1.1.1
click-repl==0.3.0
rich-click==1.6.1

My CLI:

import rich_click as click

@click.group(invoke_without_command=True)
@click.option('--version', '-version', is_flag=True, default=False)
@click.pass_context
def cli(ctx, version):
    if ctx.invoked_subcommand is None:
        if version:
            print_version()
        else:
            ctx.get_help()

My test:

class TestOffline(unittest.TestCase):
    def test_offline_cli_install(self):
        from secator.cli import cli
        import click
        from click.testing import CliRunner
        result = CliRunner.invoke(cli, None, None)

fails with:

Traceback (most recent call last):
  File "/home/osboxes/Workspace/secator/tests/unit/test_offline.py", line 29, in test_offline_cli_install
    result = CliRunner.invoke(cli, None, None)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/osboxes/Workspace/secator/.venv/lib/python3.11/site-packages/click/testing.py", line 394, in invoke
    with self.isolation(input=input, env=env, color=color) as outstreams:
         ^^^^^^^^^^^^^^
AttributeError: 'RichGroup' object has no attribute 'isolation'
dwreeves commented 2 months ago

Hi @ocervell.

It looks like the issue is that you are running CliRunner.invoke(cli, None, None) instead of CliRunner().invoke(cli, None).

Basically, invoke() is an instance method and the first argument is self. You are running it as if it were a class or static method. isolation is an attribute of a CliRunner object, not a Group object.

Let me know if that resolves your issue!

ocervell commented 2 months ago

You are right !! My mistake... You can close this ;)