You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by cb...@apache.org on 2018/02/14 07:17:28 UTC
[incubator-openwhisk] branch master updated: Replace asString and
asBool with generic method. (#3280)
This is an automated email from the ASF dual-hosted git repository.
cbickel pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk.git
The following commit(s) were added to refs/heads/master by this push:
new 5da6003 Replace asString and asBool with generic method. (#3280)
5da6003 is described below
commit 5da6003edcb8e8d658a60f8654487ce10c17cd53
Author: Markus Thömmes <ma...@me.com>
AuthorDate: Wed Feb 14 08:17:26 2018 +0100
Replace asString and asBool with generic method. (#3280)
Mainly aims to reduce boilerplate in code which tries to extract non-primitive data from parameters/annotations. Any supported json-format (for example case classes) can be loaded safely from parameters.
---
.../main/scala/whisk/core/entity/Parameter.scala | 31 +++-------------------
.../main/scala/whisk/core/entity/WhiskAction.scala | 2 +-
.../scala/whisk/core/controller/WebActions.scala | 8 +++---
3 files changed, 9 insertions(+), 32 deletions(-)
diff --git a/common/scala/src/main/scala/whisk/core/entity/Parameter.scala b/common/scala/src/main/scala/whisk/core/entity/Parameter.scala
index 7355a43..937913d 100644
--- a/common/scala/src/main/scala/whisk/core/entity/Parameter.scala
+++ b/common/scala/src/main/scala/whisk/core/entity/Parameter.scala
@@ -96,34 +96,11 @@ protected[core] class Parameters protected[entity] (private val params: Map[Para
Some { (toJsObject.fields ++ args.fields).toJson.asJsObject }
}
- /**
- * Retrieves parameter by name if it exists.
- */
- protected[core] def get(p: String): Option[JsValue] = {
- params.get(new ParameterName(p)).map(_.value)
- }
-
- /**
- * Retrieves parameter by name if it exist. If value of parameter
- * is a boolean, return its value else false.
- */
- protected[core] def asBool(p: String): Option[Boolean] = {
- get(p) flatMap {
- case JsBoolean(b) => Some(b)
- case _ => None
- }
- }
+ /** Retrieves parameter by name if it exists. */
+ protected[core] def get(p: String): Option[JsValue] = params.get(new ParameterName(p)).map(_.value)
- /**
- * Retrieves parameter by name if it exist. If value of parameter
- * is a string, return its value else none.
- */
- protected[core] def asString(p: String): Option[String] = {
- get(p) flatMap {
- case JsString(s) => Some(s)
- case _ => None
- }
- }
+ /** Retrieves parameter by name if it exists. Returns that parameter if it is deserializable to {@code T} */
+ protected[core] def getAs[T: JsonReader](p: String): Option[T] = get(p).flatMap(js => Try(js.convertTo[T]).toOption)
}
/**
diff --git a/common/scala/src/main/scala/whisk/core/entity/WhiskAction.scala b/common/scala/src/main/scala/whisk/core/entity/WhiskAction.scala
index adddf81..92b7db3 100644
--- a/common/scala/src/main/scala/whisk/core/entity/WhiskAction.scala
+++ b/common/scala/src/main/scala/whisk/core/entity/WhiskAction.scala
@@ -78,7 +78,7 @@ abstract class WhiskActionLike(override val name: EntityName) extends WhiskEntit
/** @return true iff action has appropriate annotation. */
def hasFinalParamsAnnotation = {
- annotations.asBool(WhiskAction.finalParamsAnnotationName) getOrElse false
+ annotations.getAs[Boolean](WhiskAction.finalParamsAnnotationName) getOrElse false
}
/** @return a Set of immutable parameternames */
diff --git a/core/controller/src/main/scala/whisk/core/controller/WebActions.scala b/core/controller/src/main/scala/whisk/core/controller/WebActions.scala
index 2642366..cd3c68c 100644
--- a/core/controller/src/main/scala/whisk/core/controller/WebActions.scala
+++ b/core/controller/src/main/scala/whisk/core/controller/WebActions.scala
@@ -483,7 +483,7 @@ trait WhiskWebActionsApi extends Directives with ValidateRequestSize with PostAc
provide(fullyQualifiedActionName(actionName)) { fullActionName =>
onComplete(verifyWebAction(fullActionName, onBehalfOf.isDefined)) {
case Success((actionOwnerIdentity, action)) =>
- if (!action.annotations.asBool("web-custom-options").exists(identity)) {
+ if (!action.annotations.getAs[Boolean]("web-custom-options").exists(identity)) {
respondWithHeaders(defaultCorsResponse(context.headers)) {
if (context.method == OPTIONS) {
complete(OK, HttpEntity.Empty)
@@ -559,7 +559,7 @@ trait WhiskWebActionsApi extends Directives with ValidateRequestSize with PostAc
processRequest(actionOwnerIdentity, action, extension, onBehalfOf, context.withBody(body), isRawHttpAction)
}
- provide(action.annotations.asBool("raw-http").exists(identity)) { isRawHttpAction =>
+ provide(action.annotations.getAs[Boolean]("raw-http").exists(identity)) { isRawHttpAction =>
httpEntity match {
case Empty =>
process(None, isRawHttpAction)
@@ -720,8 +720,8 @@ trait WhiskWebActionsApi extends Directives with ValidateRequestSize with PostAc
private def confirmExportedAction(actionLookup: Future[WhiskActionMetaData], authenticated: Boolean)(
implicit transid: TransactionId): Future[WhiskActionMetaData] = {
actionLookup flatMap { action =>
- val requiresAuthenticatedUser = action.annotations.asBool("require-whisk-auth").exists(identity)
- val isExported = action.annotations.asBool("web-export").exists(identity)
+ val requiresAuthenticatedUser = action.annotations.getAs[Boolean]("require-whisk-auth").exists(identity)
+ val isExported = action.annotations.getAs[Boolean]("web-export").exists(identity)
if ((isExported && requiresAuthenticatedUser && authenticated) ||
(isExported && !requiresAuthenticatedUser)) {
--
To stop receiving notification emails like this one, please contact
cbickel@apache.org.