コード例 #1
0
ファイル: bucket.py プロジェクト: hou-rong/ks3-python-sdk
 def _get_all(self,
              element_map,
              initial_query_string='',
              headers=None,
              **params):
     query_args = self._get_all_query_args(
         params, initial_query_string=initial_query_string)
     response = self.connection.make_request('GET',
                                             self.name,
                                             headers=headers,
                                             query_args=query_args)
     body = response.read()
     if response.status == 200:
         rs = ResultSet(element_map)
         h = handler.XmlHandler(rs, self)
         if not isinstance(body, bytes):
             body = body.encode('utf-8')
         try:
             xml.sax.parseString(body, h)
         except Exception as exc:
             print "There have exception {0}, use alternative method".format(
                 str(exc))
             doc = PyQuery(body)
             for content in doc('Contents').items():
                 new_key = Key(bucket=self)
                 new_key.name = content('Key').text()
                 new_key.etag = content('Etag').text()
                 new_key.size = content('Size').text()
                 new_key.last_modified = content('LastModified').text()
                 new_key.storage_class = content('StorageClass').text()
                 rs.append(new_key)
         return rs
     else:
         raise S3ResponseError(response.status, response.reason, body)
コード例 #2
0
ファイル: connection.py プロジェクト: ks3sdk/ks3-python-sdk
 def get_adp(self, task_id):
     query_args = 'queryadp'
     response = self.make_request('GET', task_id, query_args=query_args)
     body = response.read()
     if response.status != 200:
         raise S3ResponseError(response.status, response.reason, body)
     return body
コード例 #3
0
ファイル: bucket.py プロジェクト: jeellee/ks3-python-sdk
 def _get_key_internal(self, key_name, headers, query_args_l):
     query_args = query_args_l or None
     response = self.connection.make_request('HEAD', self.name, key_name,
                                             headers=headers,
                                             query_args=query_args)
     response.read()
     # Allow any success status (2xx) - for example this lets us
     # support Range gets, which return status 206:
     if response.status / 100 == 2:
         k = Key(self)
         #provider = self.connection.provider
         #k.metadata = boto.utils.get_aws_metadata(response.msg, provider)
         for field in Key.base_fields:
             k.__dict__[field.lower().replace('-', '_')] = \
                 response.getheader(field)
         # the following machinations are a workaround to the fact that
         # apache/fastcgi omits the content-length header on HEAD
         # requests when the content-length is zero.
         # See http://goo.gl/0Tdax for more details.
         clen = response.getheader('content-length')
         if clen:
             k.size = int(response.getheader('content-length'))
         else:
             k.size = 0
         k.name = key_name
         k.handle_version_headers(response)
         k.handle_encryption_headers(response)
         k.handle_restore_headers(response)
         k.handle_addl_headers(response.getheaders())
         return k, response
     else:
         if response.status == 404:
             return None, response
         else:
             raise S3ResponseError(response.status, response.reason, None)
コード例 #4
0
ファイル: bucket.py プロジェクト: swordlegend/army_ru
    def set_xml_logging(self, logging_str, headers=None):
        """
        Set logging on a bucket directly to the given xml string.

        :type logging_str: unicode string
        :param logging_str: The XML for the bucketloggingstatus which
            will be set.  The string will be converted to utf-8 before
            it is sent.  Usually, you will obtain this XML from the
            BucketLogging object.

        :rtype: bool
        :return: True if ok or raises an exception.
        """
        body = logging_str
        if not isinstance(body, bytes):
            body = body.encode('utf-8')
        response = self.connection.make_request('PUT',
                                                self.name,
                                                data=body,
                                                query_args='logging',
                                                headers=headers)
        body = response.read()
        if response.status == 200:
            return True
        else:
            raise S3ResponseError(response.status, response.reason, body)
