FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Add devtools script to create module fixtures by rytilahti · Pull Request #404 · python-kasa/python-kasa · GitHub

Repository navigation

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension .md  (1) .py  (1) All 2 file types selected
Viewed files
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Unified
Split
Hide whitespace
Diff view
Unified
Split
Hide whitespace
22 changes: 22 additions & 0 deletions devtools/README.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,28 @@ Options:
--help Show this message and exit.
```

## create_module_fixtures

* Queries the device for all supported modules and outputs module-based fixture files for each device.
* This could be used to create fixture files for module-specific tests, but it might also be useful for other use-cases.

```shell
Usage: create_module_fixtures.py [OPTIONS] OUTPUTDIR

Create module fixtures for given host/network.

Arguments:
OUTPUTDIR [required]

Options:
--host TEXT
--network TEXT
--install-completion Install completion for the current shell.
--show-completion Show completion for the current shell, to copy it or
customize the installation.
--help Show this message and exit.
```

## parse_pcap

* Requires dpkt (pip install dpkt)
Expand Down
60 changes: 60 additions & 0 deletions devtools/create_module_fixtures.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
"""Create fixture files for modules supported by a device.

This script can be used to create fixture files for individual modules.
"""

import asyncio
import json
from pathlib import Path

import typer

from kasa import Discover, SmartDevice

app = typer.Typer()


def create_fixtures(dev: SmartDevice, outputdir: Path):
"""Iterate over supported modules and create version-specific fixture files."""
for name, module in dev.modules.items():
module_dir = outputdir / name
if not module_dir.exists():
module_dir.mkdir(exist_ok=True, parents=True)

sw_version = dev.hw_info["sw_ver"]
sw_version = sw_version.split(" ", maxsplit=1)[0]
filename = f"{dev.model}_{dev.hw_info['hw_ver']}_{sw_version}.json"
module_file = module_dir / filename

if module_file.exists():
continue

typer.echo(f"Creating {module_file} for {dev.model}")
with module_file.open("w") as f:
json.dump(module.data, f, indent=4)


@app.command()
def create_module_fixtures(
outputdir: Path,
host: str = typer.Option(default=None),
network: str = typer.Option(default=None),
):
"""Create module fixtures for given host/network."""
devs = []
if host is not None:
dev: SmartDevice = asyncio.run(Discover.discover_single(host))
devs.append(dev)
else:
if network is None:
network = "255.255.255.255"
devs = asyncio.run(Discover.discover(target=network)).values()
for dev in devs:
asyncio.run(dev.update())

for dev in devs:
create_fixtures(dev, outputdir)


if __name__ == "__main__":
app()

Back | FazBrowse Home | New Git URL