def scan_info(self,config,this,info,fullthis,fullinfo): """ Take a ConfigParser instance config and scan info into config.info. This is called recursively if needed. Parameters: config : the configuration object this : the current item to be parsed info : where this item is to go fullthis : the full name of this fullinfo : the full (top level) version of info. """ from eoldas_ConfFile import assoc_to_flat # find the keys in the top level # loop over thiss = np.array(this.split('.')) # just in case .. is used as separator ww = np.where(thiss != '') thiss = thiss[ww] nextone = '' for i in xrange(1,len(thiss)-1): nextone = nextone + thiss[i] + '.' if len(thiss) > 1: nextone = nextone + thiss[-1] # first, check if its already there if not hasattr(info,thiss[0]): info[thiss[0]] = ParamStorage() info[thiss[0]].helper = [] # load up the info if len(thiss) == 1: for option in config.options(fullthis): fulloption = option # option may have a '.' separated term as well options = np.array(option.split('.')) # tidy up any double dot stuff ww = np.where(options != '') options = options[ww] # need to iterate to make sure it is loaded # at the right level # of the hierachy this_info = info[this] # so now this_info is at the base for i in xrange(len(options)-1): if not hasattr(this_info,options[i]): this_info[options[i]] = ParamStorage() this_info[options[i]].helper = [] this_info = this_info[options[i]] option = options[-1] this_info[option] = array_type_convert(fullinfo,\ config.get(fullthis,fulloption)) if option[:6] == 'assoc_': noption = option[6:] this_info[noption] = assoc_to_flat(\ fullinfo.parameter.names,this_info[option],\ this_info[noption]) is_assoc = True else: is_assoc = False if not hasattr(this_info,'helper'): this_info.helper = [] ndot = len(fullthis.split('.')) pres = '' for i in xrange(1,ndot): pres += ' ' if type(this_info.helper) == str: this_info.helper += "\n%s%s.%-8s = %-8s" % \ (pres,fullthis,fulloption,str(this_info[option])) elif type(this_info.helper) == list: this_info.helper.append("%s%s.%-8s = %-8s" % \ (pres,fullthis,fulloption,\ str(this_info[option]))) if is_assoc: if type(this_info.helper) == str: this_info.helper += "\n%s%s.%-8s = %-8s" % \ (pres,fullthis,fulloption.replace\ ('assoc_',''),str(this_info[noption])) elif type(this_info.helper) == list: this_info.helper.append("%s%s.%-8s = %-8s" % \ (pres,fullthis,fulloption.replace\ ('assoc_',''),str(this_info[noption]))) else: self.scan_info(config,nextone,info[thiss[0]],fullthis,fullinfo) if thiss[-1][:6] == 'assoc_' and thiss[0] in fullinfo.dict(): # only do this operation when at the top level noption = thiss[-1][6:] option = thiss[-1] this_info = info fulloption = thiss[0] this_info = this_info[thiss[0]] for i in xrange(1,len(thiss)-1): this_info = this_info[thiss[i]] fulloption = '%s.%s' % (fulloption,thiss[i]) fulloption = '%s.%s' % (fulloption,noption) #this_info[noption] = assoc_to_flat(fullinfo.parameter.names\ # ,this_info[option],\ # this_info[noption]) if not 'names' in this_info.dict(): this_info.names = fullinfo.parameter.names if not option in this_info.dict(): this_info[option] = [0]*len(this_info.names) if not noption in this_info.dict(): this_info[noption] = [0]*len(this_info.names) this_info[noption] = assoc_to_flat(this_info.names\ ,this_info[option],\ this_info[noption]) ndot = len(fullthis.split('.')) pres = '' for i in xrange(1,ndot): pres += ' ' if type(this_info.helper) == str: this_info.helper += "\n%s%-8s = %-8s" % (pres,\ fulloption,str(this_info[noption])) elif type(this_info.helper) == list: this_info.helper.append("%s%-8s = %-8s" % (pres,\ fulloption,str(this_info[noption])))
def scan_info(self, config, this, info, fullthis, fullinfo): """ Take a ConfigParser instance config and scan info into config.info. This is called recursively if needed. Parameters: config : the configuration object this : the current item to be parsed info : where this item is to go fullthis : the full name of this fullinfo : the full (top level) version of info. """ from eoldas_ConfFile import assoc_to_flat # find the keys in the top level # loop over thiss = np.array(this.split('.')) # just in case .. is used as separator ww = np.where(thiss != '') thiss = thiss[ww] nextone = '' for i in xrange(1, len(thiss) - 1): nextone = nextone + thiss[i] + '.' if len(thiss) > 1: nextone = nextone + thiss[-1] # first, check if its already there if not hasattr(info, thiss[0]): info[thiss[0]] = ParamStorage() info[thiss[0]].helper = [] # load up the info if len(thiss) == 1: for option in config.options(fullthis): fulloption = option # option may have a '.' separated term as well options = np.array(option.split('.')) # tidy up any double dot stuff ww = np.where(options != '') options = options[ww] # need to iterate to make sure it is loaded # at the right level # of the hierachy this_info = info[this] # so now this_info is at the base for i in xrange(len(options) - 1): if not hasattr(this_info, options[i]): this_info[options[i]] = ParamStorage() this_info[options[i]].helper = [] this_info = this_info[options[i]] option = options[-1] this_info[option] = array_type_convert(fullinfo,\ config.get(fullthis,fulloption)) if option[:6] == 'assoc_': noption = option[6:] this_info[noption] = assoc_to_flat(\ fullinfo.parameter.names,this_info[option],\ this_info[noption]) is_assoc = True else: is_assoc = False if not hasattr(this_info, 'helper'): this_info.helper = [] ndot = len(fullthis.split('.')) pres = '' for i in xrange(1, ndot): pres += ' ' if type(this_info.helper) == str: this_info.helper += "\n%s%s.%-8s = %-8s" % \ (pres,fullthis,fulloption,str(this_info[option])) elif type(this_info.helper) == list: this_info.helper.append("%s%s.%-8s = %-8s" % \ (pres,fullthis,fulloption,\ str(this_info[option]))) if is_assoc: if type(this_info.helper) == str: this_info.helper += "\n%s%s.%-8s = %-8s" % \ (pres,fullthis,fulloption.replace\ ('assoc_',''),str(this_info[noption])) elif type(this_info.helper) == list: this_info.helper.append("%s%s.%-8s = %-8s" % \ (pres,fullthis,fulloption.replace\ ('assoc_',''),str(this_info[noption]))) else: self.scan_info(config, nextone, info[thiss[0]], fullthis, fullinfo) if thiss[-1][:6] == 'assoc_' and thiss[0] in fullinfo.dict(): # only do this operation when at the top level noption = thiss[-1][6:] option = thiss[-1] this_info = info fulloption = thiss[0] this_info = this_info[thiss[0]] for i in xrange(1, len(thiss) - 1): this_info = this_info[thiss[i]] fulloption = '%s.%s' % (fulloption, thiss[i]) fulloption = '%s.%s' % (fulloption, noption) #this_info[noption] = assoc_to_flat(fullinfo.parameter.names\ # ,this_info[option],\ # this_info[noption]) if not 'names' in this_info.dict(): this_info.names = fullinfo.parameter.names if not option in this_info.dict(): this_info[option] = [0] * len(this_info.names) if not noption in this_info.dict(): this_info[noption] = [0] * len(this_info.names) this_info[noption] = assoc_to_flat(this_info.names\ ,this_info[option],\ this_info[noption]) ndot = len(fullthis.split('.')) pres = '' for i in xrange(1, ndot): pres += ' ' if type(this_info.helper) == str: this_info.helper += "\n%s%-8s = %-8s" % (pres,\ fulloption,str(this_info[noption])) elif type(this_info.helper) == list: this_info.helper.append("%s%-8s = %-8s" % (pres,\ fulloption,str(this_info[noption])))