From d545d650e8a0f0fdd98169118bedf4f43a8898a2 Mon Sep 17 00:00:00 2001 From: Justin Myers Date: Thu, 8 Feb 2024 08:13:08 -0800 Subject: [PATCH 1/9] Typing fixes --- circuitpython_typing/__init__.py | 17 +++++++++++++++-- circuitpython_typing/http.py | 3 ++- circuitpython_typing/led.py | 3 ++- circuitpython_typing/pil.py | 6 ++++-- circuitpython_typing/socket.py | 5 +++-- requirements.txt | 1 + 6 files changed, 27 insertions(+), 8 deletions(-) diff --git a/circuitpython_typing/__init__.py b/circuitpython_typing/__init__.py index a826ae2..8d818aa 100644 --- a/circuitpython_typing/__init__.py +++ b/circuitpython_typing/__init__.py @@ -15,8 +15,21 @@ __repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_Typing.git" import array -from typing import Union, Optional -from typing_extensions import Protocol, TypeAlias # Safety import for Python 3.7 +from typing import Optional, Union + +import alarm +import audiocore +import audiomixer +import audiomp3 +import rgbmatrix +import synthio +import ulab +from alarm.pin import PinAlarm +from alarm.time import TimeAlarm + +# Protocol was introduced in Python 3.8, TypeAlias in 3.10 +from typing_extensions import Protocol, TypeAlias +from ulab.numpy import ndarray # Lists below are alphabetized. diff --git a/circuitpython_typing/http.py b/circuitpython_typing/http.py index 3b83fcb..8b6fedd 100644 --- a/circuitpython_typing/http.py +++ b/circuitpython_typing/http.py @@ -11,9 +11,10 @@ * Author(s): Alec Delaney """ +from adafruit_requests import Response + # Protocol was introduced in Python 3.8. from typing_extensions import Protocol -from adafruit_requests import Response class HTTPProtocol(Protocol): diff --git a/circuitpython_typing/led.py b/circuitpython_typing/led.py index 200a5e0..3d9eb79 100644 --- a/circuitpython_typing/led.py +++ b/circuitpython_typing/led.py @@ -12,7 +12,8 @@ """ # Protocol was introduced in Python 3.8, TypeAlias in 3.10 -from typing import Union, Tuple +from typing import Tuple, Union + from typing_extensions import Protocol, TypeAlias ColorBasedColorUnion: TypeAlias = Union[int, Tuple[int, int, int]] diff --git a/circuitpython_typing/pil.py b/circuitpython_typing/pil.py index 9dc8a5d..4807ea9 100644 --- a/circuitpython_typing/pil.py +++ b/circuitpython_typing/pil.py @@ -11,8 +11,10 @@ * Author(s): Alec Delaney """ -from typing import Tuple, Optional, Callable -from typing_extensions import Protocol # Safety import for Python 3.7 +from typing import Callable, Optional, Tuple + +# Protocol was introduced in Python 3.8 +from typing_extensions import Protocol class PixelAccess(Protocol): diff --git a/circuitpython_typing/socket.py b/circuitpython_typing/socket.py index cbd2287..d977abf 100644 --- a/circuitpython_typing/socket.py +++ b/circuitpython_typing/socket.py @@ -13,10 +13,11 @@ from types import ModuleType from typing import Any, Optional, Tuple, Union +from adafruit_connection_manager import _FakeSSLContext + # 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 __all__ = [ @@ -126,4 +127,4 @@ def TLS_MODE(self) -> int: # pylint: disable=invalid-name """Constant representing that a socket's connection mode is TLS.""" -SSLContextType: TypeAlias = Union[SSLContext, "_FakeSSLContext"] +SSLContextType: TypeAlias = Union[SSLContext, _FakeSSLContext] diff --git a/requirements.txt b/requirements.txt index 2be721d..80ed0c6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,5 +5,6 @@ Adafruit-Blinka adafruit-circuitpython-busdevice +Adafruit-Circuitpython-connectionmanager@git+https://github.com/adafruit/Adafruit_CircuitPython_ConnectionManager@connection-manager adafruit-circuitpython-requests typing_extensions~=4.0 From d3b5732c6ceaecbd7f19de9999b02f61c92fbb92 Mon Sep 17 00:00:00 2001 From: Justin Myers Date: Thu, 8 Feb 2024 08:26:44 -0800 Subject: [PATCH 2/9] Try with try/except --- circuitpython_typing/__init__.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/circuitpython_typing/__init__.py b/circuitpython_typing/__init__.py index 8d818aa..fc7752d 100644 --- a/circuitpython_typing/__init__.py +++ b/circuitpython_typing/__init__.py @@ -17,15 +17,18 @@ import array from typing import Optional, Union -import alarm -import audiocore -import audiomixer -import audiomp3 -import rgbmatrix -import synthio -import ulab -from alarm.pin import PinAlarm -from alarm.time import TimeAlarm +try: + import alarm + import audiocore + import audiomixer + import audiomp3 + import rgbmatrix + import synthio + import ulab + from alarm.pin import PinAlarm + from alarm.time import TimeAlarm +except ImportError: + pass # Protocol was introduced in Python 3.8, TypeAlias in 3.10 from typing_extensions import Protocol, TypeAlias From 474f9501e413116b79f013515f82476e6af7eb4f Mon Sep 17 00:00:00 2001 From: Justin Myers Date: Thu, 8 Feb 2024 08:29:12 -0800 Subject: [PATCH 3/9] Try with try/except (missed one) --- circuitpython_typing/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/circuitpython_typing/__init__.py b/circuitpython_typing/__init__.py index fc7752d..5951d59 100644 --- a/circuitpython_typing/__init__.py +++ b/circuitpython_typing/__init__.py @@ -27,12 +27,12 @@ import ulab from alarm.pin import PinAlarm from alarm.time import TimeAlarm + from ulab.numpy import ndarray except ImportError: pass # Protocol was introduced in Python 3.8, TypeAlias in 3.10 from typing_extensions import Protocol, TypeAlias -from ulab.numpy import ndarray # Lists below are alphabetized. From 5046882912826b69eda4b9fad13ccc740e2470ec Mon Sep 17 00:00:00 2001 From: Justin Myers Date: Thu, 8 Feb 2024 10:06:55 -0800 Subject: [PATCH 4/9] Fix to use TYPE_CHECKING --- circuitpython_typing/__init__.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/circuitpython_typing/__init__.py b/circuitpython_typing/__init__.py index 5951d59..f29ca21 100644 --- a/circuitpython_typing/__init__.py +++ b/circuitpython_typing/__init__.py @@ -15,9 +15,12 @@ __repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_Typing.git" import array -from typing import Optional, Union +from typing import TYPE_CHECKING, Optional, Union -try: +# Protocol was introduced in Python 3.8, TypeAlias in 3.10 +from typing_extensions import Protocol, TypeAlias + +if TYPE_CHECKING: import alarm import audiocore import audiomixer @@ -28,11 +31,7 @@ from alarm.pin import PinAlarm from alarm.time import TimeAlarm from ulab.numpy import ndarray -except ImportError: - pass -# Protocol was introduced in Python 3.8, TypeAlias in 3.10 -from typing_extensions import Protocol, TypeAlias # Lists below are alphabetized. From b7e13d6dcfeb444dbf00a051cba514e6d651cb32 Mon Sep 17 00:00:00 2001 From: Justin Myers Date: Fri, 9 Feb 2024 09:05:33 -0800 Subject: [PATCH 5/9] Move _FakeSSLContext into socket.py --- circuitpython_typing/socket.py | 16 ++++++++++++++-- requirements.txt | 1 - 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/circuitpython_typing/socket.py b/circuitpython_typing/socket.py index d977abf..c1eafab 100644 --- a/circuitpython_typing/socket.py +++ b/circuitpython_typing/socket.py @@ -13,8 +13,6 @@ from types import ModuleType from typing import Any, Optional, Tuple, Union -from adafruit_connection_manager import _FakeSSLContext - # Protocol was introduced in Python 3.8, TypeAlias in 3.10 from typing_extensions import Protocol, TypeAlias @@ -127,4 +125,18 @@ def TLS_MODE(self) -> int: # pylint: disable=invalid-name """Constant representing that a socket's connection mode is TLS.""" +# pylint: disable=too-few-public-methods +class _FakeSSLSocket: + """Describes the structure every fake SSL socket type must have.""" + + +class _FakeSSLContext: + """Describes the structure every fake SSL context type must have.""" + + def wrap_socket( + self, socket: CircuitPythonSocketType, server_hostname: Optional[str] = None + ) -> _FakeSSLSocket: + """Wrap socket and return a new one that uses the methods from the original.""" + + SSLContextType: TypeAlias = Union[SSLContext, _FakeSSLContext] diff --git a/requirements.txt b/requirements.txt index 80ed0c6..2be721d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,6 +5,5 @@ Adafruit-Blinka adafruit-circuitpython-busdevice -Adafruit-Circuitpython-connectionmanager@git+https://github.com/adafruit/Adafruit_CircuitPython_ConnectionManager@connection-manager adafruit-circuitpython-requests typing_extensions~=4.0 From f15a7156327640917878c423134d7f4c43486685 Mon Sep 17 00:00:00 2001 From: Justin Myers Date: Fri, 9 Feb 2024 09:07:47 -0800 Subject: [PATCH 6/9] Add missing def sort --- circuitpython_typing/led.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/circuitpython_typing/led.py b/circuitpython_typing/led.py index 3d9eb79..0dfca00 100644 --- a/circuitpython_typing/led.py +++ b/circuitpython_typing/led.py @@ -11,9 +11,9 @@ * Author(s): Alec Delaney """ -# Protocol was introduced in Python 3.8, TypeAlias in 3.10 from typing import Tuple, Union +# 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]] From e77144d01901122061998e028e4383532ec28c0d Mon Sep 17 00:00:00 2001 From: Justin Myers Date: Fri, 9 Feb 2024 10:54:20 -0800 Subject: [PATCH 7/9] Add TODO for mpy issue --- circuitpython_typing/io.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/circuitpython_typing/io.py b/circuitpython_typing/io.py index 20cd5c5..0bc56a2 100644 --- a/circuitpython_typing/io.py +++ b/circuitpython_typing/io.py @@ -38,7 +38,11 @@ def value(self) -> float: on the specifics of the class. """ + # TODO: this should be `value(self, input_value: float, /)` but can't + # because currently mpy files are built and the `/` param isn't supported + # in micro-python. + # https://github.com/adafruit/Adafruit_CircuitPython_Typing/issues/36 # pylint: disable=no-self-use,unused-argument @value.setter - def value(self, input_value: float, /): + def value(self, input_value: float): ... From 33bd243acbbf777fb6e0c9481ce1cb3dcb46e417 Mon Sep 17 00:00:00 2001 From: Justin Myers Date: Fri, 9 Feb 2024 11:38:02 -0800 Subject: [PATCH 8/9] try removing extra quotes around types --- circuitpython_typing/__init__.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/circuitpython_typing/__init__.py b/circuitpython_typing/__init__.py index f29ca21..86b7073 100644 --- a/circuitpython_typing/__init__.py +++ b/circuitpython_typing/__init__.py @@ -20,6 +20,7 @@ # Protocol was introduced in Python 3.8, TypeAlias in 3.10 from typing_extensions import Protocol, TypeAlias +# pylint: disable=used-before-assignment if TYPE_CHECKING: import alarm import audiocore @@ -51,8 +52,8 @@ bytearray, bytes, memoryview, - "rgbmatrix.RGBMatrix", - "ulab.numpy.ndarray", + rgbmatrix.RGBMatrix, + ulab.numpy.ndarray, ] """Classes that implement the readable buffer protocol.""" @@ -60,8 +61,8 @@ array.array, bytearray, memoryview, - "rgbmatrix.RGBMatrix", - "ulab.numpy.ndarray", + rgbmatrix.RGBMatrix, + ulab.numpy.ndarray, ] """Classes that implement the writeable buffer protocol.""" @@ -143,20 +144,20 @@ def ioctl(self, operation: int, arg: Optional[int] = None) -> Optional[int]: # These types may not be in adafruit-blinka, so use the string form instead of a resolved name. AudioSample: TypeAlias = Union[ - "audiocore.WaveFile", - "audiocore.RawSample", - "audiomixer.Mixer", - "audiomp3.MP3Decoder", - "synthio.MidiTrack", + audiocore.WaveFile, + audiocore.RawSample, + audiomixer.Mixer, + audiomp3.MP3Decoder, + synthio.MidiTrack, ] """Classes that implement the audiosample protocol. You can play these back with `audioio.AudioOut`, `audiobusio.I2SOut` or `audiopwmio.PWMAudioOut`. """ -FrameBuffer: TypeAlias = Union["rgbmatrix.RGBMatrix"] +FrameBuffer: TypeAlias = Union[rgbmatrix.RGBMatrix] """Classes that implement the framebuffer protocol.""" -Alarm: TypeAlias = 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 af887aa318cf6e51d223d3e90d7b8e95e285830b Mon Sep 17 00:00:00 2001 From: Justin Myers Date: Fri, 9 Feb 2024 11:47:19 -0800 Subject: [PATCH 9/9] undo: try removing extra quotes around types --- circuitpython_typing/__init__.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/circuitpython_typing/__init__.py b/circuitpython_typing/__init__.py index 86b7073..1dff3d5 100644 --- a/circuitpython_typing/__init__.py +++ b/circuitpython_typing/__init__.py @@ -52,8 +52,8 @@ bytearray, bytes, memoryview, - rgbmatrix.RGBMatrix, - ulab.numpy.ndarray, + "rgbmatrix.RGBMatrix", + "ulab.numpy.ndarray", ] """Classes that implement the readable buffer protocol.""" @@ -61,8 +61,8 @@ array.array, bytearray, memoryview, - rgbmatrix.RGBMatrix, - ulab.numpy.ndarray, + "rgbmatrix.RGBMatrix", + "ulab.numpy.ndarray", ] """Classes that implement the writeable buffer protocol.""" @@ -144,20 +144,20 @@ def ioctl(self, operation: int, arg: Optional[int] = None) -> Optional[int]: # These types may not be in adafruit-blinka, so use the string form instead of a resolved name. AudioSample: TypeAlias = Union[ - audiocore.WaveFile, - audiocore.RawSample, - audiomixer.Mixer, - audiomp3.MP3Decoder, - synthio.MidiTrack, + "audiocore.WaveFile", + "audiocore.RawSample", + "audiomixer.Mixer", + "audiomp3.MP3Decoder", + "synthio.MidiTrack", ] """Classes that implement the audiosample protocol. You can play these back with `audioio.AudioOut`, `audiobusio.I2SOut` or `audiopwmio.PWMAudioOut`. """ -FrameBuffer: TypeAlias = Union[rgbmatrix.RGBMatrix] +FrameBuffer: TypeAlias = Union["rgbmatrix.RGBMatrix"] """Classes that implement the framebuffer protocol.""" -Alarm: TypeAlias = 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. """