Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
    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
Пример #4
0
    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
Пример #5
0
    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
Пример #6
0
    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
Пример #7
0
    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
Пример #8
0
    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
Пример #9
0
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 '))