Beispiel #1
0
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
Beispiel #2
0
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"
Beispiel #3
0
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
Beispiel #4
0
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)
Beispiel #5
0
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)
Beispiel #6
0
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'
Beispiel #7
0
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'
Beispiel #8
0
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)
Beispiel #9
0
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
Beispiel #10
0
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"))
Beispiel #11
0
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)
Beispiel #12
0
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()
Beispiel #13
0
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)
Beispiel #14
0
    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))
Beispiel #15
0
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
Beispiel #16
0
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)
Beispiel #17
0
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)
Beispiel #18
0
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"),
    )
Beispiel #19
0
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)
Beispiel #20
0
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
Beispiel #21
0
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
Beispiel #22
0
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)
Beispiel #23
0
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"),
    )
Beispiel #24
0
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)
Beispiel #25
0
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)
Beispiel #26
0
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)
Beispiel #27
0
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
Beispiel #28
0
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)
Beispiel #29
0
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)
Beispiel #30
0
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