def add_group(self,hcur,cur,k,v): cur[k] = HDFgroup() cur._add_group(k,cur[k]) cur._groups[k]._parent = cur self.increment_level() self.cur[self.ilevel] = cur._groups[k] self.hcur[self.ilevel] = hcur[k] cur = self.cur[self.ilevel] hcur = self.hcur[self.ilevel] for kr,v in hcur.iteritems(): k=cur._escape_name(kr) if valid_variable_name(k): vtype = str(type(v)) if vtype in HDFreader.datasets: self.add_dataset(cur,k,v) elif vtype in HDFreader.groups: self.add_group(hcur,cur,k,v) #end if else: print 'hdfreader warning: attribute '+k+' is not a valid variable name and has been ignored' #end if #end for return
def add_group(self, hcur, cur, k, v): cur[k] = HDFgroup() cur._add_group(k, cur[k]) cur._groups[k]._parent = cur self.increment_level() self.cur[self.ilevel] = cur._groups[k] self.hcur[self.ilevel] = hcur[k] cur = self.cur[self.ilevel] hcur = self.hcur[self.ilevel] for kr, v in hcur.iteritems(): k = cur._escape_name(kr) if valid_variable_name(k): vtype = str(type(v)) if vtype in HDFreader.datasets: self.add_dataset(cur, k, v) elif vtype in HDFreader.groups: self.add_group(hcur, cur, k, v) #end if else: print 'hdfreader warning: attribute ' + k + ' is not a valid variable name and has been ignored' #end if #end for return
def add_group(self, hcur, cur, k, v): cur[k] = HDFgroup() cur._add_group(k, cur[k]) cur._groups[k]._parent = cur self.increment_level() self.cur[self.ilevel] = cur._groups[k] self.hcur[self.ilevel] = hcur[k] cur = self.cur[self.ilevel] hcur = self.hcur[self.ilevel] for kr, v in hcur.items(): k = cur._escape_name(kr) if valid_variable_name(k): if isinstance(v, h5py.Dataset): self.add_dataset(cur, k, v) elif isinstance(v, h5py.Group): self.add_group(hcur, cur, k, v) #end if else: self.warn('attribute ' + k + ' is not a valid variable name and has been ignored') #end if #end for return
def __init__(self, fpath, verbose=False, view=False): HDFglobals.view = view if verbose: print(' Initializing HDFreader') #end if self.fpath = fpath if verbose: print(' loading h5 file') #end if try: self.hdf = h5py.File(fpath, 'r') except IOError: self._success = False self.hdf = obj(obj=obj()) else: self._success = True #end if if verbose: print(' converting h5 file to dynamic object') #end if #convert the hdf 'dict' into a dynamic object self.nlevels = 1 self.ilevel = 0 # Set the current hdf group self.obj = HDFgroup() self.cur = [self.obj] self.hcur = [self.hdf] if self._success: cur = self.cur[self.ilevel] hcur = self.hcur[self.ilevel] for kr, v in hcur.items(): k = cur._escape_name(kr) if valid_variable_name(k): if isinstance(v, h5py.Dataset): self.add_dataset(cur, k, v) elif isinstance(v, h5py.Group): self.add_group(hcur, cur, k, v) else: self.error('encountered invalid type: ' + str(type(v))) else: self.warn( 'attribute ' + k + ' is not a valid variable name and has been ignored') #end if #end for #end if if verbose: print(' end HDFreader Initialization') #end if return
def __init__(self,fpath,verbose=False,view=False): HDFglobals.view = view if verbose: print ' Initializing HDFreader' self.fpath=fpath if verbose: print ' loading h5 file' try: self.hdf = h5py.File(fpath,'r') except IOError: self._success = False self.hdf = obj(obj=obj()) else: self._success = True #end if if verbose: print ' converting h5 file to dynamic object' #convert the hdf 'dict' into a dynamic object self.nlevels=1 self.ilevel=0 # Set the current hdf group self.obj = HDFgroup() self.cur=[self.obj] self.hcur=[self.hdf] if self._success: cur = self.cur[self.ilevel] hcur = self.hcur[self.ilevel] for kr,v in hcur.iteritems(): k=cur._escape_name(kr) if valid_variable_name(k): vtype = str(type(v)) if vtype in HDFreader.datasets: self.add_dataset(cur,k,v) elif vtype in HDFreader.groups: self.add_group(hcur,cur,k,v) else: print 'hdfreader error: encountered invalid type: '+vtype sys.exit() #end if else: print 'hdfreader warning: attribute '+k+' is not a valid variable name and has been ignored' #end if #end for #end if if verbose: print ' end HDFreader Initialization' return
def __init__(self, fpath, verbose=False, view=False): HDFglobals.view = view if verbose: print ' Initializing HDFreader' self.fpath = fpath if verbose: print ' loading h5 file' try: self.hdf = h5py.File(fpath, 'r') except IOError: self._success = False self.hdf = obj(obj=obj()) else: self._success = True #end if if verbose: print ' converting h5 file to dynamic object' #convert the hdf 'dict' into a dynamic object self.nlevels = 1 self.ilevel = 0 # Set the current hdf group self.obj = HDFgroup() self.cur = [self.obj] self.hcur = [self.hdf] if self._success: cur = self.cur[self.ilevel] hcur = self.hcur[self.ilevel] for kr, v in hcur.iteritems(): k = cur._escape_name(kr) if valid_variable_name(k): vtype = str(type(v)) if vtype in HDFreader.datasets: self.add_dataset(cur, k, v) elif vtype in HDFreader.groups: self.add_group(hcur, cur, k, v) else: print 'hdfreader error: encountered invalid type: ' + vtype sys.exit() #end if else: print 'hdfreader warning: attribute ' + k + ' is not a valid variable name and has been ignored' #end if #end for #end if if verbose: print ' end HDFreader Initialization' return
def found_element_start(self, ename, attributes): cur = self.cur[self.ilevel] if ename in self.element_aliases.keys(): if self.element_aliases[ename].find('attributes') != -1: self.error('an alternative to exec is needed') #exec('name = '+self.element_aliases[ename]) else: name = self.element_aliases[ename] #end if else: name = ename #end if #alter the name if it is a python keyword name = cur._escape_name(name) if self.contract_names: name = name.lower().replace('-', '_') #end if if self.strip_prefix != None: if name.startswith(self.strip_prefix): name = name.split(self.strip_prefix)[1] #end if #end if # joinable = in joins and no attributes # if in elements and joinable: don't add # else if not in elements and joinable: add unnumbered # else if not in elements: add unnumbered # else: add numbered, if number==1: rename first element joinable = name in self.element_joins and len(list( attributes.keys())) == 0 epattern = re.compile(name + '\d+') in_elements = False for k in cur._elements.keys(): if epattern.match(k) or k == name: in_elements = True #end if #end for #in_elements = name in cur._elements.keys() if in_elements and joinable: #check if there is a previous unjoinable element w/ same name if len(cur._elements[name]._attributes) != 0: #rename the prior element as a numbered one nelements = cur._element_counts[name] if nelements == 1: #it should be the first one newname = name + str(1) cur[newname] = cur[name] cur._add_element(newname, cur[newname]) del cur._elements[name] del cur[name] else: self.error( 'prior unjoinable element is not the first\nthis should be impossible' ) #end if #add the joinable element as unnumbered # later joinable elements will be joined to this one cur[name] = XMLelement() cur._add_element(name, cur[name]) #end if elif not in_elements: #add unnumbered cur[name] = XMLelement() cur._add_element(name, cur[name]) cur._element_counts[name] = 1 else: #add in a numbered way nelements = cur._element_counts[name] if nelements == 1: #rename the first element newname = name + str(1) cur[newname] = cur[name] cur._add_element(newname, cur[newname]) del cur._elements[name] del cur[name] #end if nelements += 1 newname = name + str(nelements) cur[newname] = XMLelement() cur._add_element(newname, cur[newname]) cur._element_counts[name] = nelements name = newname #end if cur._elements[name]._parent = cur #mark change self.increment_level() self.cur[self.ilevel] = cur._elements[name] cur = self.cur[self.ilevel] for kraw, v in attributes.items(): if self.contract_names: k = kraw.lower().replace('-', '_') else: k = kraw #end if if valid_variable_name(k): kname = cur._escape_name(k) cur[kname] = v cur._add_xmlattribute(kname, cur[kname]) else: if self.warn: print('xmlreader warning: attribute ' + k + ' is not a valid variable name and has been ignored') #end if #end if #end for return
def found_element_start(self,ename,attributes): #print self.pad,name,attributes cur = self.cur[self.ilevel] if ename in self.element_aliases.keys(): if self.element_aliases[ename].find('attributes')!=-1: exec 'name = '+self.element_aliases[ename] else: name = self.element_aliases[ename] #end if else: name=ename #end if #alter the name if it is a python keyword name = cur._escape_name(name) if self.contract_names: name = name.lower().replace('-','_') #end if if self.strip_prefix!=None: if name.startswith(self.strip_prefix): name = name.split(self.strip_prefix)[1] #end if #end if # joinable = in joins and no attributes # if in elements and joinable: don't add # else if not in elements and joinable: add unnumbered # else if not in elements: add unnumbered # else: add numbered, if number==1: rename first element joinable = name in self.element_joins and len(attributes.keys())==0 epattern = re.compile(name+'\d+') in_elements=False for k in cur._elements.keys(): if epattern.match(k) or k==name: in_elements=True #end if #end for #in_elements = name in cur._elements.keys() if in_elements and joinable: #check if there is a previous unjoinable element w/ same name if len(cur._elements[name]._attributes)!=0: #rename the prior element as a numbered one nelements=cur._element_counts[name] if nelements==1: #it should be the first one newname = name+str(1) cur[newname]=cur[name] cur._add_element(newname,cur[newname]) del cur._elements[name] del cur[name] else: print 'prior unjoinable element is not the first' print ' this should be impossible, stopping' sys.exit() #end if #add the joinable element as unnumbered # later joinable elements will be joined to this one cur[name] = XMLelement() cur._add_element(name,cur[name]) #end if elif not in_elements: #add unnumbered cur[name] = XMLelement() cur._add_element(name,cur[name]) cur._element_counts[name]=1 else: #add in a numbered way nelements=cur._element_counts[name] if nelements==1: #rename the first element newname = name+str(1) cur[newname]=cur[name] cur._add_element(newname,cur[newname]) del cur._elements[name] del cur[name] #end if nelements+=1 newname = name + str(nelements) cur[newname] = XMLelement() cur._add_element(newname,cur[newname]) cur._element_counts[name]=nelements name = newname #end if cur._elements[name]._parent = cur #mark change self.increment_level() self.cur[self.ilevel] = cur._elements[name] cur = self.cur[self.ilevel] for kraw,v in attributes.iteritems(): if self.contract_names: k = kraw.lower().replace('-','_') else: k = kraw #end if if valid_variable_name(k): kname = cur._escape_name(k) cur[kname] = v cur._add_xmlattribute(kname,cur[kname]) else: if self.warn: print 'xmlreader warning: attribute '+k+' is not a valid variable name and has been ignored' #end if #end if #end for return
def test_valid_variable_name(): from superstring import valid_variable_name assert(valid_variable_name('valid_variable_name')) assert(valid_variable_name('_valid_variable_name')) assert(valid_variable_name('__valid_variable_name')) assert(valid_variable_name('valid_variable_name__')) assert(valid_variable_name('validVariableName')) assert(not valid_variable_name('invalid variable name')) assert(not valid_variable_name('invalid_variable-name')) assert(not valid_variable_name('inval!d_variable_name')) assert(not valid_variable_name('inv@lid_variable_name')) assert(not valid_variable_name('in>alid_variable_name')) assert(not valid_variable_name('invalid_variable_name '))