|
|
|
from flask.globals import current_app
|
|
|
|
from flask.helpers import json
|
|
|
|
from libs.werkzeug.urls import url_decode
|
|
|
|
import flask
|
|
|
|
import re
|
|
|
|
|
|
|
|
def getParams():
|
|
|
|
|
|
|
|
params = url_decode(getattr(flask.request, 'environ').get('QUERY_STRING', ''))
|
|
|
|
reg = re.compile('^[a-z0-9_\.]+$')
|
|
|
|
|
|
|
|
current = temp = {}
|
|
|
|
for param, value in sorted(params.iteritems()):
|
|
|
|
|
|
|
|
nest = re.split("([\[\]]+)", param)
|
|
|
|
if len(nest) > 1:
|
|
|
|
nested = []
|
|
|
|
for key in nest:
|
|
|
|
if reg.match(key):
|
|
|
|
nested.append(key)
|
|
|
|
|
|
|
|
current = temp
|
|
|
|
|
|
|
|
for item in nested:
|
|
|
|
if item is nested[-1]:
|
|
|
|
current[item] = value
|
|
|
|
else:
|
|
|
|
try:
|
|
|
|
current[item]
|
|
|
|
except:
|
|
|
|
current[item] = {}
|
|
|
|
|
|
|
|
current = current[item]
|
|
|
|
else:
|
|
|
|
temp[param] = value
|
|
|
|
|
|
|
|
return dictToList(temp)
|
|
|
|
|
|
|
|
def dictToList(params):
|
|
|
|
|
|
|
|
if type(params) is dict:
|
|
|
|
new = {}
|
|
|
|
for x, value in params.iteritems():
|
|
|
|
try:
|
|
|
|
new_value = [dictToList(value[k]) for k in sorted(value.iterkeys())]
|
|
|
|
except:
|
|
|
|
new_value = value
|
|
|
|
|
|
|
|
new[x] = new_value
|
|
|
|
else:
|
|
|
|
new = params
|
|
|
|
|
|
|
|
return new
|
|
|
|
|
|
|
|
def getParam(attr, default = None):
|
|
|
|
return getattr(flask.request, 'args').get(attr, default)
|
|
|
|
|
|
|
|
def padded_jsonify(callback, *args, **kwargs):
|
|
|
|
content = str(callback) + '(' + json.dumps(dict(*args, **kwargs)) + ')'
|
|
|
|
return getattr(current_app, 'response_class')(content, mimetype = 'text/javascript')
|
|
|
|
|
|
|
|
def jsonify(mimetype, *args, **kwargs):
|
|
|
|
content = json.dumps(dict(*args, **kwargs))
|
|
|
|
return getattr(current_app, 'response_class')(content, mimetype = mimetype)
|
|
|
|
|
|
|
|
def jsonified(*args, **kwargs):
|
|
|
|
from couchpotato.environment import Env
|
|
|
|
callback = getParam('json_callback', None)
|
|
|
|
if callback:
|
|
|
|
return padded_jsonify(callback, *args, **kwargs)
|
|
|
|
else:
|
|
|
|
return jsonify('text/javascript' if Env.doDebug() else 'application/json', *args, **kwargs)
|
|
|
|
|