diff options
author | shmel1k <shmel1k@ydb.tech> | 2023-11-26 18:16:14 +0300 |
---|---|---|
committer | shmel1k <shmel1k@ydb.tech> | 2023-11-26 18:43:30 +0300 |
commit | b8cf9e88f4c5c64d9406af533d8948deb050d695 (patch) | |
tree | 218eb61fb3c3b96ec08b4d8cdfef383104a87d63 /contrib/python/Twisted/py3/twisted/mail/pb.py | |
parent | 523f645a83a0ec97a0332dbc3863bb354c92a328 (diff) | |
download | ydb-b8cf9e88f4c5c64d9406af533d8948deb050d695.tar.gz |
add kikimr_configure
Diffstat (limited to 'contrib/python/Twisted/py3/twisted/mail/pb.py')
-rw-r--r-- | contrib/python/Twisted/py3/twisted/mail/pb.py | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/contrib/python/Twisted/py3/twisted/mail/pb.py b/contrib/python/Twisted/py3/twisted/mail/pb.py new file mode 100644 index 0000000000..1b57e26c95 --- /dev/null +++ b/contrib/python/Twisted/py3/twisted/mail/pb.py @@ -0,0 +1,117 @@ +# 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) |