18
18
situation, but that's not a simple thing and this should do for now.
24
import cPickle as pickle
23
from lp.registry.scripts.teamparticipation import check_teamparticipation
26
from lp.registry.scripts.teamparticipation import (
27
check_teamparticipation_circular,
28
check_teamparticipation_consistency,
29
check_teamparticipation_self,
30
fetch_team_participation_info,
24
32
from lp.services.scripts.base import LaunchpadScript
35
def save(obj, filename):
36
"""Save a bz2 compressed pickle of `obj` to `filename`."""
37
fout = bz2.BZ2File(filename, "w")
39
pickle.dump(obj, fout, pickle.HIGHEST_PROTOCOL)
45
"""Load and return a bz2 compressed pickle from `filename`."""
46
fin = bz2.BZ2File(filename, "r")
48
return pickle.load(fin)
27
53
class CheckTeamParticipationScript(LaunchpadScript):
28
54
description = "Check for invalid/missing TeamParticipation entries."
56
def add_my_options(self):
57
self.parser.add_option(
58
"--load-participation-info",
59
dest="load_participation_info", metavar="FILE",
61
"File from which to load participation information "
62
"instead of going to the database."))
63
self.parser.add_option(
64
"--save-participation-info",
65
dest="save_participation_info", metavar="FILE",
67
"File in which to save participation information, for "
68
"later processing with --load-participation-info."))
31
check_teamparticipation(self.logger)
71
"""Perform various checks on the `TeamParticipation` table."""
72
if self.options.load_participation_info:
73
participation_info = load(self.options.load_participation_info)
75
participation_info = fetch_team_participation_info(self.logger)
77
check_teamparticipation_self(self.logger)
78
check_teamparticipation_circular(self.logger)
79
check_teamparticipation_consistency(self.logger, participation_info)
81
if self.options.save_participation_info:
82
save(participation_info, self.options.save_participation_info)
34
85
if __name__ == '__main__':