Much better code

This commit is contained in:
2024-06-28 17:14:01 +02:00
parent 8e4c0b5ce4
commit e90cac77db
52 changed files with 1931 additions and 731 deletions

View File

@ -1,14 +1,40 @@
from .model import HSAPICall
from headscale_api_client.schemas import (v1ListNodesResponse,
v1GetNodeResponse,
v1DeleteNodeResponse,
v1ExpireNodeResponse, v1MoveNodeRequest,
v1RenameNodeResponse,
v1MoveNodeRequest,
v1MoveNodeResponse,
v1GetNodeRoutesResponse,
v1SetTagsResponse,
HeadscaleServiceSetTagsBody)
from .model import HSAPICall, formatTags
from .schemas import v1Route, v1Node
from typing import Optional, List
from pydantic import BaseModel, Field
class v1SetTagsNodeRequest(BaseModel):
tags: Optional[List[str]] = Field(alias="tags", default=None)
def model_post_init(self, ctx):
self.tags = formatTags(self.tags)
class v1MoveNodeRequest(BaseModel):
user: Optional[str] = Field(alias="user", default=None)
class v1BackfillNodeIPsRequest(BaseModel):
confirmed: Optional[bool] = Field(alias="confirmed", default=True)
class v1ListNodesResponse(BaseModel):
nodes: Optional[List[Optional[v1Node]]] = Field(
alias="nodes", default=None)
class v1NodeResponse(BaseModel):
node: Optional[v1Node] = Field(alias="node", default=None)
class v1GetNodeRoutesResponse(BaseModel):
routes: Optional[List[Optional[v1Route]]] = Field(
alias="routes", default=None)
class v1BackfillNodeIPsResponse(BaseModel):
changes: Optional[List[str]] = Field(alias="changes", default=None)
class Node(HSAPICall):
@ -19,30 +45,34 @@ class Node(HSAPICall):
response = self.call('get')
return v1ListNodesResponse(**response.json())
def get(self, nodeId: str) -> v1GetNodeResponse:
def get(self, nodeId: str) -> v1NodeResponse:
response = self.call('get', call_path=nodeId)
return v1GetNodeResponse(**response.json())
return v1NodeResponse(**response.json())
def delete(self, nodeId: str) -> v1DeleteNodeResponse:
response = self.call('delete', call_path=nodeId)
return v1DeleteNodeResponse(**response.json())
def delete(self, nodeId: str) -> None:
self.call('delete', call_path=nodeId)
def expire(self, nodeId: str) -> v1ExpireNodeResponse:
response = self.call('post', f'{nodeId}/expire')
return v1ExpireNodeResponse()(**response.json())
def expire(self, nodeId: str) -> None:
self.call('post', f'{nodeId}/expire')
def rename(self, nodeId: str, newName: str) -> v1RenameNodeResponse:
def rename(self, nodeId: str, newName: str) -> v1NodeResponse:
response = self.call('post', f'{nodeId}/rename/{newName}')
return v1RenameNodeResponse(**response.json())
return v1NodeResponse(**response.json())
def move(self, nodeId: str, data: v1MoveNodeRequest) -> v1MoveNodeResponse:
def move(self, nodeId: str, data: v1MoveNodeRequest) -> v1NodeResponse:
response = self.call('post', f'{nodeId}/user', data)
return v1MoveNodeResponse()(**response.json())
return v1NodeResponse(**response.json())
def routes(self, nodeId: str) -> v1GetNodeRoutesResponse:
response = self.call('get', f'{nodeId}/routes')
return v1GetNodeRoutesResponse(**response.json())
def setTags(self, nodeId: str, data: HeadscaleServiceSetTagsBody) -> v1SetTagsResponse:
def setTags(self, nodeId: str, data: v1SetTagsNodeRequest) -> v1NodeResponse:
response = self.call('post', f'{nodeId}/tags', data)
return v1SetTagsResponse(**response.json())
return v1NodeResponse(**response.json())
# Broken on server
def backfillips(self, confirmed: bool = True) -> v1BackfillNodeIPsResponse:
response = self.call(
'post', f'/backfillips?confirmed={confirmed}')
return v1BackfillNodeIPsResponse(**response.json())