Viewing file: pb.py (3.62 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
# Copyright (c) Twisted Matrix Laboratories. # See LICENSE for details.
import os
from twisted.spread import pb
class Maildir(pb.Referenceable): def __init__(self, directory, rootDirectory): self.virtualDirectory = directory self.rootDirectory = rootDirectory self.directory = os.path.join(rootDirectory, directory)
def getFolderMessage(self, folder, name): if "/" in name: raise OSError("can only open files in '%s' directory'" % folder) with open(os.path.join(self.directory, "new", name)) as fp: return fp.read()
def deleteFolderMessage(self, folder, name): if "/" in name: raise OSError("can only delete files in '%s' directory'" % folder) os.rename( os.path.join(self.directory, folder, name), os.path.join(self.rootDirectory, ".Trash", folder, name), )
def deleteNewMessage(self, name): return self.deleteFolderMessage("new", name)
remote_deleteNewMessage = deleteNewMessage
def deleteCurMessage(self, name): return self.deleteFolderMessage("cur", name)
remote_deleteCurMessage = deleteCurMessage
def getNewMessages(self): return os.listdir(os.path.join(self.directory, "new"))
remote_getNewMessages = getNewMessages
def getCurMessages(self): return os.listdir(os.path.join(self.directory, "cur"))
remote_getCurMessages = getCurMessages
def getNewMessage(self, name): return self.getFolderMessage("new", name)
remote_getNewMessage = getNewMessage
def getCurMessage(self, name): return self.getFolderMessage("cur", name)
remote_getCurMessage = getCurMessage
def getSubFolder(self, name): if name[0] == ".": raise OSError("subfolder name cannot begin with a '.'") name = name.replace("/", ":") if self.virtualDirectoy == ".": name = "." + name else: name = self.virtualDirectory + ":" + name if not self._isSubFolder(name): raise OSError("not a subfolder") return Maildir(name, self.rootDirectory)
remote_getSubFolder = getSubFolder
def _isSubFolder(self, name): return not os.path.isdir( os.path.join(self.rootDirectory, name) ) or not os.path.isfile(os.path.join(self.rootDirectory, name, "maildirfolder"))
class MaildirCollection(pb.Referenceable): def __init__(self, root): self.root = root
def getSubFolders(self): return os.listdir(self.getRoot())
remote_getSubFolders = getSubFolders
def getSubFolder(self, name): if "/" in name or name[0] == ".": raise OSError("invalid name") return Maildir(".", os.path.join(self.getRoot(), name))
remote_getSubFolder = getSubFolder
class MaildirBroker(pb.Broker): def proto_getCollection(self, requestID, name, domain, password): collection = self._getCollection() if collection is None: self.sendError(requestID, "permission denied") else: self.sendAnswer(requestID, collection)
def getCollection(self, name, domain, password): if domain not in self.domains: return domain = self.domains[domain] if name in domain.dbm and domain.dbm[name] == password: return MaildirCollection(domain.userDirectory(name))
class MaildirClient(pb.Broker): def getCollection(self, name, domain, password, callback, errback): requestID = self.newRequestID() self.waitingForAnswers[requestID] = callback, errback self.sendCall("getCollection", requestID, name, domain, password)
|