From 500170b1a3606fcce54f7a056bae478e6f61dc95 Mon Sep 17 00:00:00 2001 From: Daniel Flanagan <37907774+FlantasticDan@users.noreply.github.com> Date: Tue, 28 Sep 2021 00:40:42 +0000 Subject: [PATCH 1/4] Added Type Annotations + Corrected Docstrings --- adafruit_max7219/bcddigits.py | 33 ++++++++++++++--------- adafruit_max7219/matrices.py | 20 +++++++++----- adafruit_max7219/max7219.py | 50 ++++++++++++++++++++++++----------- 3 files changed, 67 insertions(+), 36 deletions(-) diff --git a/adafruit_max7219/bcddigits.py b/adafruit_max7219/bcddigits.py index 8e3dd30..f2c5426 100644 --- a/adafruit_max7219/bcddigits.py +++ b/adafruit_max7219/bcddigits.py @@ -9,6 +9,13 @@ from micropython import const from adafruit_max7219 import max7219 +try: + import digitalio + import busio + from typing import List +except ImportError: + pass + __version__ = "0.0.0-auto.0" __repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_MAX7219.git" @@ -23,16 +30,16 @@ class BCDDigits(max7219.MAX7219): Basic support for display on a 7-Segment BCD display controlled by a Max7219 chip using SPI. - :param object spi: an spi busio or spi bitbangio object + :param ~busio.SPI spi: an spi busio or spi bitbangio object :param ~digitalio.DigitalInOut cs: digital in/out to use as chip select signal :param int nDigits: number of led 7-segment digits; default 1; max 8 """ - def __init__(self, spi, cs, nDigits=1): + def __init__(self, spi: busio.SPI, cs: digitalio.DigitalInOut, nDigits: int = 1): self._ndigits = nDigits super().__init__(self._ndigits, 8, spi, cs) - def init_display(self): + def init_display(self) -> None: for cmd, data in ( (_SHUTDOWN, 0), @@ -46,7 +53,7 @@ def init_display(self): self.clear_all() self.show() - def set_digit(self, dpos, value): + def set_digit(self, dpos: int, value: int) -> None: """ Display one digit. @@ -59,30 +66,30 @@ def set_digit(self, dpos, value): self.pixel(dpos, i, value & 0x01) value >>= 1 - def set_digits(self, start, values): + def set_digits(self, start: int, values: List[int]) -> None: """ Display digits from a list. - :param int s: digit to start display zero-based - :param list ds: list of integer values ranging from 0->15 + :param int start: digit to start display zero-based + :param list[int] values: list of integer values ranging from 0->15 """ for value in values: # print('set digit {} start {}'.format(d,start)) self.set_digit(start, value) start += 1 - def show_dot(self, dpos, bit_value=None): + def show_dot(self, dpos: int, bit_value: int = None) -> None: """ The decimal point for a digit. :param int dpos: the digit to set the decimal point zero-based - :param int value: value > zero lights the decimal point, else unlights the point + :param int bit_value: value > zero lights the decimal point, else unlights the point """ if 0 <= dpos < self._ndigits: # print('set dot {} = {}'.format((self._ndigits - d -1),col)) self.pixel(self._ndigits - dpos - 1, 7, bit_value) - def clear_all(self): + def clear_all(self) -> None: """ Clear all digits and decimal points. """ @@ -90,12 +97,12 @@ def clear_all(self): for i in range(self._ndigits): self.show_dot(i) - def show_str(self, start, strg): + def show_str(self, start: int, strg: str) -> None: """ Displays a numeric str in the display. Shows digits ``0-9``, ``-``, and ``.``. :param int start: start position to show the numeric string - :param string str: the numeric string + :param str strg: the numeric string """ cpos = start for char in strg: @@ -111,7 +118,7 @@ def show_str(self, start, strg): self.set_digit(cpos, value) cpos += 1 - def show_help(self, start): + def show_help(self, start: int) -> None: """ Display the word HELP in the display. diff --git a/adafruit_max7219/matrices.py b/adafruit_max7219/matrices.py index 955e050..81668d5 100644 --- a/adafruit_max7219/matrices.py +++ b/adafruit_max7219/matrices.py @@ -9,6 +9,12 @@ from micropython import const from adafruit_max7219 import max7219 +try: + import digitalio + import busio +except ImportError: + pass + __version__ = "0.0.0-auto.0" __repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_MAX7219.git" @@ -22,14 +28,14 @@ class Matrix8x8(max7219.MAX7219): """ Driver for a 8x8 LED matrix based on the MAX7219 chip. - :param object spi: an spi busio or spi bitbangio object + :param ~busio.SPI spi: an spi busio or spi bitbangio object :param ~digitalio.DigitalInOut cs: digital in/out to use as chip select signal """ - def __init__(self, spi, cs): + def __init__(self, spi: busio.SPI, cs: digitalio.DigitalInOut): super().__init__(8, 8, spi, cs) - def init_display(self): + def init_display(self) -> None: for cmd, data in ( (_SHUTDOWN, 0), (_DISPLAYTEST, 0), @@ -42,18 +48,18 @@ def init_display(self): self.fill(0) self.show() - def text(self, strg, xpos, ypos, bit_value=1): + def text(self, strg: str, xpos: int, ypos: int, bit_value: int = 1) -> None: """ Draw text in the 8x8 matrix. + :param str strg: string to place in to display :param int xpos: x position of LED in matrix :param int ypos: y position of LED in matrix - :param string strg: string to place in to display - :param bit_value: > 1 sets the text, otherwise resets + :param int bit_value: > 1 sets the text, otherwise resets """ self.framebuf.text(strg, xpos, ypos, bit_value) - def clear_all(self): + def clear_all(self) -> None: """ Clears all matrix leds. """ diff --git a/adafruit_max7219/max7219.py b/adafruit_max7219/max7219.py index ff30c32..aaef27b 100644 --- a/adafruit_max7219/max7219.py +++ b/adafruit_max7219/max7219.py @@ -37,12 +37,17 @@ **Notes:** #. Datasheet: https://cdn-shop.adafruit.com/datasheets/MAX7219.pdf """ -# MicroPython SSD1306 OLED driver, I2C and SPI interfaces +# MicroPython MAX7219 driver, SPI interfaces import digitalio from adafruit_bus_device import spi_device from micropython import const import adafruit_framebuf as framebuf +try: + import busio +except ImportError: + pass + __version__ = "0.0.0-auto.0" __repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_MAX7219.git" @@ -57,15 +62,23 @@ class MAX7219: :param int width: the number of pixels wide :param int height: the number of pixels high - :param object spi: an spi busio or spi bitbangio object + :param ~busio.SPI spi: an spi busio or spi bitbangio object :param ~digitalio.DigitalInOut chip_select: digital in/out to use as chip select signal - :param baudrate: for SPIDevice baudrate (default 8000000) - :param polarity: for SPIDevice polarity (default 0) - :param phase: for SPIDevice phase (default 0) + :param int baudrate: for SPIDevice baudrate (default 8000000) + :param int polarity: for SPIDevice polarity (default 0) + :param int phase: for SPIDevice phase (default 0) """ def __init__( - self, width, height, spi, cs, *, baudrate=8000000, polarity=0, phase=0 + self, + width: int, + height: int, + spi: busio.SPI, + cs: digitalio.DigitalInOut, + *, + baudrate: int = 8000000, + polarity: int = 0, + phase: int = 0 ): self._chip_select = cs @@ -83,10 +96,10 @@ def __init__( self.init_display() - def init_display(self): + def init_display(self) -> None: """Must be implemented by derived class (``matrices``, ``bcddigits``)""" - def brightness(self, value): + def brightness(self, value: int) -> None: """ Controls the brightness of the display. @@ -96,14 +109,14 @@ def brightness(self, value): raise ValueError("Brightness out of range") self.write_cmd(_INTENSITY, value) - def show(self): + def show(self) -> None: """ Updates the display. """ for ypos in range(8): self.write_cmd(_DIGIT0 + ypos, self._buffer[ypos]) - def fill(self, bit_value): + def fill(self, bit_value: int) -> None: """ Fill the display buffer. @@ -111,22 +124,27 @@ def fill(self, bit_value): """ self.framebuf.fill(bit_value) - def pixel(self, xpos, ypos, bit_value=None): + def pixel(self, xpos: int, ypos: int, bit_value: int = None) -> None: """ Set one buffer bit - :param xpos: x position to set bit - :param ypos: y position to set bit + :param int xpos: x position to set bit + :param int ypos: y position to set bit :param int bit_value: value > 0 sets the buffer bit, else clears the buffer bit """ bit_value = 0x01 if bit_value else 0x00 self.framebuf.pixel(xpos, ypos, bit_value) - def scroll(self, delta_x, delta_y): - """Srcolls the display using delta_x,delta_y.""" + def scroll(self, delta_x: int, delta_y: int) -> None: + """ + Srcolls the display using delta_x,delta_y. + + :param int delta_x: positions to scroll in the x direction + :param int delta_y: positions to scroll in the y direction + """ self.framebuf.scroll(delta_x, delta_y) - def write_cmd(self, cmd, data): + def write_cmd(self, cmd, data) -> None: # pylint: disable=no-member """Writes a command to spi device.""" # print('cmd {} data {}'.format(cmd,data)) From bc032809228810c6c266c9a8b5ea79095b16d1e6 Mon Sep 17 00:00:00 2001 From: Daniel Flanagan <37907774+FlantasticDan@users.noreply.github.com> Date: Tue, 28 Sep 2021 17:21:07 +0000 Subject: [PATCH 2/4] Labeled typing imports, updated import order --- adafruit_max7219/bcddigits.py | 3 ++- adafruit_max7219/matrices.py | 1 + adafruit_max7219/max7219.py | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/adafruit_max7219/bcddigits.py b/adafruit_max7219/bcddigits.py index f2c5426..19749f5 100644 --- a/adafruit_max7219/bcddigits.py +++ b/adafruit_max7219/bcddigits.py @@ -10,9 +10,10 @@ from adafruit_max7219 import max7219 try: + # Used only for typing + from typing import List import digitalio import busio - from typing import List except ImportError: pass diff --git a/adafruit_max7219/matrices.py b/adafruit_max7219/matrices.py index 81668d5..664d5a6 100644 --- a/adafruit_max7219/matrices.py +++ b/adafruit_max7219/matrices.py @@ -10,6 +10,7 @@ from adafruit_max7219 import max7219 try: + # Used only for typing import digitalio import busio except ImportError: diff --git a/adafruit_max7219/max7219.py b/adafruit_max7219/max7219.py index aaef27b..d6b72d6 100644 --- a/adafruit_max7219/max7219.py +++ b/adafruit_max7219/max7219.py @@ -44,6 +44,7 @@ import adafruit_framebuf as framebuf try: + # Used only for typing import busio except ImportError: pass From 442f2cd5f06dc83d2301ac8cc9236ba29e79d7ab Mon Sep 17 00:00:00 2001 From: Daniel Flanagan <37907774+FlantasticDan@users.noreply.github.com> Date: Tue, 28 Sep 2021 18:45:55 +0000 Subject: [PATCH 3/4] Import typing for all modules, satisfy pylint --- adafruit_max7219/matrices.py | 1 + adafruit_max7219/max7219.py | 1 + 2 files changed, 2 insertions(+) diff --git a/adafruit_max7219/matrices.py b/adafruit_max7219/matrices.py index 664d5a6..e1b0d5d 100644 --- a/adafruit_max7219/matrices.py +++ b/adafruit_max7219/matrices.py @@ -11,6 +11,7 @@ try: # Used only for typing + import typing # pylint: disable=unused-import import digitalio import busio except ImportError: diff --git a/adafruit_max7219/max7219.py b/adafruit_max7219/max7219.py index d6b72d6..db578dc 100644 --- a/adafruit_max7219/max7219.py +++ b/adafruit_max7219/max7219.py @@ -45,6 +45,7 @@ try: # Used only for typing + import typing # pylint: disable=unused-import import busio except ImportError: pass From 43c42c2285c1e3be05db15927fa5cec1b8eded98 Mon Sep 17 00:00:00 2001 From: Daniel Flanagan <37907774+FlantasticDan@users.noreply.github.com> Date: Wed, 29 Sep 2021 04:18:51 +0000 Subject: [PATCH 4/4] Missed `write_cmd` type annotation --- adafruit_max7219/max7219.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/adafruit_max7219/max7219.py b/adafruit_max7219/max7219.py index db578dc..57837db 100644 --- a/adafruit_max7219/max7219.py +++ b/adafruit_max7219/max7219.py @@ -146,9 +146,13 @@ def scroll(self, delta_x: int, delta_y: int) -> None: """ self.framebuf.scroll(delta_x, delta_y) - def write_cmd(self, cmd, data) -> None: - # pylint: disable=no-member - """Writes a command to spi device.""" + def write_cmd(self, cmd: int, data: int) -> None: + """ + Writes a command to spi device. + + :param int cmd: register address to write data to + :param int data: data to be written to commanded register + """ # print('cmd {} data {}'.format(cmd,data)) self._chip_select.value = False with self._spi_device as my_spi_device: