From 3697f87be1525b1ff81be74c0b17dfec00df4c68 Mon Sep 17 00:00:00 2001 From: Eric Soroos Date: Wed, 3 Jan 2018 11:38:28 +0000 Subject: [PATCH] Typing: *args to _getencoder, _getdecoder, tobytes, frombytes --- src/PIL/Image.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/PIL/Image.py b/src/PIL/Image.py index 5b38391f5..dc03b4984 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -443,7 +443,7 @@ def init(): # Codec factories (used by tobytes/frombytes and ImageFile.load) def _getdecoder(mode, decoder_name, args, extra=()): - # type: (Mode, Text, Optional[Tuple], Tuple) -> PyDecoder + # type: (Mode, Text, Optional[Union[str, Tuple, List]], Tuple) -> PyDecoder # tweak arguments if args is None: @@ -466,7 +466,7 @@ def _getdecoder(mode, decoder_name, args, extra=()): def _getencoder(mode, encoder_name, args, extra=()): - # type: (Mode, Text, Optional[Tuple], Tuple) -> PyEncoder + # type: (Mode, Text, Optional[Union[str, Tuple, List]], Tuple) -> PyEncoder # tweak arguments if args is None: @@ -742,21 +742,23 @@ class Image(object): :param encoder_name: What encoder to use. The default is to use the standard "raw" encoder. - :param args: Extra arguments to the encoder. + :param *args: Extra arguments to the encoder. May be one tuple, + or individual arguments :rtype: A bytes object. """ + encoder_args = args # type: Union[str, Tuple[Any,...], List[Any]] # may pass tuple instead of argument list if len(args) == 1 and isinstance(args[0], tuple): - args = args[0] + encoder_args = args[0] if encoder_name == "raw" and args == (): - args = self.mode + encoder_args = self.mode self.load() # unpack data - e = _getencoder(self.mode, encoder_name, args) + e = _getencoder(self.mode, encoder_name, encoder_args) e.setimage(self.im) bufsize = max(65536, self.size[0] * 4) # see RawEncode.c @@ -808,16 +810,17 @@ class Image(object): but loads data into this image instead of creating a new image object. """ + decoder_args = args # type: Union[str, Tuple[Any,...], List[Any]] # may pass tuple instead of argument list if len(args) == 1 and isinstance(args[0], tuple): - args = args[0] + decoder_args = args[0] # default format if decoder_name == "raw" and args == (): - args = self.mode + decoder_args = self.mode # unpack data - d = _getdecoder(self.mode, decoder_name, args) + d = _getdecoder(self.mode, decoder_name, decoder_args) d.setimage(self.im) s = d.decode(data)