Viewing file: Arguments.py (3.45 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
######################################################################## # $Header: /var/local/cvsroot/4Suite/Ft/Lib/CommandLine/Arguments.py,v 1.4 2005/04/13 23:41:04 jkloth Exp $ """ Classes that support advanced arg processing for command-line scripts
Copyright 2004 Fourthought, Inc. (USA). Detailed license and copyright information: http://4suite.org/COPYRIGHT Project home, documentation, distributions: http://4suite.org/ """
from CommandLineUtil import ArgumentError
REQUIRED = 1 OPTIONAL = 2 ZERO_OR_MORE = 3 ONE_OR_MORE = 4
class Argument: def __init__(self, name, description, validationFunc=None): self.name = name self.description = description self.validationFunc = validationFunc or (lambda x: x) return
class RequiredArgument(Argument): requirements = REQUIRED
def gen_command_line(self): return self.name
def validate(self,cmd,args): #Just the first if not len(args): raise ArgumentError(cmd, "missing required argument '%s'" % self.name) return self.validationFunc(args[0]),args[1:]
class OptionalArgument(Argument): requirements = OPTIONAL
def gen_command_line(self): return "[%s]" % (self.name)
def validate(self,cmd,args): #Just the first, maybe if len(args): return self.validationFunc(args[0]),args[1:] return None,[]
class ZeroOrMoreArgument(Argument): requirements = ZERO_OR_MORE
def gen_command_line(self): return "[%s]..." % (self.name)
def validate(self,cmd,args): #We take the rest eaten = map(lambda x,f=self.validationFunc:f(x),args) return eaten,[]
class OneOrMoreArgument(Argument): requirements = ONE_OR_MORE def gen_command_line(self): return "%s [%s]..." % (self.name, self.name)
def validate(self,cmd,args): #We take the rest if not len(args): raise ArgumentError(cmd, "missing required argument '%s'" % self.name) eaten = map(lambda x,f=self.validationFunc:f(x),args) return eaten,[]
## for cur_arg in cmd_args: ## if cur_arg[2] == '.': ## #A required arg ## if not len(cl_args): ## resArgs[cur_arg[0]] = self._translate_args(cur_arg[3],cur_arg[0],[cl_args[0]])[0] ## cl_args = cl_args[1:] ## elif cur_arg[2] == '?': ## if len(cl_args): ## resArgs[cur_arg[0]] = self._translate_args(cur_arg[3],cur_arg[0],[cl_args[0]])[0] ## cl_args = cl_args[1:] ## elif cur_arg[2] == '+': ## if not len(cl_args): ## raise ArgumentError("missing required argument '%s'" % cur_arg[0]) ## resArgs[cur_arg[0]] = self._translate_args(cur_arg[3],cur_arg[0],cl_args) ## cl_args = []
## elif cur_arg[2] == '*': ## resArgs[cur_arg[0]] = self._translate_args(cur_arg[3],cur_arg[0],cl_args) ## cl_args = [] ## command[2] = resArgs ## return 1
## def _translate_args(self,func,name,args): ## res = [] ## for arg in args: ## try: ## res.append(func(arg)) ## except: ## #import traceback ## #traceback.print_exc() ## raise ArgumentError('failed conversion for %s (%s)' % (arg, name)) ## return res
|