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