From ceba6a8223f70823daff080753af8897e9906b6e Mon Sep 17 00:00:00 2001 From: Johannes 'josch' Schauer Date: Thu, 23 Apr 2020 07:13:39 +0200 Subject: [PATCH] Rip out remaining python3 support https://www.enricozini.org/blog/2020/python/python-2-is-dead/ --- setup.py | 5 -- src/img2pdf.py | 123 +++++++++++++----------------------------- src/tests/__init__.py | 33 +++--------- 3 files changed, 45 insertions(+), 116 deletions(-) diff --git a/setup.py b/setup.py index d6b7f63..ae22f59 100644 --- a/setup.py +++ b/setup.py @@ -1,8 +1,6 @@ import sys from setuptools import setup -PY3 = sys.version_info[0] >= 3 - VERSION = "0.3.4" INSTALL_REQUIRES = ( @@ -13,9 +11,6 @@ TESTS_REQUIRE = ( 'pdfrw', ) -if not PY3: - INSTALL_REQUIRES += ('enum34',) - setup( name='img2pdf', diff --git a/src/img2pdf.py b/src/img2pdf.py index 6288f85..0882c17 100755 --- a/src/img2pdf.py +++ b/src/img2pdf.py @@ -42,8 +42,6 @@ try: except ImportError: pass -PY3 = sys.version_info[0] >= 3 - __version__ = "0.3.4" default_dpi = 96.0 papersizes = { @@ -574,49 +572,26 @@ class MyPdfWriter: self.addobj(page) -if PY3: - - class MyPdfString: - @classmethod - def encode(cls, string, hextype=False): - if hextype: - return ( - b"< " - + b" ".join(("%06x" % c).encode("ascii") for c in string) - + b" >" - ) - else: - try: - string = string.encode("ascii") - except UnicodeEncodeError: - string = b"\xfe\xff" + string.encode("utf-16-be") - # We should probably encode more here because at least - # ghostscript interpretes a carriage return byte (0x0D) as a - # new line byte (0x0A) - # PDF supports: \n, \r, \t, \b and \f - string = string.replace(b"\\", b"\\\\") - string = string.replace(b"(", b"\\(") - string = string.replace(b")", b"\\)") - return b"(" + string + b")" - - -else: - - class MyPdfString(object): - @classmethod - def encode(cls, string, hextype=False): - if hextype: - return ( - b"< " - + b" ".join(("%06x" % c).encode("ascii") for c in string) - + b" >" - ) - else: - # This mimics exactely to what pdfrw does. - string = string.replace(b"\\", b"\\\\") - string = string.replace(b"(", b"\\(") - string = string.replace(b")", b"\\)") - return b"(" + string + b")" +class MyPdfString: + @classmethod + def encode(cls, string, hextype=False): + if hextype: + return ( + b"< " + b" ".join(("%06x" % c).encode("ascii") for c in string) + b" >" + ) + else: + try: + string = string.encode("ascii") + except UnicodeEncodeError: + string = b"\xfe\xff" + string.encode("utf-16-be") + # We should probably encode more here because at least + # ghostscript interpretes a carriage return byte (0x0D) as a + # new line byte (0x0A) + # PDF supports: \n, \r, \t, \b and \f + string = string.replace(b"\\", b"\\\\") + string = string.replace(b"(", b"\\(") + string = string.replace(b")", b"\\)") + return b"(" + string + b")" class pdfdoc(object): @@ -1817,9 +1792,9 @@ def convert(*images, **kwargs): for kwname, default in _default_kwargs.items(): if kwname not in kwargs: kwargs[kwname] = default - if 'with_pdfrw' in kwargs: + if "with_pdfrw" in kwargs: global with_pdfrw - with_pdfrw = kwargs['with_pdfrw'] + with_pdfrw = kwargs["with_pdfrw"] pdf = pdfdoc( "1.3", @@ -2109,39 +2084,23 @@ def parse_borderarg(string): def input_images(path): if path == "-": # we slurp in all data from stdin because we need to seek in it later - if PY3: - result = sys.stdin.buffer.read() - else: - result = sys.stdin.read() + result = sys.stdin.buffer.read() if len(result) == 0: raise argparse.ArgumentTypeError('"%s" is empty' % path) else: - if PY3: - try: - if os.path.getsize(path) == 0: - raise argparse.ArgumentTypeError('"%s" is empty' % path) - # test-read a byte from it so that we can abort early in case - # we cannot read data from the file - with open(path, "rb") as im: - im.read(1) - except IsADirectoryError: - raise argparse.ArgumentTypeError('"%s" is a directory' % path) - except PermissionError: - raise argparse.ArgumentTypeError('"%s" permission denied' % path) - except FileNotFoundError: - raise argparse.ArgumentTypeError('"%s" does not exist' % path) - else: - try: - if os.path.getsize(path) == 0: - raise argparse.ArgumentTypeError('"%s" is empty' % path) - # test-read a byte from it so that we can abort early in case - # we cannot read data from the file - with open(path, "rb") as im: - im.read(1) - except IOError as err: - raise argparse.ArgumentTypeError(str(err)) - except OSError as err: - raise argparse.ArgumentTypeError(str(err)) + try: + if os.path.getsize(path) == 0: + raise argparse.ArgumentTypeError('"%s" is empty' % path) + # test-read a byte from it so that we can abort early in case + # we cannot read data from the file + with open(path, "rb") as im: + im.read(1) + except IsADirectoryError: + raise argparse.ArgumentTypeError('"%s" is a directory' % path) + except PermissionError: + raise argparse.ArgumentTypeError('"%s" permission denied' % path) + except FileNotFoundError: + raise argparse.ArgumentTypeError('"%s" does not exist' % path) result = path return result @@ -3085,10 +3044,7 @@ Report bugs at https://gitlab.mister-muffin.de/josch/img2pdf/issues help="Prints version information and exits.", ) parser.add_argument( - "--gui", - dest="gui", - action="store_true", - help="run experimental tkinter gui", + "--gui", dest="gui", action="store_true", help="run experimental tkinter gui" ) outargs = parser.add_argument_group( @@ -3453,10 +3409,7 @@ and left/right, respectively. It is not possible to specify asymmetric borders. if len(args.images) == 0: logging.info("reading image from standard input") try: - if PY3: - args.images = [sys.stdin.buffer.read()] - else: - args.images = [sys.stdin.read()] + args.images = [sys.stdin.buffer.read()] except KeyboardInterrupt: exit(0) diff --git a/src/tests/__init__.py b/src/tests/__init__.py index 18da737..7997218 100644 --- a/src/tests/__init__.py +++ b/src/tests/__init__.py @@ -10,12 +10,7 @@ from io import StringIO, BytesIO, TextIOWrapper HERE = os.path.dirname(__file__) -PY3 = sys.version_info[0] >= 3 - -if PY3: - PdfReaderIO = StringIO -else: - PdfReaderIO = BytesIO +PdfReaderIO = StringIO # Recompressing the image stream makes the comparison robust against output # preserving changes in the zlib compress output bitstream @@ -480,29 +475,15 @@ def tiff_header_for_ccitt(width, height, img_size, ccitt_group=4): class CommandLineTests(unittest.TestCase): def test_main_help(self): - if PY3: - from contextlib import redirect_stdout - f = StringIO() - with redirect_stdout(f): - try: - img2pdf.main(['img2pdf', '--help']) - except SystemExit: - pass - res = f.getvalue() - self.assertIn('img2pdf', res) - else: - # silence output - sys_stdout = sys.stdout - sys.stdout = BytesIO() - + from contextlib import redirect_stdout + f = StringIO() + with redirect_stdout(f): try: img2pdf.main(['img2pdf', '--help']) except SystemExit: - # argparse does sys.exit(0) on --help - res = sys.stdout.getvalue() - self.assertIn('img2pdf', res) - finally: - sys.stdout = sys_stdout + pass + res = f.getvalue() + self.assertIn('img2pdf', res) def test_suite():