Пример #1
0
    def test_fst_edit_dir_npas_keepdateo(self):
        """Changing npas with keepdate in fst_edit_dir should update datev accordingly"""
        
        [ref_file, new_file] = self.copy_file()

        #Compare before
        [datev,  dateo,  deet,  npas]  = self.read_dateo_npas(ref_file,vname)
        [datev1, dateo1, deet1, npas1] = self.read_dateo_npas(new_file,vname)

        self.assertEqual(deet,deet1)
        self.assertEqual(npas,npas1)
        self.assertEqual(datev,datev1)
        self.assertEqual(dateo,dateo1)
        
        #Edit npas in ref_file
        [datev,  dateo,  deet,  npas]  = self.read_dateo_npas(ref_file,vname)
        npas2 = npas+1
        dateo2 = dateo
        datev2 = rmn.incdatr(datev,deet/3600.)

        fnew = rmn.fstopenall(new_file, rmn.FST_RW)
        key  = rmn.fstinf(fnew, nomvar=vname)['key']
        rmn.fst_edit_dir(key, npas=npas2,keep_dateo=True)
        rmn.fstcloseall(fnew)

        #Compare after
        [datev,  dateo,  deet,  npas]  = self.read_dateo_npas(ref_file,vname)
        [datev1, dateo1, deet1, npas1] = self.read_dateo_npas(new_file,vname)
        
        self.assertEqual(deet,deet1)
        self.assertEqual(npas2,npas1)
        self.assertNotEqual(datev,datev1)
        self.assertEqual(datev2,datev1)
        self.assertEqual(dateo,dateo1)
        self.assertEqual(dateo2,dateo1)
Пример #2
0
    def test_fst_edit_dir_dateo(self):
        """Changing dateo with fst_edit_dir should update datev accordingly"""
        
        [ref_file, new_file] = self.copy_file()

        #Compare before
        [datev,  dateo,  deet,  npas]  = self.read_dateo_npas(ref_file,vname)
        [datev1, dateo1, deet1, npas1] = self.read_dateo_npas(new_file,vname)

        self.assertEqual(deet,deet1)
        self.assertEqual(npas,npas1)
        self.assertEqual(datev,datev1)
        self.assertEqual(dateo,dateo1)
        
        #Edit dateo in ref_file
        [datev,  dateo,  deet,  npas]  = self.read_dateo_npas(ref_file,vname)
        dateo2 = rmn.incdatr(dateo,1.)
        datev2 = rmn.incdatr(datev,1.)

        fnew = rmn.fstopenall(new_file, rmn.FST_RW)
        key  = rmn.fstinf(fnew, nomvar=vname)['key']
        rmn.fst_edit_dir(key, dateo=dateo2)
        rmn.fstcloseall(fnew)

        #Compare after
        [datev,  dateo,  deet,  npas]  = self.read_dateo_npas(ref_file,vname)
        [datev1, dateo1, deet1, npas1] = self.read_dateo_npas(new_file,vname)
        
        self.assertEqual(deet,deet1)
        self.assertEqual(npas,npas1)
        self.assertNotEqual(datev,datev1)
        self.assertEqual(datev2,datev1)
        self.assertNotEqual(dateo,dateo1)
        self.assertEqual(dateo2,dateo1)
Пример #3
0
    def test_fst_edit_dir_dateo(self):
        """Changing dateo with fst_edit_dir should update datev accordingly"""

        [ref_file, new_file] = self.copy_file()

        #Compare before
        [datev, dateo, deet, npas] = self.read_dateo_npas(ref_file, vname)
        [datev1, dateo1, deet1, npas1] = self.read_dateo_npas(new_file, vname)

        self.assertEqual(deet, deet1)
        self.assertEqual(npas, npas1)
        self.assertEqual(datev, datev1)
        self.assertEqual(dateo, dateo1)

        #Edit dateo in ref_file
        [datev, dateo, deet, npas] = self.read_dateo_npas(ref_file, vname)
        dateo2 = rmn.incdatr(dateo, 1.)
        datev2 = rmn.incdatr(datev, 1.)

        fnew = rmn.fstopenall(new_file, rmn.FST_RW)
        key = rmn.fstinf(fnew, nomvar=vname)['key']
        rmn.fst_edit_dir(key, dateo=dateo2)
        rmn.fstcloseall(fnew)

        #Compare after
        [datev, dateo, deet, npas] = self.read_dateo_npas(ref_file, vname)
        [datev1, dateo1, deet1, npas1] = self.read_dateo_npas(new_file, vname)

        self.assertEqual(deet, deet1)
        self.assertEqual(npas, npas1)
        self.assertNotEqual(datev, datev1)
        self.assertEqual(datev2, datev1)
        self.assertNotEqual(dateo, dateo1)
        self.assertEqual(dateo2, dateo1)
