#!@PYTHON@ # # Copyright (C) 2002 # # This file is part of the email2trac utils # # Copyright 2002 SURFsara # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # vi: # set ts=4 """ Author: Bas van der Vlies Date : 29 September 2205 Desc. : Delete Spam tickets from database. Else we get an lot of tickets Usage : delete_spam [ -f/--file -n/--dry-run -p/--project -v/--verbose] defaults: configfile = /etc/email2trac.conf SVN Info: $Id: delete_spam.py.in 632 2013-07-12 11:41:24Z bas $ """ import os import sys import getopt import shutil import ConfigParser def ReadConfig(file, name): """ Parse the config file """ if not os.path.isfile(file): print 'File %s does not exists' %file sys.exit(1) config = ConfigParser.ConfigParser() try: config.read(file) except ConfigParser.MissingSectionHeaderError,detail: print detail sys.exit(1) # Use given project name else use defaults # if name: if not config.has_section(name): print "Not an valid project name: %s" %name print "Valid names: %s" %config.sections() sys.exit(1) project = dict() for option in config.options(name): project[option] = config.get(name, option) else: project = config.defaults() return project def new_delete_spam(parameters): """ This only works for trac versions higher or equal then 0.10 """ debug = int(parameters['debug']) DRY_RUN = parameters['DRY_RUN'] VERBOSE = parameters['VERBOSE'] project = parameters['project'] env = Environment(project, create=0) db = env.get_db_cnx() cursor = db.cursor() cursor.execute("SELECT id FROM ticket WHERE component = 'Spam';") while 1: row = cursor.fetchone() if not row: break spam_id = row[0] if debug or DRY_RUN or VERBOSE: print "Deleting ticket %s" %spam_id try: tkt = Ticket(env, spam_id, db) except util.TracError, detail: print detail continue if DRY_RUN: print 'DRY_RUN: tkt.delete()' else: tkt.delete() if __name__ == '__main__': # Default config file # configfile = '@email2trac_conf@' virtualenv = '@virtualenv@' try: opts, args = getopt.getopt(sys.argv[1:], 'hf:np:v', ['help', 'file=', 'dry-run', 'project=', 'verbose']) except getopt.error,detail: print __doc__ print detail sys.exit(1) DRY_RUN = False VERBOSE = False project_name = None for opt,value in opts: if opt in [ '-h', '--help']: print __doc__ sys.exit(0) elif opt in ['-f', '--file']: configfile = value elif opt in ['-n', '--dry-run']: DRY_RUN = True elif opt in ['-p', '--project']: project_name = value elif opt in ['-v', '--verbose']: VERBOSE = True if virtualenv and os.path.exists(virtualenv): activate_this = os.path.join(virtualenv, 'bin/activate_this.py') if os.path.exists(activate_this): execfile(activate_this, dict(__file__=activate_this)) try: from trac import __version__ as trac_version from trac import config as trac_config from trac.env import Environment from trac.ticket import Ticket from trac import util except ImportError, detail: print "Can not find a a valid trac installation, solutions could be:" print "\tset PYTHONPATH" print "\tuse the --virtualenv option" sys.exit(1) # Determine major trac version used to be in email2trac.conf # Quick hack for 0.12 # l = trac_version.split('.') version = '.'.join(l[0:2]) if VERBOSE: print "Found trac version: %s" %version ## We only support versions 0.11 and 0.12 # if not version in ['0.11', '0.12', '1.0', '1,1']: print 'Trac version %s is not suported' %(version) settings = ReadConfig(configfile, project_name) if not settings.has_key('project'): print __doc__ print 'No project defined in config file, eg:\n\t project: /data/trac/bas' sys.exit(1) settings['DRY_RUN'] = DRY_RUN settings['VERBOSE'] = VERBOSE new_delete_spam(settings) print 'Spam is deleted succesfully..' # EOB