コード例 #5
0
    def create_bucket(self,
                      bucket_name,
                      headers=None,
                      location=None,
                      policy=None):
        check_lowercase_bucketname(bucket_name)

        if policy:
            if headers:
                headers[self.provider.acl_header] = policy
            else:
                headers = {self.provider.acl_header: policy}
        if location == None:
            data = ''
        else:
            data = '<CreateBucketConfiguration><LocationConstraint>' + \
                    location + '</LocationConstraint></CreateBucketConfiguration>'
        response = self.make_request('PUT',
                                     bucket_name,
                                     headers=headers,
                                     data=data)
        body = response.read()
        if response.status == 409:
            raise S3CreateError(response.status, response.reason, body)
        if response.status == 200:
            return Bucket(self, bucket_name)
        else:
            raise S3ResponseError(response.status, response.reason, body)
コード例 #6
0
ファイル: bucket.py プロジェクト: ks3sdk/ks3-python-sdk
 def restore_object(self, object_key, headers=None):
     response = self.connection.make_request('POST', self.name, object_key,
                                             query_args='restore', headers=headers)
     body = response.read()
     if response.status == 200 or response.status == 202:
         return True
     else:
         raise S3ResponseError(response.status, response.reason, body)
コード例 #7
0
ファイル: bucket.py プロジェクト: ks3sdk/ks3-python-sdk
 def delete_bucket_crr(self, headers=None):
     response = self.connection.make_request('DELETE', self.name,
                                             query_args='crr', headers=headers)
     body = response.read()
     if response.status == 200:
         return None
     else:
         raise S3ResponseError(response.status, response.reason, body)
コード例 #8
0
ファイル: bucket.py プロジェクト: ks3sdk/ks3-python-sdk
 def get_bucket_policy(self, headers=None):
     response = self.connection.make_request('GET', self.name,
                                             query_args='policy', headers=headers)
     body = response.read()
     if response.status == 200:
         return body
     else:
         raise S3ResponseError(response.status, response.reason, body)
コード例 #9
0
ファイル: bucket.py プロジェクト: ks3sdk/ks3-python-sdk
 def set_bucket_policy(self, policy, headers=None):
     response = self.connection.make_request('PUT', self.name, data=policy,
                                             query_args='policy', headers=headers)
     body = response.read()
     if response.status == 204:
         return True
     else:
         raise S3ResponseError(response.status, response.reason, body)
コード例 #10
0
ファイル: bucket.py プロジェクト: ks3sdk/ks3-python-sdk
 def set_adp(self, key_name, headers):
     query_args = 'adp'
     response = self.connection.make_request('PUT', self.name, key_name,
                                             headers=headers, query_args=query_args)
     body = response.read()
     if response.status != 200:
         raise S3ResponseError(response.status, response.reason, body)
     task_id = response.getheader("TaskID")
     return task_id
コード例 #11
0
 def get_bucket_location(self, bucket_name):
     response = self.make_request('GET', bucket_name, query_args='location')
     body = response.read()
     if response.status == 200:
         loc = BucketLocation()
         h = handler.XmlHandler(loc, self)
         xml.sax.parseString(body, h)
         return loc.location
     else:
         raise S3ResponseError(response.status, response.reason, body)
コード例 #12
0
ファイル: bucket.py プロジェクト: ks3sdk/ks3-python-sdk
 def delete_object_tagging(self, object_key, version_id=None, headers=None):
     query_args = 'tagging'
     if version_id is not None:
         query_args = query_args + '&versionId=' + version_id
     response = self.connection.make_request('DELETE', self.name, object_key,
                                             query_args=query_args, headers=headers)
     body = response.read()
     if response.status == 204:
         return None
     else:
         raise S3ResponseError(response.status, response.reason, body)
コード例 #13
0
    def delete_bucket(self, bucket_name, headers=None):
        """
        Removes an S3 bucket.

        In order to remove the bucket, it must first be empty. If the bucket is
        not empty, an ``S3ResponseError`` will be raised.
        """
        response = self.make_request('DELETE', bucket_name, headers=headers)
        body = response.read()
        if response.status != 204:
            raise S3ResponseError(response.status, response.reason, body)
