Exemplo n.º 1
0
def createDomainConfig(domain, client_locales):
    """
    TODO: Cache?
    """
    config = json.decode(domain.content) if domain.content else {}

    # Fetch global values
    m = memcache.get_multi(['clicks_total', 'already_donated', 'already_clicked', 'eur_goal', 'eur_increment'])
    if 'already_clicked' not in m:
        memcache.set('already_clicked', ALREADY_CLICKED)
        already_clicked = ALREADY_CLICKED
    else:
        already_clicked = m['already_clicked']

    if 'already_donated' not in m:
        memcache.set('already_donated', ALREADY_DONATED)
        already_donated = ALREADY_DONATED
    else:
        already_donated = m['already_donated']

    if 'eur_goal' not in m:
        memcache.set('eur_goal', EUR_GOAL)
        goal = EUR_GOAL
    else:
        goal = m['eur_goal']

    if 'eur_increment' not in m:
        memcache.set('eur_increment', EUR_INCREMENT)
        increment = EUR_INCREMENT
    else:
        increment = m['eur_increment']

    clicks_total = m['clicks_total'] if 'clicks_total' in m else already_clicked
    clicks = clicks_total - already_clicked

    ## Plain values
    config['donated'] = float(already_donated)
    unlocked = already_donated + clicks * increment
    config['unlocked'] = unlocked
    config['percent'] = unlocked / goal
    config['clicks'] = clicks_total
    config['increment'] = increment

    # Create labels
    locale = 'en'
    if 'default_locale' in config:
        locale = config['default_locale']
        del config['default_locale']

    # Get client locale
    for client_locale in client_locales:
        if client_locale in config['__locales']:
            locale = client_locale
            break
    del config['__locales']
    f = Format(locale)
    labels = {
        'donated': f.decimalMoney(already_donated),
        'unlocked': f.money(unlocked),
        'clicks': f.decimal(clicks_total),
        'increment': f.money(increment)
    }
    if 'strings' in config:
        for key in config['strings'][locale]:
            if isinstance(config['strings'][locale][key], basestring):
                config[key] = config['strings'][locale][key]
                for labelkey in labels:
                    config[key] = config[key].replace('%' + labelkey + '%', labels[labelkey])
        del config['strings']
    return config