1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
#!/usr/bin/python -S
#
# Copyright 2009 Canonical Ltd. This software is licensed under the
# GNU Affero General Public License version 3 (see the file LICENSE).
# pylint: disable-msg=W0403
"""
Cron job that parses pending HWDB submissions.
Options:
-m, --max-submissions: (optional) The maximum number of submissions
which will be processed.
This script iterates over the HWDB submissions with the status
INVALID. It processes only submissions with an ID greater or equal
than the number specified by the file given a option -s.
When the script terminates, it writes the ID of the last processed
submission into this file.
Properly processed submissions are set to the status PROCESSED;
submissions that cannot be processed retain the status INVALID.
"""
import _pythonpath
from lp.services.scripts.base import LaunchpadCronScript
from lp.hardwaredb.scripts.hwdbsubmissions import (
reprocess_invalid_submissions)
class HWDBSubmissionProcessor(LaunchpadCronScript):
def add_my_options(self):
"""See `LaunchpadScript`."""
self.parser.add_option(
'-m', '--max-submissions',
help='Limit the number of submissions which will be processed.')
self.parser.add_option(
'-w', '--warnings', action="store_true", default=False,
help='Include warnings.')
self.parser.add_option(
'-s', '--start-file', default=None,
help=('The name of a file storing the smallest ID of a\n'
'hardware database submission that should be processed.\n'
'This script must have read and write access to the file.'))
def main(self):
max_submissions = self.options.max_submissions
if max_submissions is not None:
try:
max_submissions = int(self.options.max_submissions)
except ValueError:
self.logger.error(
'Invalid value for --max_submissions specified: %r.'
% max_submissions)
return
if max_submissions <= 0:
self.logger.error(
'--max_submissions must be a positive integer.')
return
if self.options.start_file is None:
self.logger.error('Option --start-file not specified.')
return
try:
start_file = open(self.options.start_file, 'r+')
start_id = start_file.read().strip()
except IOError, error:
self.logger.error(
'Cannot access file %s: %s' % (
self.options.start_file, error))
return
try:
start_id = int(start_id)
except ValueError:
self.logger.error(
'%s must contain only an integer' % self.options.start_file)
return
if start_id < 0:
self.logger.error(
'%s must contain a positive integer'
% self.options.start_file)
return
next_start = reprocess_invalid_submissions(
start_id, self.txn, self.logger,
max_submissions, self.options.warnings)
start_file.seek(0)
start_file.write('%i' % next_start)
start_file.close()
if __name__ == '__main__':
script = HWDBSubmissionProcessor(
'hwdbsubmissions', dbuser='hwdb-submission-processor')
script.lock_and_run()
|