def test_lifecycle_without_versioning(self):
        auth = oss2.Auth(OSS_ID, OSS_SECRET)
        bucket_name = OSS_BUCKET + "-test-lifecycle-without-versioning"
        bucket = oss2.Bucket(auth, self.endpoint, bucket_name)
        bucket.create_bucket(oss2.BUCKET_ACL_PRIVATE)
        wait_meta_sync()

        rule1 = LifecycleRule('rule1',
                              'tests/',
                              status=LifecycleRule.ENABLED,
                              expiration=LifecycleExpiration(days=3))

        rule2 = LifecycleRule(
            'rule2',
            'logging-',
            status=LifecycleRule.ENABLED,
            expiration=LifecycleExpiration(
                created_before_date=datetime.date(2020, 12, 12)))

        rule3 = LifecycleRule(
            'rule3',
            'tests1/',
            status=LifecycleRule.ENABLED,
            abort_multipart_upload=AbortMultipartUpload(days=3))

        rule4 = LifecycleRule(
            'rule4',
            'logging1-',
            status=LifecycleRule.ENABLED,
            abort_multipart_upload=AbortMultipartUpload(
                created_before_date=datetime.date(2020, 12, 12)))

        tagging_rule = TaggingRule()
        tagging_rule.add('test_key1', 'test_value1')
        tagging_rule.add('test_key2', 'test_value2')
        tagging = Tagging(tagging_rule)
        rule5 = LifecycleRule(
            'rule5',
            'logging2-',
            status=LifecycleRule.ENABLED,
            storage_transitions=[
                StorageTransition(days=100,
                                  storage_class=oss2.BUCKET_STORAGE_CLASS_IA),
                StorageTransition(
                    days=356, storage_class=oss2.BUCKET_STORAGE_CLASS_ARCHIVE)
            ],
            tagging=tagging)

        lifecycle = BucketLifecycle([rule1, rule2, rule3, rule4, rule5])

        bucket.put_bucket_lifecycle(lifecycle)

        lifecycle = bucket.get_bucket_lifecycle()
        self.assertEquals(5, len(lifecycle.rules))

        bucket.delete_bucket()
    def test_lifecycle_veriong_wrong(self):
        auth = oss2.Auth(OSS_ID, OSS_SECRET)
        bucket_name = OSS_BUCKET + "-test-lifecycle-versioning-wrong"
        bucket = oss2.Bucket(auth, self.endpoint, bucket_name)
        bucket.create_bucket(oss2.BUCKET_ACL_PRIVATE)
        wait_meta_sync()
        # days and expired_detete_marker cannot both exsit.
        self.assertRaises(oss2.exceptions.ClientError,
                          LifecycleExpiration,
                          days=10,
                          expired_detete_marker=True)

        rule = LifecycleRule(
            'rule1',
            'test-prefix',
            status=LifecycleRule.ENABLED,
            expiration=LifecycleExpiration(expired_detete_marker=True),
            noncurrent_version_expiration=NoncurrentVersionExpiration(30),
            noncurrent_version_sotrage_transitions=[
                NoncurrentVersionStorageTransition(
                    20, oss2.BUCKET_STORAGE_CLASS_IA),
                NoncurrentVersionStorageTransition(
                    12, oss2.BUCKET_STORAGE_CLASS_ARCHIVE)
            ])

        lifecycle = BucketLifecycle([rule])

        # Archive transition days < IA transition days
        self.assertRaises(oss2.exceptions.InvalidArgument,
                          bucket.put_bucket_lifecycle, lifecycle)

        bucket.delete_bucket()
    def test_lifecycle_all(self):
        from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle, AbortMultipartUpload, StorageTransition

        rule = LifecycleRule(random_string(10), '中文前缀/',
                             status=LifecycleRule.ENABLED,
                             expiration=LifecycleExpiration(days=357))

        self.assertRaises(oss2.exceptions.ClientError,
                          LifecycleExpiration, days=356, created_before_date=datetime.date(2016, 12, 25))

        self.assertRaises(oss2.exceptions.ClientError,
                          AbortMultipartUpload, days=356, created_before_date=datetime.date(2016, 12, 25))

        self.assertRaises(oss2.exceptions.ClientError,
                          StorageTransition, days=356, created_before_date=datetime.date(2016, 12, 25))

        rule.abort_multipart_upload = AbortMultipartUpload(days=356)
        rule.storage_transitions = [StorageTransition(days=356, storage_class=oss2.BUCKET_STORAGE_CLASS_IA)]

        lifecycle = BucketLifecycle([rule])

        self.bucket.put_bucket_lifecycle(lifecycle)

        result = self.bucket.get_bucket_lifecycle()
        self.assertEqual(1, len(result.rules))
        self.assertEqual(356, result.rules[0].abort_multipart_upload.days)
        self.assertEqual(1, len(result.rules[0].storage_transitions))
        self.assertEqual(356, result.rules[0].storage_transitions[0].days)

        self.bucket.delete_bucket_lifecycle()
