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