Better API.

fix #357
This commit is contained in:
Antoine Nguyen
2013-01-02 16:19:16 +01:00
parent 1063b20070
commit bc9cbd30b1
3 changed files with 57 additions and 40 deletions
+1 -19
View File
@@ -481,28 +481,10 @@ def viewsettings(request, tplname='admin/settings_header.html'):
@login_required
@user_passes_test(lambda u: u.is_superuser)
def viewparameters(request, tplname='admin/parameters.html'):
apps = sorted(parameters._params.keys())
gparams = []
for app in apps:
tmp = {"name" : app, "params" : []}
for p in parameters._params_order[app]['A']:
param_def = parameters._params[app]['A'][p]
newdef = {"name" : p,
"value" : parameters.get_admin(p, app=app),
"help" : param_def["help"],
"default" : param_def["deflt"],
"type" : param_def["type"]}
for k in ["values", "visible_if"]:
if k in param_def.keys():
newdef[k] = param_def[k]
tmp["params"] += [newdef]
gparams += [tmp]
return ajax_simple_response({
"status" : "ok",
"left_selection" : "parameters",
"content" : render_to_string(tplname, {"gparams" : gparams})
"content" : render_to_string(tplname, {"gparams" : parameters.get_all_admin_parameters()})
})
@login_required
+55 -1
View File
@@ -1,8 +1,9 @@
# -*- coding: utf-8 -*-
# coding: utf-8
import string
import inspect
import re
import copy
"""
This interface provides a simple way to declare and store parameters
@@ -211,6 +212,24 @@ def get_admin(name, app=None):
return _params[app]["A"][name]["deflt"]
return p.value.decode("unicode_escape")
def get_all_admin_parameters():
"""Retrieve all administrative parameters
Returned parameters are sorted by application
:return: a list of dictionaries
"""
result = []
for app in sorted(_params.keys()):
tmp = {"name" : app, "params" : []}
for p in _params_order[app]['A']:
newdef = copy.deepcopy(_params[app]['A'][p])
newdef["name"] = p
newdef["value"] = get_admin(p, app=app)
tmp["params"] += [newdef]
result += [tmp]
return result
def get_user(user, name, app=None):
from models import UserParameter
@@ -223,7 +242,42 @@ def get_user(user, name, app=None):
return _params[app]["U"][name]["deflt"]
return p.value.decode("unicode_escape")
def get_all_user_params(user):
"""Retrieve all the parameters of the given user
Returned parameters are sorted by application.
:param user: a ``User`` object
:return: a list of dictionaries
"""
result = []
for app in sorted(_params.keys()):
if not len(_params[app]['U']):
continue
if get_app_option('U', 'needs_mailbox', False, app=app) \
and not user.has_mailbox:
continue
tmp = {"name" : app, "params" : []}
for p in _params_order[app]['U']:
param_def = _params[app]['U'][p]
newdef = copy.deepcopy(param_def)
newdef["name"] = p
newdef["value"] = get_user(user, p, app=app)
tmp["params"] += [newdef]
result += [tmp]
return result
def get_app_option(lvl, name, dflt, app=None):
"""Retrieve a specific option for a given application
If the option is not found, a default value is returned.
:param lvl: the option's level (U or A)
:param name: the option's name
:param dflt: the default value to return
:param app: the application name
:return: the option's value
"""
if app is None:
app = __guess_extension()
if not lvl in _params[app]['options']:
+1 -20
View File
@@ -1,5 +1,4 @@
# coding: utf-8
import copy
from django.shortcuts import render
from django.template.loader import render_to_string
from django.core.urlresolvers import reverse
@@ -118,27 +117,9 @@ def preferences(request):
status="ok", respmsg=_("Preferences saved")
))
apps = sorted(parameters._params.keys())
gparams = []
for app in apps:
if not len(parameters._params[app]['U']):
continue
if parameters.get_app_option('U', 'needs_mailbox', False, app=app) \
and not request.user.has_mailbox:
continue
tmp = {"name" : app, "params" : []}
for p in parameters._params_order[app]['U']:
param_def = parameters._params[app]['U'][p]
newdef = copy.deepcopy(param_def)
newdef["name"] = p
newdef["value"] = parameters.get_user(request.user, p, app=app)
tmp["params"] += [newdef]
gparams += [tmp]
return ajax_simple_response({
"status" : "ok",
"content" : render_to_string("userprefs/preferences.html", {
"gparams" : gparams
"gparams" : parameters.get_all_user_params(request.user)
})
})