Skip to content

Commit

Permalink
dev
Browse files Browse the repository at this point in the history
  • Loading branch information
stepler committed Jun 18, 2012
1 parent 595802a commit 686d591
Show file tree
Hide file tree
Showing 9 changed files with 429 additions and 335 deletions.
275 changes: 145 additions & 130 deletions argparser.py
Expand Up @@ -2,10 +2,9 @@

import sys
from log import logging
import io
import out


COMMANDS = {
COMMANDS_DICT = {
# User
"user": {
"help": "Create note",
Expand Down Expand Up @@ -85,150 +84,166 @@
}
},
}
class argparser(object):

COMMANDS = COMMANDS_DICT

def __init__(self, sys_argv):
self.LVL = len(sys_argv)
self.INPUT = sys_argv

#список команд
self.CMD_LIST = self.COMMANDS.keys()
# введенная команда
self.CMD = None if self.LVL == 0 else self.INPUT[0]
# список возможных аргументов введенной команды
self.CMD_ARGS = self.COMMANDS[self.CMD]['arguments'] if self.LVL > 0 and self.COMMANDS.has_key(self.CMD) and self.COMMANDS[self.CMD].has_key('arguments') else {}
# список возможных флагов введенной команды
self.CMD_FLAGS = self.COMMANDS[self.CMD]['flags'] if self.LVL > 0 and self.COMMANDS.has_key(self.CMD) and self.COMMANDS[self.CMD].has_key('flags') else {}
# список введенных аргументов и их значений
self.INP = [] if self.LVL <= 1 else self.INPUT[1:]

logging.debug("CMD_LIST : %s", str(self.CMD_LIST))
logging.debug("CMD: %s", str(self.CMD))
logging.debug("CMD_ARGS : %s", str(self.CMD_ARGS))
logging.debug("CMD_FLAGS : %s", str(self.CMD_FLAGS))
logging.debug("INP : %s", str(self.INP))

def parse(self):
self.INP_DATA = {}

if self.CMD == "--help":
return self.printHelp()

if self.CMD is None or not self.COMMANDS.has_key(self.CMD):
return self.printErrorCommand()

if "--help" in self.INP:
return self.printHelp()

# подготовка к парсингу
for arg, params in (self.CMD_ARGS.items() + self.CMD_FLAGS.items()):
# установка значений по умолчаеию
if params.has_key('default'):
self.INP_DATA[arg] = params['default']

activeArg = None
for item in self.INP:
# Проверяем что ожидаем аргумент
if activeArg is None:
# Действия для аргумента
if self.CMD_ARGS.has_key(item):
activeArg = item

# Действия для флага
elif self.CMD_FLAGS.has_key(item):
self.INP_DATA[item] = self.CMD_FLAGS[item]["value"]

# Ошибка параметр не найден
else:
return self.printErrorArgument(item)

LVL = len(sys.argv[1:])
INPUT = sys.argv[1:]
#список команд
CMD_LIST = COMMANDS.keys()
# введенная команда
CMD = None if LVL == 0 else INPUT[0]
# список возможных аргументов введенной команды
CMD_ARGS = COMMANDS[CMD]['arguments'] if LVL > 0 and COMMANDS.has_key(CMD) and COMMANDS[CMD].has_key('arguments') else {}
# список возможных флагов введенной команды
CMD_FLAGS = COMMANDS[CMD]['flags'] if LVL > 0 and COMMANDS.has_key(CMD) and COMMANDS[CMD].has_key('flags') else {}
# список введенных аргументов и их значений
INP = [] if LVL <= 1 else INPUT[1:]

logging.debug("CMD_LIST : %s", str(CMD_LIST))
logging.debug("CMD: %s", str(CMD))
logging.debug("CMD_ARGS : %s", str(CMD_ARGS))
logging.debug("CMD_FLAGS : %s", str(CMD_FLAGS))
logging.debug("INP : %s", str(INP))

def parse():
INP_DATA = {}

if CMD == "--help":
printHelp()

if CMD is None or not COMMANDS.has_key(CMD):
printErrorCommand()

if "--help" in INP:
printHelp()

# подготовка к парсингу
for arg, params in (CMD_ARGS.items() + CMD_FLAGS.items()):
# установка значений по умолчаеию
if params.has_key('default'):
INP_DATA[arg] = params['default']

