in oss2/xml_utils.py [0:0]
def to_put_bucket_lifecycle(bucket_lifecycle):
root = ElementTree.Element('LifecycleConfiguration')
for rule in bucket_lifecycle.rules:
rule_node = ElementTree.SubElement(root, 'Rule')
_add_text_child(rule_node, 'ID', rule.id)
_add_text_child(rule_node, 'Prefix', rule.prefix)
_add_text_child(rule_node, 'Status', rule.status)
expiration = rule.expiration
if expiration:
expiration_node = ElementTree.SubElement(rule_node, 'Expiration')
if expiration.days is not None:
_add_text_child(expiration_node, 'Days', str(expiration.days))
elif expiration.date is not None:
_add_text_child(expiration_node, 'Date', date_to_iso8601(expiration.date))
elif expiration.created_before_date is not None:
_add_text_child(expiration_node, 'CreatedBeforeDate', date_to_iso8601(expiration.created_before_date))
elif expiration.expired_detete_marker is not None:
_add_text_child(expiration_node, 'ExpiredObjectDeleteMarker', str(expiration.expired_detete_marker))
abort_multipart_upload = rule.abort_multipart_upload
if abort_multipart_upload:
abort_multipart_upload_node = ElementTree.SubElement(rule_node, 'AbortMultipartUpload')
if abort_multipart_upload.days is not None:
_add_text_child(abort_multipart_upload_node, 'Days', str(abort_multipart_upload.days))
elif abort_multipart_upload.created_before_date is not None:
_add_text_child(abort_multipart_upload_node, 'CreatedBeforeDate',
date_to_iso8601(abort_multipart_upload.created_before_date))
storage_transitions = rule.storage_transitions
if storage_transitions:
for storage_transition in storage_transitions:
storage_transition_node = ElementTree.SubElement(rule_node, 'Transition')
_add_text_child(storage_transition_node, 'StorageClass', str(storage_transition.storage_class))
if storage_transition.is_access_time is not None:
_add_text_child(storage_transition_node, 'IsAccessTime', str(storage_transition.is_access_time).lower())
if storage_transition.return_to_std_when_visit is not None:
_add_text_child(storage_transition_node, 'ReturnToStdWhenVisit', str(storage_transition.return_to_std_when_visit).lower())
if storage_transition.allow_small_file is not None:
_add_text_child(storage_transition_node, 'AllowSmallFile', str(storage_transition.allow_small_file).lower())
if storage_transition.days is not None:
_add_text_child(storage_transition_node, 'Days', str(storage_transition.days))
elif storage_transition.created_before_date is not None:
_add_text_child(storage_transition_node, 'CreatedBeforeDate',
date_to_iso8601(storage_transition.created_before_date))
tagging = rule.tagging
if tagging:
tagging_rule = tagging.tag_set.tagging_rule
for key in tagging.tag_set.tagging_rule:
tag_node = ElementTree.SubElement(rule_node, 'Tag')
_add_text_child(tag_node, 'Key', key)
_add_text_child(tag_node, 'Value', tagging_rule[key])
noncurrent_version_expiration = rule.noncurrent_version_expiration
if noncurrent_version_expiration is not None:
version_expiration_node = ElementTree.SubElement(rule_node, 'NoncurrentVersionExpiration')
_add_text_child(version_expiration_node, 'NoncurrentDays', str(noncurrent_version_expiration.noncurrent_days))
noncurrent_version_sotrage_transitions = rule.noncurrent_version_sotrage_transitions
if noncurrent_version_sotrage_transitions is not None:
for noncurrent_version_sotrage_transition in noncurrent_version_sotrage_transitions:
version_transition_node = ElementTree.SubElement(rule_node, 'NoncurrentVersionTransition')
_add_text_child(version_transition_node, 'NoncurrentDays', str(noncurrent_version_sotrage_transition.noncurrent_days))
_add_text_child(version_transition_node, 'StorageClass', str(noncurrent_version_sotrage_transition.storage_class))
if noncurrent_version_sotrage_transition.is_access_time is not None:
_add_text_child(version_transition_node, 'IsAccessTime', str(noncurrent_version_sotrage_transition.is_access_time).lower())
if noncurrent_version_sotrage_transition.return_to_std_when_visit is not None:
_add_text_child(version_transition_node, 'ReturnToStdWhenVisit', str(noncurrent_version_sotrage_transition.return_to_std_when_visit).lower())
if noncurrent_version_sotrage_transition.allow_small_file is not None:
_add_text_child(version_transition_node, 'AllowSmallFile', str(noncurrent_version_sotrage_transition.allow_small_file).lower())
if rule.filter:
filter_node = ElementTree.SubElement(rule_node, "Filter")
if rule.filter.object_size_greater_than:
_add_text_child(filter_node, 'ObjectSizeGreaterThan', str(rule.filter.object_size_greater_than))
if rule.filter.object_size_less_than:
_add_text_child(filter_node, 'ObjectSizeLessThan', str(rule.filter.object_size_less_than))
if rule.filter.filter_not:
for not_arg in rule.filter.filter_not:
not_node = ElementTree.SubElement(filter_node, 'Not')
_add_text_child(not_node, 'Prefix', not_arg.prefix)
if not_arg.tag:
tag_node = ElementTree.SubElement(not_node, 'Tag')
_add_text_child(tag_node, 'Key', not_arg.tag.key)
_add_text_child(tag_node, 'Value', not_arg.tag.value)
return _node_to_string(root)