From 7fea942ddea274de8e30ea0494acc2b72fd29a39 Mon Sep 17 00:00:00 2001 From: Natan Date: Fri, 2 Jan 2026 14:43:04 -0300 Subject: [PATCH] Handle `ImageNotFoundException` in `ImageResource.delete` using `requestCatching`. --- .../dockerkt/resource/image/ImageResource.kt | 12 +++++++++--- .../kotlin/me/devnatan/dockerkt/TestUtils.kt | 5 ++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/commonMain/kotlin/me/devnatan/dockerkt/resource/image/ImageResource.kt b/src/commonMain/kotlin/me/devnatan/dockerkt/resource/image/ImageResource.kt index 46e57341..e27ab944 100644 --- a/src/commonMain/kotlin/me/devnatan/dockerkt/resource/image/ImageResource.kt +++ b/src/commonMain/kotlin/me/devnatan/dockerkt/resource/image/ImageResource.kt @@ -10,12 +10,14 @@ import io.ktor.client.request.post import io.ktor.client.request.preparePost import io.ktor.client.request.setBody import io.ktor.http.ContentType +import io.ktor.http.HttpStatusCode import io.ktor.http.contentType import io.ktor.utils.io.ByteReadChannel import io.ktor.utils.io.readUTF8Line import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import kotlinx.serialization.json.Json +import me.devnatan.dockerkt.io.requestCatching import me.devnatan.dockerkt.models.image.ImageBuildOptions import me.devnatan.dockerkt.models.image.ImagePull import me.devnatan.dockerkt.models.image.ImageSummary @@ -51,9 +53,13 @@ public class ImageResource internal constructor( force: Boolean? = false, noprune: Boolean? = false, ) { - httpClient.delete("$BasePath/$name") { - parameter("force", force) - parameter("noprune", noprune) + requestCatching( + HttpStatusCode.NotFound to { exception -> ImageNotFoundException(exception, name) }, + ) { + httpClient.delete("$BasePath/$name") { + parameter("force", force) + parameter("noprune", noprune) + } } } diff --git a/src/commonTest/kotlin/me/devnatan/dockerkt/TestUtils.kt b/src/commonTest/kotlin/me/devnatan/dockerkt/TestUtils.kt index bbfb93e7..07e665da 100644 --- a/src/commonTest/kotlin/me/devnatan/dockerkt/TestUtils.kt +++ b/src/commonTest/kotlin/me/devnatan/dockerkt/TestUtils.kt @@ -6,6 +6,7 @@ import me.devnatan.dockerkt.models.volume.Volume import me.devnatan.dockerkt.models.volume.VolumeCreateOptions import me.devnatan.dockerkt.resource.container.create import me.devnatan.dockerkt.resource.container.remove +import me.devnatan.dockerkt.resource.image.ImageNotFoundException import me.devnatan.dockerkt.resource.volume.create import me.devnatan.dockerkt.resource.volume.remove import kotlin.test.fail @@ -23,7 +24,9 @@ suspend fun DockerClient.withImage( try { return block(imageName) } finally { - images.remove(imageName, force = true) + try { + images.remove(imageName, force = true) + } catch (_: ImageNotFoundException) {} } }