Exemple #4
0
    def test_put_lifecycle_days(self, do_request):
        from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle

        request_text = '''PUT /?lifecycle= HTTP/1.1
Host: ming-oss-share.oss-cn-hangzhou.aliyuncs.com
Accept-Encoding: identity
Connection: keep-alive
Content-Length: 178
date: Sat, 12 Dec 2015 00:35:39 GMT
User-Agent: aliyun-sdk-python/2.0.2(Windows/7/;3.3.3)
Accept: */*
authorization: OSS ZCDmm7TPZKHtx77j:BdIgh0100HCI1QkZKsArQvQafzY=

<LifecycleConfiguration><Rule><ID>{0}</ID><Prefix>{1}</Prefix><Status>{2}</Status><Expiration><Days>{3}</Days></Expiration></Rule></LifecycleConfiguration>'''

        response_text = '''HTTP/1.1 200 OK
Server: AliyunOSS
Date: Sat, 12 Dec 2015 00:35:39 GMT
Content-Length: 0
Connection: keep-alive
x-oss-request-id: 566B6BDB1BA604C27DD419B8'''

        req_info = mock_response(do_request, response_text)

        id = '中文ID'
        prefix = '中文前缀'
        status = 'Enabled'
        days = 3

        rule = LifecycleRule(id, prefix,
                             status=LifecycleRule.ENABLED,
                             expiration=LifecycleExpiration(days=days))
        bucket().put_bucket_lifecycle(BucketLifecycle([rule]))

        self.assertRequest(req_info, request_text.format(id, prefix, status, days))
    def test_put_lifecycle_invalid_transitions(self):
        from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle

        rule = LifecycleRule(random_string(10),
                             '中文前缀/',
                             status=LifecycleRule.ENABLED,
                             expiration=LifecycleExpiration(days=6))
        # 转储为ARCHIVE的天数小于转储为IA
        rule.storage_transitions = [
            oss2.models.StorageTransition(
                days=5, storage_class=oss2.BUCKET_STORAGE_CLASS_IA),
            oss2.models.StorageTransition(
                days=2, storage_class=oss2.BUCKET_STORAGE_CLASS_ARCHIVE)
        ]
        self.assertRaises(oss2.exceptions.InvalidArgument,
                          self.bucket.put_bucket_lifecycle,
                          BucketLifecycle([rule]))

        # 转储为IA(天数大于object过期时间)
        rule.storage_transitions = [
            oss2.models.StorageTransition(
                days=7, storage_class=oss2.BUCKET_STORAGE_CLASS_IA)
        ]
        self.assertRaises(oss2.exceptions.InvalidArgument,
                          self.bucket.put_bucket_lifecycle,
                          BucketLifecycle([rule]))

        # 转储为STANDARD
        rule.storage_transitions = [
            oss2.models.StorageTransition(
                days=5, storage_class=oss2.BUCKET_STORAGE_CLASS_STANDARD)
        ]
        self.assertRaises(oss2.exceptions.InvalidArgument,
                          self.bucket.put_bucket_lifecycle,
                          BucketLifecycle([rule]))
    def test_lifecycle_object_tagging_exceptions_too_much_rules(self):

        from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle, StorageTransition, Tagging, TaggingRule

        rule = LifecycleRule(
            random_string(10),
            '中文前缀/',
            status=LifecycleRule.ENABLED,
            expiration=LifecycleExpiration(
                created_before_date=datetime.date(2016, 12, 25)))
        rule.storage_transitions = [
            StorageTransition(created_before_date=datetime.date(2016, 12, 20),
                              storage_class=oss2.BUCKET_STORAGE_CLASS_IA)
        ]

        tagging = Tagging()
        for i in range(1, 20):
            key = 'test_key_' + str(i)
            value = 'test_value_' + str(i)
            tagging.tag_set.tagging_rule[key] = value

        rule.tagging = tagging

        lifecycle = BucketLifecycle([rule])

        try:
            # do not return error,but the lifecycle rule doesn't take effect
            result = self.bucket.put_bucket_lifecycle(lifecycle)
        except oss2.exceptions.OssError:
            self.assertFalse(
                True, "put lifecycle with tagging should fail ,but success")
    def test_lifecycle_storage_transitions_date(self):
        from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle, StorageTransition

        rule = LifecycleRule(
            random_string(10),
            '中文前缀/',
            status=LifecycleRule.ENABLED,
            expiration=LifecycleExpiration(
                created_before_date=datetime.date(2016, 12, 25)))
        rule.storage_transitions = [
            StorageTransition(created_before_date=datetime.date(2016, 12, 20),
                              storage_class=oss2.BUCKET_STORAGE_CLASS_IA)
        ]

        lifecycle = BucketLifecycle([rule])

        self.bucket.put_bucket_lifecycle(lifecycle)
        wait_meta_sync()
        result = self.bucket.get_bucket_lifecycle()
        self.assertEqual(1, len(result.rules))
        self.assertEqual(1, len(result.rules[0].storage_transitions))
        self.assertEqual(
            datetime.date(2016, 12, 20),
            result.rules[0].storage_transitions[0].created_before_date)

        self.assertTrue(result.rules[0].tagging is None)

        self.bucket.delete_bucket_lifecycle()
