Make the badge award cronjob more flexible.

This commit is contained in:
Ralph Bean 2013-09-04 18:11:39 +00:00
parent 76a44ec771
commit e6b8eab5fc

View file

@ -35,8 +35,8 @@ fedmsg.init(**fm_config)
import fedbadges.utils import fedbadges.utils
def get_cla_signers(**config): def get_fas_groupings(fas_credentials, lookup, **config):
creds = config['fas_credentials'] creds = fas_credentials
fasclient = fedora.client.fas2.AccountSystem( fasclient = fedora.client.fas2.AccountSystem(
username=creds['username'], username=creds['username'],
@ -55,16 +55,16 @@ def get_cla_signers(**config):
mega_list = request['people'] + request['unapproved_people'] mega_list = request['people'] + request['unapproved_people']
results = {}
packager_id = None packager_id = None
clas, sponsors, provenpackagers, proventesters = [], [], [], []
for user in mega_list: for user in mega_list:
if any([group.name == 'cla_done' for group in user.memberships]): # This is the main check.
clas.append(user) for group_name, badge_id in lookup:
if any([group.name == 'provenpackager' for group in user.memberships]): if any([group.name == group_name for group in user.memberships]):
provenpackagers.append(user) results[group_name] = results.get(group_name, []) + [user]
if any([group.name == 'proventesters' for group in user.memberships]):
proventesters.append(user)
# This is special.. we're checking for being a packager-sponsor
if not packager_id:
for group in user.memberships: for group in user.memberships:
if group.name == 'packager': if group.name == 'packager':
packager_id = group.id packager_id = group.id
@ -72,59 +72,37 @@ def get_cla_signers(**config):
for role in user.roles: for role in user.roles:
if role.group_id == packager_id: if role.group_id == packager_id:
if role.role_type == 'sponsor' and role.role_status == 'approved': 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(): def main():
d = {} d = {}
print "fascache.db code is commented out -- querying fas." 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. # A mapping of fas groups to badge ids
#import shelve mapping = {
#d = shelve.open("fascache.db") 'cla_done': 'involvement',
#if not d: 'provenpackager': 'proven-packager',
# print "fascache.db not found.. querying fas." 'proventesters': 'proven-tester',
# clas, sponsors, provenpackagers, proventesters = \ 'ambassadors': 'ambassador',
# get_cla_signers(fas_credentials=dict( 'sysadmin-main': 'trust-me-i-know-what-i-am-doing',
# username="ralph", 'sysadmin-badges': 'inside-job',
# password=getpass.getpass(), 'sponsors': 'packager-sponsor',
# )) }
# d['clas'] = clas
# d['sponsors'] = sponsors
# d['provenpackagers'] = provenpackagers
# d['proventesters'] = proventesters
# d.sync()
#else:
# print "** using cached fas data **"
clas, sponsors, provenpackagers, proventesters = \ results = get_fas_groupings(fas_credentials=fm_config['fas_credentials'],
d['clas'], d['sponsors'], \ lookup=mapping)
d['provenpackagers'], d['proventesters']
print len(list(clas)), "clas in the end" for fas_group, members in results.iteritems():
print len(list(sponsors)), "sponsors in the end" print fas_group, "had", len(members), "members for", mapping[fas_group]
print len(list(provenpackagers)), "provenpackagers in the end"
print len(list(proventesters)), "proventesters in the end"
badge = tahrir.get_badge(badge_id='involvement') for fas_group, members in results.iteritmes():
hit_em_up(badge, clas) print "processing", fas_group
print "======================"
badge = tahrir.get_badge(badge_id='packager-sponsor') badge = tahrir.get_badge(badge_id=mapping[fas_group])
hit_em_up(badge, sponsors) hit_em_up(badge, members)
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)
def hit_em_up(badge, group): def hit_em_up(badge, group):
@ -149,6 +127,7 @@ def hit_em_up(badge, group):
transaction.abort() transaction.abort()
print "Failure:", e print "Failure:", e
if __name__ == '__main__': if __name__ == '__main__':
uri = fm_config['badges_global']['database_uri'] uri = fm_config['badges_global']['database_uri']
tahrir = TahrirDatabase( tahrir = TahrirDatabase(