Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
93a0a15f12 | |||
dc31d590a0 | |||
8b46cc19d8 | |||
567c2d2178 |
@ -11,5 +11,5 @@ bin = @["pit", "pit_api"]
|
||||
|
||||
# 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" ]
|
||||
|
@ -46,25 +46,6 @@ template checkAuth(cfg: PitApiCfg) =
|
||||
response.data[2]["Content-Type"] = TXT
|
||||
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) =
|
||||
|
||||
var stopFuture = newFuture[void]()
|
||||
@ -81,19 +62,28 @@ proc start*(cfg: PitApiCfg) =
|
||||
get "/issues":
|
||||
checkAuth(cfg); if not authed: return true
|
||||
|
||||
var (stripAnsi, args) = paramsToArgs(request.params)
|
||||
var args = queryParamsToCliArgs(request.params)
|
||||
args = @["list"] & args
|
||||
|
||||
info "args: \n" & args.join(" ")
|
||||
let execResult = execWithOutput("pit", ".", args)
|
||||
if execResult[2] != 0: resp(Http500, stripAnsi($execResult[0] & "\n" & $execResult[1]), TXT)
|
||||
else:
|
||||
if stripAnsi: resp(stripAnsi(execResult[0]), TXT)
|
||||
else: resp(execResult[0], TXT)
|
||||
else: resp(stripAnsi(execResult[0]), TXT)
|
||||
|
||||
post "/issues":
|
||||
checkAuth(cfg); if not authed: return true
|
||||
|
||||
get "/issue/@issueId":
|
||||
checkAuth(cfg); if not authed: return true
|
||||
|
||||
var args = queryParamsToCliArgs(request.params)
|
||||
args = @["list", @"issueId"] & args
|
||||
|
||||
info "args: \n" & args.join(" ")
|
||||
let execResult = execWithOutput("pit", ".", args)
|
||||
if execResult[2] != 0: resp(Http500, stripAnsi($execResult[0] & "\n" & $execResult[1]), TXT)
|
||||
else: resp(stripAnsi(execResult[0]), TXT)
|
||||
|
||||
waitFor(stopFuture)
|
||||
|
||||
proc loadApiConfig(args: Table[string, Value]): PitApiCfg =
|
||||
|
@ -230,7 +230,7 @@ proc changeState*(issue: Issue, tasksDir: string, newState: IssueState) =
|
||||
let oldFilepath = issue.filepath
|
||||
if newState == Done: issue.setDateTime("completed", getTime().local)
|
||||
tasksDir.store(issue, newState)
|
||||
removeFile(oldFilepath)
|
||||
if oldFilePath != issue.filepath: removeFile(oldFilepath)
|
||||
|
||||
proc delete*(issue: Issue) = removeFile(issue.filepath)
|
||||
|
||||
|
@ -1 +1 @@
|
||||
const PIT_VERSION = "4.4.0"
|
||||
const PIT_VERSION = "4.4.2"
|
||||
|
Reference in New Issue
Block a user