weegee/weegee/extra.py

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)