Document django's behavior when using the internal web server and not supplying a...
[pithos] / pithos / api / functions.py
index 79d54ae..75a2108 100644 (file)
@@ -42,6 +42,8 @@ from django.utils.http import parse_etags
 from django.utils.encoding import smart_str
 from xml.dom import minidom
 
+from pithos.lib.filter import parse_filters
+
 from pithos.api.faults import (Fault, NotModified, BadRequest, Unauthorized, Forbidden, ItemNotFound, Conflict,
     LengthRequired, PreconditionFailed, RequestEntityTooLarge, RangeNotSatisfiable, UnprocessableEntity)
 from pithos.api.util import (rename_meta_key, format_header_key, printable_header_dict, get_account_headers,
@@ -126,7 +128,7 @@ def authenticate(request):
         uri = uri[:uri.find('?')]
     
     response['X-Auth-Token'] = x_auth_key
-    response['X-Storage-Url'] = uri + (uri.endswith('/') and '' or '/') + x_auth_user
+    response['X-Storage-Url'] = uri + ('' if uri.endswith('/') else '/') + x_auth_user
     return response
 
 @api_method('GET', format_allowed=True)
@@ -494,9 +496,12 @@ def object_list(request, v_account, v_container):
     
     keys = request.GET.get('meta')
     if keys:
-        keys = keys.split(',')
-        l = [smart_str(x) for x in keys if x.strip() != '']
-        keys = [format_header_key('X-Object-Meta-' + x.strip()) for x in l]
+        keys = [smart_str(x.strip()) for x in keys.split(',') if x.strip() != '']
+        included, excluded, opers = parse_filters(keys)
+        keys = []
+        keys += [format_header_key('X-Object-Meta-' + x) for x in included]
+        keys += ['!'+format_header_key('X-Object-Meta-' + x) for x in excluded]
+        keys += ['%s%s%s' % (format_header_key('X-Object-Meta-' + k), o, v) for k, o, v in opers]
     else:
         keys = []
     
@@ -985,6 +990,7 @@ def object_update(request, v_account, v_container, v_object):
     #                       itemNotFound (404),
     #                       forbidden (403),
     #                       badRequest (400)
+    
     meta, permissions, public = get_object_headers(request)
     content_type = meta.get('Content-Type')
     if content_type: