Add additional scripts
Both scripts help when cleaning up badges. All authorizations and all invitations as well as awardees need to be removed before the badge itself can be removed. There's no functionality in the web interface to see who's authorized for particular badges. Invitations are a bit of an undocumented feature. But I stumbled upon it trying to delete an old badge.
This commit is contained in:
parent
d0f7c7ca30
commit
96856df3e4
2 changed files with 148 additions and 0 deletions
69
roles/badges/backend/files/list-authorization
Normal file
69
roles/badges/backend/files/list-authorization
Normal file
|
@ -0,0 +1,69 @@
|
|||
#!/usr/bin/env python
|
||||
"""
|
||||
This is a CLI script for listing that are authorized on a badge.
|
||||
"""
|
||||
|
||||
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 tahrir_api.model
|
||||
|
||||
import fedmsg
|
||||
import fedmsg.config
|
||||
|
||||
import fedbadges.utils
|
||||
|
||||
|
||||
def parse_args():
|
||||
parser = argparse.ArgumentParser(__doc__)
|
||||
parser.add_argument('--badge', default=None, help="A badge id")
|
||||
args = parser.parse_args()
|
||||
if not args.badge:
|
||||
print "You must specify a badge id."
|
||||
sys.exit(1)
|
||||
return args
|
||||
|
||||
|
||||
def initialize():
|
||||
fm_config = fedmsg.config.load_config()
|
||||
fm_config['cert_prefix'] = 'fedbadges'
|
||||
fm_config['name'] = 'relay_inbound'
|
||||
fm_config['active'] = True
|
||||
fedmsg.init(**fm_config)
|
||||
uri = fm_config['badges_global']['database_uri']
|
||||
tahrir = TahrirDatabase(
|
||||
uri,
|
||||
notification_callback=fedbadges.utils.notification_callback,
|
||||
)
|
||||
return tahrir
|
||||
|
||||
|
||||
def main(tahrir, badge_id):
|
||||
badge = tahrir.get_badge(badge_id)
|
||||
|
||||
if not badge:
|
||||
print "No such badge %r" % badge_id
|
||||
sys.exit(1)
|
||||
|
||||
authz = tahrir.session.query(tahrir_api.model.Authorization)\
|
||||
.filter(tahrir_api.model.Authorization.badge_id==badge.id)\
|
||||
.all()
|
||||
|
||||
if not authz:
|
||||
print "no-one is authorized for %r badge..." % (badge_id)
|
||||
return
|
||||
|
||||
for person in [assertion.person for assertion in authz]:
|
||||
print person.nickname
|
||||
|
||||
if __name__ == '__main__':
|
||||
args = parse_args()
|
||||
tahrir = initialize()
|
||||
main(tahrir, args.badge)
|
79
roles/badges/backend/files/revoke-invitations
Normal file
79
roles/badges/backend/files/revoke-invitations
Normal file
|
@ -0,0 +1,79 @@
|
|||
#!/usr/bin/env python
|
||||
"""
|
||||
This is a CLI script for revoking all invitations on a badge.
|
||||
"""
|
||||
|
||||
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 tahrir_api.model
|
||||
|
||||
import fedmsg
|
||||
import fedmsg.config
|
||||
|
||||
import fedbadges.utils
|
||||
|
||||
|
||||
def parse_args():
|
||||
parser = argparse.ArgumentParser(__doc__)
|
||||
parser.add_argument('--badge', default=None, help="A badge id")
|
||||
args = parser.parse_args()
|
||||
if not args.badge:
|
||||
print "You must specify a badge id."
|
||||
sys.exit(1)
|
||||
return args
|
||||
|
||||
|
||||
def initialize():
|
||||
fm_config = fedmsg.config.load_config()
|
||||
fm_config['cert_prefix'] = 'fedbadges'
|
||||
fm_config['name'] = 'relay_inbound'
|
||||
fm_config['active'] = True
|
||||
fedmsg.init(**fm_config)
|
||||
uri = fm_config['badges_global']['database_uri']
|
||||
tahrir = TahrirDatabase(
|
||||
uri,
|
||||
notification_callback=fedbadges.utils.notification_callback,
|
||||
)
|
||||
return tahrir
|
||||
|
||||
|
||||
def main(tahrir, badge_id):
|
||||
badge = tahrir.get_badge(badge_id)
|
||||
|
||||
if not badge:
|
||||
print "No such badge %r" % badge_id
|
||||
sys.exit(1)
|
||||
|
||||
invites = tahrir.session.query(tahrir_api.model.Invitation)\
|
||||
.filter(tahrir_api.model.Invitation.badge_id==badge.id)\
|
||||
.all()
|
||||
|
||||
if not invites:
|
||||
print "There are no invitations on %r badge..." % badge_id
|
||||
return
|
||||
|
||||
print "Found %r invitation(s)" % len(invites)
|
||||
try:
|
||||
transaction.begin()
|
||||
for item in invites:
|
||||
print " deleting:", item
|
||||
tahrir.session.delete(item)
|
||||
tahrir.session.commit()
|
||||
transaction.commit()
|
||||
except Exception as e:
|
||||
transaction.abort()
|
||||
print "Failure:", e
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
args = parse_args()
|
||||
tahrir = initialize()
|
||||
main(tahrir, args.badge)
|
Loading…
Add table
Add a link
Reference in a new issue