diff options
Diffstat (limited to 'previousAttempts/jython/imapArchive.py')
-rw-r--r-- | previousAttempts/jython/imapArchive.py | 205 |
1 files changed, 0 insertions, 205 deletions
diff --git a/previousAttempts/jython/imapArchive.py b/previousAttempts/jython/imapArchive.py deleted file mode 100644 index f965c95..0000000 --- a/previousAttempts/jython/imapArchive.py +++ /dev/null @@ -1,205 +0,0 @@ -# -*- coding: utf-8 -*- -# note http://docs.python.org/lib/module-doctest.html -# resp. file:///usr/share/doc/python-docs-*/html/lib/module-doctest.html -# for testing -from __future__ import division -from java.util import Properties, Date -from java.lang import System -from javax.mail import * -from jarray import array -import sys, os -from datetime import date -from ConfigParser import ConfigParser - -debug=False - -def __getMessageDate(msg): - """ - Return the date of the message - - @param msg analyzed message - @return GregorianCalendar of the messages date - @throws MessagingException - """ - dateMS = msg.getReceivedDate().getTime()//1000 - dateStruct = date.fromtimestamp(dateMS) - return dateStruct - -class ArchivableFolder(list): - def __init__(self,source,year): - """ - Constructor for the folder. - - @param source folder from the messages should be archived - @param year int of the year for which the messages are - archived - """ - self.sourceFolder = source - targetName = self.__getArchiveFolderName(source.getFullName(), year) - self.targetFolder = self.sourceFolder.getFolder(targetName) - - def __getArchiveFolderName(self,srcFldName,year): - """ - @param folder string with the folder name - @param year int - @return - """ - archFolder = "INBOX/Archiv/" - rootLen = len("INBOX/") - if not(srcFldName[:rootLen]=="/INBOX/"): - raise FolderNotFoundException(\ - "We expect all folders to be under INBOX folder.") - baseName = srcFldName[rootLen:] - archFolder = "/" + archFolder + year + "/" + baseName - return archFolder - - def add(self,msg): - self.append(msg) - - def doArchive(self): - if debug: - for message in self: - print >>sys.stderr, "Moving %s from %s to %s." \ - % (message,self.sourceFolder.getFullName(), - self.targetFolder.getFullName()) - else: - self.sourceFolder.copyMessages(array(self,Message),\ - self.targetFolder) - for message in self: - message.setFlag(Flags.Flag.DELETED, true) - self.sourceFolder.expunge() - -class Archives(dict): - """Collects archivable folders indexed by tuple of - folderName and year - """ - def __init__(self): - pass - - def add(self,msg): - """ - Check whether the ArchivableFolder (@see ArchivableFolder) - for the particular year actually exists, and if not then create - it. In any event add - @param msg - """ - fld = msg.getFolder() - msgDate = __getMessageDate(msg) - year = msgDate.year - - if not(self.search(fld, year)): - archfld = ArchivableFolder(fld,year) - self[self.__createKey(fld,year)] = archfld - - def __createKey(self,name,year): - """ - Create a key for the list - @param fldName String with the full name of the folder - @param year int of the year of the messages to be stored - there - @return tuple consisting from the both parameters of - this function. - """ - return(name,year) - - def search(self,fld,year): - """ - Find out whether the object with the key consisting of - the folder name and year exists in this object. - - @param fld Folder where the message is stored - @param year int year of the message date - @return boolean saying whether the folder for this message - has been already added to this object. - """ - key = self.__createKey(fld.getFullName(), year) - return self.has_key(key) - - def archive(self): - for key in self: - self.doArchive() - -class ArchivedStore(object): - def __init__(self,paramServer="localhost",paramUser="",paramPassword=""): - self.props = System.getProperties() - self.session = Session.getInstance(self.props,None) - self.props.setProperty("javax.net.ssl.keyStore", "/home/matej/.keystore") - self.props.setProperty("javax.net.ssl.trustStore", "/home/matej/.keystore") - if debug: - self.session.setDebug(True) - try: - self.store = self.session.getStore("imaps") - except: - print >> sys.stderr, "Cannot get Store" - raise - - self._threeMonthAgo = date.today() - newmonth = self._threeMonthAgo.month-3 - self._threeMonthAgo = self._threeMonthAgo.replace(month=newmonth) - - conffile = os.path.expanduser("~/.bugzillarc") - confUser = ConfigParser() - defSection = "localhost" - user,host,port,password = self.props.getProperty("user.name"),\ - "localhost",993,"" - if confUser.read(conffile): - if confUser.has_section(defSection): - if confUser.has_option(defSection, "name"): - user = confUser.get(defSection, "name") - if confUser.has_option(defSection, "host"): - host = confUser.get(defSection, "host") - if confUser.has_option(defSection, "port"): - port = confUser.get(defSection, "port") - if confUser.has_option(defSection, "password"): - password = confUser.get(defSection, "password") - - if paramServer: - host=paramServer - if paramUser: - user=paramUser - if paramPassword: - password=paramPassword - - print >>sys.stderr,"host = %s, user = %s, password = %s" % \ - (host,user,password) - - self.__login(host,user,password) - - def __login(self,server,user,password): - try: - self.store.connect(server,user,password) - except: - print >> sys.stderr, "Cannot connect to %s as %s with password %s" %\ - (server,user,password) - raise - - def archive(self): - inboxfolder = self.store.getDefaultFolder().getFolder("INBOX") - folderList=inboxfolder.list('*') - - for folder in folderList: - if folder.getFullName()[:len("INBOX/Archiv")] != "INBOX/Archiv": - archMsgsCnt = self.__archiveFolder(folder) - #folder.close(False) - print "Processed messages = %d" % archMsgsCnt - - def __archiveFolder(self,fld): - fld.open(Folder.READ_WRITE) - for msg in fld.getMessages(): - msgDate = __getMessageDate(msg) - print >>sys.stderr,str(msgDate),str(self._threeMonthAgo) - if msgDate < self._threeMonthAgo: - archFolder = self.__getArchiveFolderName(msg) -# print >> sys.stderr, archFolder -# fld.copyMessages(array([msg],type(msg)), archFolder) -# msg.setFlag(Flags.Flag.DELETED, true) - print "%s -> %s : %s" % (fld.getFullName(), - archFolder.getFullName(),msgDate) - folderLen = len(fld.getMessages()) - fld.close(False) - return(folderLen) - -if __name__=='__main__': - myStore = ArchivedStore(paramPassword="lubdkc") - myStore.archive() - myStore.store.close()
\ No newline at end of file |