Revision ca092af4 kamaki/clients/pithos.py
b/kamaki/clients/pithos.py | ||
---|---|---|
908 | 908 |
|
909 | 909 |
:returns: (dict) |
910 | 910 |
""" |
911 |
r = self.object_head(obj, version=version) |
|
912 |
return r.headers |
|
911 |
try: |
|
912 |
r = self.object_head(obj, version=version) |
|
913 |
return r.headers |
|
914 |
except ClientError as ce: |
|
915 |
if ce.status == 404: |
|
916 |
raise ClientError('Object not found', status=404) |
|
917 |
raise |
|
913 | 918 |
|
914 | 919 |
def get_object_meta(self, obj, version=None): |
915 | 920 |
""" |
... | ... | |
985 | 990 |
filesize = fstat(source_file.fileno()).st_size |
986 | 991 |
nblocks = 1 + (filesize - 1) // blocksize |
987 | 992 |
offset = 0 |
988 |
if upload_cb is not None:
|
|
993 |
if upload_cb: |
|
989 | 994 |
upload_gen = upload_cb(nblocks) |
995 |
upload_gen.next() |
|
990 | 996 |
for i in range(nblocks): |
991 | 997 |
block = source_file.read(min(blocksize, filesize - offset)) |
992 | 998 |
offset += len(block) |
... | ... | |
998 | 1004 |
data=block) |
999 | 1005 |
r.release() |
1000 | 1006 |
|
1001 |
if upload_cb is not None:
|
|
1007 |
if upload_cb: |
|
1002 | 1008 |
upload_gen.next() |
1003 | 1009 |
|
1004 | 1010 |
def truncate_object(self, obj, upto_bytes): |
... | ... | |
1034 | 1040 |
:param upload_db: progress.bar for uploading |
1035 | 1041 |
""" |
1036 | 1042 |
|
1043 |
r = self.get_object_info(obj) |
|
1044 |
rf_size = int(r['content-length']) |
|
1045 |
if rf_size < int(start): |
|
1046 |
raise ClientError( |
|
1047 |
'Range start exceeds file size', |
|
1048 |
status=416) |
|
1049 |
elif rf_size < int(end): |
|
1050 |
raise ClientError( |
|
1051 |
'Range end exceeds file size', |
|
1052 |
status=416) |
|
1037 | 1053 |
self._assert_container() |
1038 | 1054 |
meta = self.get_container_info() |
1039 | 1055 |
blocksize = int(meta['x-container-block-size']) |
... | ... | |
1041 | 1057 |
datasize = int(end) - int(start) + 1 |
1042 | 1058 |
nblocks = 1 + (datasize - 1) // blocksize |
1043 | 1059 |
offset = 0 |
1044 |
if upload_cb is not None:
|
|
1060 |
if upload_cb: |
|
1045 | 1061 |
upload_gen = upload_cb(nblocks) |
1062 |
upload_gen.next() |
|
1046 | 1063 |
for i in range(nblocks): |
1047 | 1064 |
block = source_file.read(min(blocksize, |
1048 | 1065 |
filesize - offset, |
1049 | 1066 |
datasize - offset)) |
1050 |
offset += len(block) |
|
1051 | 1067 |
r = self.object_post(obj, |
1052 | 1068 |
update=True, |
1053 | 1069 |
content_type='application/octet-stream', |
1054 | 1070 |
content_length=len(block), |
1055 |
content_range='bytes %s-%s/*' % (start, end), |
|
1071 |
content_range='bytes %s-%s/*' % ( |
|
1072 |
start + offset, |
|
1073 |
start + offset + len(block) - 1), |
|
1056 | 1074 |
data=block) |
1075 |
offset += len(block) |
|
1057 | 1076 |
r.release() |
1058 | 1077 |
|
1059 |
if upload_cb is not None:
|
|
1078 |
if upload_cb: |
|
1060 | 1079 |
upload_gen.next() |
1061 | 1080 |
|
1062 | 1081 |
def copy_object(self, src_container, src_object, dst_container, |
Also available in: Unified diff