~cyphermox/+junk/monitor-membership-split

« back to all changes in this revision

Viewing changes to monitor-membership.py

  • Committer: Mathieu Trudel-Lapierre
  • Date: 2017-05-10 17:14:01 UTC
  • Revision ID: mathieu.trudel-lapierre@canonical.com-20170510171401-te051rhn2yj18vtk
Split team membership changes by type.

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
        "%(name)s (~%(username)s) is in %(team)s and hasn't signed the CoC",
38
38
}
39
39
 
 
40
TITLES = {
 
41
    'coc': 'Code of Conduct signatures',
 
42
    'expired': 'Expirations',
 
43
    'joined': 'Arrivals',
 
44
    'left': 'Departures',
 
45
    'renewed': 'Renewals',
 
46
}
 
47
 
40
48
DATE_FORMAT = '%Y-%m-%d'
41
49
 
42
50
 
48
56
                                              'production')
49
57
        self.membership = {}
50
58
        self.changes = []
 
59
        self.changes_text = []
51
60
 
52
61
    def check_teams(self, teams):
53
62
        """Driver function: check differences, return changes
107
116
        """Convert a list of 4-tuples of: change, member, data, team
108
117
        to a list of strings describing the change.
109
118
        """
110
 
        output = []
 
119
        output = {}
111
120
        changes = sorted(changes, key=lambda change: (change[0], change[-1]))
112
121
        for change, member, data, team in changes:
113
122
            data = dict(data.iteritems())
119
128
            data['username'] = member
120
129
            data['team'] = team
121
130
            message = MESSAGES[change] % data
122
 
            output.append("* %s" % message)
 
131
            if not change in output.keys():
 
132
                output[change] = []
 
133
            output[change].append("* %s" % message)
123
134
        return output
124
135
 
125
136
    def current_members(self, team):
187
198
            print "No changes."
188
199
        return
189
200
 
190
 
    changes.insert(0, 'Team Membership changes:')
 
201
    changes_text = []
 
202
    changes_text.insert(0, 'Team Membership changes:')
 
203
 
 
204
    for key in sorted(changes.keys()):
 
205
        changes_text += [ "%s:" % TITLES[key] ]
 
206
        for line in changes[key]:
 
207
            changes_text += [ line ]
 
208
        changes_text += [ '' ]
 
209
 
191
210
    if not args.mail_to:
192
 
        for line in changes:
 
211
        for line in changes_text:
193
212
            print line
194
213
    else:
195
214
        if args.verbose:
196
215
            print "e-mailling changes..."
197
 
        changes += [
 
216
        changes_text += [
198
217
            '',
199
218
            '-- ',
200
219
            'Generated by '
203
222
        host, port = args.mail_server.split(':')
204
223
        port = int(port)
205
224
        connection = smtplib.SMTP(host, port)
206
 
        msg = email.MIMEText.MIMEText(u'\n'.join(changes).encode('utf-8'),
 
225
        msg = email.MIMEText.MIMEText(u'\n'.join(changes_text).encode('utf-8'),
207
226
                                      'plain', 'utf-8')
208
227
        msg['From'] = args.mail_from
209
228
        msg['To'] = args.mail_to