in oss2/xml_utils.py [0:0]
def to_put_bucket_website(bucket_website):
root = ElementTree.Element('WebsiteConfiguration')
index_node = ElementTree.SubElement(root, 'IndexDocument')
_add_text_child(index_node, 'Suffix', bucket_website.index_file)
error_node = ElementTree.SubElement(root, 'ErrorDocument')
_add_text_child(error_node, 'Key', bucket_website.error_file)
if len(bucket_website.rules) == 0:
return _node_to_string(root)
rules_node = ElementTree.SubElement(root, "RoutingRules")
for rule in bucket_website.rules:
rule_node = ElementTree.SubElement(rules_node, 'RoutingRule')
_add_text_child(rule_node, 'RuleNumber', str(rule.rule_num))
condition_node = ElementTree.SubElement(rule_node, 'Condition')
if rule.condition.key_prefix_equals is not None:
_add_text_child(condition_node, 'KeyPrefixEquals', rule.condition.key_prefix_equals)
if rule.condition.http_err_code_return_equals is not None:
_add_text_child(condition_node, 'HttpErrorCodeReturnedEquals',
str(rule.condition.http_err_code_return_equals))
for header in rule.condition.include_header_list:
include_header_node = ElementTree.SubElement(condition_node, 'IncludeHeader')
_add_text_child(include_header_node, 'Key', header.key)
_add_text_child(include_header_node, 'Equals', header.equals)
if rule.redirect is not None:
redirect_node = ElementTree.SubElement(rule_node, 'Redirect')
# common
_add_text_child(redirect_node, 'RedirectType', rule.redirect.redirect_type)
if rule.redirect.pass_query_string is not None:
_add_text_child(redirect_node, 'PassQueryString', str(rule.redirect.pass_query_string))
# External, AliCDN
if rule.redirect.redirect_type in [REDIRECT_TYPE_EXTERNAL, REDIRECT_TYPE_ALICDN]:
if rule.redirect.proto is not None:
_add_text_child(redirect_node, 'Protocol', rule.redirect.proto)
if rule.redirect.host_name is not None:
_add_text_child(redirect_node, 'HostName', rule.redirect.host_name)
if rule.redirect.http_redirect_code is not None:
_add_text_child(redirect_node, 'HttpRedirectCode', str(rule.redirect.http_redirect_code))
# External, AliCDN, Internal
if rule.redirect.redirect_type in [REDIRECT_TYPE_EXTERNAL, REDIRECT_TYPE_ALICDN, REDIRECT_TYPE_INTERNAL]:
if rule.redirect.replace_key_with is not None:
_add_text_child(redirect_node, 'ReplaceKeyWith', rule.redirect.replace_key_with)
if rule.redirect.replace_key_prefix_with is not None:
_add_text_child(redirect_node, 'ReplaceKeyPrefixWith', rule.redirect.replace_key_prefix_with)
# Mirror
elif rule.redirect.redirect_type == REDIRECT_TYPE_MIRROR:
if rule.redirect.mirror_url is not None:
_add_text_child(redirect_node, 'MirrorURL', rule.redirect.mirror_url)
if rule.redirect.mirror_url_slave is not None:
_add_text_child(redirect_node, 'MirrorURLSlave', rule.redirect.mirror_url_slave)
if rule.redirect.mirror_url_probe is not None:
_add_text_child(redirect_node, 'MirrorURLProbe', rule.redirect.mirror_url_probe)
if rule.redirect.mirror_pass_query_string is not None:
_add_text_child(redirect_node, 'MirrorPassQueryString', str(rule.redirect.mirror_pass_query_string))
if rule.redirect.mirror_follow_redirect is not None:
_add_text_child(redirect_node, 'MirrorFollowRedirect', str(rule.redirect.mirror_follow_redirect))
if rule.redirect.mirror_check_md5 is not None:
_add_text_child(redirect_node, 'MirrorCheckMd5', str(rule.redirect.mirror_check_md5))
if rule.redirect.mirror_headers is not None:
mirror_headers_node = ElementTree.SubElement(redirect_node, 'MirrorHeaders')
if rule.redirect.mirror_headers.pass_all is not None:
_add_text_child(mirror_headers_node, 'PassAll', str(rule.redirect.mirror_headers.pass_all))
for pass_param in rule.redirect.mirror_headers.pass_list:
_add_text_child(mirror_headers_node, 'Pass', pass_param)
for remove_param in rule.redirect.mirror_headers.remove_list:
_add_text_child(mirror_headers_node, 'Remove', remove_param)
for set_param in rule.redirect.mirror_headers.set_list:
set_node = ElementTree.SubElement(mirror_headers_node, 'Set')
_add_text_child(set_node, 'Key', set_param.key)
_add_text_child(set_node, 'Value', set_param.value)
return _node_to_string(root)