ok, persistent fool that i am, i'm still trying to figure out how to use ZODB in an External Method to do some simple (ha!) database stuff. so i built a very simple app, to implement a counter. each time you invoke the "Count" method, you get a number back, and it increments. running the script (see below) by hand, it works fine. referencing it from Zope, using this dtml fragment: <dtml-var "Count( 'chickens' )"> or just pointing my browser at: http://kestrel.sage.att.com:8080/Garry/ZODB/Count?name=chickens to reference an External Method called Count, which refers to the Count function in this script, i get: Error Type: AttributeError Error Value: Counter if i then click the reload button, i get: Could not lock the database file. There must be another process that has opened the file. and i'm locked out until i restart zope. can someone please help? this is getting really discouraging. a simple explanation of where i'm going wrong would be greatly appreciated. a small working example of a working app would be terrific. thanks -------------------------------------------------------------- script follows: import ZODB, ZODB.FileStorage import Persistence class Counter(Persistence.Persistent): """A Persistent Counter""" def __init__( self, name ): self.name = name self.value = 0 def Count( name ): "Get counter value, then increment, creating if necessary" db = ZODB.DB( ZODB.FileStorage.FileStorage( '/tmp/CountDB.fs' ) ) connection = db.open() root = connection.root() if not root.has_key( name ): counter = Counter( name ) root[ name ] = counter else: counter = root[ name ] counter.value = counter.value + 1 get_transaction().commit() connection.close() return counter.value if __name__ == '__main__': print Count( 'chickens' ) -- Garry Hodgson Every night garry@sage.att.com a child is born Software Innovation Services is a Holy Night. AT&T Labs - Sophia Lyon Fahs