Пример #4
0
    def test_fst_edit_dir_npas_keepdateo(self):
        """Changing npas with keepdate in fst_edit_dir should update datev accordingly"""

        [ref_file, new_file] = self.copy_file()

        #Compare before
        [datev, dateo, deet, npas] = self.read_dateo_npas(ref_file, vname)
        [datev1, dateo1, deet1, npas1] = self.read_dateo_npas(new_file, vname)

        self.assertEqual(deet, deet1)
        self.assertEqual(npas, npas1)
        self.assertEqual(datev, datev1)
        self.assertEqual(dateo, dateo1)

        #Edit npas in ref_file
        [datev, dateo, deet, npas] = self.read_dateo_npas(ref_file, vname)
        npas2 = npas + 1
        dateo2 = dateo
        datev2 = rmn.incdatr(datev, deet / 3600.)

        fnew = rmn.fstopenall(new_file, rmn.FST_RW)
        key = rmn.fstinf(fnew, nomvar=vname)['key']
        rmn.fst_edit_dir(key, npas=npas2, keep_dateo=True)
        rmn.fstcloseall(fnew)

        #Compare after
        [datev, dateo, deet, npas] = self.read_dateo_npas(ref_file, vname)
        [datev1, dateo1, deet1, npas1] = self.read_dateo_npas(new_file, vname)

        self.assertEqual(deet, deet1)
        self.assertEqual(npas2, npas1)
        self.assertNotEqual(datev, datev1)
        self.assertEqual(datev2, datev1)
        self.assertEqual(dateo, dateo1)
        self.assertEqual(dateo2, dateo1)
Пример #5
0
def fst_edit_dir(ihandle, date, deet, npas, ni, nj, nk, ip1, ip2, ip3, typvar, nomvar, etiket, grtyp, ig1, ig2, ig3, ig4, datyp):
    """Rewrite the parameters of an rec on file, data part is unchanged (Interface to fst_edit_dir)
    Fstdc.fst_edit_dir(ihandle, date, deet, npas, ni, nj, nk, ip1, ip2, ip3, typvar, nomvar, etiket, grtyp, ig1, ig2, ig3, ig4, datyp)
    @param ihandle record handle (int)
    @param ... 
    @exception TypeError
    @exception Fstdc.error
    """
    try:
        _rmn.fst_edit_dir(ihandle, date, deet, npas, ni, nj, nk, ip1, ip2, ip3, typvar, nomvar, etiket, grtyp, ig1, ig2, ig3, ig4, datyp)
    except:
        raise error("fst_edit_dir: probleme updating rec meta")
Пример #6
0
def fst_edit_dir(ihandle, date, deet, npas, ni, nj, nk, ip1, ip2, ip3, typvar, nomvar, etiket, grtyp, ig1, ig2, ig3, ig4, datyp):
    """Rewrite the parameters of an rec on file, data part is unchanged (Interface to fst_edit_dir)
    Fstdc.fst_edit_dir(ihandle, date, deet, npas, ni, nj, nk, ip1, ip2, ip3, typvar, nomvar, etiket, grtyp, ig1, ig2, ig3, ig4, datyp)
    @param ihandle record handle (int)
    @param ... 
    @exception TypeError
    @exception Fstdc.error
    """
    try:
        _rmn.fst_edit_dir(ihandle, date, deet, npas, ni, nj, nk, ip1, ip2, ip3, typvar, nomvar, etiket, grtyp, ig1, ig2, ig3, ig4, datyp)
    except:
        raise error("fst_edit_dir: probleme updating rec meta")
Пример #7
0
 def test_21qd(self):
     import sys, os, os.path, stat, shutil
     import rpnpy.librmn.all as rmn
     fileName = 'geophy.fst'
     ATM_MODEL_DFILES = os.getenv('ATM_MODEL_DFILES').strip()
     fileName0 = os.path.join(ATM_MODEL_DFILES, 'bcmk', fileName)
     shutil.copyfile(fileName0, fileName)
     st = os.stat(fileName)
     os.chmod(fileName, st.st_mode | stat.S_IWRITE)
     fileId = rmn.fstopenall(fileName, rmn.FST_RW_OLD)
     rmn.fst_edit_dir(rmn.fstinl(fileId), etiket='MY_NEW_ETK')
     rmn.fstcloseall(fileId)
     os.unlink(fileName)  # Remove test file