Exemple #8
0
    def test_put_lifecycle_date(self, do_request):
        from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle

        request_text = '''PUT /?lifecycle= HTTP/1.1
Host: ming-oss-share.oss-cn-hangzhou.aliyuncs.com
Accept-Encoding: identity
Connection: keep-alive
Content-Length: 198
date: Sat, 12 Dec 2015 00:35:37 GMT
User-Agent: aliyun-sdk-python/2.0.2(Windows/7/;3.3.3)
Accept: */*
authorization: OSS ZCDmm7TPZKHtx77j:45HTpSD5osRvtusf8VCkmchZZFs=

<LifecycleConfiguration><Rule><ID>{0}</ID><Prefix>{1}</Prefix><Status>{2}</Status><Expiration><Date>{3}</Date></Expiration></Rule></LifecycleConfiguration>'''

        response_text = '''HTTP/1.1 200 OK
Server: AliyunOSS
Date: Sat, 12 Dec 2015 00:35:37 GMT
Content-Length: 0
Connection: keep-alive
x-oss-request-id: 566B6BD9B295345D15740F1F'''

        id = 'hello world'
        prefix = '中文前缀'
        status = 'Disabled'
        date = '2015-12-25T00:00:00.000Z'

        req_info = mock_response(do_request, response_text)
        rule = LifecycleRule(id, prefix,
                             status=LifecycleRule.DISABLED,
                             expiration=LifecycleExpiration(date=datetime.date(2015, 12, 25)))
        bucket().put_bucket_lifecycle(BucketLifecycle([rule]))

        self.assertRequest(req_info, request_text.format(id, prefix, status, date))
Exemple #9
0
    def test_put_lifecycle_days(self, do_request):
        from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle

        template = '<LifecycleConfiguration><Rule><ID>{0}</ID><Prefix>{1}</Prefix>' + \
                   '<Status>{2}</Status><Expiration><Days>{3}</Days></Expiration></Rule></LifecycleConfiguration>'

        req_info = RequestInfo()
        do_request.auto_spec = True
        do_request.side_effect = partial(do4put,
                                         req_info=req_info,
                                         data_type=DT_BYTES)

        id = '中文ID'
        prefix = '中文前缀'
        status = 'Enabled'
        days = 3

        rule = LifecycleRule(id,
                             prefix,
                             status=LifecycleRule.ENABLED,
                             expiration=LifecycleExpiration(days=days))
        bucket().put_bucket_lifecycle(BucketLifecycle([rule]))

        self.assertXmlEqual(req_info.data,
                            template.format(id, prefix, status, days))