# проверка, присутствует ли необходимый аргумент запросе
if params.has_key('required') and arg not in INP:
printErrorArgument(arg)

activeArg = None
for item in INP:
# Проверяем что ожидаем аргумент
if activeArg is None:
# Действия для аргумента
if CMD_ARGS.has_key(item):
activeArg = item

# Действия для флага
elif CMD_FLAGS.has_key(item):
INP_DATA[item] = CMD_FLAGS[item]["value"]

# Ошибка параметр не найден
else:
printErrorArgument(item)
# Ошибка значения является параметром
if self.CMD_ARGS.has_key(item) or self.CMD_FLAGS.has_key(item):
return self.printErrorArgument(activeArg, item)

else:
# Ошибка значения является параметром
if CMD_ARGS.has_key(item) or CMD_FLAGS.has_key(item):
printErrorArgument(activeArg, item)
self.INP_DATA[activeArg] = item
activeArg = None

if activeArg is not None:
return self.printErrorArgument(activeArg, "")

# проверка, присутствует ли необходимый аргумент запросе
for arg, params in (self.CMD_ARGS.items() + self.CMD_FLAGS.items()):
if params.has_key('required') and arg not in self.INP:
return self.printErrorReqArgument(arg)

INP_DATA[activeArg] = item
activeArg = None

if activeArg is not None:
printErrorArgument(activeArg, "")
# trim -- and ->_
self.INP_DATA = dict([key.lstrip("-").replace("-", "_"), val] for key, val in self.INP_DATA.items() )
return self.INP_DATA

# trim -- and ->_
INP_DATA = dict([key.lstrip("-").replace("-", "_"), val] for key, val in INP_DATA.items() )
return INP_DATA

def printAutocomplete(self):

def printAutocomplete():
def printGrid(list):
print " ".join(list)

def printGrid(list):
print " ".join(list)
# последнее веденное значение
LAST_VAL = self.INP[-1] if self.LVL > 1 else None
PREV_LAST_VAL = self.INP[-2] if self.LVL > 2 else None
ARGS_FLAGS_LIST = self.CMD_ARGS.keys()+self.CMD_FLAGS.keys()

# последнее веденное значение
LAST_VAL = INP[-1] if LVL > 1 else None
PREV_LAST_VAL = INP[-2] if LVL > 2 else None
ARGS_FLAGS_LIST = CMD_ARGS.keys()+CMD_FLAGS.keys()
# печатаем корневые команды
if self.CMD is None:
self.printGrid(CMD_LIST)

# печатаем корневые команды
if CMD is None:
printGrid(CMD_LIST)
# работа с корневыми командами
elif not self.INP:

# работа с корневыми командами
elif not INP:
# печатаем аргументы если команда найдена
if self.CMD in self.CMD_LIST:
self.printGrid(ARGS_FLAGS_LIST)

# печатаем аргументы если команда найдена
if CMD in CMD_LIST:
printGrid(ARGS_FLAGS_LIST)
# автозаполнение для неполной команды
else:
# фильтруем команды подходящие под введенный шаблон
self.printGrid([item for item in self.CMD_LIST if item.startswith(self.CMD)])

# автозаполнение для неполной команды
# обработка аргументов
else:
# фильтруем команды подходящие под введенный шаблон
printGrid([item for item in CMD_LIST if item.startswith(CMD)])

# обработка аргументов
else:
# фильтруем аргументы которые еще не ввели
if self.CMD_ARGS.has_key(PREV_LAST_VAL) or self.CMD_FLAGS.has_key(self.LAST_VAL) :
printGrid([item for item in ARGS_FLAGS_LIST if item not in INP])

# фильтруем аргументы которые еще не ввели
if CMD_ARGS.has_key(PREV_LAST_VAL) or CMD_FLAGS.has_key(LAST_VAL) :
printGrid([item for item in ARGS_FLAGS_LIST if item not in INP])
# автозаполнение для неполной команды
elif not self.CMD_ARGS.has_key(PREV_LAST_VAL):
self.printGrid([item for item in ARGS_FLAGS_LIST if item not in INP and item.startswith(LAST_VAL)])

# автозаполнение для неполной команды
elif not CMD_ARGS.has_key(PREV_LAST_VAL):
printGrid([item for item in ARGS_FLAGS_LIST if item not in INP and item.startswith(LAST_VAL)])
# обработка аргумента
else:
print "" #"Please_input_%s" % INP_ARG.replace('-', '')

