import bwpass

def demagify(something, vault):
    if isinstance(something, str):
        if something.startswith('!bwpass:'):
            return bwpass.password(something[8:])
        elif something.startswith('!bwpass_attr:'):
            identifier, attribute = something[13:].split(':', 1)
            return bwpass.attr(identifier, attribute)
        elif something.startswith('!decrypt:'):
            return vault.decrypt(something[9:])
        return something
    elif isinstance(something, dict):
        return {k:demagify(v, vault) for k,v in something.items()}
    elif isinstance(something, list):
        return [demagify(i, vault) for i in something]
    elif isinstance(something, set):
        return {demagify(i, vault) for i in something}
    elif isinstance(something, tuple):
        return tuple([demagify(i, vault) for i in something])
    return something
