mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-11-03 09:27:38 +03:00
Similar to the recent adoption of Black. isort is a Python utility to sort imports alphabetically and automatically separate into sections. By using isort, contributors can quickly and automatically conform to the projects style without thinking. Just let the tool do it. Uses the configuration recommended by the Black to avoid conflicts of style. Rewrite TestImageQt.test_deprecated to no rely on import order.
74 lines
1.5 KiB
Python
74 lines
1.5 KiB
Python
#
|
|
# The Python Imaging Library.
|
|
# $Id$
|
|
#
|
|
# read files from within a tar file
|
|
#
|
|
# History:
|
|
# 95-06-18 fl Created
|
|
# 96-05-28 fl Open files in binary mode
|
|
#
|
|
# Copyright (c) Secret Labs AB 1997.
|
|
# Copyright (c) Fredrik Lundh 1995-96.
|
|
#
|
|
# See the README file for information on usage and redistribution.
|
|
#
|
|
|
|
import io
|
|
import sys
|
|
|
|
from . import ContainerIO
|
|
|
|
##
|
|
# A file object that provides read access to a given member of a TAR
|
|
# file.
|
|
|
|
|
|
class TarIO(ContainerIO.ContainerIO):
|
|
def __init__(self, tarfile, file):
|
|
"""
|
|
Create file object.
|
|
|
|
:param tarfile: Name of TAR file.
|
|
:param file: Name of member file.
|
|
"""
|
|
self.fh = open(tarfile, "rb")
|
|
|
|
while True:
|
|
|
|
s = self.fh.read(512)
|
|
if len(s) != 512:
|
|
raise IOError("unexpected end of tar file")
|
|
|
|
name = s[:100].decode("utf-8")
|
|
i = name.find("\0")
|
|
if i == 0:
|
|
raise IOError("cannot find subfile")
|
|
if i > 0:
|
|
name = name[:i]
|
|
|
|
size = int(s[124:135], 8)
|
|
|
|
if file == name:
|
|
break
|
|
|
|
self.fh.seek((size + 511) & (~511), io.SEEK_CUR)
|
|
|
|
# Open region
|
|
ContainerIO.ContainerIO.__init__(self, self.fh, self.fh.tell(), size)
|
|
|
|
# Context manager support
|
|
def __enter__(self):
|
|
return self
|
|
|
|
def __exit__(self, *args):
|
|
self.close()
|
|
|
|
if sys.version_info.major >= 3:
|
|
|
|
def __del__(self):
|
|
self.close()
|
|
|
|
def close(self):
|
|
self.fh.close()
|