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
|
|
|