52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
from __future__ import annotations
|
|
from logging import getLogger
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Optional as O, Any, Tuple, List
|
|
|
|
from .config import WeegeeContext
|
|
from .core import (
|
|
WeegeePeer, WeegeeConnection,
|
|
sync_all_interfaces, config_interface,
|
|
)
|
|
|
|
logger = getLogger(__name__)
|
|
|
|
|
|
@dataclass(eq=False, repr=False)
|
|
class WeegeeServer(WeegeePeer):
|
|
def get_client_name(self, name: str) -> str:
|
|
return f'{self.name}/{name}'
|
|
|
|
def get_clients(self) -> List[WeegeeClient]:
|
|
return WeegeeClient.find(self.context, self.get_client_name('*'))
|
|
|
|
def get_client(self, name: str) -> WeegeeClient:
|
|
return WeegeeClient.load(self.context, self.get_client_name(name))
|
|
|
|
def delete(self, trash: bool = False) -> None:
|
|
super().delete(trash=trash)
|
|
sync_all_interfaces(self.context, auto=True)
|
|
|
|
@dataclass(eq=False, repr=False)
|
|
class WeegeeClient(WeegeePeer):
|
|
@classmethod
|
|
def create(cls, ctx: WeegeeContext, name: str, server: WeegeeServer, preshared_key: O[str] = None, **kwargs) -> Tuple['WeegeeClient', 'WeegeeConnection']:
|
|
name = server.get_client_name(name)
|
|
peer = super().create(ctx, name, **kwargs)
|
|
connection = WeegeeConnection.create(ctx, name, peers=[server, peer], preshared_key=preshared_key)
|
|
return cls(ctx, peer.item), connection
|
|
|
|
@property
|
|
def connection(self) -> WeegeeConnection:
|
|
return WeegeeConnection.load(self.context, self.name)
|
|
|
|
@property
|
|
def server(self) -> WeegeeServer:
|
|
return WeegeeServer.load(self.context, next(p.name for p in self.connection.peers if p.name != self.name))
|
|
|
|
def delete(self, trash: bool = False) -> None:
|
|
self.connection.delete(trash=trash)
|
|
super().delete(trash=trash)
|
|
sync_all_interfaces(self.context, auto=True)
|