def parse(self): self.INP_DATA = {} if self.CMD is None: out.printAbout() return False if self.CMD == "autocomplete": # substitute arguments for AutoComplete # 1 offset to make the argument as 1 is autocomplete self.__init__(self.sys_argv[1:]) self.printAutocomplete() return False if self.CMD == "--help": self.printHelp() return False if self.CMD not in self.COMMANDS: self.printErrorCommand() return False if "--help" in self.INP: self.printHelp() return False # prepare data for arg, params in (self.CMD_ARGS.items() + self.CMD_FLAGS.items()): # set values by default if 'default' in params: self.INP_DATA[arg] = params['default'] # replace `altName` entered arguments on full if 'altName' in params and params['altName'] in self.INP: self.INP[self.INP.index(params['altName'])] = arg activeArg = None ACTIVE_CMD = None # check and insert first argument by default if 'firstArg' in self.COMMANDS[self.CMD]: firstArg = self.COMMANDS[self.CMD]['firstArg'] if len(self.INP) > 0: # Check that first argument is a default argument # and another argument. if self.INP[0] not in (self.CMD_ARGS.keys() + self.CMD_FLAGS.keys()): self.INP = [firstArg, ] + self.INP else: self.INP = [firstArg, ] for item in self.INP: # check what are waiting the argument if activeArg is None: # actions for the argument if item in self.CMD_ARGS: activeArg = item ACTIVE_CMD = self.CMD_ARGS[activeArg] # actions for the flag elif item in self.CMD_FLAGS: self.INP_DATA[item] = self.CMD_FLAGS[item]["value"] # error. parameter is not found else: self.printErrorArgument(item) return False else: activeArgTmp = None # values it is parameter if item in self.CMD_ARGS or item in self.CMD_FLAGS: # active argument is "emptyValue" if "emptyValue" in ACTIVE_CMD: activeArgTmp = item # remember the new "active" argument item = ACTIVE_CMD['emptyValue'] # set the active atgument to emptyValue # Error, "active" argument has no values else: self.printErrorArgument(activeArg, item) return False if 'type' in ACTIVE_CMD: convType = ACTIVE_CMD['type'] if convType not in (int, str): logging.error("Unsupported argument type: %s", convType) return False try: item = convType(item) except: self.printErrorArgument(activeArg, item) return False self.INP_DATA[activeArg] = item activeArg = activeArgTmp # this is either a new "active" argument or emptyValue. # if there are still active arguments if activeArg is not None: # if the active argument is emptyValue if 'emptyValue' in ACTIVE_CMD: self.INP_DATA[activeArg] = ACTIVE_CMD['emptyValue'] # An error argument else: self.printErrorArgument(activeArg, "") return False # check whether there is a necessary argument request for arg, params in (self.CMD_ARGS.items() + self.CMD_FLAGS.items()): if 'required' in params and arg not in self.INP: self.printErrorReqArgument(arg) return False # trim -- and ->_ self.INP_DATA = dict([key.lstrip("-").replace("-", "_"), val] for key, val in self.INP_DATA.items()) return self.INP_DATA
def parse(self): self.INP_DATA = {} if self.CMD is None: out.printAbout() return False if self.CMD == "autocomplete": # подставляем аргументы для автозаполнения # делаем смещение на 1 аргумент, т.к. 1 это autocomplete self.__init__(self.sys_argv[1:]) self.printAutocomplete() return False if self.CMD == "--help": self.printHelp() return False if not self.COMMANDS.has_key(self.CMD): self.printErrorCommand() return False if "--help" in self.INP: self.printHelp() return False # Подготовка данных for arg, params in (self.CMD_ARGS.items() + self.CMD_FLAGS.items()): # установка значений по умолчаеию if params.has_key('default'): self.INP_DATA[arg] = params['default'] # замена altName во входящих аргументах на полные if params.has_key('altName') and params['altName'] in self.INP: self.INP[self.INP.index(params['altName'])] = arg activeArg = None ACTIVE_CMD = None # проверяем и подставляем первый адгумент по умолчанию if self.COMMANDS[self.CMD].has_key('firstArg'): firstArg = self.COMMANDS[self.CMD]['firstArg'] if len(self.INP) > 0: # смотрим что первое знаение не аргумент по умолчанию, а другой аргумент if self.INP[0] not in (self.CMD_ARGS.keys() + self.CMD_FLAGS.keys()): self.INP = [firstArg, ] + self.INP else: self.INP = [firstArg, ] for item in self.INP: # Проверяем что ожидаем аргумент if activeArg is None: # Действия для аргумента if self.CMD_ARGS.has_key(item): activeArg = item ACTIVE_CMD = self.CMD_ARGS[activeArg] # Действия для флага elif self.CMD_FLAGS.has_key(item): self.INP_DATA[item] = self.CMD_FLAGS[item]["value"] # Ошибка параметр не найден else: self.printErrorArgument(item) return False else: activeArgTmp = None # Значения является параметром if self.CMD_ARGS.has_key(item) or self.CMD_FLAGS.has_key(item): # "Активный" аргумент имеет параметр emptyValue if ACTIVE_CMD.has_key("emptyValue"): activeArgTmp = item # запоминаем новый "активный" аргумент item = ACTIVE_CMD['emptyValue'] # подменяем значение на emptyValue # Ошибка, "активный" аргумент не имеет значений else: self.printErrorArgument(activeArg, item) return False if ACTIVE_CMD.has_key("type"): convType = ACTIVE_CMD['type'] if convType not in (int, str): logging.error("Unsupported argument type: %s", convType) return False try: item = convType(item) except: self.printErrorArgument(activeArg, item) return False self.INP_DATA[activeArg] = item activeArg = activeArgTmp # тут или пусто, или новый "активный" аргумент # если остались "активные" аршументы if activeArg is not None: # если есть параметр emptyValue if ACTIVE_CMD.has_key("emptyValue"): self.INP_DATA[activeArg] = ACTIVE_CMD['emptyValue'] # инече ошибка else: self.printErrorArgument(activeArg, "") return False # проверка, присутствует ли необходимый аргумент запросе for arg, params in (self.CMD_ARGS.items() + self.CMD_FLAGS.items()): if params.has_key('required') and arg not in self.INP: self.printErrorReqArgument(arg) return False # trim -- and ->_ self.INP_DATA = dict([key.lstrip("-").replace("-", "_"), val] for key, val in self.INP_DATA.items() ) return self.INP_DATA
def parse(self): self.INP_DATA = {} if self.CMD is None: out.printAbout() return False if self.CMD == "autocomplete": # substitute arguments for AutoComplete # 1 offset to make the argument as 1 is autocomplete self.__init__(self.sys_argv[1:]) self.printAutocomplete() return False if self.CMD == "--help": self.printHelp() return False if self.CMD not in self.COMMANDS: self.printErrorCommand() return False if "--help" in self.INP: self.printHelp() return False # prepare data for arg, params in (self.CMD_ARGS.items() + self.CMD_FLAGS.items()): # set values by default if 'default' in params: self.INP_DATA[arg] = params['default'] # replace `altName` entered arguments on full if 'altName' in params and params['altName'] in self.INP: self.INP[self.INP.index(params['altName'])] = arg activeArg = None ACTIVE_CMD = None # check and insert first argument by default if 'firstArg' in self.COMMANDS[self.CMD]: firstArg = self.COMMANDS[self.CMD]['firstArg'] if len(self.INP) > 0: # Check that first argument is a default argument # and another argument. if self.INP[0] not in (self.CMD_ARGS.keys() + self.CMD_FLAGS.keys()): self.INP = [ firstArg, ] + self.INP else: self.INP = [ firstArg, ] for item in self.INP: # check what are waiting the argument if activeArg is None: # actions for the argument if item in self.CMD_ARGS: activeArg = item ACTIVE_CMD = self.CMD_ARGS[activeArg] # actions for the flag elif item in self.CMD_FLAGS: self.INP_DATA[item] = self.CMD_FLAGS[item]["value"] # error. parameter is not found else: self.printErrorArgument(item) return False else: activeArgTmp = None # values it is parameter if item in self.CMD_ARGS or item in self.CMD_FLAGS: # active argument is "emptyValue" if "emptyValue" in ACTIVE_CMD: activeArgTmp = item # remember the new "active" argument item = ACTIVE_CMD[ 'emptyValue'] # set the active atgument to emptyValue # Error, "active" argument has no values else: self.printErrorArgument(activeArg, item) return False if 'type' in ACTIVE_CMD: convType = ACTIVE_CMD['type'] if convType not in (int, str): logging.error("Unsupported argument type: %s", convType) return False try: item = convType(item) except: self.printErrorArgument(activeArg, item) return False self.INP_DATA[activeArg] = item activeArg = activeArgTmp # this is either a new "active" argument or emptyValue. # if there are still active arguments if activeArg is not None: # if the active argument is emptyValue if 'emptyValue' in ACTIVE_CMD: self.INP_DATA[activeArg] = ACTIVE_CMD['emptyValue'] # An error argument else: self.printErrorArgument(activeArg, "") return False # check whether there is a necessary argument request for arg, params in (self.CMD_ARGS.items() + self.CMD_FLAGS.items()): if 'required' in params and arg not in self.INP: self.printErrorReqArgument(arg) return False # trim -- and ->_ self.INP_DATA = dict([key.lstrip("-").replace("-", "_"), val] for key, val in self.INP_DATA.items()) return self.INP_DATA
def parse(self): self.INP_DATA = {} if self.CMD is None: out.printAbout() return False if self.CMD == "autocomplete": # подставляем аргументы для автозаполнения # делаем смещение на 1 аргумент, т.к. 1 это autocomplete self.__init__(self.sys_argv[1:]) self.printAutocomplete() return False if self.CMD == "--help": self.printHelp() return False if self.CMD not in self.COMMANDS: self.printErrorCommand() return False if "--help" in self.INP: self.printHelp() return False # prepare data for arg, params in (self.CMD_ARGS.items() + self.CMD_FLAGS.items()): # set values by default if 'default' in params: self.INP_DATA[arg] = params['default'] # replace `altName` entered arguments on full if 'altName' in params and params['altName'] in self.INP: self.INP[self.INP.index(params['altName'])] = arg activeArg = None ACTIVE_CMD = None # check and insert first argument by default if 'firstArg' in self.COMMANDS[self.CMD]: firstArg = self.COMMANDS[self.CMD]['firstArg'] if len(self.INP) > 0: # смотрим что первое знаение не аргумент по умолчанию, # а другой аргумент if self.INP[0] not in (self.CMD_ARGS.keys() + self.CMD_FLAGS.keys()): self.INP = [firstArg, ] + self.INP else: self.INP = [firstArg, ] for item in self.INP: # check what are waiting the argument if activeArg is None: # Действия для аргумента if item in self.CMD_ARGS: activeArg = item ACTIVE_CMD = self.CMD_ARGS[activeArg] # actions for the flag elif item in self.CMD_FLAGS: self.INP_DATA[item] = self.CMD_FLAGS[item]["value"] # error. parameter is not found else: self.printErrorArgument(item) return False else: activeArgTmp = None # values it is parameter if item in self.CMD_ARGS or item in self.CMD_FLAGS: # "Активный" аргумент имеет параметр emptyValue if "emptyValue" in ACTIVE_CMD: activeArgTmp = item # запоминаем новый "активный" аргумент item = ACTIVE_CMD['emptyValue'] # подменяем значение на emptyValue # Ошибка, "активный" аргумент не имеет значений else: self.printErrorArgument(activeArg, item) return False if 'type' in ACTIVE_CMD: convType = ACTIVE_CMD['type'] if convType not in (int, str): logging.error("Unsupported argument type: %s", convType) return False try: item = convType(item) except: self.printErrorArgument(activeArg, item) return False self.INP_DATA[activeArg] = item activeArg = activeArgTmp # тут или пусто, или новый "активный" аргумент # если остались "активные" аршументы if activeArg is not None: # если есть параметр emptyValue if 'emptyValue' in ACTIVE_CMD: self.INP_DATA[activeArg] = ACTIVE_CMD['emptyValue'] # инече ошибка else: self.printErrorArgument(activeArg, "") return False # проверка, присутствует ли необходимый аргумент запросе for arg, params in (self.CMD_ARGS.items() + self.CMD_FLAGS.items()): if 'required' in params and arg not in self.INP: self.printErrorReqArgument(arg) return False # trim -- and ->_ self.INP_DATA = dict([key.lstrip("-").replace("-", "_"), val] for key, val in self.INP_DATA.items()) return self.INP_DATA
def parse(self): self.INP_DATA = {} if self.CMD is None: out.printAbout() return False if self.CMD == "autocomplete": self.__init__(self.sys_argv[1:]) self.printAutocomplete() return False if self.CMD == "--help": self.printHelp() return False if not self.COMMANDS.has_key(self.CMD): self.printErrorCommand() return False if "--help" in self.INP: self.printHelp() return False for arg, params in (self.CMD_ARGS.items() + self.CMD_FLAGS.items()): if params.has_key('default'): self.INP_DATA[arg] = params['default'] if params.has_key('altName') and params['altName'] in self.INP: self.INP[self.INP.index(params['altName'])] = arg activeArg = None ACTIVE_CMD = None if self.COMMANDS[self.CMD].has_key('firstArg'): firstArg = self.COMMANDS[self.CMD]['firstArg'] if len(self.INP) > 0: if self.INP[0] not in (self.CMD_ARGS.keys() + self.CMD_FLAGS.keys()): self.INP = [firstArg, ] + self.INP else: self.INP = [firstArg, ] for item in self.INP: if activeArg is None: if self.CMD_ARGS.has_key(item): activeArg = item ACTIVE_CMD = self.CMD_ARGS[activeArg] elif self.CMD_FLAGS.has_key(item): self.INP_DATA[item] = self.CMD_FLAGS[item]["value"] else: self.printErrorArgument(item) return False else: activeArgTmp = None if self.CMD_ARGS.has_key(item) or self.CMD_FLAGS.has_key(item): if ACTIVE_CMD.has_key("emptyValue"): activeArgTmp = item item = ACTIVE_CMD['emptyValue'] else: self.printErrorArgument(activeArg, item) return False if ACTIVE_CMD.has_key("type"): convType = ACTIVE_CMD['type'] if convType not in (int, str): logging.error("Unsupported argument type: %s", convType) return False try: item = convType(item) except: self.printErrorArgument(activeArg, item) return False self.INP_DATA[activeArg] = item activeArg = activeArgTmp if activeArg is not None: if ACTIVE_CMD.has_key("emptyValue"): self.INP_DATA[activeArg] = ACTIVE_CMD['emptyValue'] else: self.printErrorArgument(activeArg, "") return False for arg, params in (self.CMD_ARGS.items() + self.CMD_FLAGS.items()): if params.has_key('required') and arg not in self.INP: self.printErrorReqArgument(arg) return False self.INP_DATA = dict([key.lstrip("-").replace("-", "_"), val] for key, val in self.INP_DATA.items() ) return self.INP_DATA
def main(args=None): try: exit_status_code = 0 sys_argv = sys.argv[1:] if isinstance(args, list): sys_argv = args sys_argv = tools.decodeArgs(sys_argv) COMMAND = sys_argv[0] if len(sys_argv) >= 1 else None aparser = argparser(sys_argv) ARGS = aparser.parse() # Didn't read any command line arguments, and not attached # to an interactive tty? # If so, look for input on piped stream if COMMAND is None and not config.IS_IN_TERMINAL: COMMAND, ARGS = modifyArgsByStdinStream() if COMMAND is None: out.printAbout() # error or help if COMMAND is None or ARGS is False: return tools.exitErr() logging.debug("CLI options: %s", str(ARGS)) # Users if COMMAND == 'user': User().user(**ARGS) if COMMAND == 'login': User().login(**ARGS) if COMMAND == 'logout': User().logout(**ARGS) if COMMAND == 'settings': User().settings(**ARGS) # Notes if COMMAND == 'create': Notes().create(**ARGS) if COMMAND == 'edit': Notes().edit(**ARGS) if COMMAND == 'remove': Notes().remove(**ARGS) if COMMAND == 'show': Notes().show(**ARGS) if COMMAND == 'find': Notes().find(**ARGS) # Notebooks if COMMAND == 'notebook-list': Notebooks().list(**ARGS) if COMMAND == 'notebook-create': Notebooks().create(**ARGS) if COMMAND == 'notebook-edit': Notebooks().edit(**ARGS) if COMMAND == 'notebook-remove': Notebooks().remove(**ARGS) # Tags if COMMAND == 'tag-list': Tags().list(**ARGS) if COMMAND == 'tag-create': Tags().create(**ARGS) if COMMAND == 'tag-edit': Tags().edit(**ARGS) if COMMAND == 'tag-remove': Tags().remove(**ARGS) except (KeyboardInterrupt, SystemExit, tools.ExitException), e: if e.message: exit_status_code = e.message
def parse(self): self.INP_DATA = {} if self.CMD is None: out.printAbout() return False if self.CMD == "autocomplete": # подставляем аргументы для автозаполнения # делаем смещение на 1 аргумент, т.к. 1 это autocomplete self.__init__(self.sys_argv[1:]) self.printAutocomplete() return False if self.CMD == "--help": self.printHelp() return False if self.CMD not in self.COMMANDS: self.printErrorCommand() return False if "--help" in self.INP: self.printHelp() return False # prepare data for arg, params in (self.CMD_ARGS.items() + self.CMD_FLAGS.items()): # set values by default if 'default' in params: self.INP_DATA[arg] = params['default'] # replace `altName` entered arguments on full if 'altName' in params and params['altName'] in self.INP: self.INP[self.INP.index(params['altName'])] = arg activeArg = None ACTIVE_CMD = None # check and insert first argument by default if 'firstArg' in self.COMMANDS[self.CMD]: firstArg = self.COMMANDS[self.CMD]['firstArg'] if len(self.INP) > 0: # смотрим что первое знаение не аргумент по умолчанию, # а другой аргумент if self.INP[0] not in (self.CMD_ARGS.keys() + self.CMD_FLAGS.keys()): self.INP = [ firstArg, ] + self.INP else: self.INP = [ firstArg, ] for item in self.INP: # check what are waiting the argument if activeArg is None: # Действия для аргумента if item in self.CMD_ARGS: activeArg = item ACTIVE_CMD = self.CMD_ARGS[activeArg] # actions for the flag elif item in self.CMD_FLAGS: self.INP_DATA[item] = self.CMD_FLAGS[item]["value"] # error. parameter is not found else: self.printErrorArgument(item) return False else: activeArgTmp = None # values it is parameter if item in self.CMD_ARGS or item in self.CMD_FLAGS: # "Активный" аргумент имеет параметр emptyValue if "emptyValue" in ACTIVE_CMD: activeArgTmp = item # запоминаем новый "активный" аргумент item = ACTIVE_CMD[ 'emptyValue'] # подменяем значение на emptyValue # Ошибка, "активный" аргумент не имеет значений else: self.printErrorArgument(activeArg, item) return False if 'type' in ACTIVE_CMD: convType = ACTIVE_CMD['type'] if convType not in (int, str): logging.error("Unsupported argument type: %s", convType) return False try: item = convType(item) except: self.printErrorArgument(activeArg, item) return False self.INP_DATA[activeArg] = item activeArg = activeArgTmp # тут или пусто, или новый "активный" аргумент # если остались "активные" аршументы if activeArg is not None: # если есть параметр emptyValue if 'emptyValue' in ACTIVE_CMD: self.INP_DATA[activeArg] = ACTIVE_CMD['emptyValue'] # инече ошибка else: self.printErrorArgument(activeArg, "") return False # проверка, присутствует ли необходимый аргумент запросе for arg, params in (self.CMD_ARGS.items() + self.CMD_FLAGS.items()): if 'required' in params and arg not in self.INP: self.printErrorReqArgument(arg) return False # trim -- and ->_ self.INP_DATA = dict([key.lstrip("-").replace("-", "_"), val] for key, val in self.INP_DATA.items()) return self.INP_DATA