Пример #8
0
 def test_21qd(self):
     import sys, os, os.path, stat, shutil
     import rpnpy.librmn.all as rmn
     fileName  = 'geophy.fst'
     ATM_MODEL_DFILES = os.getenv('ATM_MODEL_DFILES').strip()
     fileName0 = os.path.join(ATM_MODEL_DFILES,'bcmk',fileName)
     shutil.copyfile(fileName0, fileName)
     st = os.stat(fileName)
     os.chmod(fileName, st.st_mode | stat.S_IWRITE)
     fileId = rmn.fstopenall(fileName, rmn.FST_RW_OLD)
     rmn.fst_edit_dir(rmn.fstinl(fileId), etiket='MY_NEW_ETK')
     rmn.fstcloseall(fileId)
     os.unlink(fileName)  # Remove test file
Пример #9
0
    def test_4(self):
        """
        Change record metadata

        You can change the metadata of a record in an FSTD file in place (a la Editfst's zap function) with a simple call to
        fst_edit_dir. No need to write the record in another file.
        All parameters not specified in the call will be kept to their present value.
        
        See also:
        rpnpy.librmn.fstd98.fstopenall
        rpnpy.librmn.fstd98.fstinf
        rpnpy.librmn.fstd98.fstinl
        rpnpy.librmn.fstd98.fstprm
        rpnpy.librmn.fstd98.fst_edit_dir
        rpnpy.librmn.fstd98.fstcloseall
        rpnpy.librmn.fstd98.FSTDError
        rpnpy.librmn.RMNError
        rpnpy.librmn.const
        """
        import os, os.path, stat, shutil
        import rpnpy.librmn.all as rmn

        # Take an editable copy of the file
        ATM_MODEL_DFILES = os.getenv('ATM_MODEL_DFILES')
        fileName0 = os.path.join(ATM_MODEL_DFILES.strip(),
                                 'bcmk/2009042700_012')
        fileName = 'some_rpnstd_file.fst'
        shutil.copyfile(fileName0, fileName)
        st = os.stat(fileName)
        os.chmod(fileName, st.st_mode | stat.S_IWRITE)

        # Change nomvar for the PR record
        try:
            fileId = rmn.fstopenall(fileName, rmn.FST_RW)
            pr_key = rmn.fstinf(
                fileId, nomvar='PR')['key']  #Match the first record named PR
            if pr_key:
                rmn.fst_edit_dir(
                    pr_key, nomvar='PR0',
                    ip2=0)  #Rename the field to PR0 and set ip2 to 0 (zero)
        except:
            raise rmn.FSTDError("Problem editing record meta in File: %s" %
                                fileName)

        # Close
        rmn.fstcloseall(fileId)

        # Erase test file
        os.unlink(fileName)
Пример #10
0
    def test_21(self):
        """
        Edit: In-Place Record Meta Edition (a la editfst zap w/o copy)
        
        This example shows how to
        * select records in a RPNStd file
        * edit in place their metadata

        See also:
        rpnpy.librmn.fstd98.fstopenall
        rpnpy.librmn.fstd98.fstcloseall
        rpnpy.librmn.fstd98.fst_edit_dir
        rpnpy.librmn.fstd98.fsteff
        rpnpy.librmn.const
        """
        import sys, os, os.path, stat, shutil
        import rpnpy.librmn.all as rmn

        # Copy a file locally to be able to edit it and set write permission
        fileName = 'geophy.fst'
        ATM_MODEL_DFILES = os.getenv('ATM_MODEL_DFILES').strip()
        fileName0 = os.path.join(ATM_MODEL_DFILES, 'bcmk', fileName)
        shutil.copyfile(fileName0, fileName)
        st = os.stat(fileName)
        os.chmod(fileName, st.st_mode | stat.S_IWRITE)

        # Open existing file in Rear/Write mode
        try:
            fileId = rmn.fstopenall(fileName, rmn.FST_RW_OLD)
        except:
            sys.stderr.write("Problem opening the file: %s\n" % fileName)
            sys.exit(1)

        try:
            # Get the list of all records key in file
            keylist = rmn.fstinl(fileId)

            # Iterate implicitely on list of records to change the etiket
            rmn.fst_edit_dir(keylist, etiket='MY_NEW_ETK')
        except:
            pass
        finally:
            # Properly close files even if an error occured above
            # This is important when editing to avoid corrupted files
            rmn.fstcloseall(fileId)
            os.unlink(fileName)  # Remove test file
Пример #11
0
    def test_21(self):
        """
        Edit: In-Place Record Meta Edition (a la editfst zap w/o copy)
        
        This example shows how to
        * select records in a RPNStd file
        * edit in place their metadata

        See also:
        rpnpy.librmn.fstd98.fstopenall
        rpnpy.librmn.fstd98.fstcloseall
        rpnpy.librmn.fstd98.fst_edit_dir
        rpnpy.librmn.fstd98.fsteff
        rpnpy.librmn.const
        """
        import sys, os, os.path, stat, shutil
        import rpnpy.librmn.all as rmn
        
        # Copy a file locally to be able to edit it and set write permission
        fileName  = 'geophy.fst'
        ATM_MODEL_DFILES = os.getenv('ATM_MODEL_DFILES').strip()
        fileName0 = os.path.join(ATM_MODEL_DFILES,'bcmk',fileName)
        shutil.copyfile(fileName0, fileName)
        st = os.stat(fileName)
        os.chmod(fileName, st.st_mode | stat.S_IWRITE)

        # Open existing file in Rear/Write mode
        try:
            fileId = rmn.fstopenall(fileName, rmn.FST_RW_OLD)
        except:
            sys.stderr.write("Problem opening the file: %s\n" % fileName)
            sys.exit(1)

        try:        
            # Get the list of all records key in file
            keylist = rmn.fstinl(fileId)

            # Iterate implicitely on list of records to change the etiket
            rmn.fst_edit_dir(keylist, etiket='MY_NEW_ETK')
        except:
            pass
        finally:
            # Properly close files even if an error occured above
            # This is important when editing to avoid corrupted files
            rmn.fstcloseall(fileId)
            os.unlink(fileName)  # Remove test file
Пример #12
0
    def test_4(self):
        """
        Change record metadata

        You can change the metadata of a record in an FSTD file in place (a la Editfst's zap function) with a simple call to
        fst_edit_dir. No need to write the record in another file.
        All parameters not specified in the call will be kept to their present value.
        
        See also:
        rpnpy.librmn.fstd98.fstopenall
        rpnpy.librmn.fstd98.fstinf
        rpnpy.librmn.fstd98.fstinl
        rpnpy.librmn.fstd98.fstprm
        rpnpy.librmn.fstd98.fst_edit_dir
        rpnpy.librmn.fstd98.fstcloseall
        rpnpy.librmn.fstd98.FSTDError
        rpnpy.librmn.RMNError
        rpnpy.librmn.const
        """
        import os, os.path, stat, shutil
        import rpnpy.librmn.all as rmn

        # Take an editable copy of the file
        ATM_MODEL_DFILES = os.getenv('ATM_MODEL_DFILES')
        fileName0 = os.path.join(ATM_MODEL_DFILES.strip(), 'bcmk/2009042700_012')
        fileName = 'some_rpnstd_file.fst'
        shutil.copyfile(fileName0, fileName)
        st = os.stat(fileName)
        os.chmod(fileName, st.st_mode | stat.S_IWRITE)

        # Change nomvar for the PR record
        try:
            fileId = rmn.fstopenall(fileName, rmn.FST_RW)
            pr_key = rmn.fstinf(fileId, nomvar='PR')['key']    #Match the first record named PR
            if pr_key:
                rmn.fst_edit_dir(pr_key, nomvar='PR0', ip2=0)   #Rename the field to PR0 and set ip2 to 0 (zero)
        except:
            raise rmn.FSTDError("Problem editing record meta in File: %s" % fileName)
 
        # Close
        rmn.fstcloseall(fileId)

        # Erase test file
        os.unlink(fileName)
