minor fixes
[redakcja.git] / apps / filebrowser / templatetags / fb_tags.py
index f1e968d..5bc9b40 100644 (file)
@@ -8,13 +8,14 @@ from filebrowser.fb_settings import SELECT_FORMATS
 
 register = template.Library()
 
+
 @register.inclusion_tag('filebrowser/include/_response.html', takes_context=True)
 def query_string(context, add=None, remove=None):
     """
     Allows the addition and removal of query string parameters.
-    
+
     _response.html is just {{ response }}
-    
+
     Usage:
     http://www.url.com/{% query_string "param_to_add=value, param_to_add=value" "param_to_remove, params_to_remove" %}
     http://www.url.com/{% query_string "" "filter" %}filter={{new_filter}}
@@ -25,8 +26,8 @@ def query_string(context, add=None, remove=None):
     remove = string_to_list(remove)
     params = context['query'].copy()
     response = get_query_string(params, add, remove)
-    return {'response': response }
-    
+    return {'response': smart_unicode(response)}
+
 
 def query_helper(query, add=None, remove=None):
     """
@@ -36,14 +37,18 @@ def query_helper(query, add=None, remove=None):
     remove = string_to_list(remove)
     params = query.copy()
     return get_query_string(params, add, remove)
-    
+
 
 def get_query_string(p, new_params=None, remove=None):
     """
     Add and remove query parameters. From `django.contrib.admin`.
     """
-    if new_params is None: new_params = {}
-    if remove is None: remove = []
+    if new_params is None:
+        new_params = {}
+
+    if remove is None:
+        remove = []
+
     for r in remove:
         for k in p.keys():
             if k.startswith(r):
@@ -54,34 +59,31 @@ def get_query_string(p, new_params=None, remove=None):
         elif v is not None:
             p[k] = v
     return mark_safe('?' + '&'.join([u'%s=%s' % (k, v) for k, v in p.items()]).replace(' ', '%20'))
-    
+
 
 def string_to_dict(string):
     """
     Usage::
-    
+
         {{ url|thumbnail:"width=10,height=20" }}
         {{ url|thumbnail:"width=10" }}
         {{ url|thumbnail:"height=20" }}
     """
     kwargs = {}
+
     if string:
         string = str(string)
-        if ',' not in string:
-            # ensure at least one ','
-            string += ','
-        for arg in string.split(','):
-            arg = arg.strip()
-            if arg == '': continue
-            kw, val = arg.split('=', 1)
-            kwargs[kw] = val
+
+        args = (arg.strip() for arg in string.split(',') if not arg.isspace())
+        kwargs.update(arg.split('=', 1) for arg in args)
+
     return kwargs
-    
+
 
 def string_to_list(string):
     """
     Usage::
-    
+
         {{ url|thumbnail:"width,height" }}
     """
     args = []
@@ -92,16 +94,17 @@ def string_to_list(string):
             string += ','
         for arg in string.split(','):
             arg = arg.strip()
-            if arg == '': continue
+            if arg == '':
+                continue
             args.append(arg)
     return args
-    
+
 
 class SelectableNode(template.Node):
     def __init__(self, filetype, format):
         self.filetype = template.Variable(filetype)
         self.format = template.Variable(format)
-    
+
     def render(self, context):
         try:
             filetype = self.filetype.resolve(context)
@@ -119,15 +122,15 @@ class SelectableNode(template.Node):
             selectable = True
         context['selectable'] = selectable
         return ''
-    
+
 
 def selectable(parser, token):
-    
+
     try:
         tag, filetype, format = token.split_contents()
     except:
-        raise TemplateSyntaxError, "%s tag requires 2 arguments" % token.contents.split()[0]
-        
+        raise TemplateSyntaxError("%s tag requires 2 arguments" % token.contents.split()[0])
+
     return SelectableNode(filetype, format)
-    
+
 register.tag(selectable)