def set_oss_file_expired(prefix, days=3):
    """
    关于prefix:
    https://help.aliyun.com/knowledge_detail/39527.html
    OSS中的文件夹其实是一个大小为0KB的空文件。因此,用户创建一个key值为1/的object就会定义文件夹1;
    并且如果用户创建文件abc/1.jpg,系统是不会创建abc/这个文件的,因此在删除abc/1.jpg后将不会再存在abc这个文件夹。

    在后端存储的过程中不同的文件夹的文件仅仅是key值的前缀不一样。
    所有文件的key值(这里需要通过prefix指定文件夹)
    :param prefix: prefix for key,
    :param days: save days
    :return:
    """
    logger.info("setting expired time started")
    bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)

    rule1 = LifecycleRule('rule1', prefix,
                          status=LifecycleRule.ENABLED,
                          expiration=LifecycleExpiration(days=days))

    lifecycle = BucketLifecycle([rule1])

    result = bucket.put_bucket_lifecycle(lifecycle)

    logger.info(" ".join((result.request_id, str(result.status))))
    logger.info("setting expired time finished")

    return result
    def test_lifecycle_storage_transitions_more_days(self):
        from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle, StorageTransition

        rule = LifecycleRule(random_string(10), '中文前缀/',
                             status=LifecycleRule.ENABLED,
                             expiration=LifecycleExpiration(days=357))

        rule.storage_transitions = [StorageTransition(days=355, storage_class=oss2.BUCKET_STORAGE_CLASS_IA),
                                    StorageTransition(days=356, storage_class=oss2.BUCKET_STORAGE_CLASS_ARCHIVE)]

        lifecycle = BucketLifecycle([rule])

        self.bucket.put_bucket_lifecycle(lifecycle)
        wait_meta_sync()
        result = self.bucket.get_bucket_lifecycle()
        self.assertEqual(1, len(result.rules))
        self.assertEqual(2, len(result.rules[0].storage_transitions))
        self.assertTrue(result.rules[0].tagging is None)
        if result.rules[0].storage_transitions[0].storage_class == oss2.BUCKET_STORAGE_CLASS_IA:
            self.assertEqual(355, result.rules[0].storage_transitions[0].days)
            self.assertEqual(356, result.rules[0].storage_transitions[1].days)
            self.assertEqual(oss2.BUCKET_STORAGE_CLASS_ARCHIVE, result.rules[0].storage_transitions[1].storage_class)
        else:
            self.assertEqual(356, result.rules[0].storage_transitions[0].days)
            self.assertEqual(356, result.rules[0].storage_transitions[1].days)
            self.assertEqual(oss2.BUCKET_STORAGE_CLASS_IA, result.rules[0].storage_transitions[1].storage_class)
        self.bucket.delete_bucket_lifecycle()
    def test_lifecycle_object_tagging(self):
        from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle, StorageTransition, Tagging, TaggingRule

        rule = LifecycleRule(random_string(10), 'aaaaaaaaaaa/',
                             status=LifecycleRule.ENABLED,
                             expiration=LifecycleExpiration(created_before_date=datetime.date(2016, 12, 25)))
        rule.storage_transitions = [StorageTransition(created_before_date=datetime.date(2016, 12, 20),
                                                      storage_class=oss2.BUCKET_STORAGE_CLASS_IA)]

        tagging_rule = TaggingRule()
        tagging_rule.add('test_key', 'test_value')
        tagging = Tagging(tagging_rule)

        rule.tagging = tagging

        lifecycle = BucketLifecycle([rule])

        self.bucket.put_bucket_lifecycle(lifecycle)
        wait_meta_sync()
        result = self.bucket.get_bucket_lifecycle()
        self.assertEqual(1, len(result.rules))
        self.assertEqual(1, len(result.rules[0].storage_transitions))
        self.assertEqual(datetime.date(2016, 12, 20), result.rules[0].storage_transitions[0].created_before_date)

        self.assertEqual(1, result.rules[0].tagging.tag_set.len())
        self.assertEqual('test_value', result.rules[0].tagging.tag_set.tagging_rule['test_key'])

        self.bucket.delete_bucket_lifecycle()
    def test_lifecycle_abort_multipart_upload_date(self):
        from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle, AbortMultipartUpload

        rule = LifecycleRule(
            random_string(10),
            '中文前缀/',
            status=LifecycleRule.ENABLED,
            expiration=LifecycleExpiration(
                created_before_date=datetime.date(2016, 12, 25)))
        rule.abort_multipart_upload = AbortMultipartUpload(
            created_before_date=datetime.date(2016, 12, 20))

        lifecycle = BucketLifecycle([rule])

        self.bucket.put_bucket_lifecycle(lifecycle)

        wait_meta_sync()
        result = self.bucket.get_bucket_lifecycle()
        self.assertEqual(1, len(result.rules))
        self.assertEqual(
            datetime.date(2016, 12, 20),
            result.rules[0].abort_multipart_upload.created_before_date)

        self.assertTrue(result.rules[0].tagging is None)

        self.bucket.delete_bucket_lifecycle()
Exemple #14
0
    def test_put_lifecycle_date(self, do_request):
        from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle

        template = '<LifecycleConfiguration><Rule><ID>{0}</ID><Prefix>{1}</Prefix>' + \
                   '<Status>{2}</Status><Expiration><Date>{3}</Date></Expiration></Rule></LifecycleConfiguration>'

        req_info = RequestInfo()
        do_request.auto_spec = True
        do_request.side_effect = partial(do4put,
                                         req_info=req_info,
                                         data_type=DT_BYTES)

        id = 'hello world'
        prefix = '中文前缀'
        status = 'Disabled'
        date = '2015-12-25T00:00:00.000Z'

        rule = LifecycleRule(
            id,
            prefix,
            status=LifecycleRule.DISABLED,
            expiration=LifecycleExpiration(date=datetime.date(2015, 12, 25)))
        bucket().put_bucket_lifecycle(BucketLifecycle([rule]))

        self.assertXmlEqual(req_info.data,
                            template.format(id, prefix, status, date))
    def test_put_lifecycle_days_less_than_transition_days(self):
        from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle

        rule = LifecycleRule(random_string(10), '中文前缀/',
                             status=LifecycleRule.ENABLED,
                             expiration=LifecycleExpiration(days=3))

        rule.storage_transitions = [oss2.models.StorageTransition(days=4, storage_class=oss2.BUCKET_STORAGE_CLASS_IA)]
        self.assertRaises(oss2.exceptions.InvalidArgument, self.bucket.put_bucket_lifecycle, BucketLifecycle([rule]))
    def test_lifecycle_storage_transitions_mixed(self):
        from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle, StorageTransition

        rule = LifecycleRule(random_string(10), '中文前缀/',
                             status=LifecycleRule.ENABLED,
                             expiration=LifecycleExpiration(created_before_date=datetime.date(2016, 12, 25)))

        rule.storage_transitions = [StorageTransition(days=356, storage_class=oss2.BUCKET_STORAGE_CLASS_IA)]

        lifecycle = BucketLifecycle([rule])

        self.assertRaises(oss2.exceptions.InvalidRequest, self.bucket.put_bucket_lifecycle, lifecycle)
    def test_lifecycle_created_before_date(self):
        from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle

        rule = LifecycleRule(random_string(10), '中文前缀/',
                             status=LifecycleRule.ENABLED,
                             expiration=LifecycleExpiration(created_before_date=datetime.date(2016, 12, 25)))
        lifecycle = BucketLifecycle([rule])

        self.bucket.put_bucket_lifecycle(lifecycle)
        self.retry_assert(lambda: self.same_lifecycle(rule, self.bucket))

        self.bucket.delete_bucket_lifecycle()
