def test_update_flags(): """Test update flags (xrf and master files)""" xref_fd = join('fixtures', 'testflag.xrf') db_fd = join('fixtures', 'testflag.mst') if exists(xref_fd): remove(xref_fd) if exists(db_fd): remove(db_fd) dbtest = MasterFile(db_fd) rec = MasterRecord() rec.update(test_data) rec.save(dbtest) xrf_rec = dbtest.xrf[1] assert xrf_rec.status == 'active' assert xrf_rec.status == 'active' assert xrf_rec.new_flag == True assert xrf_rec.modified_flag == False rec = dbtest[1] rec[27] = 'Test new field' rec.save(dbtest) assert xrf_rec.new_flag == False assert xrf_rec.modified_flag == True dbtest.invertdb(expr='70 0 MHU,(V70/)') assert xrf_rec.new_flag == False assert xrf_rec.modified_flag == False
def test_delete_record(): for ext in ('.mst', '.xrf'): fname = join("..", "sample", 'one%s' % ext) if exists(fname): remove(fname) mf = MasterFile(join("..", "sample", "one.mst")) rec = MasterRecord() rec["300"] = "XXXX" rec.save(mf) print rec del mf mf = MasterFile(join("..", "sample", "one.mst")) l1 = len(mf) mf.delete(1) mf.commit() del mf mf = MasterFile(join("..", "sample", "one.mst")) l2 = len(mf) del mf print "l1=" + str(l1) print "l2=" + str(l2) assert l2 == l1 - 1, "wrong number of active records after deleting record"
def test_resave_record(): for ext in ('.mst', '.xrf'): fname = join("..", "sample", 'one%s' % ext) if exists(fname): remove(fname) mf = MasterFile(join("..", "sample", "one.mst")) rec = MasterRecord() rec["300"] = "XXXX" rec.save(mf) print rec del mf mf = MasterFile(join("..", "sample", "one.mst")) rec = MasterRecord(mfn=2) rec["300"] = "XXXX" rec.save(mf) print rec del mf mf = MasterFile(join("..", "sample", "one.mst")) rec = mf[1] rec["300"] = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" rec.save(mf) print rec del mf
def test_copy(): """Copy the sample database to a new file""" clean_start() input_mf = MasterFile(join("..", "sample", "cds.mst")) output_mf = MasterFile(testmst) for rec in input_mf: rec.save(output_mf) output_mf.commit() assert len(input_mf) == len(output_mf)
def test_delete_record(): """Create 3 records and delete the one in the middle""" clean_start() size = 3 mf = MasterFile(testmst) for i in range(size): rec = MasterRecord() rec.update(test_data) rec.update({131: "flag %d" % i}) rec.save(mf) mf.delete(2)
def test_inverting_MAIL(): """Test inverting MAIL database """ db = join('fixtures', 'MAIL.mst') mf = MasterFile(db) #Remove old indexes files for ext in ('.idx', '.idx.index', '.idx.lock', '.idx.old', '.idx.tmp'): fname = join('fixtures', 'MAIL.%s' % ext) if exists(fname): remove(fname) mf.invertdb(callback=invcb) post = mf.search('AR1.1').next() assert post.mfn == 63, 'Failed inverting MAIL database'
def test_inverting_ntitle(): """Test inverting ntitle database """ db = join('fixtures', 'ntitle.mst') mf = MasterFile(db) #Remove old indexes files for ext in ('.idx', '.idx.index', '.idx.lock', '.idx.old', '.idx.tmp'): fname = join('fixtures', 'ntitle.%s' % ext) if exists(fname): remove(fname) mf.invertdb(callback=invcb) post = mf.search('0000-0019').next() assert post.mfn == 12222, 'Failed inverting ntitle database'
def test_update(): """Create a record, modify it and save it and check previous""" clean_start() mf = MasterFile(testmst) r = MasterRecord() r.update(test_data) r.save(mf) r[90] = "This is a new field" r.save(mf) prev = mf.previous(r) assert prev is not None assert len(prev) + 1 == len(r)
def test_write_multiple_records(): """Write multiple records in a newly created database.""" clean_start() size = 381 mf = MasterFile(testmst) for i in range(size): rec = MasterRecord() rec.update(test_data) rec.save(mf) mf.commit() assert len(mf) == size assert mf[90].v50.data == 'Incl. bibl.' del mf
def test_l(): """Test l command""" mf = MasterFile(join("..", "sample", "cds.mst")) #Remove old indexes files for ext in ('.idx', '.idx.index', '.idx.lock', '.idx.old', '.idx.tmp'): fname = join("..", "sample", "cds" + ext) if exists(fname): remove(fname) mf.invertdb('mdu,v26') record = mf[2] expr_list = (("l('1966.')", "28"), ("l('PARIS, UNESCO , 1966.')", "28"), ("l('15 JUNE 1976.')", "126"))
def test_replace(): """Test repalce() function""" mf = MasterFile(join("..", "sample", "cds.mst")) record = mf[1] expr_list = ( ("replace(v24,'plants','fruits')", 'Techniques for the measurement of transpiration of individual fruits' ), ("replace(v24,'','')", 'Techniques for the measurement of transpiration of individual plants' ), ("replace(v24,'measurement of ','')", 'Techniques for the transpiration of individual plants'), ("mdu,v26,'!',replace(v26^b,'Unesco','UnEsCo')/", "PARIS, UNESCO, -1965. !UnEsCo\n"), ("mdu,v26,'!',replace(v26,'Unesco','UnEsCo')/", "PARIS, UNESCO, -1965. !^aParis^bUnEsCo^c-1965\n"), ("mhu,v26,'!',replace(v26^b,'Unesco','UnEsCo')/", "PARIS, UNESCO, -1965!UnEsCo\n"), ("mhu,v26,'!',replace(v26,'Unesco','UnEsCo')/", "PARIS, UNESCO, -1965!^aParis^bUnEsCo^c-1965\n"), ("mpu,v26,'!',replace(v26^b,'Unesco','UnEsCo')/", "^APARIS^BUNESCO^C-1965!UnEsCo\n"), ("mpu,v26,'!',replace(v26,'Unesco','UnEsCo')/", "^APARIS^BUNESCO^C-1965!^aParis^bUnEsCo^c-1965\n"), ) run_list(expr_list, record)
def main(): # override config config = Config() # Parse command-line parameters master = sys.argv[1] try: dump = eval(sys.argv[2]) except IndexError: dump = True try: config.INPUT_ENCODING = sys.argv[3] except IndexError: config.INPUT_ENCODING = 'cp850' try: config.OUTPUT_ENCODING = sys.argv[4] except IndexError: config.OUTPUT_ENCODING = 'utf-8' # Open database mf = MasterFile(master, config=config) begin = datetime.now() gc.disable() read_loop(mf, dump) print _("Elapsed time:"), datetime.now() - begin gc.enable()
def test_add_repeatable_field(): """Test the addition of a repeatable field""" mf = MasterFile(join("..", "sample", "cds.mst")) record = mf[1] expr_list = (("proc('a70|Beltrano!'),(v70/)", u'Magalhaes, A.C.\nFranco, C.M.\nBeltrano\n'), ) run_list(expr_list, record)
def create(self, request): """Method to create database or record """ try: try: colname,dbname,collection,database,index = get_database_info(request) except DatabaseNotFound: colname,dbname,collection,database,index = get_database_info(request,1) dbname = get_xml_parameters(request).database if not dbname: raise Exception(DB_NAME_ERROR) try: newdb = collection[dbname] except: pass else: raise Exception(DB_ALREADY_EXISTS) newdb = MasterFile(os.path.join(collection.path_list[0], '%s.mst'%dbname)) collection.databases[dbname] = newdb return HttpResponse(XML_OK) else: recno = database.nxtmfn mstrecord = MasterRecord(recno) return self.create_update_record(request, database, mstrecord, recno) except Exception, e: return HttpResponse(XML_ERROR % 'CREATE (%s)' % str(e))
def test_empty_master(): """Create an empty MasterFile""" clean_start() mf = MasterFile(testmst) del mf # force flush assert stat(testmst)[ST_SIZE] == 512 assert stat(testxrf)[ST_SIZE] == 512
def test_type(): """Test type command""" mf = MasterFile(join("..", "sample", "cds.mst")) record = mf[2] expr_list = (("type('ABCDEFGHIJKLMNOPQRSTUVXYZ')", 'A'), ("type(v26^c)", 'N'), ("type(v69)", 'X')) run_list(expr_list, record)
def test_mfn_expressions(): """Test MFN expressions""" #record = MasterRecord(mfn=4) #record.update(test_data) mf = MasterFile(join("..", "sample", "cds.mst")) record = mf[4] expr_list = ( ("mfn", '000004'), ("MFN", '000004'), ("mfn(0)", '4'), ("mfn(1)", '4'), ("mfn(2)", '04'), ("mfn=1", "False"), ("MFN>1", "True"), ("mfn=4", "True"), ("mfn<>4", "False"), ("not mfn=4", "False"), ("not mfn<>4", "True"), # Format ("mfn/", "000004\n"), ("f(mfn+1,0,0)/", "5\n"), ("s(mfn,' ',v24)", "000004 <An> Electric hygrometer apparatus for measuring water-vapour loss from \nplants in the field" ), ("ref(mfn,v24)", "<An> Electric hygrometer apparatus for measuring water-vapour loss from plants \nin the field" ), ("if mfn=4 then mfn,/, fi", "000004\n"), ) run_list(expr_list, record)
def test_string_variables(): """Test string variables""" mf = MasterFile(join("..", "sample", "cds.mst")) record = mf[1] expr_list = ( ("s0:='text label',mdu,s0", "TEXT LABEL"), ("s0:='TEXT',if size(s0) > 3 then 'Print so:',s0 fi", "Print so:TEXT"), )
def test_datex(): """Test datex() function""" from time import strftime, localtime mf = MasterFile(join("..", "sample", "cds.mst")) record = mf[1] expr_list = (("datex('1147780749')", strftime('%Y%m%d %H%M%S %w %j', localtime(1147780749))), ) run_list(expr_list, record)
def test_singlerecord_master(): """Create a MasterFile with a single record inside""" clean_start() mf = MasterFile(testmst) rec = MasterRecord() rec.update(test_data) rec.save(mf) del mf # force flush
def test_record_master2(): """Open cds MasterFile """ mf1 = MasterFile(join("..", "sample", "cds.mst")) for ext in ('.mst', '.xrf'): fname = join("..", "sample", 'xcds%s' % ext) if exists(fname): remove(fname) mf2 = MasterFile(join("..", "sample", "xcds.mst")) for rec in mf1: rec["200"] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" #print(rec) #print("\n") rec.save(mf2) del mf1 # force flush del mf2 # force flush
def test_mstname(): """Test mstname command""" mf = MasterFile(join("..", "sample", "cds.mst")) record = mf[1] expr_list = ( ("mstname", 'cds'), ("mdu,mstname", 'CDS'), ) run_list(expr_list, record)
def test_numeric_variables(): """Test numeric variables""" mf = MasterFile(join("..", "sample", "cds.mst")) record = mf[1] expr_list = ( ("e0:=1,e0", "1"), ("e0:=1,e0:=2,e0", "2"), ("e0:=10,e0:=e0+12,e0", "22"), ("e0:=100,if e0 > 99 then 'OK' fi", "OK"), )
def test_restore_previous(): """Create a record, modify it, save it and restore previous version""" clean_start() mf = MasterFile(testmst) r = MasterRecord() r.update(test_data) r.save(mf) r[90] = "This is a new field" r.save(mf) prev = mf.previous(r) prev.save(mf) old_r = mf[1] try: old_r[90] assert False, "Field with tag 90 should not exist anymore." except KeyError: pass assert r.status == ACTIVE assert len(old_r) == len(prev)
def test_iocc(): """Test iocc command""" mf = MasterFile(join("..", "sample", "cds.mst")) record = mf[1] expr_list = (( "(f(iocc,3,0),'.',v70/)", " 1.Magalhaes, A.C.\n 2.Franco, C.M.\n" ), ("(f(iocc,3,0),'.',v24/)", " 1.Techniques for the measurement of transpiration of individual plants\n" ), ("(f(iocc,2,0),'-',v70/)", " 1-Magalhaes, A.C.\n 2-Franco, C.M.\n")) run_list(expr_list, record)
def test_mid(): """Test mid() function""" mf = MasterFile(join("..", "sample", "cds.mst")) record = mf[1] expr_list = ( ('mid(v24,1,1)', 'T'), ('mid(v24,0,2)', 'Te'), ('mid(v24,-1,1)', 'T'), ) run_list(expr_list, record)
def test_copyDb(): for ext in ('.mst', '.xrf'): fname = join("..", "sample", 'copyntitle%s' % ext) if exists(fname): remove(fname) fname = join("..", "sample", 'copyntitleFFI%s' % ext) if exists(fname): remove(fname) mf_from = MasterFile(join("..", "sample", "ntitle.mst")) last = mf_from.nxtmfn - 1 fname = join("..", "sample", 'copyntitle') f = open(fname + ".ini", "w") f.write( "[Engine]\nINPUT_ENCODING = cp850\nOUTPUT_ENCODING = utf-8\n[IsisDB]\nLEADER_XL=True" ) f.close() mf_to = MasterFile(join("..", "sample", "copyntitle.mst")) for mfn in range(1, last): print(str(mfn)) rec = mf_from[mfn] rec.save(mf_to) del mf_to checkBinaryCompatibility(fname, False) print("Copy of isis ntitle - OK!\n") fname = join("..", "sample", 'copyntitleFFI') f = open(fname + ".ini", "w") f.write( "[Engine]\nINPUT_ENCODING = cp850\nOUTPUT_ENCODING = utf-8\n[IsisDB]\nLEADER_XL=True" ) f.write("\nDIR_MASK = iii\nLEADER_MASK_XL = iiHHiiHH") f.close() mf_to = MasterFile(join("..", "sample", "copyntitleFFI.mst")) for mfn in range(1, last): print(str(mfn)) rec = mf_from[mfn] rec.save(mf_to) del mf_to checkBinaryCompatibility(fname, True) del mf_from
def test_date(): """Test date() function""" from time import strftime mf = MasterFile(join("..", "sample", "cds.mst")) record = mf[1] expr_list = ( ("date(DATETIME)", strftime('%d/%m/%y %H:%M:%S')), ("date(DATEONLY)", strftime('%d/%m/%y')), ("date", strftime('%Y%m%d %H%M%S %w %j')), ) run_list(expr_list, record)
def test_npost(): """Test npost command""" mf = MasterFile(join("..", "sample", "cds.mst")) record = mf[1] expr_list = ( ("npost('1966.')", "50"), ("npost('PARIS, UNESCO , 1966.')", "1"), ("npost('PARIS, UNESCO, 1976.')", "5"), ("npost('BLA')", "0"), ) run_list(expr_list, record)
def test_readonly_master(): """Attempt to open a read-only master file. First try read+append mode, if it fails fallback to readonly mode. """ test_singlerecord_master() # transform file to readonly chmod(testmst, S_IRUSR or S_IRGPR or S_IROTH) # try to open it again mf = MasterFile(testmst) del mf