"""Implement the root folder.""" from slime_abstract import SlimeFolder, Error class SlimeFolder_Root(SlimeFolder): """The root folder that lists all folder collections.""" def __init__(self): SlimeFolder.__init__(self) self._name = "Root folder" def open(self): self._is_open = 1 def close(self): self._is_open = 0 def rescan_subfolders(f): self._assert_open() def rescan_messages(f): self._assert_open() def add_message(self, message): raise Error, "Can't add messages to root folder." def delete_message(self, id): raise Error, "Can't delete messages from root folder." def open_message(self, id): raise Error, "Can't open messages in root folder." def add_subfolder(self, object): """Add a subfolder `object'. Note that the interface is different from SlimeFolder: the root folder can't know the type of the folder, so it gets an object, instead of just the name.""" self._assert_open() self._subfolders.append(object) def delete_self(self): raise Error, "Can't remove root folder." def rename_self(self, new_name): raise Error, "Can't rename root folder." def commit_changes(self): # For the root folder, everything is happens at once. self._assert_open() def main(): """Test the root folder.""" from slime_mh import * from slime_unix import * r = SlimeFolder_Root() r.open() r.add_subfolder(SlimeFolder_Unix(os.path.expanduser("~/mail"))) for f in r.list_all_subfolders(): print repr(f) f.open() f.rescan_subfolders() f.rescan_messages() for m in f.list_all_threads()[:2]: print m["subject"] print "Subfolders:", f.list_all_subfolders() f.close() print r.close() if __name__ == "__main__": main()