from django import template
import _winreg, os.path

register = template.Library()

# Define the full path to the registry location 
# id = PATH\stringvalue
#
# Only expose a few settings...The alternative is to pass this as a parameter from the template.
str_paths = dict( 
    computername = r'SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName\ComputerName',
    spamcount = r'SOFTWARE\Spam\CurrentNumberOfEggs',
    eggcount = r'SOFTWARE\Spam\CurrentNumberOfSpam'
)

@register.filter
def registry( server, reg ):
    '''
    Example usages:
        {% server|registry:"computername" %} to query server's registry setting for str_paths['computername'].
        {% server|registry:"spamcount" %} to query server's registry setting for str_paths['spamcount'].
        {% server|registry:"eggcount" %} to query server's registry setting for str_paths['eggcount'].
    
    '''
    conn, regkey, val = None, None, ('','')
    try:
        regpath, var = os.path.split( str_paths[reg] )
        conn = _winreg.ConnectRegistry(r'\\%s' % server, _winreg.HKEY_LOCAL_MACHINE)
        regkey = _winreg.OpenKey( conn, regpath )
        val = _winreg.QueryValueEx(regkey, var)
    except Exception, e:
        pass
        
    if conn: _winreg.CloseKey( conn )
    if regkey: _winreg.CloseKey( regkey )
    
    return val[0]
