From 7a2ba0244f2a4711259e388ba021aaf3ed4367f7 Mon Sep 17 00:00:00 2001 From: Alec Delaney <89490472+tekktrik@users.noreply.github.com> Date: Tue, 12 Jul 2022 15:59:33 -0400 Subject: [PATCH 01/10] Use type alias Safely imports `Protocol` and `TypeAlias` --- circuitpython_typing/__init__.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/circuitpython_typing/__init__.py b/circuitpython_typing/__init__.py index 54b13a3..9b50468 100644 --- a/circuitpython_typing/__init__.py +++ b/circuitpython_typing/__init__.py @@ -16,12 +16,7 @@ import array from typing import Union, Optional - -# Protocol was introduced in Python 3.8. -try: - from typing import Protocol # pylint: disable=ungrouped-imports -except ImportError: - from typing_extensions import Protocol +from typing_extensions import Protocol, TypeAlias # Safety import for Python 3.7 # Lists below are alphabetized. @@ -35,7 +30,7 @@ "WriteableBuffer", ] -ReadableBuffer = Union[ +ReadableBuffer: TypeAlias = Union[ array.array, bytearray, bytes, @@ -45,7 +40,7 @@ ] """Classes that implement the readable buffer protocol.""" -WriteableBuffer = Union[ +WriteableBuffer: TypeAlias = Union[ array.array, bytearray, memoryview, @@ -81,7 +76,7 @@ def write(self, buf: ReadableBuffer) -> Optional[int]: # These types may not be in adafruit-blinka, so use the string form instead of a resolved name. -AudioSample = Union[ +AudioSample: TypeAlias = Union[ "audiocore.WaveFile", "audiocore.RawSample", "audiomixer.Mixer", @@ -92,10 +87,10 @@ def write(self, buf: ReadableBuffer) -> Optional[int]: You can play these back with `audioio.AudioOut`, `audiobusio.I2SOut` or `audiopwmio.PWMAudioOut`. """ -FrameBuffer = Union["rgbmatrix.RGBMatrix"] +FrameBuffer: TypeAlias = Union["rgbmatrix.RGBMatrix"] """Classes that implement the framebuffer protocol.""" -Alarm = Union["alarm.pin.PinAlarm", "alarm.time.TimeAlarm"] +Alarm: TypeAlias = Union["alarm.pin.PinAlarm", "alarm.time.TimeAlarm"] """Classes that implement alarms for sleeping and asynchronous notification. You can use these alarms to wake up from light or deep sleep. """ From cf853553725dc2ea76e9ed6ef4a85391293e22d1 Mon Sep 17 00:00:00 2001 From: Alec Delaney <89490472+tekktrik@users.noreply.github.com> Date: Tue, 12 Jul 2022 16:00:10 -0400 Subject: [PATCH 02/10] Import from typing_extensions --- circuitpython_typing/device_drivers.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/circuitpython_typing/device_drivers.py b/circuitpython_typing/device_drivers.py index a4a6b6b..707f289 100644 --- a/circuitpython_typing/device_drivers.py +++ b/circuitpython_typing/device_drivers.py @@ -10,12 +10,7 @@ """ from adafruit_bus_device.i2c_device import I2CDevice - -# # Protocol was introduced in Python 3.8. -try: - from typing import Protocol -except ImportError: - from typing_extensions import Protocol +from typing_extensions import Protocol # Safety import for Python 3.7 # pylint: disable=too-few-public-methods From 3b671b6a0c38a92af2caa34afd37c20545998cd5 Mon Sep 17 00:00:00 2001 From: Alec Delaney <89490472+tekktrik@users.noreply.github.com> Date: Tue, 12 Jul 2022 16:00:41 -0400 Subject: [PATCH 03/10] Import from typing_extensions --- circuitpython_typing/io.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/circuitpython_typing/io.py b/circuitpython_typing/io.py index 05b6e62..b09ba45 100644 --- a/circuitpython_typing/io.py +++ b/circuitpython_typing/io.py @@ -12,10 +12,7 @@ """ # Protocol was introduced in Python 3.8. -try: - from typing import Protocol -except ImportError: - from typing_extensions import Protocol +from typing_extensions import Protocol class ROValueIO(Protocol): From c423c7d607c3169bb86f2978d6680cbe40e72e51 Mon Sep 17 00:00:00 2001 From: Alec Delaney <89490472+tekktrik@users.noreply.github.com> Date: Tue, 12 Jul 2022 16:01:29 -0400 Subject: [PATCH 04/10] Use TypeAlias, typing_extensions --- circuitpython_typing/led.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/circuitpython_typing/led.py b/circuitpython_typing/led.py index 5943ea0..353abaf 100644 --- a/circuitpython_typing/led.py +++ b/circuitpython_typing/led.py @@ -11,14 +11,11 @@ * Author(s): Alec Delaney """ -# # Protocol was introduced in Python 3.8. -try: - from typing import Union, Tuple, Protocol -except ImportError: - from typing_extensions import Protocol - -ColorBasedColorUnion = Union[int, Tuple[int, int, int]] -FillBasedColorUnion = Union[ColorBasedColorUnion, Tuple[int, int, int, int]] +# Protocol was introduced in Python 3.8, TypeAlias in 3.10 +from typing_extensions import Protocol, TypeAlias + +ColorBasedColorUnion: TypeAlias = Union[int, Tuple[int, int, int]] +FillBasedColorUnion: TypeAlias = Union[ColorBasedColorUnion, Tuple[int, int, int, int]] class ColorBasedLED(Protocol): From f341813c62df6a899537390e5d45496ff9ccff04 Mon Sep 17 00:00:00 2001 From: Alec Delaney <89490472+tekktrik@users.noreply.github.com> Date: Tue, 12 Jul 2022 16:02:03 -0400 Subject: [PATCH 05/10] Import from typing_extensions --- circuitpython_typing/pil.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/circuitpython_typing/pil.py b/circuitpython_typing/pil.py index 4e541d3..eea6880 100644 --- a/circuitpython_typing/pil.py +++ b/circuitpython_typing/pil.py @@ -12,12 +12,7 @@ """ from typing import Tuple - -# Protocol was introduced in Python 3.8. -try: - from typing import Protocol -except ImportError: - from typing_extensions import Protocol +from typing_extensions import Protocol # Safety import for Python 3.7 class PixelAccess(Protocol): From 9056d70f150cbbfdefd46404c95f0e38ea43ebef Mon Sep 17 00:00:00 2001 From: Alec Delaney <89490472+tekktrik@users.noreply.github.com> Date: Tue, 12 Jul 2022 16:02:23 -0400 Subject: [PATCH 06/10] Import from typing_extensions --- circuitpython_typing/pwmio.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/circuitpython_typing/pwmio.py b/circuitpython_typing/pwmio.py index 8eed314..be676d3 100644 --- a/circuitpython_typing/pwmio.py +++ b/circuitpython_typing/pwmio.py @@ -12,10 +12,7 @@ """ # # Protocol was introduced in Python 3.8. -try: - from typing import Protocol -except ImportError: - from typing_extensions import Protocol +from typing_extensions import Protocol class PWMOut(Protocol): From b43e56cbe38098ddacee2a43ce7be23d83f297a2 Mon Sep 17 00:00:00 2001 From: Alec Delaney <89490472+tekktrik@users.noreply.github.com> Date: Tue, 12 Jul 2022 16:04:06 -0400 Subject: [PATCH 07/10] Use TypeAlias, typing_extensions directly --- circuitpython_typing/socket.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/circuitpython_typing/socket.py b/circuitpython_typing/socket.py index 6b6c7fc..d5f8d73 100644 --- a/circuitpython_typing/socket.py +++ b/circuitpython_typing/socket.py @@ -13,11 +13,8 @@ from types import ModuleType from typing import Any, Optional, Tuple, Union -# Protocol was introduced in Python 3.8. -try: - from typing import Protocol -except ImportError: - from typing_extensions import Protocol +# Protocol was introduced in Python 3.8, TypeAlias in 3.10 +from typing_extensions import Protocol, TypeAlias # Based on https://github.com/python/typeshed/blob/master/stdlib/_socket.pyi @@ -120,7 +117,7 @@ def connect(self, address: Union[Tuple[Any, ...], str, bytes]) -> None: ... -SocketType = Union[ +SocketType: TypeAlias = Union[ LegacyCircuitPythonSocketType, CircuitPythonSocketType, StandardPythonSocketType, @@ -138,4 +135,4 @@ def TLS_MODE(self) -> int: # pylint: disable=invalid-name ... -SSLContextType = Union[SSLContext, "_FakeSSLContext"] +SSLContextType: TypeAlias = Union[SSLContext, "_FakeSSLContext"] From 04042c5bad34ce3a6021fa58830d010d3334bdb1 Mon Sep 17 00:00:00 2001 From: Alec Delaney <89490472+tekktrik@users.noreply.github.com> Date: Tue, 12 Jul 2022 16:08:17 -0400 Subject: [PATCH 08/10] Require typing_extensions of 4.0 compatible release --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index e4ef8be..c945a5c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,5 +3,5 @@ # # SPDX-License-Identifier: MIT -typing_extensions; python_version <= '3.7' +typing_extensions~=4.0 adafruit-circuitpython-busdevice From 74ed5924aee2bbef198e7f7a269786ecaa6617bd Mon Sep 17 00:00:00 2001 From: Alec Delaney Date: Tue, 12 Jul 2022 16:13:20 -0400 Subject: [PATCH 09/10] Disable unused arguments and no self use checks --- .pylintrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pylintrc b/.pylintrc index 79bcfb7..d4efa3e 100644 --- a/.pylintrc +++ b/.pylintrc @@ -55,7 +55,7 @@ confidence= # no Warning level messages displayed, use"--disable=all --enable=classes # --disable=W" # disable=import-error,print-statement,parameter-unpacking,unpacking-in-except,old-raise-syntax,backtick,long-suffix,old-ne-operator,old-octal-literal,import-star-module-level,raw-checker-failed,bad-inline-option,locally-disabled,locally-enabled,file-ignored,suppressed-message,useless-suppression,deprecated-pragma,apply-builtin,basestring-builtin,buffer-builtin,cmp-builtin,coerce-builtin,execfile-builtin,file-builtin,long-builtin,raw_input-builtin,reduce-builtin,standarderror-builtin,unicode-builtin,xrange-builtin,coerce-method,delslice-method,getslice-method,setslice-method,no-absolute-import,old-division,dict-iter-method,dict-view-method,next-method-called,metaclass-assignment,indexing-exception,raising-string,reload-builtin,oct-method,hex-method,nonzero-method,cmp-method,input-builtin,round-builtin,intern-builtin,unichr-builtin,map-builtin-not-iterating,zip-builtin-not-iterating,range-builtin-not-iterating,filter-builtin-not-iterating,using-cmp-argument,eq-without-hash,div-method,idiv-method,rdiv-method,exception-message-attribute,invalid-str-codec,sys-max-int,bad-python3-import,deprecated-string-function,deprecated-str-translate-call -disable=print-statement,parameter-unpacking,unpacking-in-except,old-raise-syntax,backtick,long-suffix,old-ne-operator,old-octal-literal,import-star-module-level,raw-checker-failed,bad-inline-option,locally-disabled,locally-enabled,file-ignored,suppressed-message,useless-suppression,deprecated-pragma,apply-builtin,basestring-builtin,buffer-builtin,cmp-builtin,coerce-builtin,execfile-builtin,file-builtin,long-builtin,raw_input-builtin,reduce-builtin,standarderror-builtin,unicode-builtin,xrange-builtin,coerce-method,delslice-method,getslice-method,setslice-method,no-absolute-import,old-division,dict-iter-method,dict-view-method,next-method-called,metaclass-assignment,indexing-exception,raising-string,reload-builtin,oct-method,hex-method,nonzero-method,cmp-method,input-builtin,round-builtin,intern-builtin,unichr-builtin,map-builtin-not-iterating,zip-builtin-not-iterating,range-builtin-not-iterating,filter-builtin-not-iterating,using-cmp-argument,eq-without-hash,div-method,idiv-method,rdiv-method,exception-message-attribute,invalid-str-codec,sys-max-int,bad-python3-import,deprecated-string-function,deprecated-str-translate-call,import-error,bad-continuation,pointless-string-statement +disable=print-statement,parameter-unpacking,unpacking-in-except,old-raise-syntax,backtick,long-suffix,old-ne-operator,old-octal-literal,import-star-module-level,raw-checker-failed,bad-inline-option,locally-disabled,locally-enabled,file-ignored,suppressed-message,useless-suppression,deprecated-pragma,apply-builtin,basestring-builtin,buffer-builtin,cmp-builtin,coerce-builtin,execfile-builtin,file-builtin,long-builtin,raw_input-builtin,reduce-builtin,standarderror-builtin,unicode-builtin,xrange-builtin,coerce-method,delslice-method,getslice-method,setslice-method,no-absolute-import,old-division,dict-iter-method,dict-view-method,next-method-called,metaclass-assignment,indexing-exception,raising-string,reload-builtin,oct-method,hex-method,nonzero-method,cmp-method,input-builtin,round-builtin,intern-builtin,unichr-builtin,map-builtin-not-iterating,zip-builtin-not-iterating,range-builtin-not-iterating,filter-builtin-not-iterating,using-cmp-argument,eq-without-hash,div-method,idiv-method,rdiv-method,exception-message-attribute,invalid-str-codec,sys-max-int,bad-python3-import,deprecated-string-function,deprecated-str-translate-call,import-error,bad-continuation,pointless-string-statement,unused-argument,no-self-use # Enable the message, report, category or checker with the given id(s). You can # either give multiple identifier separated by comma (,) or put this option From 669bea0fa38f8fa7c97e1dfa20a2b126d692db3e Mon Sep 17 00:00:00 2001 From: Alec Delaney Date: Tue, 12 Jul 2022 16:15:40 -0400 Subject: [PATCH 10/10] Re-add typing import --- circuitpython_typing/led.py | 1 + 1 file changed, 1 insertion(+) diff --git a/circuitpython_typing/led.py b/circuitpython_typing/led.py index 353abaf..9dcbcad 100644 --- a/circuitpython_typing/led.py +++ b/circuitpython_typing/led.py @@ -12,6 +12,7 @@ """ # Protocol was introduced in Python 3.8, TypeAlias in 3.10 +from typing import Union, Tuple from typing_extensions import Protocol, TypeAlias ColorBasedColorUnion: TypeAlias = Union[int, Tuple[int, int, int]]