core: use of the new core.log module:
/!\ this is a massive refactoring and was largely automated, it probably did bring some bugs /!\
This commit is contained in:
parent
dc5c042fe7
commit
501bc92528
1 changed files with 707 additions and 941 deletions
|
|
@ -18,20 +18,17 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from sat.core.i18n import _
|
||||
from logging import debug, info, error
|
||||
import warnings
|
||||
from sat.core.log import getLogger
|
||||
log = getLogger(__name__)
|
||||
from twisted.internet import protocol, defer
|
||||
from twisted.words.protocols.jabber import error as jab_error
|
||||
from twisted.cred import portal, checkers, credentials
|
||||
from twisted.cred import error as cred_error
|
||||
from twisted.mail import imap4
|
||||
from twisted.python import failure
|
||||
from email.parser import Parser
|
||||
import email.message
|
||||
import os
|
||||
from cStringIO import StringIO
|
||||
from twisted.internet import reactor
|
||||
import pdb
|
||||
|
||||
from zope.interface import implements
|
||||
|
||||
|
|
@ -61,14 +58,14 @@ class IMAP_server(object):
|
|||
"""
|
||||
|
||||
def __init__(self, host):
|
||||
info(_("Plugin Imap Server initialization"))
|
||||
log.info(_("Plugin Imap Server initialization"))
|
||||
self.host = host
|
||||
|
||||
#parameters
|
||||
host.memory.updateParams(self.params)
|
||||
|
||||
port = int(self.host.memory.getParamA("IMAP Port", "Mail Server"))
|
||||
info(_("Launching IMAP server on port %d"), port)
|
||||
log.info(_("Launching IMAP server on port %d") % port)
|
||||
|
||||
self.server_factory = ImapServerFactory(self.host)
|
||||
reactor.listenTCP(port, self.server_factory)
|
||||
|
|
@ -78,7 +75,7 @@ class Message(object):
|
|||
implements(imap4.IMessage)
|
||||
|
||||
def __init__(self, uid, flags, mess_fp):
|
||||
debug('Message Init')
|
||||
log.debug('Message Init')
|
||||
self.uid = uid
|
||||
self.flags = flags
|
||||
self.mess_fp = mess_fp
|
||||
|
|
@ -87,21 +84,21 @@ class Message(object):
|
|||
def getUID(self):
|
||||
"""Retrieve the unique identifier associated with this message.
|
||||
"""
|
||||
debug('getUID (message)')
|
||||
log.debug('getUID (message)')
|
||||
return self.uid
|
||||
|
||||
def getFlags(self):
|
||||
"""Retrieve the flags associated with this message.
|
||||
@return: The flags, represented as strings.
|
||||
"""
|
||||
debug('getFlags')
|
||||
log.debug('getFlags')
|
||||
return self.flags
|
||||
|
||||
def getInternalDate(self):
|
||||
"""Retrieve the date internally associated with this message.
|
||||
@return: An RFC822-formatted date string.
|
||||
"""
|
||||
debug('getInternalDate')
|
||||
log.debug('getInternalDate')
|
||||
return self.message['Date']
|
||||
|
||||
def getHeaders(self, negate, *names):
|
||||
|
|
@ -111,7 +108,7 @@ class Message(object):
|
|||
should be omitted from the return value, rather than included.
|
||||
@return: A mapping of header field names to header field values
|
||||
"""
|
||||
debug('getHeaders %s - %s' % (negate, names))
|
||||
log.debug('getHeaders %s - %s' % (negate, names))
|
||||
final_dict = {}
|
||||
to_check = [name.lower() for name in names]
|
||||
for header in self.message.keys():
|
||||
|
|
@ -123,20 +120,20 @@ class Message(object):
|
|||
def getBodyFile(self):
|
||||
"""Retrieve a file object containing only the body of this message.
|
||||
"""
|
||||
debug('getBodyFile')
|
||||
log.debug('getBodyFile')
|
||||
return StringIO(self.message.get_payload())
|
||||
|
||||
def getSize(self):
|
||||
"""Retrieve the total size, in octets, of this message.
|
||||
"""
|
||||
debug('getSize')
|
||||
log.debug('getSize')
|
||||
self.mess_fp.seek(0, os.SEEK_END)
|
||||
return self.mess_fp.tell()
|
||||
|
||||
def isMultipart(self):
|
||||
"""Indicate whether this message has subparts.
|
||||
"""
|
||||
debug('isMultipart')
|
||||
log.debug('isMultipart')
|
||||
return False
|
||||
|
||||
def getSubPart(self, part):
|
||||
|
|
@ -144,7 +141,7 @@ class Message(object):
|
|||
@param part: The number of the part to retrieve, indexed from 0.
|
||||
@return: The specified sub-part.
|
||||
"""
|
||||
debug('getSubPart')
|
||||
log.debug('getSubPart')
|
||||
return TypeError
|
||||
|
||||
|
||||
|
|
@ -154,14 +151,14 @@ class SatMailbox(object):
|
|||
def __init__(self, host, name, profile):
|
||||
self.host = host
|
||||
self.listeners = set()
|
||||
debug('Mailbox init (%s)', name)
|
||||
log.debug('Mailbox init (%s)', name)
|
||||
if name != "INBOX":
|
||||
raise imap4.MailboxException("Only INBOX is managed for the moment")
|
||||
self.mailbox = self.host.plugins["Maildir"].accessMessageBox(name, self.newMessage, profile)
|
||||
|
||||
def newMessage(self):
|
||||
"""Called when a new message is in the mailbox"""
|
||||
debug("newMessage signal received")
|
||||
log.debug("newMessage signal received")
|
||||
nb_messages = self.getMessageCount()
|
||||
for listener in self.listeners:
|
||||
listener.newMessages(nb_messages, None)
|
||||
|
|
@ -169,13 +166,13 @@ class SatMailbox(object):
|
|||
def getUIDValidity(self):
|
||||
"""Return the unique validity identifier for this mailbox.
|
||||
"""
|
||||
debug('getUIDValidity')
|
||||
log.debug('getUIDValidity')
|
||||
return 0
|
||||
|
||||
def getUIDNext(self):
|
||||
"""Return the likely UID for the next message added to this mailbox.
|
||||
"""
|
||||
debug('getUIDNext')
|
||||
log.debug('getUIDNext')
|
||||
return self.mailbox.getNextUid()
|
||||
|
||||
def getUID(self, message):
|
||||
|
|
@ -183,41 +180,41 @@ class SatMailbox(object):
|
|||
@param message: The message sequence number
|
||||
@return: The UID of the message.
|
||||
"""
|
||||
debug('getUID (%i)' % message)
|
||||
log.debug('getUID (%i)' % message)
|
||||
#return self.mailbox.getUid(message-1) #XXX: it seems that this method get uid and not message sequence number
|
||||
return message
|
||||
|
||||
def getMessageCount(self):
|
||||
"""Return the number of messages in this mailbox.
|
||||
"""
|
||||
debug('getMessageCount')
|
||||
log.debug('getMessageCount')
|
||||
ret = self.mailbox.getMessageCount()
|
||||
debug("count = %i" % ret)
|
||||
log.debug("count = %i" % ret)
|
||||
return ret
|
||||
|
||||
def getRecentCount(self):
|
||||
"""Return the number of messages with the 'Recent' flag.
|
||||
"""
|
||||
debug('getRecentCount')
|
||||
log.debug('getRecentCount')
|
||||
return len(self.mailbox.getMessageIdsWithFlag('\\Recent'))
|
||||
|
||||
def getUnseenCount(self):
|
||||
"""Return the number of messages with the 'Unseen' flag.
|
||||
"""
|
||||
debug('getUnseenCount')
|
||||
log.debug('getUnseenCount')
|
||||
return self.getMessageCount() - len(self.mailbox.getMessageIdsWithFlag('\\SEEN'))
|
||||
|
||||
def isWriteable(self):
|
||||
"""Get the read/write status of the mailbox.
|
||||
@return: A true value if write permission is allowed, a false value otherwise.
|
||||
"""
|
||||
debug('isWriteable')
|
||||
log.debug('isWriteable')
|
||||
return True
|
||||
|
||||
def destroy(self):
|
||||
"""Called before this mailbox is deleted, permanently.
|
||||
"""
|
||||
debug('destroy')
|
||||
log.debug('destroy')
|
||||
|
||||
def requestStatus(self, names):
|
||||
"""Return status information about this mailbox.
|
||||
|
|
@ -229,7 +226,7 @@ class SatMailbox(object):
|
|||
information up would be costly, a deferred whose callback will
|
||||
eventually be passed this dictionary is returned instead.
|
||||
"""
|
||||
debug('requestStatus')
|
||||
log.debug('requestStatus')
|
||||
return imap4.statusRequestHelper(self, names)
|
||||
|
||||
def addListener(self, listener):
|
||||
|
|
@ -239,7 +236,7 @@ class SatMailbox(object):
|
|||
@param listener: An object to add to the set of those which will
|
||||
be notified when the contents of this mailbox change.
|
||||
"""
|
||||
debug('addListener %s' % listener)
|
||||
log.debug('addListener %s' % listener)
|
||||
self.listeners.add(listener)
|
||||
|
||||
def removeListener(self, listener):
|
||||
|
|
@ -252,7 +249,7 @@ class SatMailbox(object):
|
|||
@raise ValueError: Raised when the given object is not a listener for
|
||||
this mailbox.
|
||||
"""
|
||||
debug('removeListener')
|
||||
log.debug('removeListener')
|
||||
if listener in self.listeners:
|
||||
self.listeners.remove(listener)
|
||||
else:
|
||||
|
|
@ -267,7 +264,7 @@ class SatMailbox(object):
|
|||
id if the message is added successfully and whose errback is
|
||||
invoked otherwise.
|
||||
"""
|
||||
debug('addMessage')
|
||||
log.debug('addMessage')
|
||||
raise imap4.MailboxException("Client message addition not implemented yet")
|
||||
|
||||
def expunge(self):
|
||||
|
|
@ -275,7 +272,7 @@ class SatMailbox(object):
|
|||
@return: The list of message sequence numbers which were deleted,
|
||||
or a Deferred whose callback will be invoked with such a list.
|
||||
"""
|
||||
debug('expunge')
|
||||
log.debug('expunge')
|
||||
self.mailbox.removeDeleted()
|
||||
|
||||
def fetch(self, messages, uid):
|
||||
|
|
@ -284,13 +281,13 @@ class SatMailbox(object):
|
|||
about
|
||||
@param uid: If true, the IDs specified in the query are UIDs;
|
||||
"""
|
||||
debug('fetch (%s, %s)' % (messages, uid))
|
||||
log.debug('fetch (%s, %s)' % (messages, uid))
|
||||
if uid:
|
||||
messages.last = self.mailbox.getMaxUid()
|
||||
messages.getnext = self.mailbox.getNextExistingUid
|
||||
for mess_uid in messages:
|
||||
if mess_uid is None:
|
||||
debug('stopping iteration')
|
||||
log.debug('stopping iteration')
|
||||
raise StopIteration
|
||||
try:
|
||||
yield (mess_uid, Message(mess_uid, self.mailbox.getFlagsUid(mess_uid), self.mailbox.getMessageUid(mess_uid)))
|
||||
|
|
@ -318,7 +315,7 @@ class SatMailbox(object):
|
|||
been performed, or a Deferred whose callback will be invoked with
|
||||
such a dict.
|
||||
"""
|
||||
debug('store')
|
||||
log.debug('store')
|
||||
|
||||
flags = [flag.upper() for flag in flags]
|
||||
|
||||
|
|
@ -361,13 +358,13 @@ class SatMailbox(object):
|
|||
Flags with the \\ prefix are reserved for use as system flags.
|
||||
@return: A list of the flags that can be set on messages in this mailbox.
|
||||
"""
|
||||
debug('getFlags')
|
||||
log.debug('getFlags')
|
||||
return ['\\SEEN', '\\ANSWERED', '\\FLAGGED', '\\DELETED', '\\DRAFT'] # TODO: add '\\RECENT'
|
||||
|
||||
def getHierarchicalDelimiter(self):
|
||||
"""Get the character which delimits namespaces for in this mailbox.
|
||||
"""
|
||||
debug('getHierarchicalDelimiter')
|
||||
log.debug('getHierarchicalDelimiter')
|
||||
return '.'
|
||||
|
||||
|
||||
|
|
@ -375,12 +372,12 @@ class ImapSatAccount(imap4.MemoryAccount):
|
|||
#implements(imap4.IAccount)
|
||||
|
||||
def __init__(self, host, profile):
|
||||
debug("ImapAccount init")
|
||||
log.debug("ImapAccount init")
|
||||
self.host = host
|
||||
self.profile = profile
|
||||
imap4.MemoryAccount.__init__(self, profile)
|
||||
self.addMailbox("Inbox") # We only manage Inbox for the moment
|
||||
debug('INBOX added')
|
||||
log.debug('INBOX added')
|
||||
|
||||
def _emptyMailbox(self, name, id):
|
||||
return SatMailbox(self.host, name, self.profile)
|
||||
|
|
@ -393,7 +390,7 @@ class ImapRealm(object):
|
|||
self.host = host
|
||||
|
||||
def requestAvatar(self, avatarID, mind, *interfaces):
|
||||
debug('requestAvatar')
|
||||
log.debug('requestAvatar')
|
||||
profile = avatarID.decode('utf-8')
|
||||
if imap4.IAccount not in interfaces:
|
||||
raise NotImplementedError
|
||||
|
|
@ -436,13 +433,13 @@ class ImapServerFactory(protocol.ServerFactory):
|
|||
self.host = host
|
||||
|
||||
def startedConnecting(self, connector):
|
||||
debug(_("IMAP server connection started"))
|
||||
log.debug(_("IMAP server connection started"))
|
||||
|
||||
def clientConnectionLost(self, connector, reason):
|
||||
debug(_("IMAP server connection lost (reason: %s)"), reason)
|
||||
log.debug(_("IMAP server connection lost (reason: %s)"), reason)
|
||||
|
||||
def buildProtocol(self, addr):
|
||||
debug("Building protocol")
|
||||
log.debug("Building protocol")
|
||||
prot = protocol.ServerFactory.buildProtocol(self, addr)
|
||||
prot.portal = portal.Portal(ImapRealm(self.host))
|
||||
prot.portal.registerChecker(SatProfileCredentialChecker(self.host))
|
||||
|
|
|
|||
Loading…
Reference in a new issue