all repos — litestore @ 243fa1634c3d9b2f414f9d7c27b6f69ca64bdfb0

A minimalist nosql document store.

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(newRollingFileLogger("litestore.log.txt", fmReadWrite, logLevel, "$date $time - ", 100000))