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
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(