in fbpcs/pid/service/pid_service/pid.py [0:0]
def update_instance(self, instance_id: str) -> PIDInstance:
self.logger.info(f"Updating PID Instance: {instance_id}")
instance = self.instance_repository.read(instance_id)
if instance.status in [PIDInstanceStatus.COMPLETED, PIDInstanceStatus.FAILED]:
return instance
for stage, status in instance.stages_status.copy().items():
if status in [PIDStageStatus.COMPLETED, PIDStageStatus.FAILED]:
continue
containers = instance.stages_containers.get(stage, None)
if containers:
container_ids = [container.instance_id for container in containers]
containers = list(
filter(None, self.onedocker_svc.get_containers(container_ids))
)
new_stage_status = PIDStage.get_stage_status_from_containers(containers)
if new_stage_status is PIDStageStatus.FAILED:
instance.status = PIDInstanceStatus.FAILED
instance.stages_status[stage] = new_stage_status
instance.stages_containers[stage] = containers
instance.current_stage = stage
# if all of the stages are complete, then PID for instance is complete
if all(
status is PIDStageStatus.COMPLETED
for status in instance.stages_status.values()
):
instance.status = PIDInstanceStatus.COMPLETED
self.instance_repository.update(instance)
return instance