Skip to content

Commit 6eb6e2c

Browse files
zhuxiaolong37huiguangjun
authored andcommitted
add lifecycle
1 parent ce2ac4b commit 6eb6e2c

File tree

14 files changed

+2023
-0
lines changed

14 files changed

+2023
-0
lines changed

alibabacloud_oss_v2/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from .models.bucket_access_monitor import *
2121
from .models.bucket_archive_direct_read import *
2222
from .models.bucket_cname import *
23+
from .models.bucket_lifecycle import *
2324
from .models.bucket_cors import *
2425
from .models.bucket_encryption import *
2526
from .models.bucket_logging import *

alibabacloud_oss_v2/client.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1129,6 +1129,45 @@ def delete_cname(self, request: models.DeleteCnameRequest, **kwargs
11291129
"""
11301130
return operations.delete_cname(self._client, request, **kwargs)
11311131

1132+
# bucket lifecycle
1133+
def put_bucket_lifecycle(self, request: models.PutBucketLifecycleRequest, **kwargs
1134+
) -> models.PutBucketLifecycleResult:
1135+
"""
1136+
Configures a lifecycle rule for a bucket. After you configure a lifecycle rule for a bucket, Object Storage Service (OSS) automatically deletes the objects that match the rule or converts the storage type of the objects based on the point in time that is specified in the lifecycle rule.
1137+
1138+
Args:
1139+
request (PutBucketLifecycleRequest): Request parameters for PutBucketLifecycle operation.
1140+
1141+
Returns:
1142+
PutBucketLifecycleResult: Response result for PutBucketLifecycle operation.
1143+
"""
1144+
return operations.put_bucket_lifecycle(self._client, request, **kwargs)
1145+
1146+
def get_bucket_lifecycle(self, request: models.GetBucketLifecycleRequest, **kwargs
1147+
) -> models.GetBucketLifecycleResult:
1148+
"""
1149+
Queries the lifecycle rules configured for a bucket. Only the owner of a bucket has the permissions to query the lifecycle rules configured for the bucket.
1150+
1151+
Args:
1152+
request (GetBucketLifecycleRequest): Request parameters for GetBucketLifecycle operation.
1153+
1154+
Returns:
1155+
GetBucketLifecycleResult: Response result for GetBucketLifecycle operation.
1156+
"""
1157+
return operations.get_bucket_lifecycle(self._client, request, **kwargs)
1158+
1159+
def delete_bucket_lifecycle(self, request: models.DeleteBucketLifecycleRequest, **kwargs
1160+
) -> models.DeleteBucketLifecycleResult:
1161+
"""
1162+
Deletes the lifecycle rules of a bucket.
1163+
1164+
Args:
1165+
request (DeleteBucketLifecycleRequest): Request parameters for DeleteBucketLifecycle operation.
1166+
1167+
Returns:
1168+
DeleteBucketLifecycleResult: Response result for DeleteBucketLifecycle operation.
1169+
"""
1170+
return operations.delete_bucket_lifecycle(self._client, request, **kwargs)
11321171

11331172
# bucket cors
11341173
def put_bucket_cors(self, request: models.PutBucketCorsRequest, **kwargs

alibabacloud_oss_v2/models/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from .bucket_access_monitor import *
99
from .bucket_archive_direct_read import *
1010
from .bucket_cname import *
11+
from .bucket_lifecycle import *
1112
from .bucket_cors import *
1213
from .bucket_logging import *
1314
from .bucket_encryption import *

alibabacloud_oss_v2/models/bucket_lifecycle.py

Lines changed: 458 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
2+
from typing import Optional, Any
3+
from .. import serde
4+
5+
class Tag(serde.Model):
6+
"""
7+
The container used to store the tag that you want to configure.
8+
"""
9+
10+
_attribute_map = {
11+
'key': {'tag': 'xml', 'rename': 'Key', 'type': 'str'},
12+
'value': {'tag': 'xml', 'rename': 'Value', 'type': 'str'},
13+
}
14+
15+
_xml_map = {
16+
'name': 'Tag'
17+
}
18+
19+
def __init__(
20+
self,
21+
key: Optional[str] = None,
22+
value: Optional[str] = None,
23+
**kwargs: Any
24+
) -> None:
25+
"""
26+
key (str, optional): The key of a tag. * A tag key can be up to 64 bytes in length.* A tag key cannot start with `http://`, `https://`, or `Aliyun`.* A tag key must be UTF-8 encoded.* A tag key cannot be left empty.
27+
value (str, optional): The value of the tag that you want to add or modify. * A tag value can be up to 128 bytes in length.* A tag value must be UTF-8 encoded.* The tag value can be left empty.
28+
"""
29+
super().__init__(**kwargs)
30+
self.key = key
31+
self.value = value
32+

alibabacloud_oss_v2/operations/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from .bucket_access_monitor import *
88
from .bucket_archive_direct_read import *
99
from .bucket_cname import *
10+
from .bucket_lifecycle import *
1011
from .bucket_cors import *
1112
from .bucket_logging import *
1213
from .bucket_encryption import *
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
# pylint: disable=line-too-long
2+
3+
from ..types import OperationInput, CaseInsensitiveDict
4+
from .. import serde
5+
from .. import serde_utils
6+
from .. import models
7+
from .._client import _SyncClientImpl
8+
9+
10+
def put_bucket_lifecycle(client: _SyncClientImpl, request: models.PutBucketLifecycleRequest, **kwargs) -> models.PutBucketLifecycleResult:
11+
"""
12+
put_bucket_lifecycle synchronously
13+
14+
Args:
15+
client (_SyncClientImpl): A agent that sends the request.
16+
request (PutBucketLifecycleRequest): The request for the PutBucketLifecycle operation.
17+
18+
Returns:
19+
PutBucketLifecycleResult: The result for the PutBucketLifecycle operation.
20+
"""
21+
22+
op_input = serde.serialize_input(
23+
request=request,
24+
op_input=OperationInput(
25+
op_name='PutBucketLifecycle',
26+
method='PUT',
27+
headers=CaseInsensitiveDict({
28+
'Content-Type': 'application/xml',
29+
}),
30+
parameters={
31+
'lifecycle': '',
32+
},
33+
bucket=request.bucket,
34+
op_metadata={'sub-resource': ['lifecycle']},
35+
),
36+
custom_serializer=[
37+
serde_utils.add_content_md5
38+
]
39+
)
40+
41+
op_output = client.invoke_operation(op_input, **kwargs)
42+
43+
return serde.deserialize_output(
44+
result=models.PutBucketLifecycleResult(),
45+
op_output=op_output,
46+
custom_deserializer=[
47+
serde.deserialize_output_xmlbody
48+
],
49+
)
50+
51+
def get_bucket_lifecycle(client: _SyncClientImpl, request: models.GetBucketLifecycleRequest, **kwargs) -> models.GetBucketLifecycleResult:
52+
"""
53+
get_bucket_lifecycle synchronously
54+
55+
Args:
56+
client (_SyncClientImpl): A agent that sends the request.
57+
request (GetBucketLifecycleRequest): The request for the GetBucketLifecycle operation.
58+
59+
Returns:
60+
GetBucketLifecycleResult: The result for the GetBucketLifecycle operation.
61+
"""
62+
63+
op_input = serde.serialize_input(
64+
request=request,
65+
op_input=OperationInput(
66+
op_name='GetBucketLifecycle',
67+
method='GET',
68+
headers=CaseInsensitiveDict({
69+
'Content-Type': 'application/xml',
70+
}),
71+
parameters={
72+
'lifecycle': '',
73+
},
74+
bucket=request.bucket,
75+
op_metadata={'sub-resource': ['lifecycle']},
76+
),
77+
custom_serializer=[
78+
serde_utils.add_content_md5
79+
]
80+
)
81+
82+
op_output = client.invoke_operation(op_input, **kwargs)
83+
84+
return serde.deserialize_output(
85+
result=models.GetBucketLifecycleResult(),
86+
op_output=op_output,
87+
custom_deserializer=[
88+
serde.deserialize_output_xmlbody
89+
],
90+
)
91+
92+
def delete_bucket_lifecycle(client: _SyncClientImpl, request: models.DeleteBucketLifecycleRequest, **kwargs) -> models.DeleteBucketLifecycleResult:
93+
"""
94+
delete_bucket_lifecycle synchronously
95+
96+
Args:
97+
client (_SyncClientImpl): A agent that sends the request.
98+
request (DeleteBucketLifecycleRequest): The request for the DeleteBucketLifecycle operation.
99+
100+
Returns:
101+
DeleteBucketLifecycleResult: The result for the DeleteBucketLifecycle operation.
102+
"""
103+
104+
op_input = serde.serialize_input(
105+
request=request,
106+
op_input=OperationInput(
107+
op_name='DeleteBucketLifecycle',
108+
method='DELETE',
109+
headers=CaseInsensitiveDict({
110+
'Content-Type': 'application/xml',
111+
}),
112+
parameters={
113+
'lifecycle': '',
114+
},
115+
bucket=request.bucket,
116+
op_metadata={'sub-resource': ['lifecycle']},
117+
),
118+
custom_serializer=[
119+
serde_utils.add_content_md5
120+
]
121+
)
122+
123+
op_output = client.invoke_operation(op_input, **kwargs)
124+
125+
return serde.deserialize_output(
126+
result=models.DeleteBucketLifecycleResult(),
127+
op_output=op_output,
128+
custom_deserializer=[
129+
serde.deserialize_output_xmlbody
130+
],
131+
)

alibabacloud_oss_v2/serde.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
ISO8601 = '%Y-%m-%dT%H:%M:%SZ'
1515
ISO8601_MICRO = '%Y-%m-%dT%H:%M:%S.%fZ'
16+
ISO8601_DATE = '%Y-%m-%dT00:00:00.000Z'
1617

1718
class Model:
1819
"""Mixin for all client request body/response body models to support
@@ -130,6 +131,23 @@ def serialize_isotime(value: datetime.datetime) -> str:
130131
return value.strftime(ISO8601)
131132

132133

134+
def serialize_iso_date(value: datetime.datetime) -> str:
135+
"""Serialize Date object into ISO-8601 formatted string
136+
137+
Args:
138+
value (datetime.datetime): value to be serialized
139+
140+
Returns:
141+
str: ISO-8601 formatted string, eg 2014-05-15T00:00:00.000Z
142+
"""
143+
144+
try:
145+
return value.strftime(ISO8601_DATE)
146+
147+
except ValueError:
148+
return value.strftime(ISO8601)
149+
150+
133151
def serialize_httptime(value: datetime.datetime) -> str:
134152
"""Serialize Datetime object into http time formatted string
135153
@@ -249,6 +267,8 @@ def _serialize_xml_any(tag: str, value: Any, atype: str) -> ET.Element:
249267
child.text = serialize_httptime(value)
250268
elif 'unixtime' in atypes:
251269
child.text = serialize_unixtime(value)
270+
elif 'ios8601date' in atypes:
271+
child.text = serialize_iso_date(value)
252272
else:
253273
child.text = serialize_isotime(value)
254274
return child

sample/delete_bucket_lifecycle.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import argparse
2+
import alibabacloud_oss_v2 as oss
3+
4+
parser = argparse.ArgumentParser(description="delete bucket lifecycle sample")
5+
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
6+
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
7+
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
8+
9+
10+
def main():
11+
12+
args = parser.parse_args()
13+
14+
# Loading credentials values from the environment variables
15+
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
16+
17+
# Using the SDK's default configuration
18+
cfg = oss.config.load_default()
19+
cfg.credentials_provider = credentials_provider
20+
cfg.region = args.region
21+
if args.endpoint is not None:
22+
cfg.endpoint = args.endpoint
23+
24+
client = oss.Client(cfg)
25+
26+
result = client.delete_bucket_lifecycle(oss.DeleteBucketLifecycleRequest(
27+
bucket=args.bucket,
28+
))
29+
30+
print(f'status code: {result.status_code},'
31+
f' request id: {result.request_id},'
32+
)
33+
34+
35+
if __name__ == "__main__":
36+
main()

sample/get_bucket_lifecycle.py

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import argparse
2+
import alibabacloud_oss_v2 as oss
3+
4+
parser = argparse.ArgumentParser(description="get bucket lifecycle sample")
5+
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
6+
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
7+
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
8+
9+
10+
def main():
11+
12+
args = parser.parse_args()
13+
14+
# Loading credentials values from the environment variables
15+
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
16+
17+
# Using the SDK's default configuration
18+
cfg = oss.config.load_default()
19+
cfg.credentials_provider = credentials_provider
20+
cfg.region = args.region
21+
if args.endpoint is not None:
22+
cfg.endpoint = args.endpoint
23+
24+
client = oss.Client(cfg)
25+
26+
result = client.get_bucket_lifecycle(oss.GetBucketLifecycleRequest(
27+
bucket=args.bucket,
28+
))
29+
30+
31+
print(f'status code: {result.status_code},'
32+
f' request id: {result.request_id},'
33+
# f' key: {result.lifecycle_configuration.rules[0].tags[0].key},'
34+
# f' value: {result.lifecycle_configuration.rules[0].tags[0].value},'
35+
# f' noncurrent days: {result.lifecycle_configuration.rules[0].noncurrent_version_expiration.noncurrent_days},'
36+
# f' object size greater than: {result.lifecycle_configuration.rules[0].filter.object_size_greater_than},'
37+
# f' object size less than: {result.lifecycle_configuration.rules[0].filter.object_size_less_than},'
38+
# f' prefix: {result.lifecycle_configuration.rules[0].filter.filter_not[0].prefix},'
39+
# f' key: {result.lifecycle_configuration.rules[0].filter.filter_not[0].tag.key},'
40+
# f' value: {result.lifecycle_configuration.rules[0].filter.filter_not[0].tag.value},'
41+
# f' id: {result.lifecycle_configuration.rules[0].id},'
42+
# f' created before date: {result.lifecycle_configuration.rules[0].expiration.created_before_date},'
43+
# f' days: {result.lifecycle_configuration.rules[0].expiration.days},'
44+
# f' expired object delete marker: {result.lifecycle_configuration.rules[0].expiration.expired_object_delete_marker},'
45+
# f' created before date: {result.lifecycle_configuration.rules[0].transitions[0].created_before_date},'
46+
# f' days: {result.lifecycle_configuration.rules[0].transitions[0].days},'
47+
# f' is access time: {result.lifecycle_configuration.rules[0].transitions[0].is_access_time},'
48+
# f' return to std when visit: {result.lifecycle_configuration.rules[0].transitions[0].return_to_std_when_visit},'
49+
# f' allow small file: {result.lifecycle_configuration.rules[0].transitions[0].allow_small_file},'
50+
# f' is access time: {result.lifecycle_configuration.rules[0].noncurrent_version_transitions[0].is_access_time},'
51+
# f' return to std when visit: {result.lifecycle_configuration.rules[0].noncurrent_version_transitions[0].return_to_std_when_visit},'
52+
# f' allow small file: {result.lifecycle_configuration.rules[0].noncurrent_version_transitions[0].allow_small_file},'
53+
# f' noncurrent days: {result.lifecycle_configuration.rules[0].noncurrent_version_transitions[0].noncurrent_days},'
54+
# f' atime base: {result.lifecycle_configuration.rules[0].atime_base},'
55+
# f' prefix: {result.lifecycle_configuration.rules[0].prefix},'
56+
# f' status: {result.lifecycle_configuration.rules[0].status},'
57+
# f' days: {result.lifecycle_configuration.rules[0].abort_multipart_upload.days},'
58+
# f' created before date: {result.lifecycle_configuration.rules[0].abort_multipart_upload.created_before_date},'
59+
)
60+
61+
if result.lifecycle_configuration.rules:
62+
for r in result.lifecycle_configuration.rules:
63+
print(f'rule: {r}')
64+
65+
66+
if __name__ == "__main__":
67+
main()

0 commit comments

Comments
 (0)