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 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. """ 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 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): diff --git a/circuitpython_typing/led.py b/circuitpython_typing/led.py index 5943ea0..9dcbcad 100644 --- a/circuitpython_typing/led.py +++ b/circuitpython_typing/led.py @@ -11,14 +11,12 @@ * 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 import Union, Tuple +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): 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): 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): 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"] 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