Skip to content

Commit 74e5802

Browse files
Chase Coalwelltrivikr
Chase Coalwell
authored andcommitted
feat: add predictEndpointMiddleware for Machinelearning (#553)
* feat: add predictEndpointMiddleware * feat: remove modeled-endpoint-middleware * feat: apply PredictEndpoint plugin
1 parent b916ba8 commit 74e5802

File tree

19 files changed

+140
-348
lines changed

19 files changed

+140
-348
lines changed

codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddBuiltinPlugins.java

+6
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,12 @@ public List<RuntimeClientPlugin> getClientPlugins() {
104104
.servicePredicate((m, s) -> testServiceId(s, "S3"))
105105
.operationPredicate((m, s, o) -> o.getId().getName().equals("CreateBucket"))
106106
.build(),
107+
RuntimeClientPlugin.builder()
108+
.withConventions(AwsDependency.MACHINELEARNING_MIDDLEWARE.dependency, "PredictEndpoint",
109+
HAS_MIDDLEWARE)
110+
.servicePredicate((m, s) -> testServiceId(s, "Machine Learning"))
111+
.operationPredicate((m, s, o) -> o.getId().getName().equals("Predict"))
112+
.build(),
107113
RuntimeClientPlugin.builder()
108114
.withConventions(AwsDependency.BODY_CHECKSUM.dependency, "ApplyMd5BodyChecksum",
109115
HAS_MIDDLEWARE)

codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public enum AwsDependency implements SymbolDependencyContainer {
3535
VALIDATE_BUCKET_NAME(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-s3", "^0.1.0-preview.2"),
3636
ADD_EXPECT_CONTINUE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-expect-continue", "^0.1.0-preview.5"),
3737
GLACIER_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-glacier", "^0.1.0-preview.7"),
38+
MACHINELEARNING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-machinelearning", "^0.1.0-preview.1"),
3839
SSEC_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-ssec", "^0.1.0-preview.5"),
3940
LOCATION_CONSTRAINT(NORMAL_DEPENDENCY, "@aws-sdk/middleware-location-constraint", "^0.1.0-preview.5"),
4041
MD5_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/md5-js", "^0.1.0-preview.8"),

packages/modeled-endpoint-middleware/.gitignore renamed to packages/middleware-sdk-machinelearning/.gitignore

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
/build/
33
/coverage/
44
/docs/
5-
*.tsbuildinfo
65
*.tgz
76
*.log
87
package-lock.json

packages/modeled-endpoint-middleware/.npmignore renamed to packages/middleware-sdk-machinelearning/.npmignore

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
/coverage/
33
/docs/
44
tsconfig.test.json
5-
*.tsbuildinfo
65

76
*.spec.js
87
*.spec.d.ts

packages/modeled-endpoint-middleware/LICENSE renamed to packages/middleware-sdk-machinelearning/LICENSE

+1-1
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@
186186
same "printed page" as the copyright notice for easier
187187
identification within third-party archives.
188188

189-
Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
189+
Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
190190

191191
Licensed under the Apache License, Version 2.0 (the "License");
192192
you may not use this file except in compliance with the License.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# @aws-sdk/@aws-sdk/middleware-sdk-machinelearning
2+
3+
[![NPM version](https://img.shields.io/npm/v/@aws-sdk/@aws-sdk/middleware-sdk-machinelearning/preview.svg)](https://www.npmjs.com/package/@aws-sdk/@aws-sdk/middleware-sdk-machinelearning)
4+
[![NPM downloads](https://img.shields.io/npm/dm/@aws-sdk/@aws-sdk/middleware-sdk-machinelearning.svg)](https://www.npmjs.com/package/@aws-sdk/@aws-sdk/middleware-sdk-machinelearning)

packages/modeled-endpoint-middleware/package.json renamed to packages/middleware-sdk-machinelearning/package.json

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"name": "@aws-sdk/modeled-endpoint-middleware",
3-
"version": "0.1.0-preview.8",
2+
"name": "@aws-sdk/middleware-sdk-machinelearning",
3+
"version": "0.1.0-preview.1",
44
"scripts": {
55
"prepublishOnly": "tsc",
66
"pretest": "tsc -p tsconfig.test.json",
@@ -14,13 +14,12 @@
1414
},
1515
"license": "Apache-2.0",
1616
"dependencies": {
17-
"@aws-sdk/types": "^0.1.0-preview.7",
1817
"tslib": "^1.8.0"
1918
},
2019
"devDependencies": {
21-
"@aws-sdk/url-parser-universal": "^0.1.0-preview.8",
20+
"@aws-sdk/types": "^0.1.0-preview.7",
2221
"@types/jest": "^24.0.12",
2322
"jest": "^24.7.1",
2423
"typescript": "~3.4.0"
2524
}
26-
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { UrlParser } from "@aws-sdk/types";
2+
3+
export interface PredictEndpointMiddlewareInputConfig {}
4+
5+
interface PreviouslyResolved {
6+
urlParser: UrlParser;
7+
}
8+
9+
export interface ResolvedPredictEndpointMiddlewareConfig {
10+
urlParser: UrlParser;
11+
}
12+
13+
export function resolvePredictEndpointMiddlewareConfig<T>(
14+
input: T & PreviouslyResolved & PredictEndpointMiddlewareInputConfig
15+
): T & ResolvedPredictEndpointMiddlewareConfig {
16+
return {
17+
...input
18+
};
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { predictEndpointMiddleware, getPredictEndpointPlugin } from "./index";
2+
3+
describe("middleware-sdk-machinelearning package exports", () => {
4+
it("predictEndpointMiddleware", () => {
5+
expect(typeof predictEndpointMiddleware).toBe("function");
6+
});
7+
8+
it("getPredictEndpointPlugin", () => {
9+
expect(typeof getPredictEndpointPlugin).toBe("function");
10+
});
11+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from "./predict-endpoint";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { predictEndpointMiddleware } from "./predict-endpoint";
2+
import { HttpRequest } from "@aws-sdk/protocol-http";
3+
4+
describe("predictEndpointMiddleware", () => {
5+
const mockUrlParser = jest.fn().mockReturnValue({
6+
hostname: "api.example.com",
7+
path: "/foo/bar",
8+
protocol: "http:"
9+
});
10+
const next = jest.fn();
11+
12+
beforeEach(() => {
13+
mockUrlParser.mockClear();
14+
next.mockClear();
15+
});
16+
17+
it("should set the request endpoint using the PredictEndpoint input", async () => {
18+
const input = { PredictEndpoint: "http://api.example.com/foo/bar" };
19+
const request = new HttpRequest({});
20+
const handler = predictEndpointMiddleware({
21+
urlParser: mockUrlParser
22+
})(next, {} as any);
23+
await handler({ input, request });
24+
25+
const {
26+
input: forwardedInput,
27+
request: { hostname, path, protocol }
28+
} = next.mock.calls[0][0];
29+
30+
expect(forwardedInput).toBe(input);
31+
expect(hostname).toBe("api.example.com");
32+
expect(path).toBe("/foo/bar");
33+
expect(protocol).toBe("http:");
34+
});
35+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import {
2+
BuildHandler,
3+
BuildHandlerArguments,
4+
BuildHandlerOptions,
5+
BuildHandlerOutput,
6+
BuildMiddleware,
7+
MetadataBearer,
8+
Pluggable
9+
} from "@aws-sdk/types";
10+
import { HttpRequest } from "@aws-sdk/protocol-http";
11+
import { ResolvedPredictEndpointMiddlewareConfig } from "./configurations";
12+
13+
export function predictEndpointMiddleware(
14+
options: ResolvedPredictEndpointMiddlewareConfig
15+
): BuildMiddleware<any, any> {
16+
return <Output extends MetadataBearer>(
17+
next: BuildHandler<any, Output>
18+
): BuildHandler<any, Output> => async (
19+
args: BuildHandlerArguments<any>
20+
): Promise<BuildHandlerOutput<Output>> => {
21+
const { input } = args;
22+
let { request } = args;
23+
if (HttpRequest.isInstance(request)) {
24+
if (input.PredictEndpoint) {
25+
const endpoint = options.urlParser(input.predictEndpoint);
26+
request = {
27+
...request,
28+
hostname: endpoint.hostname,
29+
path: endpoint.path,
30+
port: endpoint.port,
31+
protocol: endpoint.protocol,
32+
query: endpoint.query
33+
};
34+
}
35+
}
36+
return next({
37+
...args,
38+
request
39+
});
40+
};
41+
}
42+
43+
export const predictEndpointMiddlewareOptions: BuildHandlerOptions = {
44+
step: "build",
45+
tags: ["PREDICT_ENDPOINT"],
46+
name: "predictEndpointMiddleware"
47+
};
48+
49+
export const getPredictEndpointPlugin = (
50+
config: ResolvedPredictEndpointMiddlewareConfig
51+
): Pluggable<any, any> => ({
52+
applyToStack: clientStack => {
53+
clientStack.add(
54+
predictEndpointMiddleware(config),
55+
predictEndpointMiddlewareOptions
56+
);
57+
}
58+
});

packages/modeled-endpoint-middleware/CHANGELOG.md

-148
This file was deleted.

packages/modeled-endpoint-middleware/README.md

-4
This file was deleted.

0 commit comments

Comments
 (0)