From 647e2755ca704f25b8d1a0c87100105debf495d4 Mon Sep 17 00:00:00 2001 From: Dawid Kraczkowski Date: Tue, 26 Oct 2021 12:15:38 +0200 Subject: [PATCH] Add support for casting ImageUpload type to bytes (#82) --- chocs/__version__.py | 2 +- chocs/http/http_multipart_message_parser.py | 5 ++++- pyproject.toml | 2 +- tests/http/test_http_message.py | 12 ++++++++++++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/chocs/__version__.py b/chocs/__version__.py index c68196d..67bc602 100644 --- a/chocs/__version__.py +++ b/chocs/__version__.py @@ -1 +1 @@ -__version__ = "1.2.0" +__version__ = "1.3.0" diff --git a/chocs/http/http_multipart_message_parser.py b/chocs/http/http_multipart_message_parser.py index 9a8f8a8..6c6820d 100644 --- a/chocs/http/http_multipart_message_parser.py +++ b/chocs/http/http_multipart_message_parser.py @@ -51,7 +51,6 @@ def __bool__(self) -> bool: return len(self) > 0 def __str__(self) -> str: - if not self._str: self._str = self.read().decode() @@ -63,6 +62,10 @@ def __enter__(self) -> IO[Any]: def __exit__(self, *args: Any) -> None: self.close() + def __bytes__(self) -> bytes: + self.seek(0) + return self.read() + class ParserState(Enum): PART_BOUNDARY = 0 diff --git a/pyproject.toml b/pyproject.toml index 5d65aaf..117964c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "chocs" -version = "1.2.0" +version = "1.3.0" description = "Lightweight and powerful WSGI/AWS lambda framework for rapid building rest applications." authors = [ "Dawid Kraczkowski " diff --git a/tests/http/test_http_message.py b/tests/http/test_http_message.py index 4feda38..b8ca2a7 100644 --- a/tests/http/test_http_message.py +++ b/tests/http/test_http_message.py @@ -129,3 +129,15 @@ def test_simple_http_message() -> None: assert http_message == "Hello World!" assert http_message.upper() == "HELLO WORLD!" assert isinstance(http_message, SimpleHttpMessage) + + +def test_can_convert_uploaded_file_to_bytes() -> None: + request = HttpRequest( + multipart_body["REQUEST_METHOD"], + body=multipart_body["wsgi.input"], + headers={"content-type": multipart_body["CONTENT_TYPE"]}, + ) + body = request.parsed_body + file_bytes = bytes(body["file_a"]) + + assert file_bytes == b"GIF87a\x02\x00\x02\x00\x91\x00\x00\x00\x00\x00\xff\x8c\x00\xff\xff\xff\x00\x00\x00!\xf9\x04\t\x00\x00\x03\x00,\x00\x00\x00\x00\x02\x00\x02\x00\x00\x02\x02\x8cS\x00;"