def get_container(api_ver, account, container): _validate_container(api_ver, account, container) prefix = bottle.request.params.get('prefix', '') delimiter = bottle.request.params.get('delimiter') limit = bottle.request.params.get('limit', '') marker = bottle.request.params.get('marker', '') end_marker = bottle.request.params.get('end_marker', '') path = bottle.request.params.get('path', '') if delimiter and (len(delimiter) > 1 or ord(delimiter) > 254): raise bottle.HTTPError(412, 'Bad delimiter') try: limit = int(limit) except ValueError: limit = CONTAINER_LISTING_LIMIT if limit > CONTAINER_LISTING_LIMIT: raise bottle.HTTPError(412, 'Maximum limit is %d' % CONTAINER_LISTING_LIMIT) if path: delimiter = '/' if path.endswith('/'): path = path[:-1] prefix = path container_data = get_container_data( user_name=account, vol_name=container, prefix=prefix, delimiter=delimiter, limit=limit, start_marker=marker, end_marker=end_marker) for key, value in container_data['meta'].iteritems(): bottle.response.set_header(str(key), str(value)) format_param = get_format_from_request() logger.debug('Accepted format: %s', format_param) serializer = get_serializer(format_param) bottle.response.content_type = serializer.content_type if not container_data['content']: bottle.response.status = 204 return serializer.serialize(container_data)
def get_container(api_ver, account, container): _validate_container(api_ver, account, container) prefix = bottle.request.params.get('prefix', '') delimiter = bottle.request.params.get('delimiter') limit = bottle.request.params.get('limit', '') marker = bottle.request.params.get('marker', '') end_marker = bottle.request.params.get('end_marker', '') path = bottle.request.params.get('path', '') if delimiter and (len(delimiter) > 1 or ord(delimiter) > 254): raise bottle.HTTPError(412, 'Bad delimiter') try: limit = int(limit) except ValueError: limit = CONTAINER_LISTING_LIMIT if limit > CONTAINER_LISTING_LIMIT: raise bottle.HTTPError(412, 'Maximum limit is %d' % CONTAINER_LISTING_LIMIT) if path: delimiter = '/' if path.endswith('/'): path = path[:-1] prefix = path container_data = get_container_data(user_name=account, vol_name=container, prefix=prefix, delimiter=delimiter, limit=limit, start_marker=marker, end_marker=end_marker) for key, value in container_data['meta'].iteritems(): bottle.response.set_header(str(key), str(value)) format_param = get_format_from_request() logger.debug('Accepted format: %s', format_param) serializer = get_serializer(format_param) bottle.response.content_type = serializer.content_type if not container_data['content']: bottle.response.status = 204 return serializer.serialize(container_data)
def put_container(api_ver, account, container): _validate_container(api_ver, account, container) settings = get_settings() size = bottle.request.get_header('x-container-meta-quota-bytes', '') try: size = int(size) except ValueError: size = settings['default.volume.size'] info = {'created_by': 'sxswift', 'created_at': time.time()} info = json.dumps(info).encode('hex') create_user_if_not_exists(account) created = create_volume_if_not_exists( vol_name=container, user_name=account, size=size, replica_count=settings['default.volume.replica_count'], max_revisions=settings['default.volume.max_revisions'], meta={'creation_info': info} ) bottle.response.status = 201 if created else 202 post_container(api_ver, account, container)
def post_container(api_ver, account, container): _validate_container(api_ver, account, container) remove_meta, update_meta = get_meta_to_remove_and_update( 'x-container-meta-', 'x-remove-container-meta-') # TODO: add max volume size change # TODO: handle custom headers: # X-Container-Read, X-Container-Write, X-Versions-Location, # X-Remove-Versions-Location, X-Container-Meta-Web-Directory-Type size = bottle.request.get_header('x-container-meta-quota-bytes', '') try: size = int(size) except ValueError: size = None update_container_meta(user_name=account, vol_name=container, remove_list=remove_meta, update_dict=update_meta, new_size=size) bottle.response.status = 204
def put_container(api_ver, account, container): _validate_container(api_ver, account, container) settings = get_settings() size = bottle.request.get_header('x-container-meta-quota-bytes', '') try: size = int(size) except ValueError: size = settings['default.volume.size'] info = {'created_by': 'sxswift', 'created_at': time.time()} info = json.dumps(info).encode('hex') create_user_if_not_exists(account) created = create_volume_if_not_exists( vol_name=container, user_name=account, size=size, replica_count=settings['default.volume.replica_count'], max_revisions=settings['default.volume.max_revisions'], meta={'creation_info': info}) bottle.response.status = 201 if created else 202 post_container(api_ver, account, container)
def post_container(api_ver, account, container): _validate_container(api_ver, account, container) remove_meta, update_meta = get_meta_to_remove_and_update( 'x-container-meta-', 'x-remove-container-meta-' ) # TODO: add max volume size change # TODO: handle custom headers: # X-Container-Read, X-Container-Write, X-Versions-Location, # X-Remove-Versions-Location, X-Container-Meta-Web-Directory-Type size = bottle.request.get_header('x-container-meta-quota-bytes', '') try: size = int(size) except ValueError: size = None update_container_meta( user_name=account, vol_name=container, remove_list=remove_meta, update_dict=update_meta, new_size=size ) bottle.response.status = 204
def delete_container(api_ver, account, container): _validate_container(api_ver, account, container) delete_volume(container) bottle.response.status = 204
def _validate_object(api_ver, account, container, object): _validate_container(api_ver, account, container) if not object_name_is_valid(object): msg = 'Object name %s is invalid' % object raise bottle.HTTPError(400, msg)