Exemple #18
0
    def test_put_lifecycle_days(self, do_request):
        from oss2.models import (LifecycleExpiration, LifecycleRule,
                                 BucketLifecycle, AbortMultipartUpload,
                                 StorageTransition)

        request_text = '''PUT /?lifecycle= HTTP/1.1
Host: ming-oss-share.oss-cn-hangzhou.aliyuncs.com
Accept-Encoding: identity
Connection: keep-alive
Content-Length: 178
date: Sat, 12 Dec 2015 00:35:39 GMT
User-Agent: aliyun-sdk-python/2.0.2(Windows/7/;3.3.3)
Accept: */*
authorization: OSS ZCDmm7TPZKHtx77j:BdIgh0100HCI1QkZKsArQvQafzY=

<LifecycleConfiguration><Rule><ID>{0}</ID><Prefix>{1}</Prefix><Status>{2}</Status>\
<Expiration><Days>{3}</Days></Expiration><AbortMultipartUpload><Days>{5}</Days></AbortMultipartUpload>\
<Transition><StorageClass>Standard</StorageClass><Days>{4}</Days></Transition></Rule></LifecycleConfiguration>'''

        response_text = '''HTTP/1.1 200 OK
Server: AliyunOSS
Date: Sat, 12 Dec 2015 00:35:39 GMT
Content-Length: 0
Connection: keep-alive
x-oss-request-id: 566B6BDB1BA604C27DD419B8'''

        req_info = unittests.common.mock_response(do_request, response_text)

        id = '中文ID'
        prefix = '中文前缀'
        status = 'Enabled'
        days = 3

        rule = LifecycleRule(
            id,
            prefix,
            status=LifecycleRule.ENABLED,
            expiration=LifecycleExpiration(days=days),
            storage_transitions=[
                StorageTransition(
                    days=days,
                    storage_class=oss2.BUCKET_STORAGE_CLASS_STANDARD)
            ],
            abort_multipart_upload=AbortMultipartUpload(days=days))

        unittests.common.bucket().put_bucket_lifecycle(BucketLifecycle([rule]))

        self.assertRequest(
            req_info, request_text.format(id, prefix, status, days, days,
                                          days))
Exemple #19
0
    def test_put_lifecycle_date(self, do_request):
        from oss2.models import (LifecycleExpiration, LifecycleRule,
                                 BucketLifecycle, AbortMultipartUpload,
                                 StorageTransition)

        request_text = '''PUT /?lifecycle= HTTP/1.1
Host: ming-oss-share.oss-cn-hangzhou.aliyuncs.com
Accept-Encoding: identity
Connection: keep-alive
Content-Length: 198
date: Sat, 12 Dec 2015 00:35:37 GMT
User-Agent: aliyun-sdk-python/2.0.2(Windows/7/;3.3.3)
Accept: */*
authorization: OSS ZCDmm7TPZKHtx77j:45HTpSD5osRvtusf8VCkmchZZFs=

<LifecycleConfiguration><Rule><ID>{0}</ID><Prefix>{1}</Prefix><Status>{2}</Status>\
<Expiration><Date>{3}</Date></Expiration><AbortMultipartUpload><CreatedBeforeDate>{5}</CreatedBeforeDate></AbortMultipartUpload>\
<Transition><StorageClass>Standard</StorageClass><CreatedBeforeDate>{4}</CreatedBeforeDate></Transition></Rule></LifecycleConfiguration>'''

        response_text = '''HTTP/1.1 200 OK
Server: AliyunOSS
Date: Sat, 12 Dec 2015 00:35:37 GMT
Content-Length: 0
Connection: keep-alive
x-oss-request-id: 566B6BD9B295345D15740F1F'''

        id = 'hello world'
        prefix = '中文前缀'
        status = 'Disabled'
        date = '2015-12-25T00:00:00.000Z'
        date1 = datetime.date(2015, 12, 25)

        req_info = unittests.common.mock_response(do_request, response_text)
        rule = LifecycleRule(
            id,
            prefix,
            status=LifecycleRule.DISABLED,
            expiration=LifecycleExpiration(date=date1),
            storage_transitions=[
                StorageTransition(
                    created_before_date=date1,
                    storage_class=oss2.BUCKET_STORAGE_CLASS_STANDARD)
            ],
            abort_multipart_upload=AbortMultipartUpload(
                created_before_date=date1))
        unittests.common.bucket().put_bucket_lifecycle(BucketLifecycle([rule]))

        self.assertRequest(
            req_info, request_text.format(id, prefix, status, date, date,
                                          date))
    def test_lifecycle_days(self):
        from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle

        for prefix in ['中文前缀+/', '', u'中文前缀+/']:
            rule = LifecycleRule(random_string(10), prefix,
                                 status=LifecycleRule.ENABLED,
                                 expiration=LifecycleExpiration(days=356))
            lifecycle = BucketLifecycle([rule])

            self.bucket.put_bucket_lifecycle(lifecycle)
            self.retry_assert(lambda: self.same_lifecycle(rule, self.bucket))

        self.bucket.delete_bucket_lifecycle()
        self.bucket.delete_bucket_lifecycle()

        self.assertRaises(oss2.exceptions.NoSuchLifecycle, self.bucket.get_bucket_lifecycle)
