#! /usr/bin/env python
#
# Daily issue maintenance
#

# Roundup boto uses several deprecated modules
import warnings
warnings.filterwarnings("ignore", "", DeprecationWarning, "roundup")

import sys
from roundup import instance
from roundup.date import Date
from roundup.date import Interval

# Change the following line to true to physically
# delete issues which are done and have had no activity
# in the last 3 months
expireOld = false

# open the instance
if len(sys.argv) != 2:
    print 'You need to specify an instance home dir'
instance_home = sys.argv[1]
inst = instance.open(instance_home)
db = inst.open('admin')

# Store commonly used id's
waiting_id = db.status.lookup('waiting')
done_id = db.status.lookup('done')
att_id = db.status.lookup('needs attention')

# Revive messages whose time has come
for id in db.issue.filter(None, { "revives": "-6m;.",
                                  "status": waiting_id }):
    db.issue.set(id, revives=None)
    db.issue.set(id, status=att_id)



# Expiry
if expireOld:
    for id in db.issue.filter(None, { "activity": "-99y;-3m",
                                      "status": done_id }):
        for id2 in db.issue.find(superseder=id):
            superseder = [ x for x in db.issue.get(id2, "superseder") \
                               if x != id ]
            # Setting this to None instead of [] produces an error in an auditor
            #if superseder == []:
            #    superseder = None
            #print "Setting superseder of issue ", id2, " to ", superseder
            db.issue.set(id2, superseder=superseder)
        #print "Destroying issue ", id
        for msg_id in db.issue.get(id, "messages"):
            if len(db.issue.find(messages=msg_id)) == 1:
                for file_id in db.msg.get(msg_id, "files"):
                    if len(db.msg.find(files=file_id)) == 1:
                        db.file.destroy(file_id)
                db.msg.destroy(msg_id)
            db.issue.destroy(id)

db.commit()
db.close()
