aboutsummaryrefslogtreecommitdiffstats
path: root/previousAttempts/jython/imapArchive.py
diff options
context:
space:
mode:
Diffstat (limited to 'previousAttempts/jython/imapArchive.py')
-rw-r--r--previousAttempts/jython/imapArchive.py205
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