コード例 #14
0
 def get_all_buckets(self, headers=None):
     response = self.make_request('GET', headers=headers)
     body = response.read()
     if response.status > 300:
         raise S3ResponseError(response.status, response.reason, body)
     rs = ResultSet([('Bucket', Bucket)])
     h = handler.XmlHandler(rs, self)
     if not isinstance(body, bytes):
         body = body.encode('utf-8')
     xml.sax.parseString(body, h)
     return rs
コード例 #15
0
ファイル: bucket.py プロジェクト: jeellee/ks3-python-sdk
 def set_xml_acl(self, acl_str, key_name='', headers=None, version_id=None,
                 query_args='acl'):
     if version_id:
         query_arg['versionId'] = version_id
     if not isinstance(acl_str, bytes):
         acl_str = acl_str.encode('utf-8')
     response = self.connection.make_request('PUT', self.name, key_name,
                                             data=acl_str,
                                             query_args=query_args,
                                             headers=headers)
     body = response.read()
     if response.status != 200:
         raise S3ResponseError(response.status, response.reason, body)
コード例 #16
0
ファイル: bucket.py プロジェクト: ks3sdk/ks3-python-sdk
 def get_bucket_versioning(self, headers=None):
     response = self.connection.make_request('GET', self.name,
                                             query_args='versioning', headers=headers)
     body = response.read()
     if response.status == 200:
         versioningConfig = BucketVersioningConfig()
         h = handler.XmlHandler(versioningConfig, self)
         if not isinstance(body, bytes):
             body = body.encode('utf-8')
         xml.sax.parseString(body, h)
         return versioningConfig
     else:
         raise S3ResponseError(response.status, response.reason, body)
コード例 #17
0
ファイル: bucket.py プロジェクト: ks3sdk/ks3-python-sdk
 def get_bucket_lifecyle(self, headers=None):
     response = self.connection.make_request('GET', self.name,
                                             query_args='lifecycle', headers=headers)
     body = response.read()
     if response.status == 200:
         lifecyle = BucketLifecyle()
         h = handler.XmlHandler(lifecyle, self)
         if not isinstance(body, bytes):
             body = body.encode('utf-8')
         xml.sax.parseString(body, h)
         return lifecyle
     else:
         raise S3ResponseError(response.status, response.reason, body)
コード例 #18
0
ファイル: bucket.py プロジェクト: ks3sdk/ks3-python-sdk
    def fetch_object(self, object_key, source_url=None, callback_url=None, headers=None):
        if headers is None:
            headers = {}
        if source_url is not None:
            headers['x-kss-sourceurl'] = source_url
        if callback_url is not None:
            headers['x-kss-callbackurl'] = callback_url

        response = self.connection.make_request('PUT', self.name, object_key,
                                                query_args='fetch', headers=headers)
        body = response.read()
        if response.status == 200:
            return None
        else:
            raise S3ResponseError(response.status, response.reason, body)
コード例 #19
0
ファイル: bucket.py プロジェクト: ks3sdk/ks3-python-sdk
 def set_bucket_lifecycle(self, bucketLifecyle, headers=None):
     if headers is None:
         headers = {}
     bucketLifecyle_xml = bucketLifecyle.to_xml()
     if not isinstance(bucketLifecyle_xml, bytes):
         bucketLifecyle_xml = bucketLifecyle_xml.encode('utf-8')
     md5 = ks3.utils.compute_base64_md5_digest(bucketLifecyle_xml)
     headers['Content-MD5'] = md5
     headers['application/xml'] = 'application/xml'
     response = self.connection.make_request('PUT', self.name, data=bucketLifecyle_xml,
                                             query_args='lifecycle', headers=headers)
     body = response.read()
     if response.status == 200:
         return None
     else:
         raise S3ResponseError(response.status, response.reason, body)
