Skip to content

Commit 6218a10

Browse files
authored
Merge pull request #491 from RachelTucker/5_0_x_API-complete-blob-go-sdk
OTHER: Updating Go SDK generation to include optional checksum and metadata parameters on CompleteBlob request
2 parents d8bddd2 + 2470d39 commit 6218a10

File tree

7 files changed

+18337
-4
lines changed

7 files changed

+18337
-4
lines changed

contracts/5_1_x_1710735_contract.xml

Lines changed: 18276 additions & 0 deletions
Large diffs are not rendered by default.

ds3-autogen-go/src/main/java/com/spectralogic/ds3autogen/go/GoCodeGenerator.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,9 @@ static RequestModelGenerator<?> getRequestGenerator(final Ds3Request ds3Request)
171171
if (isMultiFileDeleteRequest(ds3Request)) {
172172
return new DeleteObjectsRequestGenerator();
173173
}
174+
if (isCompleteBlobRequest(ds3Request)) {
175+
return new CompleteBlobRequestGenerator();
176+
}
174177
return new BaseRequestGenerator();
175178
}
176179

@@ -181,7 +184,7 @@ private Template getRequestTemplate(final Ds3Request ds3Request) throws IOExcept
181184
if (isGetObjectAmazonS3Request(ds3Request)) {
182185
return config.getTemplate("request/get_object_request.ftl");
183186
}
184-
if (isAmazonCreateObjectRequest(ds3Request)) {
187+
if (isAmazonCreateObjectRequest(ds3Request) || isCompleteBlobRequest(ds3Request)) {
185188
return config.getTemplate("request/put_object_request.ftl");
186189
}
187190
if (hasGetObjectsWithLengthOffsetRequestPayload(ds3Request)) {

ds3-autogen-go/src/main/kotlin/com/spectralogic/ds3autogen/go/generators/client/BaseClientGenerator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ open class BaseClientGenerator : ClientModelGenerator<Client> {
7272
fun getCommandGenerator(ds3Request: Ds3Request): CommandModelGenerator<*> {
7373
return when {
7474
isAmazonCreateObjectRequest(ds3Request) -> PutObjectCommandGenerator()
75-
isGetObjectAmazonS3Request(ds3Request) -> GetObjectCommandGenerator()
75+
isGetObjectAmazonS3Request(ds3Request) || isCompleteBlobRequest(ds3Request) -> GetObjectCommandGenerator()
7676
isCreateMultiPartUploadPartRequest(ds3Request) -> ReaderPayloadCommandGenerator()
7777
hasPutObjectsWithSizeRequestPayload(ds3Request) -> Ds3PutObjectPayloadCommandGenerator()
7878
hasGetObjectsWithLengthOffsetRequestPayload(ds3Request) -> Ds3GetObjectPayloadCommandGenerator()

ds3-autogen-go/src/main/kotlin/com/spectralogic/ds3autogen/go/generators/client/command/GetObjectCommandGenerator.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ import com.spectralogic.ds3autogen.go.models.client.RequestBuildLine
2020
import java.util.*
2121

2222
/**
23-
* Generates the Go client command for Amazon GetObject
23+
* Generates the Go client command for Amazon GetObject and CompleteBlob.
24+
* Adds checksum and metadata to the request construction.
2425
*/
2526
class GetObjectCommandGenerator : BaseCommandGenerator() {
2627

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.spectralogic.ds3autogen.go.generators.request
2+
3+
import com.google.common.collect.ImmutableList
4+
import com.spectralogic.ds3autogen.api.models.Arguments
5+
import com.spectralogic.ds3autogen.api.models.apispec.Ds3Request
6+
import com.spectralogic.ds3autogen.go.models.request.Variable
7+
import com.spectralogic.ds3autogen.go.models.request.VariableInterface
8+
import com.spectralogic.ds3autogen.utils.comparators.CustomArgumentComparator
9+
10+
/**
11+
* Generates the Go request handler for CompleteBlob command.
12+
* Special case: include checksum and metadata as optional parameters in request.
13+
*/
14+
class CompleteBlobRequestGenerator : BaseRequestGenerator() {
15+
16+
/**
17+
* Creates the list parameters in the request struct.
18+
* Include checksum and metadata.
19+
*/
20+
override fun toStructParams(ds3Request: Ds3Request): ImmutableList<Arguments> {
21+
val builder = ImmutableList.builder<Arguments>()
22+
builder.addAll(structParamsFromRequest(ds3Request))
23+
builder.add(Arguments("Checksum", "Checksum"))
24+
builder.add(Arguments("map[string]string", "Metadata"))
25+
26+
// Sort the arguments
27+
return ImmutableList.sortedCopyOf(CustomArgumentComparator(), builder.build())
28+
}
29+
30+
/**
31+
* Creates the list of parameters assigned in the constructor.
32+
* Include empty initialization for checksum and metadata.
33+
*/
34+
override fun toStructAssignmentParams(ds3Request: Ds3Request): ImmutableList<VariableInterface> {
35+
val builder = ImmutableList.builder<VariableInterface>()
36+
builder.addAll(structAssignmentParamsFromRequest(ds3Request))
37+
builder.add(Variable("Checksum", "NewNoneChecksum()"))
38+
builder.add(Variable("Metadata", "make(map[string]string)"))
39+
40+
return builder.build()
41+
}
42+
}

ds3-autogen-go/src/main/resources/tmpls/go/request/with_headers.ftl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
func (${name?uncap_first} *PutObjectRequest) WithMetaData(key string, values ...string) *${name} {
1+
func (${name?uncap_first} *${name}) WithMetaData(key string, values ...string) *${name} {
22
if strings.HasPrefix(strings.ToLower(key), AMZ_META_HEADER) {
33
${name?uncap_first}.Metadata[key] = strings.Join(values, ",")
44
} else {

ds3-autogen-utils/src/main/java/com/spectralogic/ds3autogen/utils/Ds3RequestClassificationUtil.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,17 @@ public static boolean isGetObjectsWithFullDetails(final Ds3Request request) {
385385
&& paramListContainsParam(request.getRequiredQueryParams(), "FullDetails", "void");
386386
}
387387

388+
/**
389+
* Determines if a Ds3Request is the AmazonS3 Complete Blob request
390+
*/
391+
public static boolean isCompleteBlobRequest(final Ds3Request request) {
392+
return request.getHttpVerb() == HttpVerb.POST
393+
&& request.getBucketRequirement() == Requirement.REQUIRED
394+
&& request.getObjectRequirement() == Requirement.REQUIRED
395+
&& !request.getIncludeInPath()
396+
&& paramListContainsParam(request.getRequiredQueryParams(), "Blob", "java.util.UUID");
397+
}
398+
388399
/**
389400
* Determines if a Ds3Request supports pagination. This is used to determine
390401
* which response handlers need to parse pagination headers.

0 commit comments

Comments
 (0)