Skip to content

Commit

Permalink
Bulk Core/Load CDK: Support for connector-type-specific non-config sp…
Browse files Browse the repository at this point in the history
…ec extensions
  • Loading branch information
johnny-schmidt committed Sep 13, 2024
1 parent 7056428 commit 817cc46
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import io.airbyte.cdk.Operation
import io.airbyte.cdk.command.ConfigurationJsonObjectSupplier
import io.airbyte.cdk.output.OutputConsumer
import io.airbyte.protocol.models.v0.ConnectorSpecification
import io.micronaut.context.annotation.DefaultImplementation
import io.micronaut.context.annotation.Requires
import io.micronaut.context.annotation.Value
import jakarta.inject.Singleton
Expand All @@ -15,13 +16,24 @@ import java.net.URI
class SpecOperation(
@Value("\${airbyte.connector.metadata.documentation-url}") val documentationUrl: String,
val configJsonObjectSupplier: ConfigurationJsonObjectSupplier<*>,
val extendSpecification: SpecificationExtender,
val outputConsumer: OutputConsumer,
) : Operation {
override fun execute() {
outputConsumer.accept(
val spec =
ConnectorSpecification()
.withDocumentationUrl(URI.create(documentationUrl))
.withConnectionSpecification(configJsonObjectSupplier.jsonSchema),
)
.withConnectionSpecification(configJsonObjectSupplier.jsonSchema)
outputConsumer.accept(extendSpecification(spec))
}
}

interface SpecificationExtender : (ConnectorSpecification) -> ConnectorSpecification

@Singleton
@DefaultImplementation
class IdentitySpecificationExtender : SpecificationExtender {
override fun invoke(specification: ConnectorSpecification): ConnectorSpecification {
return specification
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright (c) 2024 Airbyte, Inc., all rights reserved.
*/

package io.airbyte.cdk.spec

import io.airbyte.protocol.models.v0.ConnectorSpecification
import io.airbyte.protocol.models.v0.DestinationSyncMode
import io.micronaut.context.annotation.Replaces
import io.micronaut.context.annotation.Requires
import jakarta.inject.Singleton

@Singleton
@Replaces(IdentitySpecificationExtender::class)
@Requires(env = ["destination"])
class DestinationSpecificationExtender(private val spec: DestinationSpecification) :
SpecificationExtender {
override fun invoke(specification: ConnectorSpecification): ConnectorSpecification {
return specification
.withSupportedDestinationSyncModes(spec.supportedSyncModes)
.withSupportsIncremental(spec.supportsIncremental)
}
}

interface DestinationSpecification {
val supportedSyncModes: List<DestinationSyncMode>
val supportsIncremental: Boolean
}

0 comments on commit 817cc46

Please sign in to comment.