Try out this badge awarder as a cronjob.
This commit is contained in:
parent
69fab89a0c
commit
332db02c1c
3 changed files with 195 additions and 0 deletions
156
roles/badges-backend/files/cron/award-oldschool-badges
Normal file
156
roles/badges-backend/files/cron/award-oldschool-badges
Normal file
|
@ -0,0 +1,156 @@
|
|||
import __main__
|
||||
# This is going to require sqlalchemy 0.8 sooner than later.
|
||||
__main__.__requires__ = __requires__ = ["tahrir-api", "sqlalchemy>=0.7"];
|
||||
import pkg_resources
|
||||
pkg_resources.require(__requires__)
|
||||
|
||||
import time
|
||||
import urllib
|
||||
import socket
|
||||
from hashlib import md5
|
||||
import getpass
|
||||
import pprint
|
||||
|
||||
from tahrir_api.dbapi import TahrirDatabase
|
||||
import transaction
|
||||
|
||||
|
||||
_fas_cache = {}
|
||||
|
||||
import logging
|
||||
log = logging.getLogger()
|
||||
logging.basicConfig()
|
||||
import fedora.client.fas2
|
||||
|
||||
|
||||
import fedmsg
|
||||
import fedmsg.config
|
||||
|
||||
fm_config = fedmsg.config.load_config()
|
||||
fm_config['cert_prefix'] = 'fedbadges'
|
||||
fm_config['name'] = 'relay_inbound'
|
||||
fm_config['active'] = True
|
||||
fedmsg.init(**fm_config)
|
||||
|
||||
|
||||
def get_cla_signers(**config):
|
||||
creds = config['fas_credentials']
|
||||
|
||||
fasclient = fedora.client.fas2.AccountSystem(
|
||||
username=creds['username'],
|
||||
password=creds['password'],
|
||||
)
|
||||
|
||||
timeout = socket.getdefaulttimeout()
|
||||
socket.setdefaulttimeout(600)
|
||||
try:
|
||||
log.info("Downloading FAS cache")
|
||||
request = fasclient.send_request('/user/list',
|
||||
req_params={'search': '*'},
|
||||
auth=True)
|
||||
finally:
|
||||
socket.setdefaulttimeout(timeout)
|
||||
|
||||
mega_list = request['people'] + request['unapproved_people']
|
||||
print len(mega_list), "people in total"
|
||||
print len(request['people']), "'people'"
|
||||
print len(request['unapproved_people']), "'unapproved'"
|
||||
|
||||
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)
|
||||
|
||||
return clas, sponsors, provenpackagers, proventesters
|
||||
|
||||
|
||||
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 **"
|
||||
|
||||
clas, sponsors, provenpackagers, proventesters = \
|
||||
d['clas'], d['sponsors'], \
|
||||
d['provenpackagers'], d['proventesters']
|
||||
|
||||
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"
|
||||
|
||||
|
||||
print "Awarding for involvement."
|
||||
badge = tahrir.get_badge(badge_id='involvement')
|
||||
hit_em_up(badge, clas)
|
||||
|
||||
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):
|
||||
for fas_user in group:
|
||||
email = fas_user.username + "@fedoraproject.org"
|
||||
user = tahrir.get_person(email)
|
||||
|
||||
if not user:
|
||||
continue
|
||||
|
||||
if tahrir.assertion_exists(badge.id, email):
|
||||
print email, "already has", badge.id, "skipping."
|
||||
continue
|
||||
|
||||
time.sleep(1)
|
||||
print "awarding", badge.id, "to", email
|
||||
try:
|
||||
transaction.begin()
|
||||
tahrir.add_assertion(badge.id, email, None)
|
||||
transaction.commit()
|
||||
fedmsg.publish(topic="badge.award",
|
||||
modname="fedbadges",
|
||||
msg=dict(
|
||||
badge=dict(
|
||||
name=badge.name,
|
||||
description=badge.description,
|
||||
image_url=badge.image,
|
||||
),
|
||||
user=dict(
|
||||
username=user.nickname,
|
||||
badges_user_id=user.id,
|
||||
),
|
||||
))
|
||||
except Exception as e:
|
||||
transaction.abort()
|
||||
print "Failure:", e
|
||||
|
||||
uri = fm_config['badges_global']['database_uri']
|
||||
tahrir = TahrirDatabase(uri)
|
||||
main()
|
|
@ -0,0 +1 @@
|
|||
*/25 * * * * fedmsg /usr/share/badges/cronjobs/award-oldschool-badges
|
|
@ -54,3 +54,41 @@
|
|||
- badges
|
||||
notify:
|
||||
- restart fedmsg-hub
|
||||
|
||||
|
||||
- name: ensure badges cron directories exist
|
||||
file: >
|
||||
state=directory
|
||||
path=$item
|
||||
mode=755
|
||||
owner=root
|
||||
with_items:
|
||||
- /usr/share/badges/cronjobs/
|
||||
- /etc/cron.d/
|
||||
tags:
|
||||
- config
|
||||
- cron
|
||||
|
||||
- name: oldschool badge award scripts
|
||||
copy: >
|
||||
src=$item
|
||||
dest=/usr/share/badges/cronjobs/$item
|
||||
owner=root
|
||||
mode=644
|
||||
with_items:
|
||||
- award-oldschool-badges
|
||||
tags:
|
||||
- config
|
||||
- cron
|
||||
|
||||
- name: oldschool badge award cronjobs
|
||||
copy: >
|
||||
src=$item
|
||||
dest=/etc/cron.d/$item
|
||||
owner=root
|
||||
mode=644
|
||||
with_items:
|
||||
- award-oldschool-badges
|
||||
tags:
|
||||
- config
|
||||
- cron
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue