Get device info with a device_id or WAN MAC address

This commit is contained in:
phil 2025-05-06 01:35:57 +02:00
parent 4cd86bfbb0
commit 221de0c1a0
4 changed files with 26 additions and 3 deletions

View file

@ -6,6 +6,7 @@ readme = "README.md"
requires-python = ">=3.13" requires-python = ">=3.13"
dependencies = [ dependencies = [
"httpx>=0.28.1", "httpx>=0.28.1",
"netaddr>=1.3.0",
"pydantic-settings[yaml]>=2.9.1", "pydantic-settings[yaml]>=2.9.1",
"typer>=0.15.3", "typer>=0.15.3",
] ]

View file

@ -40,7 +40,10 @@ def reset(): ...
@app.command(help="Get info on the device") @app.command(help="Get info on the device")
async def info(device_id: Annotated[str, typer.Argument()]): async def info(
device_id: Annotated[str, typer.Argument(help="device_id or WAN MAC address")],
):
"""Get device info, from its device_id or WAN interface MAC address"""
try: try:
resp = await server.get_device_info(device_id) resp = await server.get_device_info(device_id)
print(dumps(resp)) print(dumps(resp))

View file

@ -3,6 +3,7 @@ from json import dumps
from urllib.parse import quote from urllib.parse import quote
import httpx import httpx
from netaddr import EUI, AddrFormatError
from gacsco.config import conf from gacsco.config import conf
from gacsco.utils import GacscoError from gacsco.utils import GacscoError
@ -41,8 +42,15 @@ class Server:
return resp.json() return resp.json()
async def get_device_info(self, device_id: str): async def get_device_info(self, device_id: str):
async with httpx.AsyncClient(cookies=self.cookies) as client: try:
EUI(device_id)
except AddrFormatError:
query = {"_id": device_id} query = {"_id": device_id}
else:
query = {
"InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.MACAddress": device_id
}
async with httpx.AsyncClient(cookies=self.cookies) as client:
resp = await client.get( resp = await client.get(
f"{self.url}/devices/?", f"{self.url}/devices/?",
params={"query": dumps(query)}, params={"query": dumps(query)},

13
uv.lock generated
View file

@ -94,10 +94,11 @@ wheels = [
] ]
[[package]] [[package]]
name = "genieacs-commander" name = "gacsco"
source = { editable = "." } source = { editable = "." }
dependencies = [ dependencies = [
{ name = "httpx" }, { name = "httpx" },
{ name = "netaddr" },
{ name = "pydantic-settings", extra = ["yaml"] }, { name = "pydantic-settings", extra = ["yaml"] },
{ name = "typer" }, { name = "typer" },
] ]
@ -111,6 +112,7 @@ dev = [
[package.metadata] [package.metadata]
requires-dist = [ requires-dist = [
{ name = "httpx", specifier = ">=0.28.1" }, { name = "httpx", specifier = ">=0.28.1" },
{ name = "netaddr", specifier = ">=1.3.0" },
{ name = "pydantic-settings", extras = ["yaml"], specifier = ">=2.9.1" }, { name = "pydantic-settings", extras = ["yaml"], specifier = ">=2.9.1" },
{ name = "typer", specifier = ">=0.15.3" }, { name = "typer", specifier = ">=0.15.3" },
] ]
@ -258,6 +260,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
] ]
[[package]]
name = "netaddr"
version = "1.3.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/54/90/188b2a69654f27b221fba92fda7217778208532c962509e959a9cee5229d/netaddr-1.3.0.tar.gz", hash = "sha256:5c3c3d9895b551b763779ba7db7a03487dc1f8e3b385af819af341ae9ef6e48a", size = 2260504, upload-time = "2024-05-28T21:30:37.743Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/12/cc/f4fe2c7ce68b92cbf5b2d379ca366e1edae38cccaad00f69f529b460c3ef/netaddr-1.3.0-py3-none-any.whl", hash = "sha256:c2c6a8ebe5554ce33b7d5b3a306b71bbb373e000bbbf2350dd5213cc56e3dbbe", size = 2262023, upload-time = "2024-05-28T21:30:34.191Z" },
]
[[package]] [[package]]
name = "packaging" name = "packaging"
version = "25.0" version = "25.0"