Skip to content

Fix --help on subcommands #885

@rytilahti

Description

@rytilahti

Since Device is now an abstract interface, it cannot be created like it's currently done for the purposes of --help on subcommands.

Traceback (most recent call last):
  File "/home/tpr/code/python-kasa/.venv/bin/kasa", line 8, in <module>
    sys.exit(cli())
             ^^^^^
  File "/home/tpr/code/python-kasa/.venv/lib/python3.11/site-packages/asyncclick/core.py", line 1205, in __call__
    return anyio.run(self._main, main, args, kwargs, **opts)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/tpr/code/python-kasa/.venv/lib/python3.11/site-packages/anyio/_core/_eventloop.py", line 73, in run
    return async_backend.run(func, args, {}, backend_options)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/tpr/code/python-kasa/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2001, in run
    return runner.run(wrapper())
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/asyncio/base_events.py", line 654, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "/home/tpr/code/python-kasa/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1989, in wrapper
    return await func(*args)
           ^^^^^^^^^^^^^^^^^
  File "/home/tpr/code/python-kasa/.venv/lib/python3.11/site-packages/asyncclick/core.py", line 1208, in _main
    return await main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/tpr/code/python-kasa/.venv/lib/python3.11/site-packages/asyncclick/core.py", line 1120, in main
    rv = await self.invoke(ctx)
         ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/tpr/code/python-kasa/kasa/cli.py", line 137, in invoke
    _handle_exception(self._debug, exc)
  File "/home/tpr/code/python-kasa/kasa/cli.py", line 135, in invoke
    return await super().invoke(ctx)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/tpr/code/python-kasa/.venv/lib/python3.11/site-packages/asyncclick/core.py", line 1736, in invoke
    await super().invoke(ctx)
  File "/home/tpr/code/python-kasa/.venv/lib/python3.11/site-packages/asyncclick/core.py", line 1485, in invoke
    return await ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/tpr/code/python-kasa/.venv/lib/python3.11/site-packages/asyncclick/core.py", line 824, in invoke
    rv = await rv
         ^^^^^^^^
  File "/home/tpr/code/python-kasa/kasa/cli.py", line 306, in cli
    ctx.obj = Device(None)
              ^^^^^^^^^^^^
TypeError: Can't instantiate abstract class Device with abstract methods alias, device_id, emeter_realtime, emeter_this_month, emeter_today, get_emeter_realtime, has_emeter, hw_info, internal_state, is_on, location, mac, model, on_since, rssi, set_alias, sys_info, time, timezone, turn_off, turn_on, update, update_from_discover_info, wifi_join, wifi_scan

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions