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)
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)
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)
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)
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")
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
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
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)
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
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
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)
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')
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')
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))
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))