def _wait_for_sagemaker_app_deletion()

in migration/bring-your-own-role/byor.py [0:0]


def _wait_for_sagemaker_app_deletion(sagemaker,
                                    domain_id,
                                    app_name,
                                    app_type,
                                    user_profile_name=None,
                                    space_name=None,
                                    max_attempts=30,
                                    delay_seconds=5):
    """
    Wait for SageMaker App to be deleted
    """
    for attempt in range(max_attempts):
        try:
            if user_profile_name:
                response = sagemaker.describe_app(
                    DomainId=domain_id,
                    AppType=app_type,
                    AppName=app_name,
                    UserProfileName=user_profile_name
                )
            elif space_name:
                response = sagemaker.describe_app(
                    DomainId=domain_id,
                    AppType=app_type,
                    AppName=app_name,
                    SpaceName=space_name
                )
            else:
                raise ValueError("Either UserProfileName or SpaceName must be passed for DescribeApp operation.")
            
            status = response.get('Status')
            if status == 'Deleted':
                print(f"Deleted SageMaker App `{app_name}` deleted successfully")
                return
            print(f"Deletion of SageMaker App `{app_name}` in progress. Current status: {status}. Attempt {attempt + 1}/{max_attempts}")
            time.sleep(delay_seconds)
            
        except ClientError as e:
            if e.response['Error']['Code'] == 'ResourceNotFoundException':
                print(f"Deleted SageMaker App `{app_name}` deleted successfully")
                return
            raise e
    
    raise TimeoutError(f"Deletion of SageMaker App `{app_name}` did not complete after {max_attempts} attempts")