Ejemplo n.º 1
0
def test_retry_seekable_stream():
    class MockTransport(HttpTransport):
        def __init__(self):
            self._first = True
        def __exit__(self, exc_type, exc_val, exc_tb):
            pass
        def close(self):
            pass
        def open(self):
            pass

        def send(self, request, **kwargs):  # type: (PipelineRequest, Any) -> PipelineResponse
            if self._first:
                self._first = False
                request.body.seek(0,2)
                raise AzureError('fail on first')
            position = request.body.tell()
            assert position == 0
            response = HttpResponse(request, None)
            response.status_code = 400
            return response

    data = BytesIO(b"Lots of dataaaa")
    http_request = HttpRequest('GET', 'http://127.0.0.1/')
    http_request.set_streamed_data_body(data)
    http_retry = RetryPolicy(retry_total = 1)
    pipeline = Pipeline(MockTransport(), [http_retry])
    pipeline.run(http_request)
    def build_response(body, content_type=None):
        class MockResponse(HttpResponse):
            def __init__(self):
                super(MockResponse, self).__init__(None, None)
                self._body = 'test'

            def body(self):
                return self._body

        data = BytesIO(b"Lots of dataaaa")
        universal_request = HttpRequest('GET', 'http://127.0.0.1/', data=data)
        universal_request.set_streamed_data_body(data)
        return PipelineResponse(universal_request, MockResponse(), PipelineContext(None, stream=True))
Ejemplo n.º 3
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
Ejemplo n.º 4
0
    def test_request_stream(self):
        request = HttpRequest("GET", "/")

        data = b"Lots of dataaaa"
        request.set_streamed_data_body(data)
        self.assertEqual(request.data, data)

        def data_gen():
            for i in range(10):
                yield i
        data = data_gen()
        request.set_streamed_data_body(data)
        self.assertEqual(request.data, data)

        data = BytesIO(b"Lots of dataaaa")
        request.set_streamed_data_body(data)
        self.assertEqual(request.data, data)
Ejemplo n.º 5
0
def test_request_stream():
    request = HttpRequest("GET", "/")

    data = b"Lots of dataaaa"
    request.set_streamed_data_body(data)
    assert request.data == data

    def data_gen():
        for i in range(10):
            yield i
    data = data_gen()
    request.set_streamed_data_body(data)
    assert request.data == data

    data = BytesIO(b"Lots of dataaaa")
    request.set_streamed_data_body(data)
    assert request.data == data