diff options
Diffstat (limited to 'lldb/scripts/utilsArgsParse.py')
-rw-r--r-- | lldb/scripts/utilsArgsParse.py | 248 |
1 files changed, 123 insertions, 125 deletions
diff --git a/lldb/scripts/utilsArgsParse.py b/lldb/scripts/utilsArgsParse.py index fa4661e45a2..e762edccc30 100644 --- a/lldb/scripts/utilsArgsParse.py +++ b/lldb/scripts/utilsArgsParse.py @@ -1,141 +1,139 @@ """ Utility module handle program args and give help - -------------------------------------------------------------------------- - File: utilsArgsParse.py - - Overview: Python module to parse and validate program parameters - against those required by the program whether mandatory - or optional. - Also give help information on arguments required by the - program. - - Gotchas: None. - - Copyright: None. - -------------------------------------------------------------------------- - + -------------------------------------------------------------------------- + File: utilsArgsParse.py + + Overview: Python module to parse and validate program parameters + against those required by the program whether mandatory + or optional. + Also give help information on arguments required by the + program. + + Gotchas: None. + + Copyright: None. + -------------------------------------------------------------------------- + """ # Python modules: -import sys # Provide argument parsing -import getopt # Parse command line arguments +import getopt # Parse command line arguments # Third party modules: # In-house modules: -import utilsOsType # Determine the OS type this script is running on # Instantiations: # User facing text: -strMsgErrorInvalidParameters = "Invalid parameters entered, -h for help. \nYou entered:\n"; -strMsgErrorInvalidNoParams = "No parameters entered, -h for help\n"; -strMsgErrorNumberParameters = "Number of parameters entered incorrect, %d parameters required. You entered:\n"; -strMsgArgFileNotImplemented = "Sorry the --argFile is not implemented"; +strMsgErrorInvalidParameters = "Invalid parameters entered, -h for help. \nYou entered:\n" +strMsgErrorInvalidNoParams = "No parameters entered, -h for help\n" +strMsgErrorNumberParameters = "Number of parameters entered incorrect, %d parameters required. You entered:\n" +strMsgArgFileNotImplemented = "Sorry the --argFile is not implemented" #++--------------------------------------------------------------------------- -# Details: Validate the arguments passed in against the mandatory and -# optional arguments specified. The argument format for the parameters -# is required to work with the module getopt function getopt(). -# Parameter vDictArgReq specifies which parameters are mandatory and -# which are optional. The format is for example: -# dictArgReq = { "-h": "o", # o = optional, m = mandatory -# "-m": "m", -# "--targetDir": "m", -# "--cfgBldDir": "o" }; -# Args: vArgv - (R) List of arguments and values. -# vstrListArgs - (R) List of small arguments. -# vListLongArgs - (R) List of long arguments. -# vDictArgReq - (R) Map of arguments required. -# vstrHelpInfo - (R) Formatted help text. -# Returns: Int - 0 success. -# 1 success display information, do nothing else. -# -1 error invalid parameters. -# -2 error incorrect number of mandatory parameters. -# Dict - Map of arguments names to argument values -# Str - Error message. -# Throws: None. +# Details: Validate the arguments passed in against the mandatory and +# optional arguments specified. The argument format for the parameters +# is required to work with the module getopt function getopt(). +# Parameter vDictArgReq specifies which parameters are mandatory and +# which are optional. The format is for example: +# dictArgReq = {"-h": "o", # o = optional, m = mandatory +# "-m": "m", +# "--targetDir": "m", +# "--cfgBldDir": "o" } +# Args: vArgv - (R) List of arguments and values. +# vstrListArgs - (R) List of small arguments. +# vListLongArgs - (R) List of long arguments. +# vDictArgReq - (R) Map of arguments required. +# vstrHelpInfo - (R) Formatted help text. +# Returns: Int - 0 success. +# 1 success display information, do nothing else. +# -1 error invalid parameters. +# -2 error incorrect number of mandatory parameters. +# Dict - Map of arguments names to argument values +# Str - Error message. +# Throws: None. #-- -def parse( vArgv, vstrListArgs, vListLongArgs, vDictArgReq, vstrHelpInfo ): - dictArgs = {}; - dictDummy = {}; - strDummy = ""; - - # Validate parameters above and error on not recognised - try: - dictOptsNeeded, dictArgsLeftOver = getopt.getopt( vArgv, - vstrListArgs, - vListLongArgs ); - except getopt.GetoptError: - strMsg = strMsgErrorInvalidParameters; - strMsg += str( vArgv ); - return (-1, dictDummy, strMsg); - - if len( dictOptsNeeded ) == 0: - strMsg = strMsgErrorInvalidNoParams; - return (-1, dictDummy, strMsg); - - # Look for help -h before anything else - for opt, arg in dictOptsNeeded: - if opt == '-h': - return (1, dictDummy, vstrHelpInfo ); - - # Look for the --argFile if found ignore other command line arguments - for opt, arg in dictOptsNeeded: - if opt == '--argsFile': - return (1, dictDummy, strMsgArgFileNotImplemented); - - # Count the number of mandatory args required (if any one found) - countMandatory = 0; - for opt, man in list(vDictArgReq.items()): - if man == "m": - countMandatory = countMandatory + 1; - - # Extract short args - listArgs = []; - for arg in vstrListArgs: - if (arg == '-h') or (arg == ':'): - continue; - listArgs.append( arg ); - - # Append to arg dictionary the option and its value - bFoundNoInputValue = False; - countMandatoryOpts = 0; - for opt, val in dictOptsNeeded: - match = 0; - for arg in listArgs: - argg = "-" + arg; - if opt == argg: - if "m" == vDictArgReq[ opt ]: - countMandatoryOpts = countMandatoryOpts + 1; - dictArgs[ opt ] = val; - match = 1; - break; - if match == 0: - for arg in vListLongArgs: - argg = "--" + arg[:arg.__len__() - 1]; - if opt == argg: - if "m" == vDictArgReq[ opt ]: - countMandatoryOpts = countMandatoryOpts + 1; - dictArgs[ opt ] = val; - if val.__len__() == 0: - bFoundNoInputValue = True; - break; - - # Do any of the long arguments not have a value attached - if bFoundNoInputValue: - strMsg = strMsgErrorInvalidParameters; - strMsg += str( vArgv ); - return (-1, dictDummy, strMsg); - - # Debug only - #print countMandatoryOpts - #print countMandatory - - # Do we have the exact number of mandatory arguments - if (countMandatoryOpts > 0) and (countMandatory != countMandatoryOpts): - strMsg = strMsgErrorNumberParameters % countMandatory; - strMsg += str( vArgv ); - return (-2, dictDummy, strMsg); - - return (0, dictArgs, strDummy); +def parse(vArgv, vstrListArgs, vListLongArgs, vDictArgReq, vstrHelpInfo): + dictArgs = {} + dictDummy = {} + strDummy = "" + + # Validate parameters above and error on not recognised + try: + dictOptsNeeded, dictArgsLeftOver = getopt.getopt(vArgv, + vstrListArgs, + vListLongArgs) + except getopt.GetoptError: + strMsg = strMsgErrorInvalidParameters + strMsg += str(vArgv) + return (-1, dictDummy, strMsg) + + if len(dictOptsNeeded) == 0: + strMsg = strMsgErrorInvalidNoParams + return (-1, dictDummy, strMsg) + + # Look for help -h before anything else + for opt, arg in dictOptsNeeded: + if opt == '-h': + return (1, dictDummy, vstrHelpInfo) + + # Look for the --argFile if found ignore other command line arguments + for opt, arg in dictOptsNeeded: + if opt == '--argsFile': + return (1, dictDummy, strMsgArgFileNotImplemented) + + # Count the number of mandatory args required (if any one found) + countMandatory = 0 + for opt, man in list(vDictArgReq.items()): + if man == "m": + countMandatory = countMandatory + 1 + + # Extract short args + listArgs = [] + for arg in vstrListArgs: + if (arg == '-h') or (arg == ':'): + continue + listArgs.append(arg) + + # Append to arg dictionary the option and its value + bFoundNoInputValue = False + countMandatoryOpts = 0 + for opt, val in dictOptsNeeded: + match = 0 + for arg in listArgs: + argg = "-" + arg + if opt == argg: + if "m" == vDictArgReq[opt]: + countMandatoryOpts = countMandatoryOpts + 1 + dictArgs[opt] = val + match = 1 + break + if match == 0: + for arg in vListLongArgs: + argg = "--" + arg[:arg.__len__() - 1] + if opt == argg: + if "m" == vDictArgReq[opt]: + countMandatoryOpts = countMandatoryOpts + 1 + dictArgs[opt] = val + if val.__len__() == 0: + bFoundNoInputValue = True + break + + # Do any of the long arguments not have a value attached + if bFoundNoInputValue: + strMsg = strMsgErrorInvalidParameters + strMsg += str(vArgv) + return (-1, dictDummy, strMsg) + + # Debug only + #print countMandatoryOpts + #print countMandatory + + # Do we have the exact number of mandatory arguments + if (countMandatoryOpts > 0) and (countMandatory != countMandatoryOpts): + strMsg = strMsgErrorNumberParameters % countMandatory + strMsg += str(vArgv) + return (-2, dictDummy, strMsg) + + return (0, dictArgs, strDummy) |