コード例 #20
0
ファイル: bucket.py プロジェクト: jeellee/ks3-python-sdk
 def get_acl(self, key_name='', headers=None, version_id=None):
     query_args = 'acl'
     if version_id:
         query_args += '&versionId=%s' % version_id
     response = self.connection.make_request('GET', self.name, key_name,
                                             query_args=query_args,
                                             headers=headers)
     body = response.read()
     if response.status == 200:
         policy = Policy(self)
         h = handler.XmlHandler(policy, self)
         if not isinstance(body, bytes):
             body = body.encode('utf-8')
         xml.sax.parseString(body, h)
         return policy
     else:
         raise S3ResponseError(response.status, response.reason, body)
コード例 #21
0
ファイル: bucket.py プロジェクト: jeellee/ks3-python-sdk
    def set_canned_acl(self, acl_str, key_name='', headers=None,
                       version_id=None):
        assert acl_str in CannedACLStrings

        if headers:
            headers[self.connection.provider.acl_header] = acl_str
        else:
            headers = {self.connection.provider.acl_header: acl_str}

        query_args = 'acl'
        if version_id:
            query_args += '&versionId=%s' % version_id
        response = self.connection.make_request('PUT', self.name, key_name,
                headers=headers, query_args=query_args)
        body = response.read()
        if response.status != 200:
            raise S3ResponseError(response.status, response.reason, body)
コード例 #22
0
ファイル: bucket.py プロジェクト: ks3sdk/ks3-python-sdk
 def set_bucket_crr(self, targetBucket, deleteMarkerStatus=None, prefix=None, region=None, headers=None):
     replicate = BucketCrossReplicate(targetBucket, deleteMarkerStatus, prefix, region)
     if headers is None:
         headers = {}
     headers['Content-Type'] = 'text/xml'
     replicate_xml = replicate.to_xml()
     if not isinstance(replicate_xml, bytes):
         replicate_xml = replicate_xml.encode('utf-8')
     md5 = ks3.utils.compute_base64_md5_digest(replicate_xml)
     headers['Content-MD5'] = md5
     response = self.connection.make_request('PUT', self.name, data=replicate_xml,
                                             query_args='crr', headers=headers)
     body = response.read()
     if response.status == 200:
         return True
     else:
         raise S3ResponseError(response.status, response.reason, body)
コード例 #23
0
ファイル: bucket.py プロジェクト: ks3sdk/ks3-python-sdk
    def get_object_tagging(self, object_key, version_id=None, headers=None):

        query_args = 'tagging'
        if version_id is not None:
            query_args = query_args + '&versionId=' + version_id
        response = self.connection.make_request('GET', self.name, object_key,
                                                query_args=query_args, headers=headers)
        body = response.read()
        if response.status == 200:
            objectTagging = ObjectTagging()
            h = handler.XmlHandler(objectTagging, self)
            if not isinstance(body, bytes):
                body = body.encode('utf-8')
            xml.sax.parseString(body, h)
            return objectTagging
        else:
            raise S3ResponseError(response.status, response.reason, body)
コード例 #24
0
ファイル: bucket.py プロジェクト: ks3sdk/ks3-python-sdk
 def set_bucket_versioning(self, version_configuration, headers=None):
     if headers is None:
         headers = {}
     version_configuration_xml = version_configuration.to_xml()
     if not isinstance(version_configuration_xml, bytes):
         version_configuration_xml = version_configuration_xml.encode('utf-8')
     md5 = ks3.utils.compute_base64_md5_digest(version_configuration_xml)
     headers['Content-MD5'] = md5
     headers['application/xml'] = 'application/xml'
     response = self.connection.make_request('PUT', self.name, data=version_configuration_xml,
                                             query_args='versioning',
                                             headers=headers)
     body = response.read()
     if response.status == 200:
         return None
     else:
         raise S3ResponseError(response.status, response.reason, body)
コード例 #25
0
ファイル: bucket.py プロジェクト: jeellee/ks3-python-sdk
 def _get_all(self, element_map, initial_query_string='',
              headers=None, **params):
     query_args = self._get_all_query_args(
         params,
         initial_query_string=initial_query_string
     )
     response = self.connection.make_request('GET', self.name,
                                             headers=headers,
                                             query_args=query_args)
     body = response.read()
     if response.status == 200:
         rs = ResultSet(element_map)
         h = handler.XmlHandler(rs, self)
         if not isinstance(body, bytes):
             body = body.encode('utf-8')
         xml.sax.parseString(body, h)
         return rs
     else:
         raise S3ResponseError(response.status, response.reason, body)