Пример #13
0
    def test_fsteditdir_list_rec(self):
        """fst_edit_dir accept list and dict as input"""
        rmn.fstopt(rmn.FSTOP_MSGLVL,rmn.FSTOPI_MSG_CATAST)
        (la,lo) = self.create_basefile() #wrote 2 recs in that order: la, lo
        funit   = rmn.fstopenall(self.fname,rmn.FST_RW)
        keylist = rmn.fstinl(funit)
        istat   = rmn.fst_edit_dir(keylist, etiket='MY_NEW_ETK')
        klo     = rmn.fstinf(funit,nomvar='LO')
        istat   = rmn.fst_edit_dir(klo, nomvar='QW')
        rmn.fstcloseall(funit)

        funit = rmn.fstopenall(self.fname,rmn.FST_RO)
        la = rmn.fstlir(funit,nomvar='LA')
        lo = rmn.fstlir(funit,nomvar='QW')
        rmn.fstcloseall(funit)
        self.erase_testfile()
        self.assertNotEqual(lo,None,'QW not found after rename: '+repr(klo))
        self.assertNotEqual(la['etiket'],'MY_NEW_ETK')
        self.assertNotEqual(lo['etiket'],'MY_NEW_ETK')
Пример #14
0
    def test_fsteditdir_list_rec(self):
        """fst_edit_dir accept list and dict as input"""
        rmn.fstopt(rmn.FSTOP_MSGLVL, rmn.FSTOPI_MSG_CATAST)
        (la, lo) = self.create_basefile()  #wrote 2 recs in that order: la, lo
        funit = rmn.fstopenall(self.fname, rmn.FST_RW)
        keylist = rmn.fstinl(funit)
        istat = rmn.fst_edit_dir(keylist, etiket='MY_NEW_ETK')
        klo = rmn.fstinf(funit, nomvar='LO')
        istat = rmn.fst_edit_dir(klo, nomvar='QW')
        rmn.fstcloseall(funit)

        funit = rmn.fstopenall(self.fname, rmn.FST_RO)
        la = rmn.fstlir(funit, nomvar='LA')
        lo = rmn.fstlir(funit, nomvar='QW')
        rmn.fstcloseall(funit)
        self.erase_testfile()
        self.assertNotEqual(lo, None,
                            'QW not found after rename: ' + repr(klo))
        self.assertNotEqual(la['etiket'], 'MY_NEW_ETK')
        self.assertNotEqual(lo['etiket'], 'MY_NEW_ETK')
Пример #15
0
    def test_fsteditdir_fsteff(self):
        """fst_edit_dir should give known result with known input"""
        rmn.fstopt(rmn.FSTOP_MSGLVL,rmn.FSTOPI_MSG_CATAST)
        (la,lo) = self.create_basefile() #wrote 2 recs in that order: la, lo
        funit = rmn.fstopenall(self.fname,rmn.FST_RW)
        kla = rmn.fstinf(funit,nomvar='LA')['key']
        klo = rmn.fstinf(funit,nomvar='LO')['key']
        istat = rmn.fst_edit_dir(klo,nomvar='QW')        
        istat = rmn.fsteff(kla)
        rmn.fstcloseall(funit)

        funit = rmn.fstopenall(self.fname,rmn.FST_RO)
        kla = rmn.fstinf(funit,nomvar='LA')
        klo = rmn.fstinf(funit,nomvar='QW')['key']
        rmn.fstcloseall(funit)
        self.erase_testfile()
        self.assertEqual(kla,None,'LA found after delete: '+repr(kla))
        self.assertNotEqual(klo,None,'QW not found after rename: '+repr(klo))
Пример #16
0
    def test_fsteditdir_fsteff(self):
        """fst_edit_dir should give known result with known input"""
        rmn.fstopt(rmn.FSTOP_MSGLVL, rmn.FSTOPI_MSG_CATAST)
        (la, lo) = self.create_basefile()  #wrote 2 recs in that order: la, lo
        funit = rmn.fstopenall(self.fname, rmn.FST_RW)
        kla = rmn.fstinf(funit, nomvar='LA')['key']
        klo = rmn.fstinf(funit, nomvar='LO')['key']
        istat = rmn.fst_edit_dir(klo, nomvar='QW')
        istat = rmn.fsteff(kla)
        rmn.fstcloseall(funit)

        funit = rmn.fstopenall(self.fname, rmn.FST_RO)
        kla = rmn.fstinf(funit, nomvar='LA')
        klo = rmn.fstinf(funit, nomvar='QW')['key']
        rmn.fstcloseall(funit)
        self.erase_testfile()
        self.assertEqual(kla, None, 'LA found after delete: ' + repr(kla))
        self.assertNotEqual(klo, None,
                            'QW not found after rename: ' + repr(klo))