Revision 6e50fed4 kamaki/clients/pithos/__init__.py
b/kamaki/clients/pithos/__init__.py | ||
---|---|---|
54 | 54 |
|
55 | 55 |
def _range_up(start, end, a_range): |
56 | 56 |
if a_range: |
57 |
(rstart, rend) = a_range.split('-') |
|
58 |
(rstart, rend) = (int(rstart), int(rend)) |
|
57 |
rstart, sep, rend = a_range.partition('-') |
|
58 |
if rstart: |
|
59 |
if sep: |
|
60 |
rstart, rend = int(rstart), int(rend) |
|
61 |
else: |
|
62 |
rstart, rend = 0, int(rstart) |
|
63 |
elif sep: |
|
64 |
return (0, - int(rend)) |
|
65 |
else: |
|
66 |
return (0, 0) |
|
59 | 67 |
if rstart > end or rend < start: |
60 | 68 |
return (0, 0) |
61 | 69 |
if rstart > start: |
... | ... | |
634 | 642 |
is_last = start + blocksize > total_size |
635 | 643 |
end = (total_size - 1) if is_last else (start + blocksize - 1) |
636 | 644 |
(start, end) = _range_up(start, end, crange) |
637 |
args['data_range'] = 'bytes=%s-%s' % (start, end) |
|
645 |
args['data_range'] = 'bytes=%s-%s' % ( |
|
646 |
(start, end) if end >= 0 else ('', - end)) |
|
638 | 647 |
r = self.object_get(obj, success=(200, 206), **args) |
639 | 648 |
self._cb_next() |
640 | 649 |
dst.write(r.content) |
... | ... | |
704 | 713 |
self._cb_next() |
705 | 714 |
continue |
706 | 715 |
restargs['async_headers'] = { |
707 |
'Range': 'bytes=%s-%s' % (start, end)} |
|
716 |
'Range': 'bytes=%s-%s' % ( |
|
717 |
(start, end) if end >= 0 else ('', - end))} |
|
708 | 718 |
flying[key] = self._get_block_async(obj, **restargs) |
709 | 719 |
blockid_dict[key] = unsaved |
710 | 720 |
|
... | ... | |
848 | 858 |
is_last = start + blocksize > total_size |
849 | 859 |
end = (total_size - 1) if is_last else (start + blocksize - 1) |
850 | 860 |
(start, end) = _range_up(start, end, range_str) |
851 |
if start < end: |
|
861 |
if start < end or end < 0:
|
|
852 | 862 |
self._watch_thread_limit(flying.values()) |
853 | 863 |
flying[blockid] = self._get_block_async(obj, **restargs) |
854 | 864 |
for runid, thread in flying.items(): |
Also available in: Unified diff