7 Commits
0.6.0 ... 0.6.5

2 changed files with 25 additions and 11 deletions

View File

@ -1,4 +1,4 @@
import docopt, json, osproc, posix, nre, streams, strtabs, terminal, unicode import docopt, json, osproc, posix, nre, streams, strtabs, tables, terminal, unicode
import os except sleep import os except sleep
import strutils except toUpper, toLower import strutils except toUpper, toLower
@ -10,12 +10,12 @@ type
TermColor = ForegroundColor or BackgroundColor TermColor = ForegroundColor or BackgroundColor
proc getVal*(cfg: CombinedConfig, key, default: string): string = proc getVal*(cfg: CombinedConfig, key: string): string =
let argKey = "--" & key let argKey = "--" & key
let envKey = key.replace('-', '_').toUpper let envKey = key.replace('-', '_').toUpper
let jsonKey = key.replace(re"(-\w)", proc (m: RegexMatch): string = ($m)[1..1].toUpper) let jsonKey = key.replace(re"(-\w)", proc (m: RegexMatch): string = ($m)[1..1].toUpper)
if cfg.docopt[argKey]: return $cfg.docopt[argKey] if cfg.docopt.contains(argKey) and cfg.docopt[argKey]: return $cfg.docopt[argKey]
elif existsEnv(envKey): return getEnv(envKey) elif existsEnv(envKey): return getEnv(envKey)
elif cfg.json.hasKey(jsonKey): elif cfg.json.hasKey(jsonKey):
let node = cfg.json[jsonKey] let node = cfg.json[jsonKey]
@ -27,8 +27,11 @@ proc getVal*(cfg: CombinedConfig, key, default: string): string =
of JNull: return "" of JNull: return ""
of JObject: return $node of JObject: return $node
of JArray: return $node of JArray: return $node
else: return default else: raise newException(ValueError, "cannot find a configuration value for \"" & key & "\"")
proc getVal*(cfg: CombinedConfig, key, default: string): string =
try: return getVal(cfg, key)
except: return default
proc loadEnv*(): StringTableRef = proc loadEnv*(): StringTableRef =
result = newStringTable() result = newStringTable()
@ -98,7 +101,7 @@ proc execWithOutput*(command: string, workingDir:string = "",
result = (TaintedString"", TaintedString"", -1) result = (TaintedString"", TaintedString"", -1)
var outSeq, errSeq: seq[TaintedString] var outSeq, errSeq: seq[TaintedString]
outSeq = @[]; errSeq = @[] outSeq = @[]; errSeq = @[]
var outputCollector = combineProcMsgHandlers(msgCB, let outputCollector = combineProcMsgHandlers(msgCB,
proc(outMsg, errMsg: TaintedString, cmd: string): void {.closure.} = proc(outMsg, errMsg: TaintedString, cmd: string): void {.closure.} =
if outMsg.len > 0: outSeq.add(outMsg) if outMsg.len > 0: outSeq.add(outMsg)
if errMsg.len > 0: errSeq.add(errMsg)) if errMsg.len > 0: errSeq.add(errMsg))
@ -184,9 +187,21 @@ proc termColor*(color: TermColor, bright, bold = false): string =
proc withColor*(str: string, color: TermColor, bright, bold = false): string = proc withColor*(str: string, color: TermColor, bright, bold = false): string =
return termColor(color, bright, bold) & str return termColor(color, bright, bold) & str
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 stripAnsi*(str: string): string =
let STRIP_ANSI_REGEX = re"\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]"
return str.replace(STRIP_ANSI_REGEX, "")
proc queryParamsToCliArgs*(queryParams: Table[string, string]): seq[string] =
result = @[]
for k,v in queryParams:
# support ?arg1=val1&arg2=val2 -> cmd val1 val2
if k.startsWith("arg"): result.add(v)
else :
result.add("--" & k)
if v != "true": result.add(v) # support things like ?verbose=true -> cmd --verbose
proc queryParamsToCliArgs*(queryParams: StringTableRef): seq[string] = proc queryParamsToCliArgs*(queryParams: StringTableRef): seq[string] =
result = @[] result = @[]
@ -196,5 +211,5 @@ proc queryParamsToCliArgs*(queryParams: StringTableRef): seq[string] =
if k.startsWith("arg"): result.add(v) if k.startsWith("arg"): result.add(v)
else : else :
result[1].add("--" & k) result.add("--" & k)
if v != "true": result[1].add(v) # support things like ?verbose=true -> cmd --verbose if v != "true": result.add(v) # support things like ?verbose=true -> cmd --verbose

View File

@ -1,6 +1,6 @@
# Package # Package
version = "0.6.0" version = "0.6.5"
author = "Jonathan Bernard" author = "Jonathan Bernard"
description = "Helper functions for writing command line interfaces." description = "Helper functions for writing command line interfaces."
license = "MIT" license = "MIT"
@ -8,4 +8,3 @@ license = "MIT"
# Dependencies # Dependencies
requires @["nim >= 0.19.0", "docopt >= 0.6.8"] requires @["nim >= 0.19.0", "docopt >= 0.6.8"]