~abentley/lp-dev-utils/ab-logging

« back to all changes in this revision

Viewing changes to peak-undecided.py

  • Committer: Curtis Hovey
  • Date: 2011-05-22 14:36:00 UTC
  • Revision ID: sinzui.is@verizon.net-20110522143600-410qea58xd4lczg6
Updated scripts for field change

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/python2.5
2
 
"""A script for looking a undecided projects that may have made a decsion."""
3
 
 
4
 
import sys
5
 
import optparse
6
 
 
7
 
import lpapi
8
 
 
9
 
from datetime import date
10
 
from lpscripts import LaunchpadAPIScript
11
 
 
12
 
 
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))
19
 
 
20
 
 
21
 
class PeakNeedsInformationProject(LaunchpadAPIScript):
22
 
    """Mark a project reviewed and approved."""
23
 
 
24
 
    USAGE = """\
25
 
%prog [options] --created-after <yyyy-mm-dd> --created-before <yyyy-mm-dd>
26
 
 
27
 
The dates are the range to find projects that can be reviewed.
28
 
"""
29
 
 
30
 
    def addParserOptions(self):
31
 
        """Add additional parse options."""
32
 
        super(PeakNeedsInformationProject, self).addParserOptions()
33
 
 
34
 
        self.parser.add_option(
35
 
            '-a', '--created-after',
36
 
            type='string', default='2009-04-01',
37
 
            dest='created_after',
38
 
            help="""\
39
 
The date the project was created after.""")
40
 
 
41
 
        self.parser.add_option(
42
 
            '-b', '--created-before',
43
 
            type='string', default='2020-01-01',
44
 
            dest='created_before',
45
 
            help="""\
46
 
The date the project was created before.""")
47
 
 
48
 
    def parseArgs(self):
49
 
        """Parse the arguments.
50
 
 
51
 
        Sets self.opts and self.args.
52
 
        """
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
61
 
 
62
 
    def project_has_releases(self, project):
63
 
        """Does the project has releases?"""
64
 
        has_releases = False
65
 
        for release_ in project.releases:
66
 
            has_releases = True
67
 
            break
68
 
        return has_releases
69
 
 
70
 
    @property
71
 
    def dont_know_yet_projects(self):
72
 
        """A generator of projects that cannot be approved without a license.
73
 
 
74
 
        This method returns all projects that are unreviewed and the license
75
 
        is 'I don't know yet'.
76
 
        """
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:
85
 
                continue
86
 
            if "I don't know yet" in licenses:
87
 
                yield project
88
 
 
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
95
 
 
96
 
    def run(self):
97
 
        """Process the projects."""
98
 
        print "Connecting..."
99
 
        sys.stdout.flush()
100
 
        try:
101
 
            self.lp = lpapi.lp_factory(self.opts.lpsystem, self.name)
102
 
        except lpapi.HTTPError, e:
103
 
            print "An error has occured contacting Launchpad."
104
 
            print e
105
 
            sys.exit(-1)
106
 
        print "done."
107
 
 
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)
112
 
        print "done."
113
 
        print "Reviewed %s projects." % self.reviewed_projects
114
 
 
115
 
 
116
 
if __name__ == "__main__":
117
 
    script = PeakNeedsInformationProject()
118
 
    script.run()