Add a one-off script for awarding badges.

This commit is contained in:
Ralph Bean 2013-08-23 14:39:05 +00:00
parent 06b7bffd02
commit 1d0456298e
2 changed files with 99 additions and 0 deletions

View file

@ -0,0 +1,87 @@
#!/usr/bin/env python
""" This is a CLI script for awarding a single badge to a single person.
The intent is to use it to batch award a badge to a list of people.
"""
import __main__
__main__.__requires__ = __requires__ = ["tahrir-api", "sqlalchemy>=0.7"];
import pkg_resources
pkg_resources.require(__requires__)
import argparse
import transaction
import sys
from tahrir_api.dbapi import TahrirDatabase
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 parse_args():
parser = argparse.ArgumentParser(__doc__)
parser.add_argument('--user', default=None, help="A FAS username")
parser.add_argument('--badge', default=None, help="A badge id")
args = parser.parse_args()
if not parser.user:
print "You must specify a FAS username."
sys.exit(1)
if not parser.badge:
print "You must specify a badge id."
sys.exit(1)
return args
def main(tahrir, nickname, badge_id):
person = tahrir.get_person(nickname=nickname)
badge = tahrir.get_badge(badge_id)
if not person:
print "No such person %r" % nickname
sys.exit(1)
if not badge:
print "No such badge %r" % badge_id
sys.exit(1)
already_has_it = [assertion.person for assertion in badge.assertions]
if person in already_has_it:
print "%r already has the badge..."
return
print person.nickname, "totally gets the mugshot badge."
try:
transaction.begin()
tahrir.add_assertion(badge.id, person.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=person.nickname,
badges_user_id=person.id,
),
))
except Exception as e:
transaction.abort()
print "Failure:", e
if __name__ == '__main__':
args = parse_args()
uri = fm_config['badges_global']['database_uri']
tahrir = TahrirDatabase(uri)
main(tahrir, username, badge_id)

View file

@ -108,3 +108,15 @@
tags:
- config
- cron
- name: copy over the badge-admin one-off scripts
copy: >
src=$item
dest=/usr/local/bin/$item
owner=root
group=sysadmin-badges
mode=770
with_items:
- award-badge
tags:
- scripts