I put this permantently at:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/252494

As mentioned on the list earlier, the combination
of extend aside gives you the ability to deside
when _you_ want to make an unsafe write. If you do not
want to, you just simply extend the aside file. 

import os,metakit,time
#initalize db
#storage options:
# 0 = open read-only, most recently committed contents
# 1 = open in exclusive read-write mode
# 2 = open in "commit-extend" mode

main='test.mk';aside='test.mka'

#initalize
if not os.path.exists(main):
    print 'initalizing'
    db = metakit.storage(main, 1)
    db.getas("a[i:S]")
    db.commit()
    dba = metakit.storage(aside, 1)
    db.aside(dba)
    del db
    del dba

#commits w/extend do not 
#change old read
old_read = metakit.storage(main, 0)
old_reada = metakit.storage(aside, 0)
old_read.aside(old_reada)

vw = old_read.view("a")
old_len=len(vw)
print 'old length=',len(vw)

#now do commits with extend on aside file
#main is read-only aside is commit-extend
db = metakit.storage(main, 0)
dba = metakit.storage(aside, 2)
db.aside(dba)

vw = db.view("a")
vw.append(i=str(time.asctime()))
vw.append(i=str(time.asctime()))
db.commit()
dba.commit()
del db
del dba

#a new read should see the updates
#extended in the aside file
new_read = metakit.storage(main, 0)
new_reada = metakit.storage(aside, 0)
new_read.aside(new_reada)

vw = new_read.view('a')
print "new length(should be %i)="%(old_len+2),len(vw)

#the old view should not be changed
vw = old_read.view('a')
print "old length(should still be
%i)="%(old_len),len(vw)

#empty aside into main
#this is unsafe what extend enables
#you to do, is to control when
#to do this operation
empty_aside=1
if empty_aside:
    print 'Empty aside into main:',
    print 'not safe for readers!'
    db = metakit.storage(main, 1)
    dba = metakit.storage(aside, 1)
    db.aside(dba)
    db.commit(1)
    main_only = metakit.storage(main, 0)
    vw=main_only.view('a')
    print 'main now has',len(vw)
    del main_only

__________________________________
Do you Yahoo!?
Free Pop-Up Blocker - Get it now
http://companion.yahoo.com/
_____________________________________________
Metakit mailing list  -  [EMAIL PROTECTED]
http://www.equi4.com/mailman/listinfo/metakit

Reply via email to