Skip to content

Commit 91013e1

Browse files
Bulk Core/Load CDK: Support for connector-type-specific non-config sp… (#45463)
1 parent 9ae2cbe commit 91013e1

File tree

2 files changed

+43
-3
lines changed

2 files changed

+43
-3
lines changed

airbyte-cdk/bulk/core/base/src/main/kotlin/io/airbyte/cdk/spec/SpecOperation.kt

+15-3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import io.airbyte.cdk.Operation
55
import io.airbyte.cdk.command.ConfigurationJsonObjectSupplier
66
import io.airbyte.cdk.output.OutputConsumer
77
import io.airbyte.protocol.models.v0.ConnectorSpecification
8+
import io.micronaut.context.annotation.DefaultImplementation
89
import io.micronaut.context.annotation.Requires
910
import io.micronaut.context.annotation.Value
1011
import jakarta.inject.Singleton
@@ -15,13 +16,24 @@ import java.net.URI
1516
class SpecOperation(
1617
@Value("\${airbyte.connector.metadata.documentation-url}") val documentationUrl: String,
1718
val configJsonObjectSupplier: ConfigurationJsonObjectSupplier<*>,
19+
val extendSpecification: SpecificationExtender,
1820
val outputConsumer: OutputConsumer,
1921
) : Operation {
2022
override fun execute() {
21-
outputConsumer.accept(
23+
val spec =
2224
ConnectorSpecification()
2325
.withDocumentationUrl(URI.create(documentationUrl))
24-
.withConnectionSpecification(configJsonObjectSupplier.jsonSchema),
25-
)
26+
.withConnectionSpecification(configJsonObjectSupplier.jsonSchema)
27+
outputConsumer.accept(extendSpecification(spec))
28+
}
29+
}
30+
31+
interface SpecificationExtender : (ConnectorSpecification) -> ConnectorSpecification
32+
33+
@Singleton
34+
@DefaultImplementation
35+
class IdentitySpecificationExtender : SpecificationExtender {
36+
override fun invoke(specification: ConnectorSpecification): ConnectorSpecification {
37+
return specification
2638
}
2739
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
* Copyright (c) 2024 Airbyte, Inc., all rights reserved.
3+
*/
4+
5+
package io.airbyte.cdk.spec
6+
7+
import io.airbyte.protocol.models.v0.ConnectorSpecification
8+
import io.airbyte.protocol.models.v0.DestinationSyncMode
9+
import io.micronaut.context.annotation.Replaces
10+
import io.micronaut.context.annotation.Requires
11+
import jakarta.inject.Singleton
12+
13+
@Singleton
14+
@Replaces(IdentitySpecificationExtender::class)
15+
@Requires(env = ["destination"])
16+
class DestinationSpecificationExtender(private val spec: DestinationSpecification) :
17+
SpecificationExtender {
18+
override fun invoke(specification: ConnectorSpecification): ConnectorSpecification {
19+
return specification
20+
.withSupportedDestinationSyncModes(spec.supportedSyncModes)
21+
.withSupportsIncremental(spec.supportsIncremental)
22+
}
23+
}
24+
25+
interface DestinationSpecification {
26+
val supportedSyncModes: List<DestinationSyncMode>
27+
val supportsIncremental: Boolean
28+
}

0 commit comments

Comments
 (0)