lib/cli.nim
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
import
parseopt2,
strutils,
logging
import
types,
utils
const
version* = "1.0"
usage* = " LiteStore v"& version & " - Lightweight REST Document Store" & """
(c) 2015 Fabio Cevasco
Usage:
LS [-p:<port> -a:<address>] [<file>] [--pack:<directory> | --unpack:<directory>]
Options:
-a, --address Specify address (default: 0.0.0.0).
--export Export the previously-packed specified directory to the current directory.
-h, --help Display this message.
--import Import the specified directory (Store all its contents).
-l, --log Specify the log level: debug, info, warn, error, fatal, none (default: info)
-p, --port Specify port number (default: 9500).
--purge Delete exported files (used in conjunction with --export).
-r, --readonly Allow only data retrieval operations.
-v, --version Display the program version.
"""
var
file = "data.ls"
port = 9500
address = "0.0.0.0"
operation = opRun
directory = ""
readonly = false
purge = false
logLevel = lvlInfo
for kind, key, val in getOpt():
case kind:
of cmdLongOption, cmdShortOption:
case key:
of "address", "a":
if val == "":
fail(100, "Address not specified.")
address = val
of "port", "p":
if val == "":
fail(101, "Port not specified.")
port = val.parseInt
of "log", "l":
if val == "":
fail(102, "Log level not specified.")
try:
logLevel = logging.LevelNames.find(val.toUpper).Level
except:
fail(103, "Invalid log level '$1'" % val)
of "import":
if val == "":
fail(104, "Directory to import not specified.")
operation = opImport
directory = val
of "export":
if val == "":
fail(105, "Directory to export not specified.")
operation = opExport
directory = val
of "purge":
purge = true
of "version", "v":
echo version
quit(0)
of "help", "h":
echo usage
quit(0)
of "readonly", "r":
readonly = true
else:
discard
of cmdArgument:
file = key
else:
discard
var LS*: LiteStore
LS.port = port
LS.address = address
LS.operation = operation
LS.file = file
LS.purge = purge
LS.directory = directory
LS.appversion = version
LS.readonly = readonly
LS.appname = "LiteStore"
# Initialize loggers
logging.handlers.add(newConsoleLogger(logLevel, "$date $time - "))
logging.handlers.add(newFileLogger("litestore.log.txt", fmAppend, logLevel, fmtStr = "$date $time - "))
|