source: trunk/delete_spam.py.in @ 374

Last change on this file since 374 was 374, checked in by bas, 11 years ago

delete_spam.py.in:

  • version is a string
  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 4.0 KB
Line 
1#!@PYTHON@
2#
3# Copyright (C) 2002
4#
5# This file is part of the email2trac utils
6#
7# This program is free software; you can redistribute it and/or modify it
8# under the terms of the GNU General Public License as published by the
9# Free Software Foundation; either version 2, or (at your option) any
10# later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License
18# along with this program; if not, write to the Free Software
19# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
20#
21# vi:
22#       set ts=4
23"""
24Author: Bas van der Vlies
25Date  : 29 September 2205
26Desc. : Delete Spam tickets from database. Else we get an lot of
27        tickets
28
29Usage :
30        delete_spam [ -f/--file <configfile>  -n/--dry-run -p/--project <name> -v/--verbose]
31
32defaults:
33        configfile = /etc/email2trac.conf
34
35SVN Info:
36        $Id: delete_spam.py.in 374 2010-06-09 15:15:07Z bas $
37"""
38
39import os
40import sys
41import getopt
42import shutil
43import ConfigParser
44
45from trac import __version__ as trac_version
46
47def ReadConfig(file, name):
48        """
49        Parse the config file
50        """
51
52        if not os.path.isfile(file):
53                print 'File %s does not exists' %file
54                sys.exit(1)
55
56        config = ConfigParser.ConfigParser()
57        try:
58                config.read(file)
59        except ConfigParser.MissingSectionHeaderError,detail:
60                print detail
61                sys.exit(1)
62
63        # Use given project name else use defaults
64        #
65        if name:
66                if not config.has_section(name):
67                        print "Not an valid project name: %s" %name
68                        print "Valid names: %s" %config.sections()
69                        sys.exit(1)
70
71                project =  dict()
72                for option in  config.options(name):
73                        project[option] = config.get(name, option)
74
75        else:
76                project = config.defaults()
77
78        return project
79
80
81
82def new_delete_spam(parameters):
83        """
84        This only works for trac versions higher or equal then 0.10
85        """
86
87        debug = int(parameters['debug'])
88        DRY_RUN = parameters['DRY_RUN']
89        VERBOSE = parameters['VERBOSE']
90
91        project = parameters['project']
92
93
94        env = Environment(project, create=0)
95        db = env.get_db_cnx()
96
97        cursor = db.cursor()
98        cursor.execute("SELECT id FROM ticket WHERE  component = 'Spam';")
99        while 1:
100                row = cursor.fetchone()
101                if not row:
102                        break
103
104                spam_id =  row[0]
105
106                if debug or DRY_RUN or VERBOSE:
107                        print "Deleting ticket %s" %spam_id
108
109                try:
110                        tkt = Ticket(env, spam_id, db)
111                except util.TracError, detail:
112                        print detail
113                        continue
114
115                if DRY_RUN:
116                        print 'DRY_RUN: tkt.delete()'
117                else:
118                        tkt.delete()
119
120if __name__ == '__main__':
121        # Default config file
122        #
123        configfile = '@email2trac_conf@'
124
125
126        try:
127                 opts, args = getopt.getopt(sys.argv[1:], 'hf:np:v', ['help', 'file=', 'dry-run', 'project=', 'verbose'])
128        except getopt.error,detail:
129                print __doc__
130                print detail
131                sys.exit(1)
132
133        DRY_RUN = False
134        VERBOSE = False
135        project_name = None
136
137        for opt,value in opts:
138                if opt in [ '-h', '--help']:
139                        print __doc__
140                        sys.exit(0)
141                elif opt in ['-f', '--file']:
142                        configfile = value
143                elif opt in ['-n', '--dry-run']:
144                        DRY_RUN = True
145                elif opt in ['-p', '--project']:
146                        project_name = value
147                elif opt in ['-v', '--verbose']:
148                        VERBOSE = True
149
150        # Determine major trac version used to be in email2trac.conf
151        # Quick hack for 0.12
152        #
153        version = '0.%s' %(trac_version.split('.')[1])
154        if version.startswith('0.12'):
155                version = '0.12'
156
157        if VERBOSE:
158                print "Found trac version: %s" %version
159
160        ## We only support versions 0.11 and 0.12
161        #
162        if not version in ['0.11', '0.12']:
163                print 'Trac version %s is not suported' %(version)
164
165        settings = ReadConfig(configfile, project_name)
166        if not settings.has_key('project'):
167                print __doc__
168                print 'No project defined in config file, eg:\n\t project: /data/trac/bas'
169                sys.exit(1)
170
171        settings['DRY_RUN'] = DRY_RUN
172        settings['VERBOSE'] = VERBOSE
173
174        from trac.env import Environment
175        from trac.ticket import Ticket
176        from trac import util
177
178
179
180        new_delete_spam(settings)
181
182        print 'Spam is deleted succesfully..'
183# EOB
Note: See TracBrowser for help on using the repository browser.