annotate contrib/mark_spam.py @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 #!/usr/bin/env python3
kono
parents:
diff changeset
2 #
kono
parents:
diff changeset
3 # Script to mark bunch of PRs as spam
kono
parents:
diff changeset
4 #
kono
parents:
diff changeset
5 # This file is part of GCC.
kono
parents:
diff changeset
6 #
kono
parents:
diff changeset
7 # GCC is free software; you can redistribute it and/or modify it under
kono
parents:
diff changeset
8 # the terms of the GNU General Public License as published by the Free
kono
parents:
diff changeset
9 # Software Foundation; either version 3, or (at your option) any later
kono
parents:
diff changeset
10 # version.
kono
parents:
diff changeset
11 #
kono
parents:
diff changeset
12 # GCC is distributed in the hope that it will be useful, but WITHOUT ANY
kono
parents:
diff changeset
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or
kono
parents:
diff changeset
14 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
kono
parents:
diff changeset
15 # for more details.
kono
parents:
diff changeset
16 #
kono
parents:
diff changeset
17 # You should have received a copy of the GNU General Public License
kono
parents:
diff changeset
18 # along with GCC; see the file COPYING3. If not see
kono
parents:
diff changeset
19 # <http://www.gnu.org/licenses/>. */
kono
parents:
diff changeset
20 #
kono
parents:
diff changeset
21 #
kono
parents:
diff changeset
22 #
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 import requests
kono
parents:
diff changeset
25 import json
kono
parents:
diff changeset
26 import argparse
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 base_url = 'https://gcc.gnu.org/bugzilla/rest.cgi/'
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 def mark_as_spam(id, api_key, verbose):
kono
parents:
diff changeset
31 print('Marking as spam: PR%d' % id)
kono
parents:
diff changeset
32 # 1) get bug info to find 'cc'
kono
parents:
diff changeset
33 u = base_url + 'bug/' + str(id)
kono
parents:
diff changeset
34 r = requests.get(u)
kono
parents:
diff changeset
35 response = json.loads(r.text)
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 if 'error' in response and response['error']:
kono
parents:
diff changeset
38 print(response['message'])
kono
parents:
diff changeset
39 return
kono
parents:
diff changeset
40
kono
parents:
diff changeset
41 # 2) mark the bug as spam
kono
parents:
diff changeset
42 bug = response['bugs'][0]
kono
parents:
diff changeset
43 creator = bug['creator']
kono
parents:
diff changeset
44 cc_list = bug['cc']
kono
parents:
diff changeset
45 data = {
kono
parents:
diff changeset
46 'status': 'RESOLVED',
kono
parents:
diff changeset
47 'resolution': 'INVALID',
kono
parents:
diff changeset
48 'summary': 'spam',
kono
parents:
diff changeset
49 'ids': [id],
kono
parents:
diff changeset
50 'api_key': api_key,
kono
parents:
diff changeset
51 'comment': { 'comment': 'spam'},
kono
parents:
diff changeset
52 'product': 'gcc',
kono
parents:
diff changeset
53 'component': 'spam',
kono
parents:
diff changeset
54 'version': 'unknown',
kono
parents:
diff changeset
55 'cc': {'remove': cc_list},
kono
parents:
diff changeset
56 'priority': 'P5',
kono
parents:
diff changeset
57 'severity': 'trivial',
kono
parents:
diff changeset
58 'url': '',
kono
parents:
diff changeset
59 'assigned_to': 'unassigned@gcc.gnu.org' }
kono
parents:
diff changeset
60
kono
parents:
diff changeset
61 r = requests.put(u, json = data)
kono
parents:
diff changeset
62 if verbose:
kono
parents:
diff changeset
63 print(r)
kono
parents:
diff changeset
64 print(r.text)
kono
parents:
diff changeset
65
kono
parents:
diff changeset
66 # 3) mark the first comment as spam
kono
parents:
diff changeset
67 r = requests.get(u + '/comment')
kono
parents:
diff changeset
68 response = json.loads(r.text)
kono
parents:
diff changeset
69 for c in response['bugs'][str(id)]['comments']:
kono
parents:
diff changeset
70 if c['creator'] == creator:
kono
parents:
diff changeset
71 comment_id = c['id']
kono
parents:
diff changeset
72 u2 = '%sbug/comment/%d/tags' % (base_url, comment_id)
kono
parents:
diff changeset
73 print(u2)
kono
parents:
diff changeset
74 r = requests.put(u2, json = {'comment_id': comment_id, 'add': ['spam'], 'api_key': api_key})
kono
parents:
diff changeset
75 if verbose:
kono
parents:
diff changeset
76 print(r)
kono
parents:
diff changeset
77 print(r.text)
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 # 4) mark all attachments as spam
kono
parents:
diff changeset
80 r = requests.get(u + '/attachment')
kono
parents:
diff changeset
81 response = json.loads(r.text)
kono
parents:
diff changeset
82 attachments = response['bugs'][str(id)]
kono
parents:
diff changeset
83 for a in attachments:
kono
parents:
diff changeset
84 attachment_id = a['id']
kono
parents:
diff changeset
85 url = '%sbug/attachment/%d' % (base_url, attachment_id)
kono
parents:
diff changeset
86 r = requests.put(url, json = {'ids': [attachment_id],
kono
parents:
diff changeset
87 'summary': 'spam',
kono
parents:
diff changeset
88 'file_name': 'spam',
kono
parents:
diff changeset
89 'content_type': 'application/x-spam',
kono
parents:
diff changeset
90 'is_obsolete': True,
kono
parents:
diff changeset
91 'api_key': api_key})
kono
parents:
diff changeset
92 if verbose:
kono
parents:
diff changeset
93 print(r)
kono
parents:
diff changeset
94 print(r.text)
kono
parents:
diff changeset
95
kono
parents:
diff changeset
96 parser = argparse.ArgumentParser(description='Mark Bugzilla issues as spam.')
kono
parents:
diff changeset
97 parser.add_argument('api_key', help = 'API key')
kono
parents:
diff changeset
98 parser.add_argument('range', help = 'Range of IDs, e.g. 10-23,24,25,27')
kono
parents:
diff changeset
99 parser.add_argument('--verbose', action = 'store_true', help = 'Verbose logging')
kono
parents:
diff changeset
100
kono
parents:
diff changeset
101 args = parser.parse_args()
kono
parents:
diff changeset
102
kono
parents:
diff changeset
103 chunks = args.range.split(',')
kono
parents:
diff changeset
104 for c in chunks:
kono
parents:
diff changeset
105 parts = list(map(lambda x: int(x), c.split('-')))
kono
parents:
diff changeset
106 if len(parts) == 1:
kono
parents:
diff changeset
107 r = [parts[0]]
kono
parents:
diff changeset
108 else:
kono
parents:
diff changeset
109 r = range(parts[0], parts[1] + 1)
kono
parents:
diff changeset
110
kono
parents:
diff changeset
111 for id in r:
kono
parents:
diff changeset
112 mark_as_spam(id, args.api_key, args.verbose)