You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.3 KiB
53 lines
1.3 KiB
12 years ago
|
from couchpotato.core.helpers.encoding import toUnicode
|
||
|
from couchpotato.core.helpers.variable import natcmp
|
||
|
from urllib import unquote
|
||
|
import re
|
||
|
|
||
|
|
||
|
def getParams(params):
|
||
|
|
||
|
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] = toUnicode(unquote(value))
|
||
|
else:
|
||
|
try:
|
||
|
current[item]
|
||
|
except:
|
||
|
current[item] = {}
|
||
|
|
||
|
current = current[item]
|
||
|
else:
|
||
|
temp[param] = toUnicode(unquote(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(), cmp = natcmp)]
|
||
|
except:
|
||
|
new_value = value
|
||
|
|
||
|
new[x] = new_value
|
||
|
else:
|
||
|
new = params
|
||
|
|
||
|
return new
|