spray.json.JsArray Scala Examples
The following examples show how to use spray.json.JsArray.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: EmrSpec.scala From cloudformation-template-generator with BSD 3-Clause "New" or "Revised" License | 5 votes |
package com.monsanto.arch.cloudformation.model.resource import org.scalatest.{FunSpec, Matchers} import spray.json.{JsArray, JsObject, JsString, JsonWriter} class EmrSpec extends FunSpec with Matchers { describe("ClusterConfiguration") { it("should write non recursive") { val clusterConfiguration = ClusterConfiguration( Classification = Some("hello"), ConfigurationProperties = Some(Map("hello" -> "world")), Configurations = None ) val json = implicitly[JsonWriter[ClusterConfiguration]].write(clusterConfiguration) json should equal(JsObject(Map( "Classification" -> JsString("hello"), "ConfigurationProperties" -> JsObject( "hello" -> JsString("world") ) ))) } it("should write and read recursive") { val clusterConfiguration = ClusterConfiguration( Classification = Some("hello"), ConfigurationProperties = Some(Map("hello" -> "world")), Configurations = Some(Seq( ClusterConfiguration( Classification = Some("hello1"), ConfigurationProperties = Some(Map("hello2" -> "world3")), Configurations = None ) )) ) val json = implicitly[JsonWriter[ClusterConfiguration]].write(clusterConfiguration) json should equal(JsObject(Map( "Classification" -> JsString("hello"), "ConfigurationProperties" -> JsObject( "hello" -> JsString("world") ), "Configurations" -> JsArray( JsObject(Map( "Classification" -> JsString("hello1"), "ConfigurationProperties" -> JsObject( "hello2" -> JsString("world3") ) )) ) ))) } } }
Example 2
Source File: GlobalMQDeserializerSpec.scala From seahorse-workflow-executor with Apache License 2.0 | 5 votes |
package io.deepsense.workflowexecutor.communication.mq.json import java.nio.charset.StandardCharsets import org.scalatest.mockito.MockitoSugar import spray.json.{JsArray, JsObject, JsString} import io.deepsense.commons.StandardSpec import io.deepsense.models.workflows.Workflow import io.deepsense.workflowexecutor.communication.message.global._ import io.deepsense.workflowexecutor.communication.mq.json.Global.GlobalMQDeserializer class GlobalMQDeserializerSpec extends StandardSpec with MockitoSugar { "GlobalMQDeserializer" should { "deserialize Launch messages" in { val workflowId = Workflow.Id.randomId val nodesToExecute = Vector(Workflow.Id.randomId, Workflow.Id.randomId, Workflow.Id.randomId) val jsNodesToExecute = JsArray(nodesToExecute.map(id => JsString(id.toString))) val rawMessage = JsObject( "messageType" -> JsString("launch"), "messageBody" -> JsObject( "workflowId" -> JsString(workflowId.toString), "nodesToExecute" -> jsNodesToExecute ) ) val readMessage: Any = serializeAndRead(rawMessage) readMessage shouldBe Launch(workflowId, nodesToExecute.toSet) } "deserialize Heartbeat messages" in { val workflowId = "foo-workflow" val rawMessage = JsObject( "messageType" -> JsString("heartbeat"), "messageBody" -> JsObject( "workflowId" -> JsString(workflowId))) serializeAndRead(rawMessage) shouldBe Heartbeat(workflowId) } "deserialize PoisonPill messages" in { val rawMessage = JsObject( "messageType" -> JsString("poisonPill"), "messageBody" -> JsObject()) serializeAndRead(rawMessage) shouldBe PoisonPill() } "deserialize Ready messages" in { val sessionId = "foo-session" val rawMessage = JsObject( "messageType" -> JsString("ready"), "messageBody" -> JsObject( "sessionId" -> JsString(sessionId))) serializeAndRead(rawMessage) shouldBe Ready(sessionId) } } private def serializeAndRead( rawMessage: JsObject): Any = { val bytes = rawMessage.compactPrint.getBytes(StandardCharsets.UTF_8) GlobalMQDeserializer.deserializeMessage(bytes) } }
Example 3
Source File: RelatedResponseSpec.scala From jsonapi-scala with BSD 3-Clause "New" or "Revised" License | 5 votes |
package com.qvantel.jsonapi import org.specs2.ScalaCheck import org.specs2.mutable.Specification import spray.json.{JsArray, JsNull, JsObject} import _root_.spray.json._ import _root_.spray.json.DefaultJsonProtocol._ class RelatedResponseSpec extends Specification with ScalaCheck { implicit val apiRoot: com.qvantel.jsonapi.ApiRoot = ApiRoot(None) @jsonApiResource final case class Test(id: String, name: String, age: Int) @jsonApiResource final case class Test2(id: String, name: String, age: Int) val test: Option[Test] = Some(Test("teståöä•Ωé®", "someName", 20)) // test UTF-8 val emptyTest: Option[Test] = None val tests: List[Test] = List(Test("test 1", "someName1", 20), Test("test 2", "someName2", 21)) val emptyTests: List[Test] = List.empty def transformToTest2(in: Test): Test2 = Test2(in.id + "-2", in.name, in.age) "correctly write to one none case" in { RelatedResponse(emptyTest).toResponse must be equalTo JsObject( "data" -> JsNull ) RelatedResponse(emptyTest).map(transformToTest2).toResponse must be equalTo JsObject( "data" -> JsNull ) } "correctly write to one some case" in { val answer = rawOne(test.get) RelatedResponse(test).toResponse must be equalTo answer RelatedResponse(test.get).toResponse must be equalTo answer val transformedAnswer = rawOne(transformToTest2(test.get)) RelatedResponse(test).map(transformToTest2).toResponse must be equalTo transformedAnswer RelatedResponse(test.get).map(transformToTest2).toResponse must be equalTo transformedAnswer } "correctly write to many empty case" in { RelatedResponse(emptyTests).toResponse must be equalTo JsObject( "data" -> JsArray.empty ) RelatedResponse(emptyTests).map(transformToTest2).toResponse must be equalTo JsObject( "data" -> JsArray.empty ) } "correctly write to many non-empty case" in { val answer = rawCollection(tests) RelatedResponse(tests).toResponse must be equalTo answer RelatedResponse(tests.toSeq).toResponse must be equalTo answer RelatedResponse(tests.toIterable).toResponse must be equalTo answer RelatedResponse(tests.toSet).toResponse must be equalTo answer val transformedAnswer = rawCollection(tests.map(transformToTest2)) RelatedResponse(tests).map(transformToTest2).toResponse must be equalTo transformedAnswer RelatedResponse(tests.toSeq).map(transformToTest2).toResponse must be equalTo transformedAnswer RelatedResponse(tests.toIterable).map(transformToTest2).toResponse must be equalTo transformedAnswer RelatedResponse(tests.toSet).map(transformToTest2).toResponse must be equalTo transformedAnswer } "correctly write sparse fieldsets" in { implicit val sparseFields: Map[String, List[String]] = Map("tests" -> List("age"), "test2s" -> List("age")) val answer = rawOne(test.get) RelatedResponse(test).toResponse must be equalTo answer RelatedResponse(test.get).toResponse must be equalTo answer val transformedAnswer = rawOne(transformToTest2(test.get)) RelatedResponse(test).map(transformToTest2).toResponse must be equalTo transformedAnswer RelatedResponse(test.get).map(transformToTest2).toResponse must be equalTo transformedAnswer } }
Example 4
Source File: GlobalMQDeserializerSpec.scala From seahorse with Apache License 2.0 | 5 votes |
package ai.deepsense.workflowexecutor.communication.mq.json import java.nio.charset.StandardCharsets import org.scalatest.mockito.MockitoSugar import spray.json.{JsArray, JsNull, JsObject, JsString} import ai.deepsense.commons.StandardSpec import ai.deepsense.models.workflows.Workflow import ai.deepsense.workflowexecutor.communication.message.global._ import ai.deepsense.workflowexecutor.communication.mq.json.Global.GlobalMQDeserializer class GlobalMQDeserializerSpec extends StandardSpec with MockitoSugar { "GlobalMQDeserializer" should { "deserialize Launch messages" in { val workflowId = Workflow.Id.randomId val nodesToExecute = Vector(Workflow.Id.randomId, Workflow.Id.randomId, Workflow.Id.randomId) val jsNodesToExecute = JsArray(nodesToExecute.map(id => JsString(id.toString))) val rawMessage = JsObject( "messageType" -> JsString("launch"), "messageBody" -> JsObject( "workflowId" -> JsString(workflowId.toString), "nodesToExecute" -> jsNodesToExecute ) ) val readMessage: Any = serializeAndRead(rawMessage) readMessage shouldBe Launch(workflowId, nodesToExecute.toSet) } "deserialize Heartbeat messages" in { val workflowId = "foo-workflow" val rawMessage = JsObject( "messageType" -> JsString("heartbeat"), "messageBody" -> JsObject( "workflowId" -> JsString(workflowId), "sparkUiAddress" -> JsNull)) serializeAndRead(rawMessage) shouldBe Heartbeat(workflowId, None) } "deserialize PoisonPill messages" in { val rawMessage = JsObject( "messageType" -> JsString("poisonPill"), "messageBody" -> JsObject()) serializeAndRead(rawMessage) shouldBe PoisonPill() } "deserialize Ready messages" in { val sessionId = "foo-session" val rawMessage = JsObject( "messageType" -> JsString("ready"), "messageBody" -> JsObject( "sessionId" -> JsString(sessionId))) serializeAndRead(rawMessage) shouldBe Ready(sessionId) } } private def serializeAndRead( rawMessage: JsObject): Any = { val bytes = rawMessage.compactPrint.getBytes(StandardCharsets.UTF_8) GlobalMQDeserializer.deserializeMessage(bytes) } }
Example 5
Source File: DefaultGenerator.scala From TSimulus with Apache License 2.0 | 5 votes |
package be.cetic.tsimulus.generators.missing import be.cetic.tsimulus.config.{GeneratorFormat, Model} import be.cetic.tsimulus.generators.{Generator, TimeToJson} import be.cetic.tsimulus.timeseries.TimeSeries import be.cetic.tsimulus.timeseries.missing.DefaultTimeSeries import spray.json.{JsArray, JsObject, JsString, JsValue, _} class DefaultGenerator(name: Option[String], val gens: Seq[Either[String, Generator[Any]]]) extends Generator[Any](name, "first-of") { override def timeseries(generators: (String) => Generator[Any]) = { val underlyings = gens.map(g => Model.generator(generators)(g).timeseries(generators) match { case t: TimeSeries[Any] => t }) DefaultTimeSeries(underlyings) } override def toString = "UndefinedGenerator(" + name + "," + gens + ")" override def equals(o: Any) = o match { case that: DefaultGenerator => that.gens == this.gens case _ => false } override def toJson: JsValue = { val t = Map( "type" -> `type`.toJson, "generators" -> gens.map(either2json).toJson ) new JsObject( name.map(n => t + ("name" -> n.toJson)).getOrElse(t) ) } } object DefaultGenerator { def apply(value: JsValue): DefaultGenerator = { val fields = value.asJsObject.fields val name = fields.get("name").map { case JsString(x) => x } val generators = fields("generators") match { case JsArray(l) => l.map { case JsString(s) => Left(s) case g => Right(GeneratorFormat.read(g)) } } new DefaultGenerator(name, generators) } }
Example 6
Source File: AggregateGenerator.scala From TSimulus with Apache License 2.0 | 5 votes |
package be.cetic.tsimulus.generators.composite import be.cetic.tsimulus.config._ import be.cetic.tsimulus.generators.{Generator, TimeToJson} import be.cetic.tsimulus.timeseries.TimeSeries import be.cetic.tsimulus.timeseries.composite.AggregationTimeSeries import spray.json.{JsArray, JsObject, JsString, JsValue, _} class AggregateGenerator[U](name: Option[String], val aggregator: String, val generators: Seq[Either[String, Generator[Any]]]) extends Generator[U](name, "aggregate") { override def timeseries(gen: String => Generator[Any]) = { val agg = aggregationFunction(aggregator) val ts = generators.map { case Left(s) => gen(s).timeseries(gen) case Right(g) => g.timeseries(gen) } val series = ts flatMap { case d : TimeSeries[Double] => Some(d) case _ => None } new AggregationTimeSeries[Double, U](agg, series) } override def toString = "Aggregate(" + name + ", " + aggregator + ", " + generators.mkString("[", ", ", "]") + ")" override def equals(o: Any) = o match { case that: AggregateGenerator[U] => that.name == this.name && that.aggregator == this.aggregator && that.generators == this.generators case _ => false } override def toJson: JsValue = { val t = Map( "type" -> `type`.toJson, "aggregator" -> aggregator.toJson, "generators" -> generators.map(either2json).toJson ) new JsObject( name.map(n => t + ("name" -> n.toJson)).getOrElse(t) ) } } object AggregateGenerator extends DefaultJsonProtocol { def apply[U](value: JsValue): AggregateGenerator[U] = { val fields = value.asJsObject.fields val name = fields.get("name").map { case JsString(x) => x } val aggregator = fields("aggregator").convertTo[String] val generators = fields("generators") match { case JsArray(x) => x.map { case JsString(s) => Left(s) case g => Right(GeneratorFormat.read(g)) }.toList } new AggregateGenerator(name, aggregator, generators) } }
Example 7
Source File: Configuration.scala From TSimulus with Apache License 2.0 | 5 votes |
package be.cetic.tsimulus.config import be.cetic.tsimulus.generators.{Generator, TimeToJson} import be.cetic.tsimulus.timeseries.TimeSeries import com.github.nscala_time.time.Imports._ import org.joda.time.LocalDateTime import spray.json.{JsArray, JsObject, JsValue, _} case class Configuration(generators: Option[Seq[Generator[Any]]], series: Seq[Series[Any]], from: LocalDateTime, to: LocalDateTime) extends TimeToJson { def timeSeries: Map[String, (TimeSeries[Any], Duration)] = { val memory = firstOrderGenerators series.map(s => { val duration = s.frequency val generator = Model.generator(memory)(s.generator) s.name -> (generator.timeseries(memory), duration) }).toMap } def firstOrderGenerators: Map[String, Generator[Any]] = { generators match { case None => Map() case Some(gens) => { val memory = scala.collection.mutable.Map[String, Generator[Any]]() gens.foreach(g => { memory.put(g.name.get, g) }) memory.toMap } } } def toJson: JsValue = { new JsObject(Map( "generators" -> generators.map(g => g.map(_.toJson)).toJson, "exported" -> series.map(s => s.toJson).toJson, "from" -> from.toJson, "to" -> to.toJson )) } } object Configuration extends TimeToJson { def apply(value: JsValue): Configuration = { val fields = value.asJsObject.fields val generators = fields.get("generators").map { case JsArray(l) => l.map(GeneratorFormat.read) case _ => throw new ClassCastException } val series = fields("exported") match { case JsArray(x) => x.map(Series[Any](_)).toSeq case _ => throw new ClassCastException } val from = fields("from").convertTo[LocalDateTime] val to = fields("to").convertTo[LocalDateTime] Configuration(generators, series, from, to) } }
Example 8
Source File: SprayUtilities.scala From mmlspark with MIT License | 5 votes |
// Copyright (C) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See LICENSE in project root for information. package com.microsoft.ml.nbtest import spray.json.{JsArray, JsObject, JsValue, JsonFormat} import scala.language.{existentials, implicitConversions} abstract class SprayOp case class IndexOp(item: Int) extends SprayOp case class FieldOp(value: String) extends SprayOp class SprayUtility(val json: JsValue) { private def parseQuery(q: String): List[SprayOp] = { q.split("." (0)).flatMap { t => if (t.contains("]") & t.contains("]")) { t.split("][".toCharArray).filter(_.length > 0).toSeq match { case Seq(index) => Seq(IndexOp(index.toInt)) case Seq(field, index) => Seq(FieldOp(field), IndexOp(index.toInt)) } } else if (!t.contains("]") & !t.contains("]")) { Seq(FieldOp(t)).asInstanceOf[List[SprayOp]] } else { throw new IllegalArgumentException(s"Cannot parse query: $q") } }.toList } private def selectInternal[T](json: JsValue, ops: List[SprayOp])(implicit format: JsonFormat[T]): T = { ops match { case Nil => json.convertTo[T] case IndexOp(i) :: tail => selectInternal[T](json.asInstanceOf[JsArray].elements(i), tail) case FieldOp(f) :: tail => selectInternal[T](json.asInstanceOf[JsObject].fields(f), tail) case _ => throw new MatchError("This code should be unreachable") } } def select[T](query: String)(implicit format: JsonFormat[T]): T = { selectInternal[T](json, parseQuery(query)) } } object SprayImplicits { implicit def sprayUtilityConverter(s: JsValue): SprayUtility = new SprayUtility(s) implicit def sprayUtilityConversion(s: SprayUtility): JsValue = s.json }
Example 9
Source File: Metrics.scala From graphcool-framework with Apache License 2.0 | 5 votes |
package cool.graph.client import java.util.concurrent.TimeUnit import akka.actor.Actor import cool.graph.cuid.Cuid import cool.graph.shared.externalServices.KinesisPublisher import org.joda.time.DateTime import org.joda.time.format.DateTimeFormat import spray.json.{JsArray, JsBoolean, JsNumber, JsObject, JsString} import scala.collection.mutable import scala.concurrent.duration.FiniteDuration import scala.util.control.NonFatal object FeatureMetric extends Enumeration { type FeatureMetric = Value val Subscriptions = Value("backend/api/subscriptions") val Filter = Value("backend/feature/filter") val NestedMutations = Value("backend/feature/nested-mutation") val ApiSimple = Value("backend/api/simple") val ApiRelay = Value("backend/api/relay") val ApiFiles = Value("backend/api/files") val ServersideSubscriptions = Value("backend/feature/sss") val RequestPipeline = Value("backend/feature/rp") // add this! val PermissionQuery = Value("backend/feature/permission-queries") // add this! val Authentication = Value("backend/feature/authentication") val Algolia = Value("backend/feature/algolia") // add this! val Auth0 = Value("backend/feature/integration-auth0") val Digits = Value("backend/feature/integration-digits") } case class ApiFeatureMetric(ip: String, date: DateTime, projectId: String, clientId: String, usedFeatures: List[String], // Should be false when we can't determine. This is the case for subscriptions. // Is always false for File api. isFromConsole: Boolean) class FeatureMetricActor( metricsPublisher: KinesisPublisher, interval: Int ) extends Actor { import context.dispatcher val metrics = mutable.Buffer.empty[ApiFeatureMetric] val FLUSH = "FLUSH" val tick = context.system.scheduler.schedule( initialDelay = FiniteDuration(interval, TimeUnit.SECONDS), interval = FiniteDuration(interval, TimeUnit.SECONDS), receiver = self, message = FLUSH ) override def postStop() = tick.cancel() def receive = { case metric: ApiFeatureMetric => metrics += metric case FLUSH => flushMetrics() } def flushMetrics() = { val byProject = metrics.groupBy(_.projectId) map { case (projectId, metrics) => JsObject( "requestCount" -> JsNumber(metrics.length), "projectId" -> JsString(projectId), "usedIps" -> JsArray(metrics.map(_.ip).distinct.take(10).toVector.map(JsString(_))), "features" -> JsArray(metrics.flatMap(_.usedFeatures).distinct.toVector.map(JsString(_))), "date" -> JsString(metrics.head.date.toString(DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss'Z").withZoneUTC())), "version" -> JsString("1"), "justConsoleRequests" -> JsBoolean(metrics.forall(_.isFromConsole)) ) } byProject.foreach { json => try { metricsPublisher.putRecord(json.toString, shardId = Cuid.createCuid()) } catch { case NonFatal(e) => println(s"Putting kinesis FeatureMetric failed: ${e.getMessage} ${e.toString}") } } metrics.clear() } }
Example 10
Source File: DevFunctionEnvironment.scala From graphcool-framework with Apache License 2.0 | 5 votes |
package cool.graph.shared.functions.dev import akka.actor.ActorSystem import akka.stream.ActorMaterializer import cool.graph.akkautil.http.SimpleHttpClient import cool.graph.cuid.Cuid import cool.graph.shared.functions._ import cool.graph.shared.models.Project import spray.json.{JsArray, JsObject, JsString, _} import scala.concurrent.Future import scala.util.{Failure, Success, Try} case class DevFunctionEnvironment()(implicit system: ActorSystem, materializer: ActorMaterializer) extends FunctionEnvironment { import Conversions._ import system.dispatcher private val httpClient = SimpleHttpClient() override def pickDeploymentAccount(): Option[String] = None val functionEndpointInternal: String = sys.env.getOrElse("FUNCTION_ENDPOINT_INTERNAL", sys.error("FUNCTION_ENDPOINT_INTERNAL env var required for dev function deployment.")).stripSuffix("/") val functionEndpointExternal: String = sys.env.getOrElse("FUNCTION_ENDPOINT_EXTERNAL", sys.error("FUNCTION_ENDPOINT_EXTERNAL env var required for dev function deployment.")).stripSuffix("/") override def getTemporaryUploadUrl(project: Project): String = { val deployId = Cuid.createCuid() s"$functionEndpointExternal/functions/files/${project.id}/$deployId" } override def deploy(project: Project, externalFile: ExternalFile, name: String): Future[DeployResponse] = { httpClient .postJson(s"$functionEndpointInternal/functions/deploy/${project.id}", DeploymentInput(externalFile.url, externalFile.devHandler, name)) .map { response => response.bodyAs[StatusResponse] match { case Success(status) => if (status.success) { DeploySuccess() } else { DeployFailure(new Exception(status.error.getOrElse(""))) } case Failure(e) => DeployFailure(e) } } .recover { case e: Throwable => DeployFailure(e) } } override def invoke(project: Project, name: String, event: String): Future[InvokeResponse] = { httpClient .postJson(s"$functionEndpointInternal/functions/invoke/${project.id}", FunctionInvocation(name, event)) .map { response => response.bodyAs[FunctionInvocationResult] match { case Success(result) => val returnValue = Try { result.value.map(_.toString).getOrElse("").parseJson } match { case Success(parsedJson) => parsedJson case Failure(_) => JsObject("error" -> JsString("Function did not return a valid response. Check your function code / logs.")) } val output = JsObject( "logs" -> JsArray( JsObject("stdout" -> JsString(result.stdout.getOrElse(""))), JsObject("stderr" -> JsString(result.stderr.getOrElse(""))), JsObject("error" -> JsString(result.error.getOrElse(""))) ), "response" -> returnValue ).compactPrint if (result.success) { InvokeSuccess(output) } else { InvokeFailure(new Exception(output)) } case Failure(e) => InvokeFailure(e) } } .recover { case e: Throwable => InvokeFailure(e) } } }
Example 11
Source File: Diagram.scala From pnp with Apache License 2.0 | 5 votes |
package org.allenai.dqa.labeling import scala.io.Source import spray.json.DefaultJsonProtocol._ import spray.json.JsArray import spray.json.JsNumber import spray.json.JsObject import spray.json.deserializationError import spray.json.pimpString import scala.util.Random case class DiagramLabel(diagramType: String, partLabels: Vector[String]) object Diagram { def fromJsonFile(filename: String, features: Map[String, DiagramFeatures] ): Array[(Diagram, DiagramLabel)] = { val lines = Source.fromFile(filename).getLines lines.map(fromJsonLine(_, features)).toArray } def fromJsonLine(line: String, features: Map[String, DiagramFeatures] ): (Diagram, DiagramLabel) = { val js = line.parseJson.asJsObject val diagramLabel = js.fields("label").convertTo[String] val diagramId = js.fields("id").convertTo[String] val imageId = js.fields("imageId").convertTo[String] val width = js.fields("width").convertTo[Int] val height = js.fields("height").convertTo[Int] // val pointJsons = Random.shuffle(js.fields("points").asInstanceOf[JsArray].elements) val pointJsons = js.fields("points").asInstanceOf[JsArray].elements val labeledParts = for { (pointJson, i) <- pointJsons.zipWithIndex p = pointJson.asJsObject id = p.fields("textId").convertTo[String] label = p.fields("label").convertTo[String] xy = p.fields("xy") match { case JsArray(Vector(JsNumber(x), JsNumber(y))) => Point(x.toInt, y.toInt) case _ => deserializationError("Array of x/y coordinates expected") } } yield { (Part(id, i, xy), label) } val f = features(imageId) (Diagram(diagramId, imageId, width, height, labeledParts.map(_._1), f), (DiagramLabel(diagramLabel, labeledParts.map(_._2)))) } }
Example 12
Source File: ClusterRequest.scala From ohara with Apache License 2.0 | 5 votes |
package oharastream.ohara.client.configurator import oharastream.ohara.common.annotations.Optional import oharastream.ohara.common.setting.ObjectKey import oharastream.ohara.common.util.CommonUtils import spray.json.DefaultJsonProtocol._ import spray.json.{JsArray, JsNumber, JsObject, JsString, JsValue} import scala.jdk.CollectionConverters._ import scala.collection.mutable protected def key: ObjectKey = ObjectKey.of( settings.get(GROUP_KEY).map(_.convertTo[String]).getOrElse(GROUP_DEFAULT), settings(NAME_KEY).convertTo[String] ) protected val settings: mutable.Map[String, JsValue] = mutable.Map() @Optional("default key is a random string. But it is required in updating") def key(key: ObjectKey): ClusterRequest.this.type = { setting(NAME_KEY, JsString(key.name())) setting(GROUP_KEY, JsString(key.group())) } @Optional("default name is a random string. But it is required in updating") def name(name: String): ClusterRequest.this.type = setting(NAME_KEY, JsString(CommonUtils.requireNonEmpty(name))) @Optional("default is GROUP_DEFAULT") def group(group: String): ClusterRequest.this.type = setting(GROUP_KEY, JsString(CommonUtils.requireNonEmpty(group))) def nodeName(nodeName: String): ClusterRequest.this.type = nodeNames(Set(CommonUtils.requireNonEmpty(nodeName))) def nodeNames(nodeNames: Set[String]): ClusterRequest.this.type = setting(NODE_NAMES_KEY, JsArray(CommonUtils.requireNonEmpty(nodeNames.asJava).asScala.map(JsString(_)).toVector)) @Optional("default value is empty array") def routes(routes: Map[String, String]): ClusterRequest.this.type = setting(ROUTES_KEY, JsObject(routes.map { case (k, v) => k -> JsString(v) })) @Optional("default value is 1024") def initHeap(sizeInMB: Int): ClusterRequest.this.type = setting(INIT_HEAP_KEY, JsNumber(CommonUtils.requirePositiveInt(sizeInMB))) @Optional("default value is 1024") def maxHeap(sizeInMB: Int): ClusterRequest.this.type = setting(MAX_HEAP_KEY, JsNumber(CommonUtils.requirePositiveInt(sizeInMB))) @Optional("extra settings is empty by default") def setting(key: String, value: JsValue): ClusterRequest.this.type = settings(Map(key -> value)) @Optional("extra settings is empty by default") def settings(settings: Map[String, JsValue]): ClusterRequest.this.type = { // We don't have to check the settings is empty here for the following reasons: // 1) we may want to use the benefit of default creation without specify settings // 2) actual checking will be done in the json parser phase of creation or update this.settings ++= settings this } }
Example 13
Source File: RestService.scala From introduction-to-akkahttp with Apache License 2.0 | 5 votes |
package com.shashank.akkahttp.project import java.util.concurrent.ConcurrentHashMap import akka.actor.ActorSystem import akka.http.scaladsl.server.Directives._ import akka.stream.ActorMaterializer import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ import com.shashank.akkahttp.project.Models.{LoadRequest, ServiceJsonProtoocol} import spray.json.JsArray import scala.collection.JavaConverters._ import spray.json.{DefaultJsonProtocol, JsArray, pimpAny} import spray.json.DefaultJsonProtocol._ import org.apache.spark.sql.SparkSession import org.apache.spark.sql._ trait RestService { implicit val system: ActorSystem implicit val materializer: ActorMaterializer implicit val sparkSession: SparkSession val datasetMap = new ConcurrentHashMap[String, Dataset[Row]]() import ServiceJsonProtoocol._ val route = pathSingleSlash { get { complete { "welcome to rest service" } } } ~ path("load") { post { entity(as[LoadRequest]) { loadRequest => complete { val id = "" + System.nanoTime() val dataset = sparkSession.read.format("csv") .option("header", "true") .load(loadRequest.path) datasetMap.put(id, dataset) id } } } } ~ path("view" / """[\w[0-9]-_]+""".r) { id => get { complete { val dataset = datasetMap.get(id) dataset.take(10).map(row => row.toString()) } } } }
Example 14
Source File: CoreTransactionTestCaseProtocol.scala From bitcoin-s with MIT License | 5 votes |
package org.bitcoins.core.protocol.transaction.testprotocol import org.bitcoins.core.currency.{CurrencyUnit, Satoshis} import org.bitcoins.core.number.{Int64, UInt32} import org.bitcoins.core.protocol.script.ScriptPubKey import org.bitcoins.core.protocol.transaction.{Transaction, TransactionOutPoint} import org.bitcoins.core.script.constant.ScriptToken import org.bitcoins.core.script.flag.{ScriptFlag, ScriptFlagFactory} import org.bitcoins.core.serializers.script.ScriptParser import org.bitcoins.core.util.{BitcoinSLogger, BytesUtil} import org.bitcoins.crypto.DoubleSha256Digest import spray.json.{DefaultJsonProtocol, JsArray, JsValue, RootJsonFormat} def parseOutPointsScriptPubKeysAmount(array: JsArray): Seq[ (TransactionOutPoint, ScriptPubKey, Option[CurrencyUnit])] = { val result = array.elements.map { case array: JsArray => val prevoutHashHex = BytesUtil.flipEndianness(array.elements.head.convertTo[String]) val prevoutHash = DoubleSha256Digest(prevoutHashHex) val prevoutIndex = array.elements(1).convertTo[Long] match { case -1 => UInt32("ffffffff") case index if index >= UInt32.min.toLong && index <= UInt32.max.toLong => UInt32(index) } val amount = if (array.elements.size == 4) Some(Satoshis(array.elements(3).convertTo[Long])) else None //val prevoutIndex = UInt32(array.elements(1).convertTo[Int]) val outPoint = TransactionOutPoint(prevoutHash, prevoutIndex) val scriptTokens: Seq[ScriptToken] = ScriptParser.fromString(array.elements(2).convertTo[String]) val scriptPubKey = ScriptPubKey.fromAsm(scriptTokens) (outPoint, scriptPubKey, amount) case _: JsValue => throw new RuntimeException( "All tx outpoint/scriptpubkey info must be array elements") } result } }
Example 15
Source File: UnionFormatSpec.scala From sjson-new with Apache License 2.0 | 5 votes |
package sjsonnew package support.spray import org.specs2.mutable._ import java.util.Arrays import spray.json.{ JsArray, JsNumber, JsString, JsObject } import LList._ class UnionFormatsSpec extends Specification with BasicJsonProtocol { sealed trait Fruit case class Apple() extends Fruit sealed trait Citrus extends Fruit case class Orange() extends Citrus implicit object AppleJsonFormat extends JsonFormat[Apple] { def write[J](x: Apple, builder: Builder[J]): Unit = { builder.beginObject() builder.addField("x", 0) builder.endObject() } def read[J](jsOpt: Option[J], unbuilder: Unbuilder[J]): Apple = jsOpt match { case Some(js) => val result = unbuilder.beginObject(js) match { case 1 => val x = unbuilder.readField[Int]("x") if (x == 0) Apple() else deserializationError(s"Unexpected value: $x") case x => deserializationError(s"Unexpected number of fields: $x") } unbuilder.endObject() result case None => deserializationError("Expected JsNumber but found None") } } implicit object OrangeJsonFormat extends JsonFormat[Orange] { def write[J](x: Orange, builder: Builder[J]): Unit = { builder.beginObject() builder.addField("x", 1) builder.endObject() } def read[J](jsOpt: Option[J], unbuilder: Unbuilder[J]): Orange = jsOpt match { case Some(js) => val result = unbuilder.beginObject(js) match { case 1 => val x = unbuilder.readField[Int]("x") if (x == 1) Orange() else deserializationError(s"Unexpected value: $x") case x => deserializationError(s"Unexpected number of fields: $x") } unbuilder.endObject() result case None => deserializationError("Expected JsNumber but found None") } } val fruit: Fruit = Apple() "The unionFormat" should { implicit val FruitFormat: JsonFormat[Fruit] = unionFormat2[Fruit, Apple, Orange] val fruitJson = JsObject("value" -> JsObject("x" -> JsNumber(0)), "type" -> JsString("Apple")) "convert a value of ADT to JObject" in { Converter.toJsonUnsafe(fruit) mustEqual fruitJson } "convert JObject back to ADT" in { Converter.fromJsonUnsafe[Fruit](fruitJson) mustEqual fruit } } "The flatUnionFormat" should { implicit val FruitFormat: JsonFormat[Fruit] = flatUnionFormat2[Fruit, Apple, Orange]("type") val fruitJson2 = JsObject("type" -> JsString("Apple"), "x" -> JsNumber(0)) "convert a value of ADT to JObject" in { Converter.toJsonUnsafe(fruit) mustEqual fruitJson2 } "convert JObject back to ADT" in { // println(Converter.fromJsonUnsafe[Fruit](fruitJson2)) Converter.fromJsonUnsafe[Fruit](fruitJson2) mustEqual fruit } } }
Example 16
Source File: TupleFormatsSpec.scala From sjson-new with Apache License 2.0 | 5 votes |
package sjsonnew package support.spray import spray.json.{ JsValue, JsNumber, JsString, JsNull, JsTrue, JsFalse, JsArray } import org.specs2.mutable._ import scala.Right class TupleFormatsSpec extends Specification with BasicJsonProtocol { "The tuple1Format" should { "convert (42) to a JsNumber" in { Converter.toJsonUnsafe(Tuple1(42)) mustEqual JsArray(JsNumber(42)) } "be able to convert a JsNumber to a Tuple1[Int]" in { Converter.fromJsonUnsafe[Tuple1[Int]](JsArray(JsNumber(42))) mustEqual Tuple1(42) } } "The tuple2Format" should { val json = JsArray(JsNumber(42), JsNumber(4.2)) "convert (42, 4.2) to a JsArray" in { Converter.toJsonUnsafe((42, 4.2)) mustEqual json } "be able to convert a JsArray to a (Int, Double)]" in { Converter.fromJsonUnsafe[(Int, Double)](json) mustEqual (42, 4.2) } } "The tuple3Format" should { val json = JsArray(JsNumber(42), JsNumber(4.2), JsString("hello")) "convert (42, 4.2, \"hello\") to a JsArray" in { Converter.toJsonUnsafe((42, 4.2, "hello")) mustEqual json } "be able to convert a JsArray to a (Int, Double, Int)]" in { Converter.fromJsonUnsafe[(Int, Double, String)](json) mustEqual (42, 4.2, "hello") } } }
Example 17
Source File: IsoLListFormatSpec.scala From sjson-new with Apache License 2.0 | 5 votes |
package sjsonnew package support.spray import spray.json.{ JsArray, JsNumber, JsString, JsObject } import org.specs2.mutable.Specification class IsoLListFormatSpec extends Specification with BasicJsonProtocol { sealed trait Contact case class Person(name: String, value: Option[Int]) extends Contact case class Organization(name: String, value: Option[Int]) extends Contact implicit val personIso: IsoLList.Aux[Person, String :*: Option[Int] :*: LNil] = LList.isoCurried( { p: Person => ("name", p.name) :*: ("value", p.value) :*: LNil }) { in => Person( in.find[String]("name").get, in.find[Option[Int]]("value").flatten) } implicit val organizationIso: IsoLList.Aux[Organization, String :*: Option[Int] :*: LNil] = LList.isoCurried( { o: Organization => ("name", o.name) :*: ("value", o.value) :*: LNil }) { in => Organization( in.find[String]("name").get, in.find[Option[Int]]("value").flatten) } implicit val ContactFormat: JsonFormat[Contact] = flatUnionFormat2[Contact, Person, Organization]("$type") val p1 = Person("Alice", Some(1)) val personJs = JsObject("$fields" -> JsArray(JsString("name"), JsString("value")), "name" -> JsString("Alice"), "value" -> JsNumber(1)) val c1: Contact = Organization("Company", None) val contactJs = JsObject( "$type" -> JsString("Organization"), "$fields" -> JsArray(JsString("name"), JsString("value")), "name" -> JsString("Company") ) "The isomorphism from a custom type to LList" should { "convert from value to JObject" in { Converter.toJsonUnsafe(p1) mustEqual personJs } "convert from JObject to the same value" in { Converter.fromJsonUnsafe[Person](personJs) mustEqual p1 } "convert from a union value to JObject" in { Converter.toJsonUnsafe(c1) mustEqual contactJs } } }
Example 18
Source File: BuilderSpec.scala From sjson-new with Apache License 2.0 | 5 votes |
package sjsonnew package support.spray import org.specs2.mutable._ import java.util.Arrays import spray.json.{ JsArray, JsNumber, JsString, JsObject } import LList._ class BuilderSpec extends Specification with BasicJsonProtocol { case class Person(name: String, value: Int) implicit object PersonFormat extends JsonFormat[Person] { def write[J](x: Person, builder: Builder[J]): Unit = { builder.beginObject() builder.addField("name", x.name) builder.addField("value", x.value) builder.endObject() } def read[J](jsOpt: Option[J], unbuilder: Unbuilder[J]): Person = jsOpt match { case Some(js) => unbuilder.beginObject(js) val name = unbuilder.readField[String]("name") val value = unbuilder.readField[Int]("value") unbuilder.endObject() Person(name, value) case None => deserializationError("Expected JsObject but found None") } } "Custom format using builder" should { val p1 = Person("Alice", 1) val personJs = JsObject("name" -> JsString("Alice"), "value" -> JsNumber(1)) "convert from value to JObject" in { Converter.toJsonUnsafe(p1) mustEqual personJs } "convert from JObject to the same value" in { Converter.fromJsonUnsafe[Person](personJs) mustEqual p1 } } }
Example 19
Source File: LListFormatSpec.scala From sjson-new with Apache License 2.0 | 5 votes |
package sjsonnew package support.spray import org.specs2.mutable._ import java.util.Arrays import spray.json.{ JsArray, JsNumber, JsString, JsObject } class LListFormatsSpec extends Specification with BasicJsonProtocol { "The llistFormat" should { val empty = LNil val emptyObject = JsObject() val list = ("Z", 2) :*: ("a", 1) :*: LNil val obj = JsObject("$fields" -> JsArray(JsString("Z"), JsString("a")), "Z" -> JsNumber(2), "a" -> JsNumber(1)) val nested = ("b", list) :*: LNil val nestedObj = JsObject("$fields" -> JsArray(JsString("b")), "b" -> obj) "convert an empty list to JObject" in { Converter.toJsonUnsafe(empty) mustEqual emptyObject } "convert a list to JObject" in { Converter.toJsonUnsafe(list) mustEqual obj } "convert a nested list to JObject" in { Converter.toJsonUnsafe(nested) mustEqual nestedObj } "convert a JObject to list" in { Converter.fromJsonUnsafe[Int :*: Int :*: LNil](obj) mustEqual list } "convert a nested JObject to list" in { Converter.fromJsonUnsafe[(Int :*: Int :*: LNil) :*: LNil](nestedObj) mustEqual nested } val obj2 = JsObject("$fields" -> JsArray(JsString("f")), "f" -> JsString("foo")) val nested2Obj = JsObject("$fields" -> JsArray(JsString("b"), JsString("c")), "b" -> obj, "c" -> obj2) val list2 = ("f", "foo") :*: LNil val nested2 = ("b", list) :*: ("c", list2) :*: LNil "convert a 2 nested JObjects to list" in { Converter.fromJsonUnsafe[(Int :*: Int :*: LNil) :*: (String :*: LNil) :*: LNil](nested2Obj) mustEqual nested2 } } }
Example 20
Source File: YARNComponentActor.scala From openwhisk with Apache License 2.0 | 5 votes |
package org.apache.openwhisk.core.yarn import akka.actor.{Actor, ActorSystem} import akka.http.scaladsl.model.{HttpMethods, StatusCodes} import akka.stream.ActorMaterializer import org.apache.openwhisk.common.Logging import org.apache.openwhisk.core.entity.ExecManifest.ImageName import org.apache.openwhisk.core.yarn.YARNComponentActor.{CreateContainerAsync, RemoveContainer} import spray.json.{JsArray, JsNumber, JsObject, JsString} import scala.concurrent.ExecutionContext object YARNComponentActor { case object CreateContainerAsync case class RemoveContainer(component_instance_name: String) } class YARNComponentActor(actorSystem: ActorSystem, logging: Logging, yarnConfig: YARNConfig, serviceName: String, imageName: ImageName) extends Actor { implicit val as: ActorSystem = actorSystem implicit val materializer: ActorMaterializer = ActorMaterializer() implicit val ec: ExecutionContext = actorSystem.dispatcher //Adding a container via the YARN REST API is actually done by flexing the component's container pool to a certain size. // This actor must track the current containerCount in order to make the correct scale-up request. var containerCount: Int = 0 def receive: PartialFunction[Any, Unit] = { case CreateContainerAsync => sender ! createContainerAsync case RemoveContainer(component_instance_name) => sender ! removeContainer(component_instance_name) case input => throw new IllegalArgumentException("Unknown input: " + input) sender ! false } def createContainerAsync(): Unit = { logging.info(this, s"Using YARN to create a container with image ${imageName.name}...") val body = JsObject("number_of_containers" -> JsNumber(containerCount + 1)).compactPrint val response = YARNRESTUtil.submitRequestWithAuth( yarnConfig.authType, HttpMethods.PUT, s"${yarnConfig.masterUrl}/app/v1/services/$serviceName/components/${imageName.name}", body) response match { case httpresponse(StatusCodes.OK, content) => logging.info(this, s"Added container: ${imageName.name}. Response: $content") containerCount += 1 case httpresponse(_, _) => YARNRESTUtil.handleYARNRESTError(logging) } } def removeContainer(component_instance_name: String): Unit = { logging.info(this, s"Removing ${imageName.name} container: $component_instance_name ") if (containerCount <= 0) { logging.warn(this, "Already at 0 containers") } else { val body = JsObject( "components" -> JsArray( JsObject( "name" -> JsString(imageName.name), "decommissioned_instances" -> JsArray(JsString(component_instance_name))))).compactPrint val response = YARNRESTUtil.submitRequestWithAuth( yarnConfig.authType, HttpMethods.PUT, s"${yarnConfig.masterUrl}/app/v1/services/$serviceName", body) response match { case httpresponse(StatusCodes.OK, content) => logging.info( this, s"Successfully removed ${imageName.name} container: $component_instance_name. Response: $content") containerCount -= 1 case httpresponse(_, _) => YARNRESTUtil.handleYARNRESTError(logging) } } } }
Example 21
Source File: TlsTest.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.http import HttpServiceTestFixture.UseTls import akka.http.scaladsl.model.{StatusCodes, Uri} import org.scalatest.{Assertion, AsyncFreeSpec, Inside, Matchers} import spray.json.{JsArray, JsObject} import scala.concurrent.Future @SuppressWarnings(Array("org.wartremover.warts.NonUnitStatements")) class TlsTest extends AsyncFreeSpec with Matchers with Inside with AbstractHttpServiceIntegrationTestFuns { override def jdbcConfig = None override def staticContentConfig = None override def useTls = UseTls.Tls "connect normally with tls on" in withHttpService { (uri: Uri, _, _) => getRequest(uri = uri.withPath(Uri.Path("/v1/query"))) .flatMap { case (status, output) => status shouldBe StatusCodes.OK assertStatus(output, StatusCodes.OK) inside(output) { case JsObject(fields) => inside(fields.get("result")) { case Some(JsArray(vector)) => vector should have size 0L } } }: Future[Assertion] } }