This is an automated email from the ASF dual-hosted git repository.
aradzinski pushed a commit to branch NLPCRAFT-108
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
The following commit(s) were added to refs/heads/NLPCRAFT-108 by this push:
new 7ca3847 Update NCCli.scala
7ca3847 is described below
commit 7ca384789e0d89b6509ddff323f8592683455087
Author: Aaron Radzinski <[email protected]>
AuthorDate: Mon Oct 5 15:40:32 2020 -0700
Update NCCli.scala
---
.../nlpcraft/model/tools/cmdline/NCCli.scala | 68 ++++++++++++++--------
1 file changed, 43 insertions(+), 25 deletions(-)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
index e2dce97..f46a7bb 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
@@ -38,9 +38,10 @@ import java.util
import java.util.Date
import java.io._
import java.nio.charset.StandardCharsets
-import java.util.regex.{Pattern, PatternSyntaxException}
+import java.util.regex.Pattern
import org.apache.commons.io.input.{ReversedLinesFileReader, Tailer,
TailerListenerAdapter}
+import org.apache.http.util.EntityUtils
import org.jline.reader.Completer
import org.jline.reader.impl.DefaultParser
import org.jline.terminal.{Terminal, TerminalBuilder}
@@ -128,8 +129,14 @@ object NCCli extends App {
case class SplitError(index: Int) extends Exception
case class NoLocalServer() extends IllegalStateException(s"Cannot detect
locally running REST server.")
case class MissingParameter(cmd: Command, paramId: String) extends
IllegalArgumentException(
- s"Missing mandatory parameter: ${c(cmd.params.find(_.id ==
paramId).get.names.head)}. " +
- s"Type ${c("help --cmd=")}${c(cmd.name)} to get help."
+ s"Missing mandatory parameter: $ansiCyanFg${"'" + cmd.params.find(_.id
== paramId).get.names.head + "'"}$ansiReset. " +
+ s"Type $ansiCyanFg${"'help --cmd="}${c(cmd.name) + "'"}$ansiReset to
get help."
+ )
+ case class HttpError(httpCode: Int) extends IllegalStateException(s"REST
error (HTTP ${c(httpCode)}).")
+
+ case class HttpRestResponse(
+ code: Int,
+ data: String
)
case class ReplState(
@@ -1146,12 +1153,34 @@ object NCCli extends App {
* @param repl Whether or not executing from REPL.
*/
private def cmdRest(cmd: Command, args: Seq[Argument], repl: Boolean):
Unit = {
- val path = args.find(_.parameter.id == "path").getOrElse(throw
MissingParameter(cmd, "path"))
- val json = args.find(_.parameter.id == "json").getOrElse(throw
MissingParameter(cmd, "json"))
+ val path = args.find(_.parameter.id == "path").getOrElse(throw
MissingParameter(cmd, "path")).value.get
+ val rawJson = args.find(_.parameter.id == "json").getOrElse(throw
MissingParameter(cmd, "json")).value.get
+
+ if (!REST_PATHS.contains(path))
+ throw new IllegalArgumentException(s"Unknown REST path: $path")
+ val json = stripQuotes(rawJson)
val endpoint = getRestEndpointFromBeacon
- httpPost()
+ val handler = new ResponseHandler[HttpRestResponse] {
+ override def handleResponse(resp: HttpResponse): HttpRestResponse
= {
+ val status = resp.getStatusLine
+
+ HttpRestResponse(
+ status.getStatusCode,
+ Option(EntityUtils.toString(resp.getEntity)).getOrElse(
+ throw new IllegalStateException(s"Unexpected REST
error: ${status.getReasonPhrase}")
+ )
+ )
+ }
+ }
+
+ val resp = httpPost(endpoint, path, handler, json)
+
+ val code = if (resp.code == 200) g("200") else r(resp.code)
+
+ logln(s"HTTP $code")
+ logln(resp.data)
}
/**
@@ -1163,12 +1192,12 @@ object NCCli extends App {
case None ⇒ ()
}
- val appName = s"$NAME ver. ${VER.version}"
-
val parser = new DefaultParser()
parser.setEofOnUnclosedBracket(Bracket.CURLY, Bracket.ROUND,
Bracket.SQUARE)
parser.setEofOnUnclosedQuote(true)
+ parser.setRegexCommand("")
+ parser.setRegexVariable("")
val completer = new Completer {
private val cmds = CMDS.map(c ⇒ c.name → c.synopsis)
@@ -1219,7 +1248,7 @@ object NCCli extends App {
val reader = LineReaderBuilder
.builder
- .appName(appName)
+ .appName("NLPCraft")
.terminal(term)
.completer(completer)
.parser(parser)
@@ -1261,9 +1290,9 @@ object NCCli extends App {
reader.readLine(s"${g("\u25b6")} ")
}
catch {
- case _: PatternSyntaxException ⇒ "" // Guard against JLine
hiccups.
case _: UserInterruptException ⇒ "" // Ignore.
case _: EndOfFileException ⇒ null
+ case e: Exception ⇒ e.printStackTrace(); "" // Guard against
JLine hiccups.
}
if (rawLine == null || QUIT_CMD.name == rawLine.trim)
@@ -1359,8 +1388,10 @@ object NCCli extends App {
*
*/
private def unknownCommand(cmd: String): Unit = {
- error(s"Unknown command: ${y(cmd)}")
- error(s"Type '${c("help")}' to read the manual.")
+ val c2 = y(s"'$cmd'")
+ val h2 = c(s"'help'")
+
+ error(s"Unknown command $c2, type $h2 to get help.")
}
/**
@@ -1387,19 +1418,6 @@ object NCCli extends App {
* @param baseUrl Base endpoint URL.
* @param cmd REST call command.
* @param resp
- * @param json Set of object pairs to be converted into JSON
representation.
- * @return
- * @throws IOException
- */
- private def httpPost[T](baseUrl: String, cmd: String, resp:
ResponseHandler[T], json: (String, AnyRef)*): T =
- httpPost(baseUrl, cmd, resp, gson.toJson(json.filter(_._2 !=
null).toMap.asJava))
-
- /**
- * Posts HTTP POST request.
- *
- * @param baseUrl Base endpoint URL.
- * @param cmd REST call command.
- * @param resp
* @param json JSON string.
* @return
* @throws IOException