Exemple #21
0
    def test_lifecycle_abort_multipart_upload_days(self):
        from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle, AbortMultipartUpload

        rule = LifecycleRule(
            random_string(10),
            '中文前缀/',
            status=LifecycleRule.ENABLED,
            expiration=LifecycleExpiration(
                created_before_date=datetime.date(2016, 12, 25)))

        rule.abort_multipart_upload = AbortMultipartUpload(days=356)

        lifecycle = BucketLifecycle([rule])

        self.bucket.put_bucket_lifecycle(lifecycle)
        self.retry_assert(lambda: self.same_lifecycle(rule, self.bucket))

        result = self.bucket.get_bucket_lifecycle()
        self.assertEqual(1, len(result.rules))
        self.assertEqual(356, result.rules[0].abort_multipart_upload.days)

        self.bucket.delete_bucket_lifecycle()
Exemple #22
0
    def test_lifecycle_storage_transitions_days(self):
        from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle, StorageTransition

        rule = LifecycleRule(random_string(10),
                             '中文前缀/',
                             status=LifecycleRule.ENABLED,
                             expiration=LifecycleExpiration(days=357))

        rule.storage_transitions = [
            StorageTransition(days=356,
                              storage_class=oss2.BUCKET_STORAGE_CLASS_IA)
        ]

        lifecycle = BucketLifecycle([rule])

        self.bucket.put_bucket_lifecycle(lifecycle)

        result = self.bucket.get_bucket_lifecycle()
        self.assertEqual(1, len(result.rules))
        self.assertEqual(1, len(result.rules[0].storage_transitions))
        self.assertEqual(356, result.rules[0].storage_transitions[0].days)

        self.bucket.delete_bucket_lifecycle()
    def test_lifecycle_versioning(self):
        auth = oss2.Auth(OSS_ID, OSS_SECRET)
        bucket_name = OSS_BUCKET + "-test-lifecycle-versioning"
        bucket = oss2.Bucket(auth, self.endpoint, bucket_name)
        bucket.create_bucket(oss2.BUCKET_ACL_PRIVATE)
        wait_meta_sync()

        rule = LifecycleRule(
            'rule1',
            'test-prefix',
            status=LifecycleRule.ENABLED,
            expiration=LifecycleExpiration(expired_detete_marker=True),
            noncurrent_version_expiration=NoncurrentVersionExpiration(30),
            noncurrent_version_sotrage_transitions=[
                NoncurrentVersionStorageTransition(
                    12, oss2.BUCKET_STORAGE_CLASS_IA),
                NoncurrentVersionStorageTransition(
                    20, oss2.BUCKET_STORAGE_CLASS_ARCHIVE)
            ])

        lifecycle = BucketLifecycle([rule])

        bucket.put_bucket_lifecycle(lifecycle)

        lifecycle = bucket.get_bucket_lifecycle()
        self.assertEquals(1, len(lifecycle.rules))
        self.assertEqual('rule1', lifecycle.rules[0].id)
        self.assertEqual('test-prefix', lifecycle.rules[0].prefix)
        self.assertEquals(LifecycleRule.ENABLED, lifecycle.rules[0].status)
        self.assertEquals(True,
                          lifecycle.rules[0].expiration.expired_detete_marker)
        self.assertEquals(
            30,
            lifecycle.rules[0].noncurrent_version_expiration.noncurrent_days)
        self.assertEquals(
            2, len(lifecycle.rules[0].noncurrent_version_sotrage_transitions))
        bucket.delete_bucket()