Исходный код application.use_cases.tvip_provision.handle_provision_request

from typing import Optional

from domain.value_objects.mac_address import MacAddress
from domain.value_objects.ip_address import IpAddress
from domain.entities.device import Device
from domain.repositories.device_repository import DeviceRepository
from domain.repositories.provision_repository import ProvisionRepository
from domain.services.xml_serializer import XmlSerializer


[документация] class HandleProvisionRequestUseCase:
[документация] def __init__( self, device_repo: DeviceRepository, provision_repo: ProvisionRepository, xml_serializer: XmlSerializer ): self.device_repo = device_repo self.provision_repo = provision_repo self.xml_serializer = xml_serializer
[документация] async def execute(self, mac_address: str, ip_address: Optional[str] = None, model: Optional[str] = None) -> str: mac = MacAddress(mac_address) device = await self._get_or_create_device(mac_address=mac, ip_address=ip_address, model=model) config = await self.provision_repo.get_by_device(device) if not config: raise ValueError('Сonfiguration file could not be found.') return self.xml_serializer.serialize(config)
async def _get_or_create_device(self, mac_address: MacAddress, ip_address: Optional[str] = None, model: Optional[str] = None) -> Device: device = await self.device_repo.get_by_mac(mac_address) ip_value_object = IpAddress(ip_address) if ip_address else None if device: device.update_last_activity() device.ip_address = ip_value_object if model: device.model = model else: device = Device(mac_address=mac_address, ip_address=ip_value_object, model=model) config = await self.provision_repo.get_default() device.assign_config(config_id=config.id) device.update_last_activity() device = await self.device_repo.save(device) return device