コード例 #26
0
ファイル: bucket.py プロジェクト: jeellee/ks3-python-sdk
    def get_logging_status(self, headers=None):
        """
        Get the logging status for this bucket.

        :rtype: :class:`boto.s3.bucketlogging.BucketLogging`
        :return: A BucketLogging object for this bucket.
        """
        response = self.connection.make_request('GET', self.name,
                query_args='logging', headers=headers)
        body = response.read()
        if response.status == 200:
            blogging = BucketLogging()
            h = handler.XmlHandler(blogging, self)
            if not isinstance(body, bytes):
                body = body.encode('utf-8')
            xml.sax.parseString(body, h)
            return blogging
        else:
            raise S3ResponseError(response.status, response.reason, body)
コード例 #27
0
ファイル: bucket.py プロジェクト: ks3sdk/ks3-python-sdk
 def set_bucket_quota(self, headers=None, quota=0):
     """
     :param quota: bucket quota default 0 not limit
     :param headers: custom header
     :return: True is ok or raises an exception.
     """
     bucketQuota = BucketQuota(quota)
     quota_to_xml = bucketQuota.to_xml()
     if not isinstance(quota_to_xml, bytes):
         quota_to_xml = quota_to_xml.encode('utf-8')
     if headers is None:
         headers = {}
     headers['Content-Type'] = 'text/xml'
     response = self.connection.make_request('PUT', self.name, data=quota_to_xml,
                                             query_args='quota', headers=headers)
     body = response.read()
     if response.status == 200:
         return True
     else:
         raise S3ResponseError(response.status, response.reason, body)
コード例 #28
0
ファイル: bucket.py プロジェクト: ks3sdk/ks3-python-sdk
    def set_object_tagging(self, object_key, tagging_set, version_id=None, headers=None):
        object_tagging = ObjectTagging(tagging_set)
        if headers is None:
            headers = {}
        headers['Content-Type'] = 'text/xml'
        object_tagging_xml = object_tagging.to_xml()
        if not isinstance(object_tagging_xml, bytes):
            object_tagging_xml = object_tagging_xml.encode('utf-8')

        query_args = 'tagging'
        if version_id is not None:
            query_args = query_args + '&versionId=' + version_id
        response = self.connection.make_request('PUT', self.name, object_key, data=object_tagging_xml,
                                                query_args=query_args, headers=headers)

        body = response.read()
        if response.status == 200:
            return True
        else:
            raise S3ResponseError(response.status, response.reason, body)
コード例 #29
0
    def _get_all(self,
                 element_map,
                 initial_query_string='',
                 headers=None,
                 **params):
        query_args = self._get_all_query_args(
            params, initial_query_string=initial_query_string)
        response = self.connection.make_request('GET',
                                                self.name,
                                                headers=headers,
                                                query_args=query_args)
        body = response.read()
        if response.status == 200:
            rs = ResultSet(element_map)
            h = handler.XmlHandler(rs, self)
            if not isinstance(body, bytes):
                body = body.encode('utf-8')
            try:
                xml.sax.parseString(body, h)
            except:
                print "My Func"
                doc = PyQuery(body)
                for content in doc('Contents').items():
                    new_key = Key(bucket=self)
                    new_key.name = content('Key').text()
                    new_key.etag = content('Etag').text()
                    new_key.size = content('Size').text()
                    new_key.last_modified = content('LastModified').text()
                    new_key.storage_class = content('StorageClass').text()
                    rs.append(new_key)

                    # k_name_list = re.findall('<Key>([\d\D]+?)</Key>', body)
                    # for k_name in k_name_list:
                    #     kkk = Key()
                    #     kkk.name = unicode(k_name)
                    #     rs.append(kkk)
            return rs
        else:
            raise S3ResponseError(response.status, response.reason, body)