def printErrorCommand(self):
out.printLine('Unexpected command "%s"' % (self.CMD))
self.printHelp()
return ['error-cmd', self.CMD]

def printErrorReqArgument(self, errorArg):
out.printLine('Not found required argument "%s" for command "%s" ' % (errorArg, self.CMD))
self.printHelp()
return ['error-req', self.CMD, errorArg]

def printErrorArgument(self, errorArg, errorVal=None):

if errorVal is None:
out.printLine('Unexpected argument "%s" for command "%s"' % (errorArg, self.CMD))
self.printHelp()
return ['error-arg', self.CMD, errorArg]

out.printLine('Unexpected value "%s" for argument "%s"' % (errorVal, errorArg))
self.printHelp()
return ['error-val', errorArg, errorVal]

def printHelp(self):
if self.CMD is None or not self.COMMANDS.has_key(self.CMD):
tab = len(max(self.COMMANDS.keys(), key=len))
out.printLine("Available commands:")
for cmd in self.COMMANDS:
out.printLine("%s : %s" % (cmd.rjust(tab, " "), self.COMMANDS[cmd]['help']))

# обработка аргумента
else:
print "" #"Please_input_%s" % INP_ARG.replace('-', '')

def printErrorCommand():
io.printLine('Unexpected command "%s"' % (CMD))
printHelp()

def printErrorArgument(errorArg, errorVal=None):

if errorVal is None:
io.printLine('Unexpected argument "%s" for command "%s"' % (errorArg, CMD))
else:
io.printLine('Unexpected value "%s" for argument "%s"' % (errorVal, errorArg))
printHelp()

def printHelp():
if CMD is None or not COMMANDS.has_key(CMD):
tab = len(max(COMMANDS.keys(), key=len))
io.printLine("Available commands:")
for cmd in COMMANDS:
io.printLine("%s : %s" % (cmd.rjust(tab, " "), COMMANDS[cmd]['help']))

else:

tab = len(max(CMD_ARGS.keys()+CMD_FLAGS.keys(), key=len))

io.printLine("Options for: %s" % CMD)
io.printLine("Avaible arguments:")
for arg in CMD_ARGS:
io.printLine("%s : %s" % (arg.rjust(tab, " "), CMD_ARGS[arg]['help']))

io.printLine("Avaible flags:")
for flag in CMD_FLAGS:
io.printLine("%s : %s" % (flag.rjust(tab, " "), CMD_FLAGS[flag]['help']))
exit(1)

tab = len(max(self.CMD_ARGS.keys()+self.CMD_FLAGS.keys(), key=len))

out.printLine("Options for: %s" % self.CMD)
out.printLine("Avaible arguments:")
for arg in self.CMD_ARGS:
out.printLine("%s : %s" % (arg.rjust(tab, " "), self.CMD_ARGS[arg]['help']))

out.printLine("Avaible flags:")
for flag in self.CMD_FLAGS:
out.printLine("%s : %s" % (flag.rjust(tab, " "), self.CMD_FLAGS[flag]['help']))
return ['help', ]
4 changes: 1 addition & 3 deletions geeknote.py
Expand Up @@ -30,7 +30,7 @@
CONSUMER_KEY = 'skaizer-1250'
CONSUMER_SECRET = 'ed0fcc0c97c032a5'

class GeekNote:
class GeekNote(object):

consumerKey = CONSUMER_KEY
consumerSecret = CONSUMER_SECRET
Expand All @@ -45,8 +45,6 @@ def __init__(self):
self.getStorage()
self.getUserStore()
self.checkVersion()

#io.preloader.setMessage('Check OAuth Token..')
self.checkAuth()

def getStorage(self):
Expand Down
4 changes: 2 additions & 2 deletions log.py
Expand Up @@ -4,5 +4,5 @@

FORMAT = "%(asctime)-15s %(module)s : %(message)s"
DEBUG_FORMAT = "%(filename)s %(funcName)s %(lineno)d : %(message)s"
logging.basicConfig(format=DEBUG_FORMAT, level=logging.DEBUG)
#logging.basicConfig(format=FORMAT)
#logging.basicConfig(format=DEBUG_FORMAT, level=logging.DEBUG)
logging.basicConfig(format=FORMAT)

0 comments on commit 686d591

Please sign in to comment.