2
"""A script for looking a undecided projects that may have made a decsion."""
9
from datetime import date
10
from lpscripts import LaunchpadAPIScript
13
def string_isodate_to_date(string_isodate):
14
"""Return a Date for the string representation."""
15
if 'T' in string_isodate:
16
string_isodate, rest_ = string_isodate.split('T', 1)
17
year, month, day = string_isodate.split('-')
18
return date(int(year), int(month), int(day))
21
class PeakNeedsInformationProject(LaunchpadAPIScript):
22
"""Mark a project reviewed and approved."""
25
%prog [options] --created-after <yyyy-mm-dd> --created-before <yyyy-mm-dd>
27
The dates are the range to find projects that can be reviewed.
30
def addParserOptions(self):
31
"""Add additional parse options."""
32
super(PeakNeedsInformationProject, self).addParserOptions()
34
self.parser.add_option(
35
'-a', '--created-after',
36
type='string', default='2009-04-01',
39
The date the project was created after.""")
41
self.parser.add_option(
42
'-b', '--created-before',
43
type='string', default='2020-01-01',
44
dest='created_before',
46
The date the project was created before.""")
49
"""Parse the arguments.
51
Sets self.opts and self.args.
53
self.parser = optparse.OptionParser(
54
self.USAGE, conflict_handler="resolve")
55
self.addParserOptions()
56
self.opts, self.args = self.parser.parse_args()
57
if '' in (self.opts.created_after, self.opts.created_before):
58
self.parser.error('Missing dates')
59
# The is nothing to follow up.
60
self.opts.rtm_address = None
62
def project_has_releases(self, project):
63
"""Does the project has releases?"""
65
for release_ in project.releases:
71
def dont_know_yet_projects(self):
72
"""A generator of projects that cannot be approved without a license.
74
This method returns all projects that are unreviewed and the license
75
is 'I don't know yet'.
77
created_after = self.opts.created_after
78
created_before = self.opts.created_before
79
unreviewed_projects = self.lp.projects.licensing_search(
80
active=True, license_reviewed=True, has_zero_licenses=False,
81
created_after=created_after, created_before=created_before)
82
for project in unreviewed_projects:
83
licenses = project.licenses
84
if 'Other/Proprietary' in licenses:
86
if "I don't know yet" in licenses:
89
def process_project(self, project):
90
"""See `LaunchpadAPIScript`."""
91
if (project.development_focus.branch is not None
92
or self.project_has_releases(project)):
93
print "%s has code" % project.name
94
self.reviewed_projects += 1
97
"""Process the projects."""
101
self.lp = lpapi.lp_factory(self.opts.lpsystem, self.name)
102
except lpapi.HTTPError, e:
103
print "An error has occured contacting Launchpad."
108
self.reviewed_projects = 0
109
print "Looking for undecided license projects..."
110
for project in self.dont_know_yet_projects:
111
self.process_project(project)
113
print "Reviewed %s projects." % self.reviewed_projects
116
if __name__ == "__main__":
117
script = PeakNeedsInformationProject()