mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-04 09:57:43 +03:00 
			
		
		
		
	Return strings or bytes from ContainerIO according to the file object mode
This commit is contained in:
		
							parent
							
								
									e817ed0d3e
								
							
						
					
					
						commit
						f958e2f8ed
					
				| 
						 | 
					@ -61,7 +61,8 @@ def test_seek_mode_2():
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_read_n0():
 | 
					def test_read_n0():
 | 
				
			||||||
    # Arrange
 | 
					    # Arrange
 | 
				
			||||||
    with open(TEST_FILE, "rb") as fh:
 | 
					    for bytesmode in (True, False):
 | 
				
			||||||
 | 
					        with open(TEST_FILE, "rb" if bytesmode else "r") as fh:
 | 
				
			||||||
            container = ContainerIO.ContainerIO(fh, 22, 100)
 | 
					            container = ContainerIO.ContainerIO(fh, 22, 100)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # Act
 | 
					            # Act
 | 
				
			||||||
| 
						 | 
					@ -69,12 +70,15 @@ def test_read_n0():
 | 
				
			||||||
            data = container.read()
 | 
					            data = container.read()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # Assert
 | 
					            # Assert
 | 
				
			||||||
        assert data == b"7\nThis is line 8\n"
 | 
					            if bytesmode:
 | 
				
			||||||
 | 
					                data = data.decode()
 | 
				
			||||||
 | 
					            assert data == "7\nThis is line 8\n"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_read_n():
 | 
					def test_read_n():
 | 
				
			||||||
    # Arrange
 | 
					    # Arrange
 | 
				
			||||||
    with open(TEST_FILE, "rb") as fh:
 | 
					    for bytesmode in (True, False):
 | 
				
			||||||
 | 
					        with open(TEST_FILE, "rb" if bytesmode else "r") as fh:
 | 
				
			||||||
            container = ContainerIO.ContainerIO(fh, 22, 100)
 | 
					            container = ContainerIO.ContainerIO(fh, 22, 100)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # Act
 | 
					            # Act
 | 
				
			||||||
| 
						 | 
					@ -82,12 +86,15 @@ def test_read_n():
 | 
				
			||||||
            data = container.read(3)
 | 
					            data = container.read(3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # Assert
 | 
					            # Assert
 | 
				
			||||||
        assert data == b"7\nT"
 | 
					            if bytesmode:
 | 
				
			||||||
 | 
					                data = data.decode()
 | 
				
			||||||
 | 
					            assert data == "7\nT"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_read_eof():
 | 
					def test_read_eof():
 | 
				
			||||||
    # Arrange
 | 
					    # Arrange
 | 
				
			||||||
    with open(TEST_FILE, "rb") as fh:
 | 
					    for bytesmode in (True, False):
 | 
				
			||||||
 | 
					        with open(TEST_FILE, "rb" if bytesmode else "r") as fh:
 | 
				
			||||||
            container = ContainerIO.ContainerIO(fh, 22, 100)
 | 
					            container = ContainerIO.ContainerIO(fh, 22, 100)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # Act
 | 
					            # Act
 | 
				
			||||||
| 
						 | 
					@ -95,39 +102,46 @@ def test_read_eof():
 | 
				
			||||||
            data = container.read()
 | 
					            data = container.read()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # Assert
 | 
					            # Assert
 | 
				
			||||||
        assert data == b""
 | 
					            if bytesmode:
 | 
				
			||||||
 | 
					                data = data.decode()
 | 
				
			||||||
 | 
					            assert data == ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_readline():
 | 
					def test_readline():
 | 
				
			||||||
    # Arrange
 | 
					    # Arrange
 | 
				
			||||||
    with open(TEST_FILE, "rb") as fh:
 | 
					    for bytesmode in (True, False):
 | 
				
			||||||
 | 
					        with open(TEST_FILE, "rb" if bytesmode else "r") as fh:
 | 
				
			||||||
            container = ContainerIO.ContainerIO(fh, 0, 120)
 | 
					            container = ContainerIO.ContainerIO(fh, 0, 120)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # Act
 | 
					            # Act
 | 
				
			||||||
            data = container.readline()
 | 
					            data = container.readline()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # Assert
 | 
					            # Assert
 | 
				
			||||||
        assert data == b"This is line 1\n"
 | 
					            if bytesmode:
 | 
				
			||||||
 | 
					                data = data.decode()
 | 
				
			||||||
 | 
					            assert data == "This is line 1\n"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_readlines():
 | 
					def test_readlines():
 | 
				
			||||||
    # Arrange
 | 
					    # Arrange
 | 
				
			||||||
 | 
					    for bytesmode in (True, False):
 | 
				
			||||||
        expected = [
 | 
					        expected = [
 | 
				
			||||||
        b"This is line 1\n",
 | 
					            "This is line 1\n",
 | 
				
			||||||
        b"This is line 2\n",
 | 
					            "This is line 2\n",
 | 
				
			||||||
        b"This is line 3\n",
 | 
					            "This is line 3\n",
 | 
				
			||||||
        b"This is line 4\n",
 | 
					            "This is line 4\n",
 | 
				
			||||||
        b"This is line 5\n",
 | 
					            "This is line 5\n",
 | 
				
			||||||
        b"This is line 6\n",
 | 
					            "This is line 6\n",
 | 
				
			||||||
        b"This is line 7\n",
 | 
					            "This is line 7\n",
 | 
				
			||||||
        b"This is line 8\n",
 | 
					            "This is line 8\n",
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
    with open(TEST_FILE, "rb") as fh:
 | 
					        with open(TEST_FILE, "rb" if bytesmode else "r") as fh:
 | 
				
			||||||
            container = ContainerIO.ContainerIO(fh, 0, 120)
 | 
					            container = ContainerIO.ContainerIO(fh, 0, 120)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # Act
 | 
					            # Act
 | 
				
			||||||
            data = container.readlines()
 | 
					            data = container.readlines()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # Assert
 | 
					            # Assert
 | 
				
			||||||
 | 
					            if bytesmode:
 | 
				
			||||||
 | 
					                data = [line.decode() for line in data]
 | 
				
			||||||
            assert data == expected
 | 
					            assert data == expected
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -82,7 +82,7 @@ class ContainerIO:
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            n = self.length - self.pos
 | 
					            n = self.length - self.pos
 | 
				
			||||||
        if not n:  # EOF
 | 
					        if not n:  # EOF
 | 
				
			||||||
            return b""
 | 
					            return b"" if "b" in self.fh.mode else ""
 | 
				
			||||||
        self.pos = self.pos + n
 | 
					        self.pos = self.pos + n
 | 
				
			||||||
        return self.fh.read(n)
 | 
					        return self.fh.read(n)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -92,13 +92,13 @@ class ContainerIO:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        :returns: An 8-bit string.
 | 
					        :returns: An 8-bit string.
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        s = b""
 | 
					        s = b"" if "b" in self.fh.mode else ""
 | 
				
			||||||
        while True:
 | 
					        while True:
 | 
				
			||||||
            c = self.read(1)
 | 
					            c = self.read(1)
 | 
				
			||||||
            if not c:
 | 
					            if not c:
 | 
				
			||||||
                break
 | 
					                break
 | 
				
			||||||
            s = s + c
 | 
					            s = s + c
 | 
				
			||||||
            if c == b"\n":
 | 
					            if c == (b"\n" if "b" in self.fh.mode else "\n"):
 | 
				
			||||||
                break
 | 
					                break
 | 
				
			||||||
        return s
 | 
					        return s
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user