/ PyCrypCli / PyCrypCli / models / service / service.py
service.py
 1  from __future__ import annotations
 2  
 3  from typing import Any, TypeVar, TYPE_CHECKING
 4  
 5  from pydantic import Field
 6  
 7  from .public_service import PublicService
 8  from ...exceptions import ServiceNotFoundError
 9  
10  if TYPE_CHECKING:
11      from ...client import Client
12  
13  ServiceType = TypeVar("ServiceType", bound="Service")
14  
15  
16  class Service(PublicService):
17      owner_uuid: str = Field(alias="owner")
18      running: bool
19      part_owner_uuid: str | None = Field(alias="part_owner")
20      speed: float
21  
22      @staticmethod
23      def get_services(client: Client, device_uuid: str) -> list[Service]:
24          return [
25              Service.parse(client, service)
26              for service in client.ms("service", ["list"], device_uuid=device_uuid)["services"]
27          ]
28  
29      @staticmethod
30      def get_service(client: Client, device_uuid: str, service_uuid: str) -> Service:
31          return Service.parse(
32              client, client.ms("service", ["private_info"], device_uuid=device_uuid, service_uuid=service_uuid)
33          )
34  
35      @staticmethod
36      def get_service_by_name(client: Client, device_uuid: str, name: str) -> Service:
37          for service in Service.get_services(client, device_uuid):
38              if service.name == name:
39                  return service
40          raise ServiceNotFoundError
41  
42      @staticmethod
43      def list_part_owner(client: Client) -> list[Service]:
44          return [Service.parse(client, service) for service in client.ms("service", ["list_part_owner"])["services"]]
45  
46      def update(self) -> Service:
47          return self._update(Service.get_service(self._client, self.device_uuid, self.uuid))
48  
49      def use(self, **data: Any) -> dict[Any, Any]:
50          return self._ms("service", ["use"], device_uuid=self.device_uuid, service_uuid=self.uuid, **data)
51  
52      def toggle(self) -> Service:
53          return self._update(self._ms("service", ["toggle"], device_uuid=self.device_uuid, service_uuid=self.uuid))
54  
55      def delete(self) -> None:
56          self._ms("service", ["delete"], device_uuid=self.device_uuid, service_uuid=self.uuid)