#\r
\r
from django.http import HttpResponse\r
+from django.template.loader import render_to_string\r
+from django.utils import simplejson as json\r
\r
from pithos.api.faults import Fault, BadRequest, Unauthorized\r
-from pithos.api.util import api_method\r
+from pithos.api.util import api_method, binary_search_name\r
\r
import logging\r
\r
# unauthorized (401),\r
# badRequest (400)\r
\r
- logging.debug('request.META: %s' % request.META)\r
- \r
x_auth_user = request.META.get('HTTP_X_AUTH_USER')\r
x_auth_key = request.META.get('HTTP_X_AUTH_KEY')\r
\r
\r
@api_method('GET', format_allowed = True)\r
def container_list(request, v_account):\r
- return HttpResponse("container_list: %s" % v_account)\r
+ # Normal Response Codes: 200, 204\r
+ # Error Response Codes: serviceUnavailable (503),\r
+ # unauthorized (401),\r
+ # badRequest (400)\r
+ \r
+ containers = [\r
+ {'name': '1', 'count': 2, 'bytes': 123},\r
+ {'name': '2', 'count': 22, 'bytes': 245},\r
+ {'name': '3', 'count': 222, 'bytes': 83745},\r
+ {'name': 'four', 'count': 2222, 'bytes': 274365}\r
+ ]\r
+ \r
+ if len(containers) == 0:\r
+ return HttpResponse(status = 204)\r
+ \r
+ limit = request.GET.get('limit')\r
+ marker = request.GET.get('marker')\r
+ \r
+ start = 0\r
+ if marker:\r
+ try:\r
+ start = binary_search_name(containers, marker) + 1\r
+ except ValueError:\r
+ pass\r
+ if limit:\r
+ try:\r
+ limit = int(limit)\r
+ except ValueError:\r
+ limit = None\r
+ if not limit or limit > 10000:\r
+ limit = 10000\r
+ \r
+ containers = containers[start:start + limit]\r
+ if request.serialization == 'xml':\r
+ # TODO: The xml must include the account name as well.\r
+ data = render_to_string('containers.xml', {'containers': containers})\r
+ elif request.serialization == 'json':\r
+ data = json.dumps(containers)\r
+ else:\r
+ data = '\n'.join(x['name'] for x in containers)\r
+ \r
+ # TODO: Return 404 when the account is not found.\r
+ return HttpResponse(data, status = 200)\r
\r
@api_method('HEAD')\r
def container_meta(request, v_account, v_container):\r