|
|
- import configparser
- import os
- import argparse
-
- def readConfig(configFilePath):
- config = configparser.ConfigParser()
-
- if os.path.isfile(configFilePath):
- config.read(configFilePath)
-
- return config
-
- class ArgParser:
- def __init__(self):
- self.__flags = {}
- self.__parser = argparse.ArgumentParser()
- self.__instanceDirArgSet = False
- self.__config = None
- self.__parsedArgs = {}
-
- def addArg(self, alias,
- shortFlag,
- longFlag,
- help,
- type,
- default=None,
- ignoreDatabaseConfig=False):
-
- self.__flags[alias] = {"longFlag": longFlag,
- "hasDefault": False,
- "ignoreDatabaseConfig": ignoreDatabaseConfig}
-
- if default != None:
- self.__flags[alias]["hasDefault"] = True
-
- self.__parser.add_argument("-%s" % shortFlag,
- "--%s" % longFlag,
- help=help,
- type=type,
- default=default)
-
- def addInstanceDirArg(self):
- self.__instanceDirArgSet = True
-
- self.addArg(alias="datasetDir", shortFlag="d", longFlag="dataset_dir",
- help="the base direcotry of the dataset; if this flag is given the others can be omitted",
- type=str, ignoreDatabaseConfig=True)
-
-
- def parse(self):
- self.__parsedArgs = {}
- args = vars(self.__parser.parse_args())
-
- if self.__instanceDirArgSet:
- self.__config = readConfig(os.path.join(args["dataset_dir"],
- "dataset.config"))
-
- self.__parseDatasetConfig()
-
- for alias, flag in self.__flags.items():
- self.__parsedArgs[alias] = self.__processFlag(args, flag)
-
- self.__config = None
-
- return self.__parsedArgs
-
- def __parseDatasetConfig(self):
- for flag, value in self.__config["STRUCTURE"].items():
- self.__parsedArgs[flag] = value
-
- def __processFlag(self, args, flag):
- longFlag = flag["longFlag"]
-
- tmpValue = self.__parsedArgs[longFlag] if longFlag in self.__parsedArgs else None
-
- if flag["ignoreDatabaseConfig"] == True:
- tmpValue = None
-
- if args[longFlag]:
- tmpValue = args[longFlag]
-
- if tmpValue == None:
- tmpValue == input("pass arguement %s: " % longFlag)
-
- return tmpValue
-
|