def _convert_service_properties_to_xml()

in azure/multiapi/storage/v2018_11_09/common/_serialization.py [0:0]


def _convert_service_properties_to_xml(logging, hour_metrics, minute_metrics,
                                       cors, target_version=None, delete_retention_policy=None, static_website=None):
    '''
    <?xml version="1.0" encoding="utf-8"?>
    <StorageServiceProperties>
        <Logging>
            <Version>version-number</Version>
            <Delete>true|false</Delete>
            <Read>true|false</Read>
            <Write>true|false</Write>
            <RetentionPolicy>
                <Enabled>true|false</Enabled>
                <Days>number-of-days</Days>
            </RetentionPolicy>
        </Logging>
        <HourMetrics>
            <Version>version-number</Version>
            <Enabled>true|false</Enabled>
            <IncludeAPIs>true|false</IncludeAPIs>
            <RetentionPolicy>
                <Enabled>true|false</Enabled>
                <Days>number-of-days</Days>
            </RetentionPolicy>
        </HourMetrics>
        <MinuteMetrics>
            <Version>version-number</Version>
            <Enabled>true|false</Enabled>
            <IncludeAPIs>true|false</IncludeAPIs>
            <RetentionPolicy>
                <Enabled>true|false</Enabled>
                <Days>number-of-days</Days>
            </RetentionPolicy>
        </MinuteMetrics>
        <Cors>
            <CorsRule>
                <AllowedOrigins>comma-separated-list-of-allowed-origins</AllowedOrigins>
                <AllowedMethods>comma-separated-list-of-HTTP-verb</AllowedMethods>
                <MaxAgeInSeconds>max-caching-age-in-seconds</MaxAgeInSeconds>
                <ExposedHeaders>comma-seperated-list-of-response-headers</ExposedHeaders>
                <AllowedHeaders>comma-seperated-list-of-request-headers</AllowedHeaders>
            </CorsRule>
        </Cors>
        <DeleteRetentionPolicy>
            <Enabled>true|false</Enabled>
            <Days>number-of-days</Days>
        </DeleteRetentionPolicy>
        <StaticWebsite>
            <Enabled>true|false</Enabled>
            <IndexDocument></IndexDocument>
            <ErrorDocument404Path></ErrorDocument404Path>
        </StaticWebsite>
    </StorageServiceProperties>
    '''
    service_properties_element = ETree.Element('StorageServiceProperties')

    # Logging
    if logging:
        logging_element = ETree.SubElement(service_properties_element, 'Logging')
        ETree.SubElement(logging_element, 'Version').text = logging.version
        ETree.SubElement(logging_element, 'Delete').text = str(logging.delete)
        ETree.SubElement(logging_element, 'Read').text = str(logging.read)
        ETree.SubElement(logging_element, 'Write').text = str(logging.write)

        retention_element = ETree.SubElement(logging_element, 'RetentionPolicy')
        _convert_retention_policy_to_xml(logging.retention_policy, retention_element)

    # HourMetrics
    if hour_metrics:
        hour_metrics_element = ETree.SubElement(service_properties_element, 'HourMetrics')
        _convert_metrics_to_xml(hour_metrics, hour_metrics_element)

    # MinuteMetrics
    if minute_metrics:
        minute_metrics_element = ETree.SubElement(service_properties_element, 'MinuteMetrics')
        _convert_metrics_to_xml(minute_metrics, minute_metrics_element)

    # CORS
    # Make sure to still serialize empty list
    if cors is not None:
        cors_element = ETree.SubElement(service_properties_element, 'Cors')
        for rule in cors:
            cors_rule = ETree.SubElement(cors_element, 'CorsRule')
            ETree.SubElement(cors_rule, 'AllowedOrigins').text = ",".join(rule.allowed_origins)
            ETree.SubElement(cors_rule, 'AllowedMethods').text = ",".join(rule.allowed_methods)
            ETree.SubElement(cors_rule, 'MaxAgeInSeconds').text = str(rule.max_age_in_seconds)
            ETree.SubElement(cors_rule, 'ExposedHeaders').text = ",".join(rule.exposed_headers)
            ETree.SubElement(cors_rule, 'AllowedHeaders').text = ",".join(rule.allowed_headers)

    # Target version
    if target_version:
        ETree.SubElement(service_properties_element, 'DefaultServiceVersion').text = target_version

    # DeleteRetentionPolicy
    if delete_retention_policy:
        policy_element = ETree.SubElement(service_properties_element, 'DeleteRetentionPolicy')
        ETree.SubElement(policy_element, 'Enabled').text = str(delete_retention_policy.enabled)

        if delete_retention_policy.enabled:
            ETree.SubElement(policy_element, 'Days').text = str(delete_retention_policy.days)

    # StaticWebsite
    if static_website:
        static_website_element = ETree.SubElement(service_properties_element, 'StaticWebsite')
        ETree.SubElement(static_website_element, 'Enabled').text = str(static_website.enabled)

        if static_website.enabled:

            if static_website.index_document is not None:
                ETree.SubElement(static_website_element, 'IndexDocument').text = str(static_website.index_document)

            if static_website.error_document_404_path is not None:
                ETree.SubElement(static_website_element, 'ErrorDocument404Path').text = \
                    str(static_website.error_document_404_path)

    # Add xml declaration and serialize
    try:
        stream = BytesIO()
        ETree.ElementTree(service_properties_element).write(stream, xml_declaration=True, encoding='utf-8',
                                                            method='xml')
    except:
        raise
    finally:
        output = stream.getvalue()
        stream.close()

    return output