Loading src/srm/api/dependencies.py +2 −2 Changes for src/srm/api/dependencies.py: 2 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ from srm.adapters.database.repos.catalog import ( SqlServiceCapabilityRequirementRepository, SqlServiceSpecificationRepository, ) from srm.adapters.database.repos.topology import SqlDomainRepository, SqlZoneRepository from srm.adapters.database.repos.topology import SqlZoneRepository from srm.adapters.databus.nats_publisher import NatsPublisher from srm.app_state import AppState from srm.application.services.capability_placement import CapabilityPlacementPlanner Loading Loading @@ -104,7 +104,7 @@ def get_location_query_use_case( SqlServiceSpecificationRepository(session), SqlServiceCapabilityRequirementRepository(session), DeviceTargetedControlPathResolver( CapabilityPlacementPlanner(SqlZoneRepository(session), SqlDomainRepository(session)), CapabilityPlacementPlanner(SqlZoneRepository(session)), registry, ), registry, Loading src/srm/api/rest/router.py +3 −4 Changes for src/srm/api/rest/router.py: 3 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -21,7 +21,6 @@ from srm.api.rest.schemas import ( GetServiceSpecificationResponse, LocationQueryRequest, LocationQueryResponse, ProblemDetail, ServiceCapabilityRequirementResponseSchema, ServiceDeploymentUnitResponseSchema, ServiceSpecificationCreateSchema, Loading Loading @@ -357,9 +356,9 @@ def _problem(outcome: LocationQueryOutcome, correlator: str) -> JSONResponse: response_model=None, responses={ status.HTTP_200_OK: {"model": LocationQueryResponse}, status.HTTP_404_NOT_FOUND: {"model": ProblemDetail}, status.HTTP_422_UNPROCESSABLE_CONTENT: {"model": ProblemDetail}, status.HTTP_503_SERVICE_UNAVAILABLE: {"model": ProblemDetail}, status.HTTP_404_NOT_FOUND: {"model": ProblemDetails}, status.HTTP_422_UNPROCESSABLE_CONTENT: {"model": ProblemDetails}, status.HTTP_503_SERVICE_UNAVAILABLE: {"model": ProblemDetails}, }, ) async def query_device_location( Loading src/srm/api/rest/schemas.py +0 −7 Changes for src/srm/api/rest/schemas.py: 0 added lines, 7 removed lines. Original line number Diff line number Diff line Loading @@ -140,10 +140,3 @@ class LocationQueryResponse(DomainModel): last_location_time: datetime area: dict[str, Any] srm_resolved_identifier: str | None = None class ProblemDetail(DomainModel): type: str title: str status: int detail: str | None = None src/srm/application/command_handlers/network_capability_activate.py +6 −6 Changes for src/srm/application/command_handlers/network_capability_activate.py: 6 added lines, 6 removed lines. Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ from uuid import UUID from pydantic import ValidationError from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker from srm.api.databus.schemas import SrmNetworkCapabilityActivateV1, ValidatedEnvelopeV1 from srm.api.databus.schemas import AnswerableCommandV1, SrmNetworkCapabilityActivateV1 from srm.application.use_cases.network_capability_activate import ( NetworkCapabilityActivateCommand, NetworkCapabilityActivateResult, Loading Loading @@ -39,7 +39,7 @@ class NetworkCapabilityActivateCommandCoordinator: self._use_case_factory = use_case_factory self._publisher = publisher async def handle(self, envelope: ValidatedEnvelopeV1) -> None: async def handle(self, envelope: AnswerableCommandV1) -> None: command = await self._parse_command(envelope) if command is None: return Loading @@ -65,7 +65,7 @@ class NetworkCapabilityActivateCommandCoordinator: async def _parse_command( self, envelope: ValidatedEnvelopeV1, envelope: AnswerableCommandV1, ) -> NetworkCapabilityActivateCommand | None: try: activate_message = SrmNetworkCapabilityActivateV1.model_validate( Loading Loading @@ -163,7 +163,7 @@ class NetworkCapabilityActivateCommandCoordinator: async def _publish_failed_before_start_for_invalid_command( self, envelope: ValidatedEnvelopeV1, envelope: AnswerableCommandV1, ) -> None: now = datetime.now(UTC) status_event = SrmOperationStatusV1( Loading Loading @@ -199,7 +199,7 @@ class NetworkCapabilityActivateCommandCoordinator: completed_event.model_dump(mode="json"), ) def _capability_from_envelope(self, envelope: ValidatedEnvelopeV1) -> str | None: def _capability_from_envelope(self, envelope: AnswerableCommandV1) -> str | None: if envelope.model_extra is None: return None Loading @@ -212,7 +212,7 @@ class NetworkCapabilityActivateCommandCoordinator: return capability_type return None def _service_instance_id_from_envelope(self, envelope: ValidatedEnvelopeV1) -> UUID | None: def _service_instance_id_from_envelope(self, envelope: AnswerableCommandV1) -> UUID | None: if envelope.model_extra is None: return None Loading src/srm/application/services/capability_placement.py +0 −19 Changes for src/srm/application/services/capability_placement.py: 0 added lines, 19 removed lines. Original line number Diff line number Diff line Loading @@ -93,25 +93,6 @@ class CapabilityPlacementPlanner: ranked.sort(key=lambda item: item[:3]) return [placement for *_, placement in ranked] async def _place_pinned_domain( self, request: CapabilityPlacementRequest, ) -> CapabilityPlacement | None: assert request.pin.zone_id is not None assert request.pin.domain_id is not None zone = await self._zones.get_by_id(request.pin.zone_id) if zone is None or zone.state != ZoneState.ACTIVE: return None domain = await self._domains.get_by_id(request.pin.domain_id) if domain is None: return None if domain.zone_id != zone.id or domain.kind != request.domain_kind: return None return self._select_from_domain(zone, domain, request) async def _place_pinned_zone( self, request: CapabilityPlacementRequest, Loading Loading
src/srm/api/dependencies.py +2 −2 Changes for src/srm/api/dependencies.py: 2 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ from srm.adapters.database.repos.catalog import ( SqlServiceCapabilityRequirementRepository, SqlServiceSpecificationRepository, ) from srm.adapters.database.repos.topology import SqlDomainRepository, SqlZoneRepository from srm.adapters.database.repos.topology import SqlZoneRepository from srm.adapters.databus.nats_publisher import NatsPublisher from srm.app_state import AppState from srm.application.services.capability_placement import CapabilityPlacementPlanner Loading Loading @@ -104,7 +104,7 @@ def get_location_query_use_case( SqlServiceSpecificationRepository(session), SqlServiceCapabilityRequirementRepository(session), DeviceTargetedControlPathResolver( CapabilityPlacementPlanner(SqlZoneRepository(session), SqlDomainRepository(session)), CapabilityPlacementPlanner(SqlZoneRepository(session)), registry, ), registry, Loading
src/srm/api/rest/router.py +3 −4 Changes for src/srm/api/rest/router.py: 3 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -21,7 +21,6 @@ from srm.api.rest.schemas import ( GetServiceSpecificationResponse, LocationQueryRequest, LocationQueryResponse, ProblemDetail, ServiceCapabilityRequirementResponseSchema, ServiceDeploymentUnitResponseSchema, ServiceSpecificationCreateSchema, Loading Loading @@ -357,9 +356,9 @@ def _problem(outcome: LocationQueryOutcome, correlator: str) -> JSONResponse: response_model=None, responses={ status.HTTP_200_OK: {"model": LocationQueryResponse}, status.HTTP_404_NOT_FOUND: {"model": ProblemDetail}, status.HTTP_422_UNPROCESSABLE_CONTENT: {"model": ProblemDetail}, status.HTTP_503_SERVICE_UNAVAILABLE: {"model": ProblemDetail}, status.HTTP_404_NOT_FOUND: {"model": ProblemDetails}, status.HTTP_422_UNPROCESSABLE_CONTENT: {"model": ProblemDetails}, status.HTTP_503_SERVICE_UNAVAILABLE: {"model": ProblemDetails}, }, ) async def query_device_location( Loading
src/srm/api/rest/schemas.py +0 −7 Changes for src/srm/api/rest/schemas.py: 0 added lines, 7 removed lines. Original line number Diff line number Diff line Loading @@ -140,10 +140,3 @@ class LocationQueryResponse(DomainModel): last_location_time: datetime area: dict[str, Any] srm_resolved_identifier: str | None = None class ProblemDetail(DomainModel): type: str title: str status: int detail: str | None = None
src/srm/application/command_handlers/network_capability_activate.py +6 −6 Changes for src/srm/application/command_handlers/network_capability_activate.py: 6 added lines, 6 removed lines. Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ from uuid import UUID from pydantic import ValidationError from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker from srm.api.databus.schemas import SrmNetworkCapabilityActivateV1, ValidatedEnvelopeV1 from srm.api.databus.schemas import AnswerableCommandV1, SrmNetworkCapabilityActivateV1 from srm.application.use_cases.network_capability_activate import ( NetworkCapabilityActivateCommand, NetworkCapabilityActivateResult, Loading Loading @@ -39,7 +39,7 @@ class NetworkCapabilityActivateCommandCoordinator: self._use_case_factory = use_case_factory self._publisher = publisher async def handle(self, envelope: ValidatedEnvelopeV1) -> None: async def handle(self, envelope: AnswerableCommandV1) -> None: command = await self._parse_command(envelope) if command is None: return Loading @@ -65,7 +65,7 @@ class NetworkCapabilityActivateCommandCoordinator: async def _parse_command( self, envelope: ValidatedEnvelopeV1, envelope: AnswerableCommandV1, ) -> NetworkCapabilityActivateCommand | None: try: activate_message = SrmNetworkCapabilityActivateV1.model_validate( Loading Loading @@ -163,7 +163,7 @@ class NetworkCapabilityActivateCommandCoordinator: async def _publish_failed_before_start_for_invalid_command( self, envelope: ValidatedEnvelopeV1, envelope: AnswerableCommandV1, ) -> None: now = datetime.now(UTC) status_event = SrmOperationStatusV1( Loading Loading @@ -199,7 +199,7 @@ class NetworkCapabilityActivateCommandCoordinator: completed_event.model_dump(mode="json"), ) def _capability_from_envelope(self, envelope: ValidatedEnvelopeV1) -> str | None: def _capability_from_envelope(self, envelope: AnswerableCommandV1) -> str | None: if envelope.model_extra is None: return None Loading @@ -212,7 +212,7 @@ class NetworkCapabilityActivateCommandCoordinator: return capability_type return None def _service_instance_id_from_envelope(self, envelope: ValidatedEnvelopeV1) -> UUID | None: def _service_instance_id_from_envelope(self, envelope: AnswerableCommandV1) -> UUID | None: if envelope.model_extra is None: return None Loading
src/srm/application/services/capability_placement.py +0 −19 Changes for src/srm/application/services/capability_placement.py: 0 added lines, 19 removed lines. Original line number Diff line number Diff line Loading @@ -93,25 +93,6 @@ class CapabilityPlacementPlanner: ranked.sort(key=lambda item: item[:3]) return [placement for *_, placement in ranked] async def _place_pinned_domain( self, request: CapabilityPlacementRequest, ) -> CapabilityPlacement | None: assert request.pin.zone_id is not None assert request.pin.domain_id is not None zone = await self._zones.get_by_id(request.pin.zone_id) if zone is None or zone.state != ZoneState.ACTIVE: return None domain = await self._domains.get_by_id(request.pin.domain_id) if domain is None: return None if domain.zone_id != zone.id or domain.kind != request.domain_kind: return None return self._select_from_domain(zone, domain, request) async def _place_pinned_zone( self, request: CapabilityPlacementRequest, Loading