From f1d9aaf340f401987a2e67b9eaa91039a9ca50d8 Mon Sep 17 00:00:00 2001 From: Andrea Mistrali Date: Mon, 1 Jul 2024 17:42:32 +0200 Subject: [PATCH] Lot of work and it works --- hsapi/hsapi/nodes.py | 22 +++++++++++++++++++--- hsapi/poetry.lock | 2 +- hsapi/pyproject.toml | 3 +++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/hsapi/hsapi/nodes.py b/hsapi/hsapi/nodes.py index d37efd7..72d6390 100644 --- a/hsapi/hsapi/nodes.py +++ b/hsapi/hsapi/nodes.py @@ -45,9 +45,25 @@ class Node(HSAPICall): response = self.call('get') return v1ListNodesResponse(**response.json()) - def get(self, nodeId: str) -> v1NodeResponse: - response = self.call('get', call_path=nodeId) - return v1NodeResponse(**response.json()) + def get(self, nodeId: str) -> v1Node: + # There is a bug in headscale API + # retrieving a specific node does not return the tags + # so we get the full list of nodes and extract the node with the + # ID we want + # response = self.call('get', call_path=nodeId) + nodelist = self.list() + node = [n for n in nodelist.nodes if n.id == nodeId] + if node: + return node[0] # type: ignore + else: + return v1Node() + + def byUser(self, username: str) -> v1ListNodesResponse: + nodelist = self.list() + + byUser = [n for n in nodelist.nodes if n.user.name == username] + + return v1ListNodesResponse(nodes=byUser) def delete(self, nodeId: str) -> None: self.call('delete', call_path=nodeId) diff --git a/hsapi/poetry.lock b/hsapi/poetry.lock index cb7d19b..cc8c3af 100644 --- a/hsapi/poetry.lock +++ b/hsapi/poetry.lock @@ -327,4 +327,4 @@ zstd = ["zstandard (>=0.18.0)"] [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "d6cbad8cd64ba63c62d1f3ab2dde75682d6a42c5b40808fd35615bccdf5fdd07" +content-hash = "28f675747b0ee9850925befb61509ac513e0acc429d7efc1abe2a0fea6d8f97d" diff --git a/hsapi/pyproject.toml b/hsapi/pyproject.toml index eb3f0da..1c235fa 100644 --- a/hsapi/pyproject.toml +++ b/hsapi/pyproject.toml @@ -13,6 +13,9 @@ pydantic = "^2.7.4" pydantic-settings = "^2.3.4" +[tool.poetry.group.dev.dependencies] +python-dotenv = "^1.0.1" + [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"