Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:

strategy:
matrix:
python-version: ["3.13"]
python-version: ["3.14"]

steps:
- name: "Checkout source files"
Expand All @@ -53,7 +53,7 @@ jobs:

strategy:
matrix:
python-version: ["3.11", "3.12", "3.13"]
python-version: ["3.11", "3.12", "3.13", "3.14"]
os: [ubuntu-latest, macos-latest, windows-latest]
extras: [false, true]
exclude:
Expand Down
8 changes: 4 additions & 4 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ repos:

- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
rev: 0.5.30
rev: 0.9.5
hooks:
# Update the uv lockfile
- id: uv-lock

- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
rev: v6.0.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
Expand All @@ -22,14 +22,14 @@ repos:
- "--indent=4"

- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.9.6
rev: v0.14.2
hooks:
- id: ruff
args: [--fix, --exit-non-zero-on-fix]
- id: ruff-format

- repo: https://github.com/PyCQA/doc8
rev: 'v1.1.2'
rev: 'v2.0.0'
hooks:
- id: doc8
additional_dependencies: [tomli]
Expand Down
10 changes: 3 additions & 7 deletions .readthedocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,8 @@ build:
tools:
python: "3"
jobs:
install:
- pip install --upgrade pip
- pip install --group 'docs'
Comment on lines +14 to +16
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Necessary as pyproject.toml uses now standard dependecy groups.

pre_build:
- python -m sphinx -b linkcheck docs/source/ $READTHEDOCS_OUTPUT/linkcheck

python:
install:
- method: pip
path: .
extra_requirements:
- docs
4 changes: 2 additions & 2 deletions kasa/cli/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ def _device_to_serializable(val: Device):


async def invoke_subcommand(
command: click.BaseCommand,
command: click.Command,
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Spotted by mypy, BaseCommand is deprecated with this message

"'BaseCommand' is deprecated and will be removed in Click 9.0. Use"
            " 'Command' instead."

ctx: click.Context,
args: list[str] | None = None,
**extra: Any,
Expand Down Expand Up @@ -200,7 +200,7 @@ def _list_children():
if child_option is not None:
if child_option is OPTIONAL_VALUE_FLAG:
msg = _list_children()
child_index_option = click.prompt(
child_index_option = await click.prompt(
f"\n{msg}\nEnter the index number of the child device",
type=click.IntRange(0, len(device.children) - 1),
)
Expand Down
2 changes: 1 addition & 1 deletion kasa/cli/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -415,7 +415,7 @@ async def shell(dev: Device) -> None:
@click.argument("parameters", default=None, required=False)
async def raw_command(ctx, module, command, parameters):
"""Run a raw command on the device."""
logging.warning("Deprecated, use 'kasa command --module %s %s'", module, command)
logging.warning("Deprecated, use 'kasa command --module %s %s'", module, command) # noqa: LOG015
return await ctx.forward(cmd_command)


Expand Down
2 changes: 2 additions & 0 deletions kasa/discover.py
Original file line number Diff line number Diff line change
Expand Up @@ -743,6 +743,8 @@ def _get_device_instance_legacy(info: dict, config: DeviceConfig) -> Device:
device = device_class(config.host, config=config)
sys_info = _extract_sys_info(info)
device_type = sys_info.get("mic_type", sys_info.get("type"))
if device_type is None:
raise UnsupportedDeviceError("type nor mic_type found in sysinfo response")
Comment on lines +746 to +747
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unsure why this was not spotted earlier by mypy, but from_values below expects that this is not none.

login_version = (
sys_info.get("stream_version") if device_type == "IOT.IPCAMERA" else None
)
Expand Down
5 changes: 4 additions & 1 deletion kasa/iot/iotdevice.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
from ..device import Device, DeviceInfo, WifiNetwork
from ..device_type import DeviceType
from ..deviceconfig import DeviceConfig
from ..exceptions import KasaException
from ..exceptions import KasaException, UnsupportedDeviceError
from ..feature import Feature
from ..module import Module
from ..modulemapping import ModuleMapping, ModuleName
Expand Down Expand Up @@ -760,6 +760,9 @@ def _get_device_info(

# Get other info
device_family = sys_info.get("type", sys_info.get("mic_type"))
if device_family is None:
raise UnsupportedDeviceError("type nor mic_type found in sysinfo response")

device_type = IotDevice._get_device_type_from_sys_info(info)
fw_version_full = sys_info["sw_ver"]
if " " in fw_version_full:
Expand Down
25 changes: 13 additions & 12 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ dependencies = [
"cryptography>=1.9",
"aiohttp>=3",
"tzdata>=2024.2 ; platform_system == 'Windows'",
"mashumaro>=3.14",
"mashumaro>=3.14; python_version < '3.14'",
"mashumaro>=3.17; python_version >= '3.14'",
]

classifiers = [
Expand All @@ -21,17 +22,11 @@ classifiers = [
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
]

[project.optional-dependencies]
speedups = ["orjson>=3.9.1", "kasa-crypt>=0.2.0"]
docs = [
"sphinx_rtd_theme~=2.0",
"sphinxcontrib-programoutput~=0.0",
"myst-parser",
"docutils>=0.17",
"sphinx>=7.4.7",
]
speedups = ["orjson>=3.11.1", "kasa-crypt>=0.2.0"]
shell = ["ptpython", "rich"]

[project.urls]
Expand All @@ -43,8 +38,8 @@ shell = ["ptpython", "rich"]
[project.scripts]
kasa = "kasa.cli.__main__:cli"

[tool.uv]
dev-dependencies = [
[dependency-groups]
dev = [
"pytest",
"pytest-cov",
"pytest-asyncio",
Expand All @@ -63,7 +58,13 @@ dev-dependencies = [
"pytest-socket>=0.7.0",
"ruff>=0.9.0",
]

docs = [
"sphinx_rtd_theme~=2.0",
"sphinxcontrib-programoutput~=0.0",
"myst-parser",
"docutils>=0.17",
"sphinx>=7.4.7",
]

[build-system]
requires = ["hatchling"]
Expand Down
Loading
Loading