On Jan 24, 2006, at 3:43 PM, mario ruggier wrote: > but unless i misunderstand something, i suspect this is simply a > remnant of some previous idea you were working with. I take it that > this method should simply be: > > def is_granted(self, permission, other=True): > ... Good eye, Mario! And your explanation is accurate, too. I checked this in so we'll have it in the next release, which I hope will come next week. To preview the next release, here is the changelog as it is at the moment: Change user root BTree object into a UserDatabase. This change will require existing QP applications to update using a script like the following example: from qp.pub.publish import Publisher from durus.file_storage import FileStorage from durus.connection import Connection from qp.lib.site import Site if __name__ == '__main__': site = Site('durusmail') connection = Connection(FileStorage(site.get_durus_file())) publisher = Publisher(connection, site) # Update user_db from qp version 1.3 to qp version 1.4. # Also replace publisher.get_users() calls in your code # with publisher.get_user_db().get_users(). user_db = publisher.get_root()['user_db'] user_db.users = publisher.get_root()['users'] del publisher.get_root()['users'] publisher.commit() publisher.get_connection().pack() Remove Publisher.get_users() and add Publisher.get_user_db(). If your code was using get_users(), you can replace those calls with get_user_db().get_users(). The motivation for this is that it makes it a little easier for us to convert our existing applications to work with qp. Other than that, qp is pretty stable. We'll probably also release a Durus update at the same time. The changes there are not disruptive: just adding some methods to BTree.