from tagging.models import Tag, TaggedItem

def prune_tags():
    """ Tag cleanup function.
    Deletes orphaned TaggedItems and unused Tags.
    Returns a tuple with number of deleted tags and taggeditems respectively """
    taggeditems = 0
    tags = 0
    
    # remove broken taggeditem references
    for t in TaggedItem.objects.all():
        if t.object is None:
            taggeditems += 1
            t.delete()
    
    # now remove orphaned tags
    for t in Tag.objects.all():
        if t.items.count() == 0:
            tags += 1
            t.delete()
    
    return (tags, taggeditems)

