From 1d0456298e13d675c0da1b9ec02bbe6c656443ed Mon Sep 17 00:00:00 2001 From: Ralph Bean Date: Fri, 23 Aug 2013 14:39:05 +0000 Subject: [PATCH] Add a one-off script for awarding badges. --- roles/badges-backend/files/award-badge | 87 ++++++++++++++++++++++++++ roles/badges-backend/tasks/main.yml | 12 ++++ 2 files changed, 99 insertions(+) create mode 100644 roles/badges-backend/files/award-badge diff --git a/roles/badges-backend/files/award-badge b/roles/badges-backend/files/award-badge new file mode 100644 index 0000000000..6948c257e7 --- /dev/null +++ b/roles/badges-backend/files/award-badge @@ -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) diff --git a/roles/badges-backend/tasks/main.yml b/roles/badges-backend/tasks/main.yml index 42d9e1d1df..06bc5175a1 100644 --- a/roles/badges-backend/tasks/main.yml +++ b/roles/badges-backend/tasks/main.yml @@ -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