Ejemplo n.º 1
0
def _set_content_body(content: ContentType,
                      internal_request: _PipelineTransportHttpRequest) -> None:
    headers = internal_request.headers
    content_type = headers.get("Content-Type")
    if _is_stream_or_str_bytes(content):
        # stream will be bytes / str, or iterator of bytes / str
        internal_request.set_streamed_data_body(content)
        if isinstance(content, str) and content:
            _set_content_length_header("Content-Length",
                                       str(len(internal_request.data)),
                                       internal_request)
            _set_content_type_header("text/plain", internal_request)
        elif isinstance(content, bytes) and content:
            _set_content_length_header("Content-Length",
                                       str(len(internal_request.data)),
                                       internal_request)
            _set_content_type_header("application/octet-stream",
                                     internal_request)
        elif isinstance(content, (Iterable, AsyncIterable)):
            _set_content_length_header("Transfer-Encoding", "chunked",
                                       internal_request)
            _set_content_type_header("application/octet-stream",
                                     internal_request)
    elif isinstance(content, ET.Element):
        # XML body
        internal_request.set_xml_body(content)
        _set_content_type_header("application/xml", internal_request)
        _set_content_length_header("Content-Length",
                                   str(len(internal_request.data)),
                                   internal_request)
    elif content_type and content_type.startswith("text/"):
        # Text body
        internal_request.set_text_body(content)
        _set_content_length_header("Content-Length",
                                   str(len(internal_request.data)),
                                   internal_request)
    else:
        # Other body
        internal_request.data = content
    internal_request.headers = headers