Query parameters support all male or all female names (#2312)

* Support query parameters for all male or all female names

* Use the APIGateway response too

* Cleanup


Former-commit-id: aae671ee7015ddc02bae1b8ea9d4454677dbe454
This commit is contained in:
2022-11-18 19:49:22 -08:00
committed by GitHub
parent 9d938d91a3
commit f2f3620adb
8 changed files with 68 additions and 35 deletions
+1
View File
@@ -134,6 +134,7 @@ maven_install(
"org.scalamock:scalamock_2.13:5.2.0",
"com.amazonaws:aws-java-sdk-s3:1.12.205",
"com.amazonaws:aws-lambda-java-core:1.2.2",
"com.amazonaws:aws-lambda-java-events:3.11.0",
"javax.xml.bind:jaxb-api:2.3.1",
],
fail_if_repin_required = True,
+17 -2
View File
@@ -1,8 +1,8 @@
{
"dependency_tree": {
"__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL",
"__INPUT_ARTIFACTS_HASH": -1992922059,
"__RESOLVED_ARTIFACTS_HASH": 1018919370,
"__INPUT_ARTIFACTS_HASH": 697523098,
"__RESOLVED_ARTIFACTS_HASH": 1427786775,
"conflict_resolution": {},
"dependencies": [
{
@@ -105,6 +105,21 @@
"sha256": "09bbd5f426d70ed9a40c2090a6c6a60277058d4e1e1c6d61de1d4a0bf3cee9f2",
"url": "https://repo1.maven.org/maven2/com/amazonaws/aws-lambda-java-core/1.2.2/aws-lambda-java-core-1.2.2.jar"
},
{
"coord": "com.amazonaws:aws-lambda-java-events:3.11.0",
"dependencies": [
"joda-time:joda-time:2.8.1"
],
"directDependencies": [
"joda-time:joda-time:2.8.1"
],
"file": "v1/https/repo1.maven.org/maven2/com/amazonaws/aws-lambda-java-events/3.11.0/aws-lambda-java-events-3.11.0.jar",
"mirror_urls": [
"https://repo1.maven.org/maven2/com/amazonaws/aws-lambda-java-events/3.11.0/aws-lambda-java-events-3.11.0.jar"
],
"sha256": "862628d15468888ad8ae845928f2fc72f8d041adb55444e21b8175c1e10c1f3c",
"url": "https://repo1.maven.org/maven2/com/amazonaws/aws-lambda-java-events/3.11.0/aws-lambda-java-events-3.11.0.jar"
},
{
"coord": "com.amazonaws:jmespath-java:1.12.205",
"dependencies": [
+10
View File
@@ -0,0 +1,10 @@
#!/bin/bash
bazel build //src/main/java/net/eagle0/common/name_generation:name_generation_lambda_deploy.jar
aws s3 cp \
bazel-bin/src/main/java/net/eagle0/common/name_generation/name_generation_lambda_deploy.jar \
s3://eagle0/lambdas/name_generation_lambda_deploy.jar
aws lambda update-function-code \
--function-name Name_Generator \
--s3-bucket eagle0 \
--s3-key lambdas/name_generation_lambda_deploy.jar
@@ -3,14 +3,8 @@ java_binary(
srcs = ["NameGenerationHandler.java"],
main_class = "net.eagle0.common.name_generation.NameGenerationHandler",
deps = [
":name_generation_event",
"//src/main/scala/net/eagle0/common/name_generation:name_generator",
"//src/main/scala/net/eagle0/common/name_generation:string_construction_token",
"@maven//:com_amazonaws_aws_lambda_java_core",
"@maven//:com_amazonaws_aws_lambda_java_events",
],
)
java_library(
name = "name_generation_event",
srcs = ["NameGenerationEvent.java"],
)
@@ -1,13 +0,0 @@
package net.eagle0.common.name_generation;
public class NameGenerationEvent {
public static class RequestContext {
public static class Identity {
public String sourceIp;
}
public Identity identity;
}
public String body;
public RequestContext requestContext;
}
@@ -1,13 +1,15 @@
package net.eagle0.common.name_generation;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import java.net.HttpURLConnection;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Supplier;
public class NameGenerationHandler implements RequestHandler<NameGenerationEvent, Map<String, Object>> {
public class NameGenerationHandler implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {
private final NameGenerator nameGenerator = new NameGenerator();
private static final Map<String, String> responseHeaders = Map.of("content-type", "text/html; charset=UTF-8");
@@ -18,24 +20,44 @@ public class NameGenerationHandler implements RequestHandler<NameGenerationEvent
@Override
public Map<String, Object> handleRequest(NameGenerationEvent event, Context context) {
public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent event, Context context) {
var logger = context.getLogger();
var parameters = event.getQueryStringParameters();
logger.log("Got a request\n");
logger.log("Query string parameters: " + parameters);
var response = new HashMap<String, Object>();
Supplier<String> nameGetter = nameGenerator::nextName;
if (parameters != null) {
if (parameters.containsKey("female")) {
logger.log("Female names\n");
nameGetter = nameGenerator::nextFemaleName;
} else if (parameters.containsKey("male")) {
logger.log("Male names\n");
nameGetter = nameGenerator::nextMaleName;
} else if (parameters.containsKey("neutral")) {
logger.log("Neutral names\n");
nameGetter = nameGenerator::nextNeutralName;
} else {
logger.log("All names\n");
nameGetter = nameGenerator::nextName;
}
}
var response = new APIGatewayProxyResponseEvent();
StringBuilder nameStr = new StringBuilder();
for (int i=0; i<25; i++) {
nameStr.append(nameGenerator.nextName());
for (int i = 0; i < 25; i++) {
nameStr.append(nameGetter.get());
nameStr.append("<p>");
}
var responseString = nameStr.toString();
logger.log(responseString);
response.put("headers", responseHeaders);
response.put("statusCode", HttpURLConnection.HTTP_OK);
response.put("body", responseString);
response.setHeaders(responseHeaders);
response.setBody(responseString);
response.setStatusCode(HttpURLConnection.HTTP_OK);
return response;
}
}
@@ -10,10 +10,9 @@ scala_library(
"//src/main/java/net/eagle0/common/name_generation:__pkg__",
],
deps = [
"//src/main/scala/net/eagle0/common:functional_random",
# ":string_construction_parser",
":string_construction_token",
":string_construction_token_generator",
"//src/main/scala/net/eagle0/common:functional_random",
],
)
@@ -21,7 +20,6 @@ scala_library(
name = "string_construction_parser",
srcs = ["StringConstructionParser.scala"],
visibility = [
"//src/main/java/net/eagle0/common/name_generation:__pkg__",
"//src/test/scala/net/eagle0/common/name_generation:__pkg__",
],
deps = [
@@ -43,7 +41,6 @@ scala_library(
name = "string_construction_token",
srcs = ["StringConstructionToken.scala"],
visibility = [
"//src/main/java/net/eagle0/common/name_generation:__pkg__",
"//src/test/scala/net/eagle0/common/name_generation:__pkg__",
],
deps = [
@@ -26,6 +26,13 @@ class NameGenerator {
atSpecializations = Vector("male")
)
def nextFemaleName(): String =
femaleTok.nextString(random, substitutions).newValue
def nextMaleName(): String =
maleTok.nextString(random, substitutions).newValue
def nextNeutralName(): String =
allTok.nextString(random, substitutions).newValue
def nextName(): String = {
val intR = random.nextInt(0, 20)
val newInt = intR.newValue