#!/usr/local/bin/python
import getopt
import isi.auth as auth
import sys

def dump_mappings():
    return map(lambda x: x[0], filter(lambda x: x, auth.idmap_iter()))

def delete_mapping(persona_str):
    try:
        p = auth.persona(persona_str)
        p.remove_mapping()
    except:
        return False
    return True

def get_options():
    if len(sys.argv) != 2 or sys.argv[1] != '--clean-idmap':
        print "Must specify --clean-idmap to clean the idmap database"
        sys.exit(1)
    return True

if __name__ == "__main__":
    get_options()
    success = 0
    failures = 0
    count = 0
    mappings = dump_mappings()
    total = len(mappings)
    if total == 0:
        print "Idmap database is already clean"
        sys.exit(0)
    sys.stdout.write("Attempting to clean up to %d mappings"%total)
    for mapping in mappings:
        if count % 10 == 0:
            sys.stdout.write('.')
        if delete_mapping(mapping):
            success += 1
        else:
            failures += 1
        count += 1
    sys.stdout.write('\n')
    print "Removed %d mappings."%success
    if failures:
        print "Failed to remove %d mappings."%failures
        sys.exit(1)
    sys.exit(0)
