Revision 16fd4b63

b/pithos/api/functions.py
423 423
    if 'Content-Type' not in meta:
424 424
        raise LengthRequired('Missing Content-Type header')
425 425
    
426
    sock = raw_input_socket(request)
427 426
    md5 = hashlib.md5()
428
    offset = 0
429
    for data in socket_read_iterator(sock, content_length):
430
        # TODO: Raise 408 (Request Timeout) if this takes too long.
431
        # TODO: Raise 499 (Client Disconnect) if a length is defined and we stop before getting this much data.
432
        md5.update(data)
427
    if content_length == 0:
433 428
        try:
434
            backend.update_object(request.user, v_container, v_object, data, offset)
429
            backend.update_object(request.user, v_container, v_object, '')
435 430
        except NameError:
436
            raise ItemNotFound('Object does not exist')
437
        offset += len(data)
431
            raise ItemNotFound('Container does not exist')
432
    else:
433
        sock = raw_input_socket(request)
434
        offset = 0
435
        for data in socket_read_iterator(sock, content_length):
436
            # TODO: Raise 408 (Request Timeout) if this takes too long.
437
            # TODO: Raise 499 (Client Disconnect) if a length is defined and we stop before getting this much data.
438
            md5.update(data)
439
            try:
440
                backend.update_object(request.user, v_container, v_object, data, offset)
441
            except NameError:
442
                raise ItemNotFound('Container does not exist')
443
            offset += len(data)
438 444
    
439 445
    meta['hash'] = md5.hexdigest().lower()
440 446
    etag = request.META.get('HTTP_ETAG')
b/pithos/backends/simple.py
38 38
            return {'name': account, 'count': 0, 'bytes': 0}
39 39
        contents = os.listdir(fullname)
40 40
        count = len(contents)
41
        size = sum((os.path.getsize(os.path.join(fullname, x)) for x in os.listdir(fullname)))
41
        size = 0
42
        for y in (os.path.join(fullname, z) for z in contents):
43
            size += sum((os.path.getsize(os.path.join(y, x)) for x in os.listdir(y)))
42 44
        meta = self._get_metadata(account)
43 45
        meta.update({'name': account, 'count': count, 'bytes': size})
44 46
        return meta
......
81 83
        fullname = self._get_containerinfo(account, name)
82 84
        contents = os.listdir(fullname)
83 85
        count = len(contents)
84
        size = os.stat(fullname).st_size
86
        size = sum((os.path.getsize(os.path.join(fullname, x)) for x in contents))
85 87
        meta = self._get_metadata(os.path.join(account, name))
86 88
        meta.update({'name': name, 'count': count, 'bytes': size})
87 89
        return meta

Also available in: Unified diff