From e6b8eab5fcb2b2fdc4726b91066b65e8ed524e72 Mon Sep 17 00:00:00 2001 From: Ralph Bean Date: Wed, 4 Sep 2013 18:11:39 +0000 Subject: [PATCH] Make the badge award cronjob more flexible. --- .../files/cron/award-oldschool-badges | 89 +++++++------------ 1 file changed, 34 insertions(+), 55 deletions(-) diff --git a/roles/badges-backend/files/cron/award-oldschool-badges b/roles/badges-backend/files/cron/award-oldschool-badges index ff873b3967..e93e3e7c63 100755 --- a/roles/badges-backend/files/cron/award-oldschool-badges +++ b/roles/badges-backend/files/cron/award-oldschool-badges @@ -35,8 +35,8 @@ fedmsg.init(**fm_config) import fedbadges.utils -def get_cla_signers(**config): - creds = config['fas_credentials'] +def get_fas_groupings(fas_credentials, lookup, **config): + creds = fas_credentials fasclient = fedora.client.fas2.AccountSystem( username=creds['username'], @@ -55,76 +55,54 @@ def get_cla_signers(**config): mega_list = request['people'] + request['unapproved_people'] + results = {} packager_id = None - clas, sponsors, provenpackagers, proventesters = [], [], [], [] for user in mega_list: - if any([group.name == 'cla_done' for group in user.memberships]): - clas.append(user) - if any([group.name == 'provenpackager' for group in user.memberships]): - provenpackagers.append(user) - if any([group.name == 'proventesters' for group in user.memberships]): - proventesters.append(user) + # This is the main check. + for group_name, badge_id in lookup: + if any([group.name == group_name for group in user.memberships]): + results[group_name] = results.get(group_name, []) + [user] - for group in user.memberships: - if group.name == 'packager': - packager_id = group.id + # This is special.. we're checking for being a packager-sponsor + if not packager_id: + for group in user.memberships: + if group.name == 'packager': + packager_id = group.id for role in user.roles: if role.group_id == packager_id: if role.role_type == 'sponsor' and role.role_status == 'approved': - sponsors.append(user) + results['sponsors'] = results.get('sponsors', []) + [user] - return clas, sponsors, provenpackagers, proventesters + return results def main(): d = {} print "fascache.db code is commented out -- querying fas." - clas, sponsors, provenpackagers, proventesters = \ - get_cla_signers(fas_credentials=fm_config['fas_credentials']) - d['clas'] = clas - d['sponsors'] = sponsors - d['provenpackagers'] = provenpackagers - d['proventesters'] = proventesters - # When running by hand, its often nice to use the code below instead of the code above. - #import shelve - #d = shelve.open("fascache.db") - #if not d: - # print "fascache.db not found.. querying fas." - # clas, sponsors, provenpackagers, proventesters = \ - # get_cla_signers(fas_credentials=dict( - # username="ralph", - # password=getpass.getpass(), - # )) - # d['clas'] = clas - # d['sponsors'] = sponsors - # d['provenpackagers'] = provenpackagers - # d['proventesters'] = proventesters - # d.sync() - #else: - # print "** using cached fas data **" + # A mapping of fas groups to badge ids + mapping = { + 'cla_done': 'involvement', + 'provenpackager': 'proven-packager', + 'proventesters': 'proven-tester', + 'ambassadors': 'ambassador', + 'sysadmin-main': 'trust-me-i-know-what-i-am-doing', + 'sysadmin-badges': 'inside-job', + 'sponsors': 'packager-sponsor', + } - clas, sponsors, provenpackagers, proventesters = \ - d['clas'], d['sponsors'], \ - d['provenpackagers'], d['proventesters'] + results = get_fas_groupings(fas_credentials=fm_config['fas_credentials'], + lookup=mapping) - print len(list(clas)), "clas in the end" - print len(list(sponsors)), "sponsors in the end" - print len(list(provenpackagers)), "provenpackagers in the end" - print len(list(proventesters)), "proventesters in the end" + for fas_group, members in results.iteritems(): + print fas_group, "had", len(members), "members for", mapping[fas_group] - badge = tahrir.get_badge(badge_id='involvement') - hit_em_up(badge, clas) - - badge = tahrir.get_badge(badge_id='packager-sponsor') - hit_em_up(badge, sponsors) - - badge = tahrir.get_badge(badge_id='proven-packager') - hit_em_up(badge, provenpackagers) - - badge = tahrir.get_badge(badge_id='proven-tester') - hit_em_up(badge, proventesters) + for fas_group, members in results.iteritmes(): + print "processing", fas_group + print "======================" + badge = tahrir.get_badge(badge_id=mapping[fas_group]) + hit_em_up(badge, members) def hit_em_up(badge, group): @@ -149,6 +127,7 @@ def hit_em_up(badge, group): transaction.abort() print "Failure:", e + if __name__ == '__main__': uri = fm_config['badges_global']['database_uri'] tahrir = TahrirDatabase(