Refactored to move HTTP query params to CLI arguments translation into the cliutils package.

This commit is contained in:
Jonathan Bernard 2018-10-01 21:39:35 -05:00
parent dc31d590a0
commit 93a0a15f12
3 changed files with 7 additions and 30 deletions

View File

@ -11,5 +11,5 @@ bin = @["pit", "pit_api"]
# Dependencies # Dependencies
requires @[ "nim >= 0.18.0", "cliutils 0.4.1", "docopt 0.6.5", "jester 0.2.0", requires @[ "nim >= 0.18.0", "cliutils 0.5.0", "docopt 0.6.5", "jester 0.2.0",
"langutils >= 0.4.0", "timeutils 0.3.0", "uuids 0.1.9" ] "langutils >= 0.4.0", "timeutils 0.3.0", "uuids 0.1.9" ]

View File

@ -46,25 +46,6 @@ template checkAuth(cfg: PitApiCfg) =
response.data[2]["Content-Type"] = TXT response.data[2]["Content-Type"] = TXT
response.data[3] = getCurrentExceptionMsg() response.data[3] = getCurrentExceptionMsg()
proc paramsToArgs(params: StringTableRef): tuple[stripAnsi: bool, args: seq[string]] =
result = (false, @[])
if params.hasKey("color"):
if params["color"] != "true":
result[0] = true
for k,v in params:
if k == "color": continue
elif k.startsWith("arg"): result[1].add(v) # support ?arg1=val1&arg2=val2 -> cmd val1 val2
else :
result[1].add("--" & k)
if v != "true": result[1].add(v) # support things like ?verbose=true -> cmd --verbose
let STRIP_ANSI_REGEX = re"\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]"
proc stripAnsi(str: string): string =
return str.replace(STRIP_ANSI_REGEX, "")
proc start*(cfg: PitApiCfg) = proc start*(cfg: PitApiCfg) =
var stopFuture = newFuture[void]() var stopFuture = newFuture[void]()
@ -81,15 +62,13 @@ proc start*(cfg: PitApiCfg) =
get "/issues": get "/issues":
checkAuth(cfg); if not authed: return true checkAuth(cfg); if not authed: return true
var (hasColor, args) = paramsToArgs(request.params) var args = queryParamsToCliArgs(request.params)
args = @["list"] & args args = @["list"] & args
info "args: \n" & args.join(" ") info "args: \n" & args.join(" ")
let execResult = execWithOutput("pit", ".", args) let execResult = execWithOutput("pit", ".", args)
if execResult[2] != 0: resp(Http500, stripAnsi($execResult[0] & "\n" & $execResult[1]), TXT) if execResult[2] != 0: resp(Http500, stripAnsi($execResult[0] & "\n" & $execResult[1]), TXT)
else: else: resp(stripAnsi(execResult[0]), TXT)
if hasColor: resp(stripAnsi(execResult[0]), TXT)
else: resp(execResult[0], TXT)
post "/issues": post "/issues":
checkAuth(cfg); if not authed: return true checkAuth(cfg); if not authed: return true
@ -97,15 +76,13 @@ proc start*(cfg: PitApiCfg) =
get "/issue/@issueId": get "/issue/@issueId":
checkAuth(cfg); if not authed: return true checkAuth(cfg); if not authed: return true
var (hasColor, args) = paramsToArgs(request.params) var args = queryParamsToCliArgs(request.params)
args = @["list", issueId] & args args = @["list", @"issueId"] & args
info "args: \n" & args.join(" ") info "args: \n" & args.join(" ")
let execResult = execWithOutput("pit", ".", args) let execResult = execWithOutput("pit", ".", args)
if execResult[2] != 0: resp(Http500, stripAnsi($execResult[0] & "\n" & $execResult[1]), TXT) if execResult[2] != 0: resp(Http500, stripAnsi($execResult[0] & "\n" & $execResult[1]), TXT)
else: else: resp(stripAnsi(execResult[0]), TXT)
if hasColor: resp(stripAnsi(execResult[0]), TXT)
else: resp(execResult[0], TXT)
waitFor(stopFuture) waitFor(stopFuture)

View File

@ -1 +1 @@
const PIT_VERSION = "4.4.1" const PIT_VERSION = "4.4.2"