Revision c2b5da2f kamaki/clients/pithos/__init__.py
b/kamaki/clients/pithos/__init__.py | ||
---|---|---|
77 | 77 |
cnt_back_up = self.container |
78 | 78 |
try: |
79 | 79 |
self.container = container or cnt_back_up |
80 |
r = self.container_delete(until=unicode(time()))
|
|
80 |
self.container_delete(until=unicode(time())) |
|
81 | 81 |
finally: |
82 | 82 |
self.container = cnt_back_up |
83 |
r.release() |
|
84 | 83 |
|
85 | 84 |
def upload_object_unchunked( |
86 | 85 |
self, obj, f, |
... | ... | |
129 | 128 |
f = StringIO(data) |
130 | 129 |
else: |
131 | 130 |
data = f.read(size) if size else f.read() |
132 |
r = self.object_put(
|
|
131 |
self.object_put( |
|
133 | 132 |
obj, |
134 | 133 |
data=data, |
135 | 134 |
etag=etag, |
... | ... | |
139 | 138 |
permissions=sharing, |
140 | 139 |
public=public, |
141 | 140 |
success=201) |
142 |
r.release() |
|
143 | 141 |
|
144 | 142 |
def create_object_by_manifestation( |
145 | 143 |
self, obj, |
... | ... | |
166 | 164 |
:param public: (bool) |
167 | 165 |
""" |
168 | 166 |
self._assert_container() |
169 |
r = self.object_put(
|
|
167 |
self.object_put( |
|
170 | 168 |
obj, |
171 | 169 |
content_length=0, |
172 | 170 |
etag=etag, |
... | ... | |
176 | 174 |
permissions=sharing, |
177 | 175 |
public=public, |
178 | 176 |
manifest='%s/%s' % (self.container, obj)) |
179 |
r.release() |
|
180 | 177 |
|
181 | 178 |
# upload_* auxiliary methods |
182 | 179 |
def _put_block_async(self, data, hash, upload_gen=None): |
... | ... | |
225 | 222 |
permissions=permissions, |
226 | 223 |
public=public, |
227 | 224 |
success=success) |
228 |
if r.status_code == 201: |
|
229 |
r.release() |
|
230 |
return None |
|
231 |
return r.json |
|
225 |
return None if r.status_code == 201 else r.json |
|
232 | 226 |
|
233 | 227 |
def _culculate_blocks_for_upload( |
234 | 228 |
self, blocksize, blockhash, size, nblocks, hashes, hmap, fileobj, |
... | ... | |
394 | 388 |
thread.join() |
395 | 389 |
raise |
396 | 390 |
|
397 |
r = self.object_put(
|
|
391 |
self.object_put( |
|
398 | 392 |
obj, |
399 | 393 |
format='json', |
400 | 394 |
hashmap=True, |
401 | 395 |
content_type=content_type, |
402 | 396 |
json=hashmap, |
403 | 397 |
success=201) |
404 |
r.release() |
|
405 | 398 |
|
406 | 399 |
# download_* auxiliary methods |
407 | 400 |
def _get_remote_blocks_info(self, obj, **restargs): |
... | ... | |
639 | 632 |
|
640 | 633 |
:param usernames: (list) |
641 | 634 |
""" |
642 |
r = self.account_post(update=True, groups={group: usernames}) |
|
643 |
r.release() |
|
635 |
self.account_post(update=True, groups={group: usernames}) |
|
644 | 636 |
|
645 | 637 |
def del_account_group(self, group): |
646 | 638 |
""" |
647 | 639 |
:param group: (str) |
648 | 640 |
""" |
649 |
r = self.account_post(update=True, groups={group: []}) |
|
650 |
r.release() |
|
641 |
self.account_post(update=True, groups={group: []}) |
|
651 | 642 |
|
652 | 643 |
def get_account_info(self, until=None): |
653 | 644 |
""" |
... | ... | |
697 | 688 |
:param metapairs: (dict) {key1:val1, key2:val2, ...} |
698 | 689 |
""" |
699 | 690 |
assert(type(metapairs) is dict) |
700 |
r = self.account_post(update=True, metadata=metapairs) |
|
701 |
r.release() |
|
691 |
self.account_post(update=True, metadata=metapairs) |
|
702 | 692 |
|
703 | 693 |
def del_account_meta(self, metakey): |
704 | 694 |
""" |
705 | 695 |
:param metakey: (str) metadatum key |
706 | 696 |
""" |
707 |
r = self.account_post(update=True, metadata={metakey: ''}) |
|
708 |
r.release() |
|
697 |
self.account_post(update=True, metadata={metakey: ''}) |
|
709 | 698 |
|
710 | 699 |
def set_account_quota(self, quota): |
711 | 700 |
""" |
712 | 701 |
:param quota: (int) |
713 | 702 |
""" |
714 |
r = self.account_post(update=True, quota=quota) |
|
715 |
r.release() |
|
703 |
self.account_post(update=True, quota=quota) |
|
716 | 704 |
|
717 | 705 |
def set_account_versioning(self, versioning): |
718 | 706 |
""" |
719 | 707 |
"param versioning: (str) |
720 | 708 |
""" |
721 |
r = self.account_post(update=True, versioning=versioning) |
|
722 |
r.release() |
|
709 |
self.account_post(update=True, versioning=versioning) |
|
723 | 710 |
|
724 | 711 |
def list_containers(self): |
725 | 712 |
""" |
... | ... | |
743 | 730 |
until=until, |
744 | 731 |
delimiter=delimiter, |
745 | 732 |
success=(204, 404, 409)) |
746 |
r.release() |
|
747 | 733 |
if r.status_code == 404: |
748 | 734 |
raise ClientError( |
749 | 735 |
'Container "%s" does not exist' % self.container, |
... | ... | |
823 | 809 |
:param metapairs: (dict) {key1:val1, key2:val2, ...} |
824 | 810 |
""" |
825 | 811 |
assert(type(metapairs) is dict) |
826 |
r = self.container_post(update=True, metadata=metapairs) |
|
827 |
r.release() |
|
812 |
self.container_post(update=True, metadata=metapairs) |
|
828 | 813 |
|
829 | 814 |
def del_container_meta(self, metakey): |
830 | 815 |
""" |
831 | 816 |
:param metakey: (str) metadatum key |
832 | 817 |
""" |
833 |
r = self.container_post(update=True, metadata={metakey: ''}) |
|
834 |
r.release() |
|
818 |
self.container_post(update=True, metadata={metakey: ''}) |
|
835 | 819 |
|
836 | 820 |
def set_container_quota(self, quota): |
837 | 821 |
""" |
838 | 822 |
:param quota: (int) |
839 | 823 |
""" |
840 |
r = self.container_post(update=True, quota=quota) |
|
841 |
r.release() |
|
824 |
self.container_post(update=True, quota=quota) |
|
842 | 825 |
|
843 | 826 |
def set_container_versioning(self, versioning): |
844 | 827 |
""" |
845 | 828 |
:param versioning: (str) |
846 | 829 |
""" |
847 |
r = self.container_post(update=True, versioning=versioning) |
|
848 |
r.release() |
|
830 |
self.container_post(update=True, versioning=versioning) |
|
849 | 831 |
|
850 | 832 |
def del_object(self, obj, until=None, delimiter=None): |
851 | 833 |
""" |
... | ... | |
856 | 838 |
:param delimiter: (str) |
857 | 839 |
""" |
858 | 840 |
self._assert_container() |
859 |
r = self.object_delete(obj, until=until, delimiter=delimiter) |
|
860 |
r.release() |
|
841 |
self.object_delete(obj, until=until, delimiter=delimiter) |
|
861 | 842 |
|
862 | 843 |
def set_object_meta(self, obj, metapairs): |
863 | 844 |
""" |
... | ... | |
866 | 847 |
:param metapairs: (dict) {key1:val1, key2:val2, ...} |
867 | 848 |
""" |
868 | 849 |
assert(type(metapairs) is dict) |
869 |
r = self.object_post(obj, update=True, metadata=metapairs) |
|
870 |
r.release() |
|
850 |
self.object_post(obj, update=True, metadata=metapairs) |
|
871 | 851 |
|
872 | 852 |
def del_object_meta(self, obj, metakey): |
873 | 853 |
""" |
... | ... | |
875 | 855 |
|
876 | 856 |
:param metakey: (str) metadatum key |
877 | 857 |
""" |
878 |
r = self.object_post(obj, update=True, metadata={metakey: ''}) |
|
879 |
r.release() |
|
858 |
self.object_post(obj, update=True, metadata={metakey: ''}) |
|
880 | 859 |
|
881 | 860 |
def publish_object(self, obj): |
882 | 861 |
""" |
... | ... | |
884 | 863 |
|
885 | 864 |
:returns: (str) access url |
886 | 865 |
""" |
887 |
r = self.object_post(obj, update=True, public=True) |
|
888 |
r.release() |
|
866 |
self.object_post(obj, update=True, public=True) |
|
889 | 867 |
info = self.get_object_info(obj) |
890 | 868 |
pref, sep, rest = self.base_url.partition('//') |
891 | 869 |
base = rest.split('/')[0] |
... | ... | |
895 | 873 |
""" |
896 | 874 |
:param obj: (str) remote object path |
897 | 875 |
""" |
898 |
r = self.object_post(obj, update=True, public=False) |
|
899 |
r.release() |
|
876 |
self.object_post(obj, update=True, public=False) |
|
900 | 877 |
|
901 | 878 |
def get_object_info(self, obj, version=None): |
902 | 879 |
""" |
... | ... | |
965 | 942 |
""" |
966 | 943 |
|
967 | 944 |
perms = dict(read=read_permition or '', write=write_permition or '') |
968 |
r = self.object_post(obj, update=True, permissions=perms) |
|
969 |
r.release() |
|
945 |
self.object_post(obj, update=True, permissions=perms) |
|
970 | 946 |
|
971 | 947 |
def del_object_sharing(self, obj): |
972 | 948 |
""" |
... | ... | |
995 | 971 |
for i in range(nblocks): |
996 | 972 |
block = source_file.read(min(blocksize, filesize - offset)) |
997 | 973 |
offset += len(block) |
998 |
r = self.object_post(
|
|
974 |
self.object_post( |
|
999 | 975 |
obj, |
1000 | 976 |
update=True, |
1001 | 977 |
content_range='bytes */*', |
1002 | 978 |
content_type='application/octet-stream', |
1003 | 979 |
content_length=len(block), |
1004 | 980 |
data=block) |
1005 |
r.release() |
|
1006 | 981 |
|
1007 | 982 |
if upload_cb: |
1008 | 983 |
upload_gen.next() |
... | ... | |
1013 | 988 |
|
1014 | 989 |
:param upto_bytes: max number of bytes to leave on file |
1015 | 990 |
""" |
1016 |
r = self.object_post(
|
|
991 |
self.object_post( |
|
1017 | 992 |
obj, |
1018 | 993 |
update=True, |
1019 | 994 |
content_range='bytes 0-%s/*' % upto_bytes, |
1020 | 995 |
content_type='application/octet-stream', |
1021 | 996 |
object_bytes=upto_bytes, |
1022 | 997 |
source_object=path4url(self.container, obj)) |
1023 |
r.release() |
|
1024 | 998 |
|
1025 | 999 |
def overwrite_object(self, obj, start, end, source_file, upload_cb=None): |
1026 | 1000 |
"""Overwrite a part of an object from local source file |
... | ... | |
1059 | 1033 |
for i in range(nblocks): |
1060 | 1034 |
read_size = min(blocksize, filesize - offset, datasize - offset) |
1061 | 1035 |
block = source_file.read(read_size) |
1062 |
r = self.object_post(
|
|
1036 |
self.object_post( |
|
1063 | 1037 |
obj, |
1064 | 1038 |
update=True, |
1065 | 1039 |
content_type='application/octet-stream', |
... | ... | |
1069 | 1043 |
start + offset + len(block) - 1), |
1070 | 1044 |
data=block) |
1071 | 1045 |
offset += len(block) |
1072 |
r.release() |
|
1073 | 1046 |
|
1074 | 1047 |
if upload_cb: |
1075 | 1048 |
upload_gen.next() |
... | ... | |
1104 | 1077 |
self._assert_account() |
1105 | 1078 |
self.container = dst_container |
1106 | 1079 |
src_path = path4url(src_container, src_object) |
1107 |
r = self.object_put(
|
|
1080 |
self.object_put( |
|
1108 | 1081 |
dst_object or src_object, |
1109 | 1082 |
success=201, |
1110 | 1083 |
copy_from=src_path, |
... | ... | |
1114 | 1087 |
public=public, |
1115 | 1088 |
content_type=content_type, |
1116 | 1089 |
delimiter=delimiter) |
1117 |
r.release() |
|
1118 | 1090 |
|
1119 | 1091 |
def move_object( |
1120 | 1092 |
self, src_container, src_object, dst_container, |
... | ... | |
1147 | 1119 |
self.container = dst_container |
1148 | 1120 |
dst_object = dst_object or src_object |
1149 | 1121 |
src_path = path4url(src_container, src_object) |
1150 |
r = self.object_put(
|
|
1122 |
self.object_put( |
|
1151 | 1123 |
dst_object, |
1152 | 1124 |
success=201, |
1153 | 1125 |
move_from=src_path, |
... | ... | |
1157 | 1129 |
public=public, |
1158 | 1130 |
content_type=content_type, |
1159 | 1131 |
delimiter=delimiter) |
1160 |
r.release() |
|
1161 | 1132 |
|
1162 | 1133 |
def get_sharing_accounts(self, limit=None, marker=None, *args, **kwargs): |
1163 | 1134 |
"""Get accounts that share with self.account |
Also available in: Unified diff