On Thu, 2 Mar 2000, Garrett G. Hodgson wrote:
thank you for your help. forgive my being obtuse, but i'm still not getting it.
Turns out it was me that was being obtuse. See below.
Only one process can access a ZODB at a time. You have two. The first is Zope, and the second is the external method.
ok. by "a ZODB" do you mean that the call in my external method is trying to reopen the ZODB zope is using? i'd assumed i was crating another one, with a separate FileStorage.
This is the detail I did not notice, previously. I thought you were trying to store objects in your Zope ZODB; I didn't notice that the filename you were passing to FileStorage was not Data.fs. Sorry. [snip]
so, one more try. given the following external method:
import ZODB, ZODB.FileStorage
def GetPeople( self ): "Return list of people in DB"
db = ZODB.DB( ZODB.FileStorage.FileStorage( 'TestDB.fs' ) ) connection = db.open() root = connection.root() people = [] for key in root.keys(): people.append( root[ key ] ) return people
if __name__ == '__main__': for person in GetPeople( None ): print person.name, 'is', person.age, 'years old'
referenced from a DTML Method:
<dtml-in "GetPeople()"> <dtml-var name> is <dtml-var age> years old.<br> </dtml-in>
when i restart zope and view the method, it works once, but shows no persons. the second time, it fails with the traceback.
I don't understand why the problem is manifesting as it is, but I got your code to work by modifying your code as follows: - for key in root.keys(): - people.append(root[key]) + connection.close() - return people Opening a connection without closing it is a Bad Idea. I just can't figure out what this has to do with the lock file on the database. I figured when I closed the connection it was deleting the lock, but this is not so. So, I remain confused. ;-)
what do i change to make it work?
Hope this helps! --Jeff --- Jeff K. Hoffman 704.849.0731 x108 Chief Technology Officer mailto:jeff@goingv.com Going Virtual, L.L.C. http://www.goingv.com/