# interpreted as representing official policies, either expressed
# or implied, of GRNET S.A.
-import logging
-import hashlib
+from xml.dom import minidom
from django.conf import settings
from django.http import HttpResponse
from django.utils import simplejson as json
from django.utils.http import parse_etags
from django.utils.encoding import smart_str
-from xml.dom import minidom
+from django.views.decorators.csrf import csrf_exempt
from pithos.lib.filter import parse_filters
put_object_headers, update_manifest_meta, update_sharing_meta, update_public_meta,
validate_modification_preconditions, validate_matching_preconditions, split_container_object_string,
copy_or_move_object, get_int_parameter, get_content_length, get_content_range, socket_read_iterator,
- SaveToBackendHandler, object_data_response, put_object_block, hashmap_md5, object_conflict_response, api_method)
+ SaveToBackendHandler, object_data_response, put_object_block, hashmap_md5, simple_list_response, api_method)
from pithos.backends.base import NotAllowedError, QuotaError
+import logging
+import hashlib
+
logger = logging.getLogger(__name__)
+@csrf_exempt
def top_demux(request):
if request.method == 'GET':
if getattr(request, 'user', None) is not None:
else:
return method_not_allowed(request)
+@csrf_exempt
def account_demux(request, v_account):
if request.method == 'HEAD':
return account_meta(request, v_account)
else:
return method_not_allowed(request)
+@csrf_exempt
def container_demux(request, v_account, v_container):
if request.method == 'HEAD':
return container_meta(request, v_account, v_container)
else:
return method_not_allowed(request)
+@csrf_exempt
def object_demux(request, v_account, v_container, v_object):
if request.method == 'HEAD':
return object_meta(request, v_account, v_container, v_object)
return HttpResponse(status=ret)
-@api_method('POST')
+@api_method('POST', format_allowed=True)
def container_update(request, v_account, v_container):
# Normal Response Codes: 202
# Error Response Codes: internalServerError (500),
response = HttpResponse(status=202)
if hashmap:
- response.content = '\n'.join(hashmap) + '\n'
+ response.content = simple_list_response(request, hashmap)
return response
@api_method('DELETE')
except NotAllowedError:
raise Forbidden('Not allowed')
except IndexError, e:
- raise Conflict(object_conflict_response(request, e.data))
+ raise Conflict(simple_list_response(request, e.data))
except NameError:
raise ItemNotFound('Container does not exist')
except ValueError:
raise BadRequest('Invalid sharing header')
- except AttributeError, e:
- raise Conflict(object_conflict_response(request, e.data))
except QuotaError:
raise RequestEntityTooLarge('Quota exceeded')
if 'ETag' not in meta:
response = HttpResponse(status=201)
response['ETag'] = meta['ETag']
response['X-Object-Version'] = version_id
+ response.content = meta['ETag']
return response
@api_method('COPY', format_allowed=True)
raise ItemNotFound('Object does not exist')
except ValueError:
raise BadRequest('Invalid sharing header')
- except AttributeError, e:
- raise Conflict(object_conflict_response(request, e.data))
if public is not None:
try:
request.backend.update_object_public(request.user_uniq, v_account,
raise ItemNotFound('Container does not exist')
except ValueError:
raise BadRequest('Invalid sharing header')
- except AttributeError, e:
- raise Conflict(object_conflict_response(request, e.data))
except QuotaError:
raise RequestEntityTooLarge('Quota exceeded')
if public is not None: