Switch from mypy to pyright
This commit is contained in:
parent
7b26d3a160
commit
cc0c978f0c
12 changed files with 1000 additions and 17 deletions
|
@ -13,8 +13,3 @@ repos:
|
|||
hooks:
|
||||
- id: flake8
|
||||
args: ["--max-line-length=88", "--extend-ignore=E203"]
|
||||
|
||||
- repo: https://github.com/pre-commit/mirrors-mypy
|
||||
rev: "v1.13.0"
|
||||
hooks:
|
||||
- id: mypy
|
||||
|
|
|
@ -38,7 +38,7 @@ class HAClient:
|
|||
self.selector = Selector(self.send_data)
|
||||
|
||||
@property
|
||||
def ha_options(self) -> dict[str, str | dict[str, str]]:
|
||||
def ha_options(self) -> dict[str, Any]:
|
||||
return {
|
||||
"dev": {
|
||||
"ids": "oin",
|
||||
|
@ -166,6 +166,10 @@ class HAClient:
|
|||
self.selector.switch = True
|
||||
case "off":
|
||||
self.selector.switch = False
|
||||
case other:
|
||||
logger.warning(f"Unknown state received: <{other}>.")
|
||||
case _:
|
||||
pass
|
||||
|
||||
def secondary_state_update(
|
||||
self, client: mqtt.Client, userdata: Any, message: mqtt.MQTTMessage
|
||||
|
|
|
@ -3,7 +3,8 @@ import math
|
|||
from threading import Timer
|
||||
|
||||
import bdfparser
|
||||
from sense_hat import InputEvent, SenseHat
|
||||
from sense_hat.sense_hat import SenseHat
|
||||
from sense_hat.stick import InputEvent
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -99,10 +100,7 @@ class Screen:
|
|||
color = self.color
|
||||
|
||||
if value:
|
||||
pixels = [
|
||||
color if x else bg_color
|
||||
for x in self.font.draw(value, mode=0).crop(8, 7).todata(3)
|
||||
]
|
||||
pixels = [color if x else bg_color for x in self.data_from_value(value)]
|
||||
else:
|
||||
pixels = 48 * [(0, 0, 0)]
|
||||
pixels += self.secondary_pixels
|
||||
|
@ -137,6 +135,11 @@ class Screen:
|
|||
self._held = False
|
||||
case ("released", False):
|
||||
self.show_tmp()
|
||||
case _:
|
||||
pass
|
||||
|
||||
def data_from_value(self, value: str) -> list[int]:
|
||||
return self.font.draw(value, mode=0).crop(8, 7).todata(3)
|
||||
|
||||
|
||||
def format_value(value: float) -> str:
|
||||
|
|
|
@ -1,18 +1,20 @@
|
|||
import logging
|
||||
import math
|
||||
from collections.abc import Callable
|
||||
from typing import Any
|
||||
|
||||
from sense_hat import ACTION_HELD, ACTION_RELEASED, InputEvent, SenseHat
|
||||
from sense_hat.sense_hat import SenseHat
|
||||
from sense_hat.stick import ACTION_HELD, ACTION_RELEASED, InputEvent
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Selector:
|
||||
def __init__(self, send_data: Callable[[dict[str, float | str | None]], None]):
|
||||
def __init__(self, send_data: Callable[[dict[str, Any]], Any]):
|
||||
self.stick = SenseHat().stick
|
||||
self.temperature = None
|
||||
self.mode = None
|
||||
self.switch = None
|
||||
self.temperature: float | None = None
|
||||
self.mode: str | None = None
|
||||
self.switch: bool | None = None
|
||||
self.preset_modes: list[str] = []
|
||||
self.send_data = send_data
|
||||
self.switch_held = False
|
||||
|
@ -93,5 +95,5 @@ class Selector:
|
|||
elif self.switch_held and event.action == ACTION_RELEASED:
|
||||
self.switch_held = False
|
||||
|
||||
def callback(self, data: dict[str, float | str | None]) -> None:
|
||||
def callback(self, data: dict[str, Any]) -> None:
|
||||
self.send_data(self.default_data | data)
|
||||
|
|
5
pyrightconfig.json
Normal file
5
pyrightconfig.json
Normal file
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"include": ["oin_thermostat"],
|
||||
"strict": ["oin_thermostat"],
|
||||
"venvPath": "env"
|
||||
}
|
12
typings/bdfparser/__init__.pyi
Normal file
12
typings/bdfparser/__init__.pyi
Normal file
|
@ -0,0 +1,12 @@
|
|||
"""
|
||||
This type stub file was generated by pyright.
|
||||
"""
|
||||
|
||||
from .bdfparser import *
|
||||
|
||||
"""
|
||||
BDF (Glyph Bitmap Distribution Format) Bitmap Font File Parser in Python
|
||||
Copyright (c) 2017-2021 Tom CHEN (tomchen.org), MIT License
|
||||
https://font.tomchen.org/bdfparser_py/
|
||||
"""
|
||||
__version__ = ...
|
345
typings/bdfparser/bdfparser.pyi
Normal file
345
typings/bdfparser/bdfparser.pyi
Normal file
|
@ -0,0 +1,345 @@
|
|||
"""
|
||||
This type stub file was generated by pyright.
|
||||
"""
|
||||
from typing import Any
|
||||
|
||||
def format_warning(message, category, filename, lineno, file=..., line=...): ...
|
||||
|
||||
class Font:
|
||||
"""
|
||||
`Font` object
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/font
|
||||
"""
|
||||
|
||||
__PATTERN_VVECTOR_DELIMITER = ...
|
||||
__META_TITLES = ...
|
||||
__EMPTY_GLYPH = ...
|
||||
def __init__(self, *argv) -> None:
|
||||
"""
|
||||
Initialize a `Font` object. Load the BDF font file if a file path string or a file object is present.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/font#font
|
||||
"""
|
||||
...
|
||||
def load_file_path(self, file_path): # -> Self:
|
||||
"""
|
||||
Load the BDF font file in the file path.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/font#load_file_path
|
||||
"""
|
||||
...
|
||||
def load_file_obj(self, file_obj): # -> Self:
|
||||
"""
|
||||
Load the BDF font file object.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/font#load_file_obj
|
||||
"""
|
||||
...
|
||||
def length(self): # -> int:
|
||||
"""
|
||||
Returns how many glyphs actually exist in the font.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/font#length
|
||||
"""
|
||||
...
|
||||
def __len__(self): # -> int:
|
||||
"""
|
||||
Same as `.length()`
|
||||
"""
|
||||
...
|
||||
def itercps(self, order=..., r=...): # -> filter[Any] | Iterator[Any]:
|
||||
"""
|
||||
Almost identical to `.iterglyphs()`, except it returns an `iterator` of glyph codepoints instead of an `iterator` of `Glyph` objects.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/font#itercps
|
||||
"""
|
||||
...
|
||||
def iterglyphs(self, order=..., r=...): # -> Generator[Glyph | None, Any, None]:
|
||||
"""
|
||||
Returns an iterator of all the glyphs (as `Glyph` objects) in the font (default) or in the specified codepoint range in the font, sorted by the specified order (or by the ascending codepoint order by default).
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/font#iterglyphs
|
||||
"""
|
||||
...
|
||||
def glyphbycp(self, codepoint): # -> Glyph | None:
|
||||
"""
|
||||
Get a glyph (as Glyph object) by its codepoint.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/font#glyphbycp
|
||||
"""
|
||||
...
|
||||
def glyph(self, character): # -> Glyph | None:
|
||||
"""
|
||||
Get a glyph (as `Glyph` object) by its character.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/font#glyph
|
||||
"""
|
||||
...
|
||||
def lacksglyphs(self, string): # -> list[Any] | None:
|
||||
"""
|
||||
Check if there is any missing glyph and gets these glyphs' character.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/font#lacksglyphs
|
||||
"""
|
||||
...
|
||||
def drawcps(
|
||||
self,
|
||||
cps,
|
||||
linelimit=...,
|
||||
mode=...,
|
||||
direction=...,
|
||||
usecurrentglyphspacing=...,
|
||||
missing=...,
|
||||
):
|
||||
"""
|
||||
Draw the glyphs of the specified codepoints, to a `Bitmap` object.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/font#drawcps
|
||||
"""
|
||||
...
|
||||
def draw(
|
||||
self,
|
||||
string: str,
|
||||
linelimit: int = ...,
|
||||
mode: int = ...,
|
||||
direction: str = ...,
|
||||
usecurrentglyphspacing: bool = ...,
|
||||
missing: dict[str, Any] | Glyph = ...,
|
||||
) -> Bitmap:
|
||||
"""
|
||||
Draw (render) the glyphs of the specified words / setences / paragraphs (as a `str`), to a `Bitmap` object.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/font#draw
|
||||
"""
|
||||
...
|
||||
def drawall(
|
||||
self,
|
||||
order=...,
|
||||
r=...,
|
||||
linelimit=...,
|
||||
mode=...,
|
||||
direction=...,
|
||||
usecurrentglyphspacing=...,
|
||||
):
|
||||
"""
|
||||
Draw all the glyphs in the font (default) or in the specified codepoint range in the font, sorted by the specified order (or by the ascending codepoint order by default), to a `Bitmap` object.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/font#drawall
|
||||
"""
|
||||
...
|
||||
|
||||
class Glyph:
|
||||
"""
|
||||
`Glyph` object
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/glyph
|
||||
"""
|
||||
|
||||
def __init__(self, meta_dict, font) -> None:
|
||||
"""
|
||||
Initialize a `Glyph` object. Load a `dict` of meta information and the font the glyph belongs.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/glyph#glyph
|
||||
"""
|
||||
...
|
||||
def __str__(self) -> str:
|
||||
"""
|
||||
Gets a human-readable (multi-line) `str` representation of the `Glyph` object.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/glyph#str-and-print
|
||||
"""
|
||||
...
|
||||
def __repr__(self): # -> str:
|
||||
"""
|
||||
Gets a programmer-readable `str` representation of the `Glyph` object.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/glyph#repr
|
||||
"""
|
||||
...
|
||||
def cp(self):
|
||||
"""
|
||||
Get the codepoint of the glyph.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/glyph#cp
|
||||
"""
|
||||
...
|
||||
def chr(self): # -> str:
|
||||
"""
|
||||
Get the character of the glyph.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/glyph#chr
|
||||
"""
|
||||
...
|
||||
def draw(self, mode=..., bb=...): # -> Bitmap:
|
||||
"""
|
||||
Draw the glyph to a `Bitmap` object.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/glyph#draw
|
||||
"""
|
||||
...
|
||||
def origin(
|
||||
self, mode=..., fromorigin=..., xoff=..., yoff=...
|
||||
): # -> tuple[Any, Any]:
|
||||
"""
|
||||
Get the relative position (displacement) of the origin from the left bottom corner of the bitmap drawn by the method `.draw()`, or vice versa.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/glyph#origin
|
||||
"""
|
||||
...
|
||||
|
||||
class Bitmap:
|
||||
"""
|
||||
`Bitmap` object
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap
|
||||
"""
|
||||
|
||||
def __init__(self, bin_bitmap_list) -> None:
|
||||
"""
|
||||
Initialize a `Bitmap` object. Load binary bitmap data (`list` of `str`s).
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap#bitmap
|
||||
"""
|
||||
...
|
||||
def __str__(self) -> str:
|
||||
"""
|
||||
Gets a human-readable (multi-line) `str` representation of the `Bitmap` object.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap#str-and-print
|
||||
"""
|
||||
...
|
||||
def __repr__(self): # -> str:
|
||||
"""
|
||||
Gets a programmer-readable (multi-line) `str` representation of the `Bitmap` object.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap#repr
|
||||
"""
|
||||
...
|
||||
def width(self): # -> int:
|
||||
"""
|
||||
Get the width of the bitmap.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap#width
|
||||
"""
|
||||
...
|
||||
def height(self): # -> int:
|
||||
"""
|
||||
Get the height of the bitmap.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap#height
|
||||
"""
|
||||
...
|
||||
def clone(self): # -> Self:
|
||||
"""
|
||||
Get a deep copy / clone of the `Bitmap` object.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap#clone
|
||||
"""
|
||||
...
|
||||
def crop(
|
||||
self, w: int, h: int, xoff: int = ..., yoff: int = ...
|
||||
) -> Bitmap: # -> Self:
|
||||
"""
|
||||
Crop and/or extend the bitmap.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap#crop
|
||||
"""
|
||||
...
|
||||
def overlay(self, bitmap): # -> Self:
|
||||
"""
|
||||
Overlay another bitmap over the current one.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap#overlay
|
||||
"""
|
||||
...
|
||||
@classmethod
|
||||
def concatall(
|
||||
cls, bitmaplist, direction=..., align=..., offsetlist=...
|
||||
): # -> Self:
|
||||
"""
|
||||
Concatenate all `Bitmap` objects in a `list`.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap#bitmapconcatall
|
||||
"""
|
||||
...
|
||||
def __add__(self, bitmap): # -> Self:
|
||||
"""
|
||||
`+` is a shortcut of `Bitmap.concatall()`. Use `+` to concatenate two `Bitmap` objects and get a new `Bitmap` objects.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap#-concat
|
||||
"""
|
||||
...
|
||||
def concat(self, bitmap, direction=..., align=..., offset=...): # -> Self:
|
||||
"""
|
||||
Concatenate another `Bitmap` objects to the current one.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap#concat
|
||||
"""
|
||||
...
|
||||
def enlarge(self, x=..., y=...): # -> Self:
|
||||
"""
|
||||
Enlarge a `Bitmap` object, by multiplying every pixel in x (right) direction and in y (top) direction.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap#enlarge
|
||||
"""
|
||||
...
|
||||
def __mul__(self, mul): # -> Self:
|
||||
"""
|
||||
`*` is a shortcut of `.enlarge()`.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap#-enlarge
|
||||
"""
|
||||
...
|
||||
def replace(self, substr, newsubstr): # -> Self:
|
||||
"""
|
||||
Replace a string by another in the bitmap.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap#replace
|
||||
"""
|
||||
...
|
||||
def shadow(self, xoff=..., yoff=...): # -> Self:
|
||||
"""
|
||||
Add shadow to the shape in the bitmap.
|
||||
|
||||
The shadow will be filled by `'2'`s.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap#shadow
|
||||
"""
|
||||
...
|
||||
def glow(self, mode=...): # -> Self:
|
||||
"""
|
||||
Add glow effect to the shape in the bitmap.
|
||||
|
||||
The glowing area is one pixel up, right, bottom and left to the original pixels (corners will not be filled in default mode 0 but will in mode 1), and will be filled by `'2'`s.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap#glow
|
||||
"""
|
||||
...
|
||||
def bytepad(self, bits=...): # -> Self:
|
||||
"""
|
||||
Pad each line (row) to multiple of 8 (or other numbers) bits/pixels, with `'0'`s.
|
||||
|
||||
Do this before using the bitmap for a glyph in a BDF font.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap#bytepad
|
||||
"""
|
||||
...
|
||||
def todata(
|
||||
self, datatype: int = ...
|
||||
) -> (
|
||||
Any
|
||||
): # -> LiteralString | Any | list[list[int]] | list[int] | list[str] | None:
|
||||
"""
|
||||
Get the bitmap's data in the specified type and format.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap#todata
|
||||
"""
|
||||
...
|
||||
def tobytes(self, mode=..., bytesdict=...): # -> bytes:
|
||||
"""
|
||||
Get the bitmap's data as `bytes` to be used with Pillow library's `Image.frombytes(mode, size, data)`.
|
||||
|
||||
https://font.tomchen.org/bdfparser_py/bitmap#tobytes
|
||||
"""
|
||||
...
|
19
typings/sense_hat/__init__.pyi
Normal file
19
typings/sense_hat/__init__.pyi
Normal file
|
@ -0,0 +1,19 @@
|
|||
"""
|
||||
This type stub file was generated by pyright.
|
||||
"""
|
||||
|
||||
from .sense_hat import SenseHat
|
||||
from .stick import (
|
||||
ACTION_HELD,
|
||||
ACTION_PRESSED,
|
||||
ACTION_RELEASED,
|
||||
DIRECTION_DOWN,
|
||||
DIRECTION_LEFT,
|
||||
DIRECTION_MIDDLE,
|
||||
DIRECTION_RIGHT,
|
||||
DIRECTION_UP,
|
||||
InputEvent,
|
||||
SenseStick,
|
||||
)
|
||||
|
||||
__version__ = ...
|
222
typings/sense_hat/colour.pyi
Normal file
222
typings/sense_hat/colour.pyi
Normal file
|
@ -0,0 +1,222 @@
|
|||
"""
|
||||
This type stub file was generated by pyright.
|
||||
"""
|
||||
|
||||
"""
|
||||
Python library for the TCS3472x and TCS340x Color Sensors
|
||||
Documentation (including datasheet): https://ams.com/tcs34725#tab/documents
|
||||
https://ams.com/tcs3400#tab/documents
|
||||
The sense hat for AstroPi on the ISS uses the TCS34725.
|
||||
The sense hat v2 uses the TCS3400 the successor of the TCS34725.
|
||||
The TCS34725 is not available any more. It was discontinued by ams in 2021.
|
||||
"""
|
||||
|
||||
class HardwareInterface:
|
||||
"""
|
||||
`HardwareInterface` is the abstract class that sits between the
|
||||
`ColourSensor` class (providing the TCS34725/TCS3400 sensor API)
|
||||
and the actual hardware. Using this intermediate layer of abstraction,
|
||||
a `ColourSensor` object interacts with the hardware without being
|
||||
aware of how this interaction is implemented.
|
||||
Different subclasses of the `HardwareInterface` class can provide
|
||||
access to the hardware through e.g. I2C, `libiio` and its system
|
||||
files or even a hardware emulator.
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def max_value(integration_cycles): # -> Literal[65535]:
|
||||
"""
|
||||
The maximum raw value for the RBGC channels depends on the number
|
||||
of integration cycles.
|
||||
"""
|
||||
...
|
||||
def get_enabled(self):
|
||||
"""
|
||||
Return True if the sensor is enabled and False otherwise
|
||||
"""
|
||||
...
|
||||
def set_enabled(self, status):
|
||||
"""
|
||||
Enable or disable the sensor, depending on the boolean `status` flag
|
||||
"""
|
||||
...
|
||||
def get_gain(self):
|
||||
"""
|
||||
Return the current value of the sensor gain.
|
||||
See GAIN_VALUES for the set of possible values.
|
||||
"""
|
||||
...
|
||||
def set_gain(self, gain):
|
||||
"""
|
||||
Set the value for the sensor `gain`.
|
||||
See GAIN_VALUES for the set of possible values.
|
||||
"""
|
||||
...
|
||||
def get_integration_cycles(self):
|
||||
"""
|
||||
Return the current number of integration_cycles (1-256).
|
||||
It takes `integration_cycles` * CLOCK_STEP to obtain a new
|
||||
sensor reading.
|
||||
"""
|
||||
...
|
||||
def set_integration_cycles(self, integration_cycles):
|
||||
"""
|
||||
Set the current number of integration_cycles (1-256).
|
||||
It takes `integration_cycles` * CLOCK_STEP to obtain a new
|
||||
sensor reading.
|
||||
"""
|
||||
...
|
||||
def get_raw(self):
|
||||
"""
|
||||
Return a tuple containing the raw values of the RGBC channels.
|
||||
The maximum for these raw values depends on the number of
|
||||
integration cycles and can be computed using `max_value`.
|
||||
"""
|
||||
...
|
||||
def get_red(self):
|
||||
"""
|
||||
Return the raw value of the R (red) channel.
|
||||
The maximum for this raw value depends on the number of
|
||||
integration cycles and can be computed using `max_value`.
|
||||
"""
|
||||
...
|
||||
def get_green(self):
|
||||
"""
|
||||
Return the raw value of the G (green) channel.
|
||||
The maximum for this raw value depends on the number of
|
||||
integration cycles and can be computed using `max_value`.
|
||||
"""
|
||||
...
|
||||
def get_blue(self):
|
||||
"""
|
||||
Return the raw value of the B (blue) channel.
|
||||
The maximum for this raw value depends on the number of
|
||||
integration cycles and can be computed using `max_value`.
|
||||
"""
|
||||
...
|
||||
def get_clear(self):
|
||||
"""
|
||||
Return the raw value of the C (clear light) channel.
|
||||
The maximum for this raw value depends on the number of
|
||||
integration cycles and can be computed using `max_value`.
|
||||
"""
|
||||
...
|
||||
|
||||
class I2C(HardwareInterface):
|
||||
"""
|
||||
An implementation of the `HardwareInterface` for the TCS34725/TCS3400
|
||||
sensor that uses I2C to control the sensor and retrieve measurements.
|
||||
Use the datasheets as a reference.
|
||||
"""
|
||||
|
||||
BUS = ...
|
||||
ENABLE = ...
|
||||
ATIME = ...
|
||||
CONTROL = ...
|
||||
ID = ...
|
||||
STATUS = ...
|
||||
CDATA = ...
|
||||
RDATA = ...
|
||||
GDATA = ...
|
||||
BDATA = ...
|
||||
OFF = ...
|
||||
PON = ...
|
||||
AEN = ...
|
||||
ON = ...
|
||||
AVALID = ...
|
||||
GAIN_REG_VALUES = ...
|
||||
ADDR = ...
|
||||
GAIN_VALUES = ...
|
||||
CLOCK_STEP = ...
|
||||
GAIN_TO_REG = ...
|
||||
REG_TO_GAIN = ...
|
||||
def __init__(self) -> None: ...
|
||||
@staticmethod
|
||||
def i2c_enabled(): # -> bool:
|
||||
"""Returns True if I2C is enabled or False otherwise."""
|
||||
...
|
||||
def get_enabled(self):
|
||||
"""
|
||||
Return True if the sensor is enabled and False otherwise
|
||||
"""
|
||||
...
|
||||
def set_enabled(self, status): # -> None:
|
||||
"""
|
||||
Enable or disable the sensor, depending on the boolean `status` flag
|
||||
"""
|
||||
...
|
||||
def get_gain(self): # -> Literal[1, 4, 16, 60, 64]:
|
||||
"""
|
||||
Return the current value of the sensor gain.
|
||||
See GAIN_VALUES for the set of possible values.
|
||||
"""
|
||||
...
|
||||
def set_gain(self, gain): # -> None:
|
||||
"""
|
||||
Set the value for the sensor `gain`.
|
||||
See GAIN_VALUES for the set of possible values.
|
||||
"""
|
||||
...
|
||||
def get_integration_cycles(self):
|
||||
"""
|
||||
Return the current number of integration_cycles (1-256).
|
||||
It takes `integration_cycles` * CLOCK_STEP to obtain a new
|
||||
sensor reading.
|
||||
"""
|
||||
...
|
||||
def set_integration_cycles(self, integration_cycles): # -> None:
|
||||
"""
|
||||
Set the current number of integration_cycles (1-256).
|
||||
It takes `integration_cycles` * CLOCK_STEP to obtain a new
|
||||
sensor reading.
|
||||
"""
|
||||
...
|
||||
def get_raw(self): # -> tuple[Any, Any, Any, Any]:
|
||||
"""
|
||||
Return a tuple containing the raw values of the RGBC channels.
|
||||
The maximum for these raw values depends on the number of
|
||||
integration cycles and can be computed using `max_value`.
|
||||
"""
|
||||
...
|
||||
get_red = ...
|
||||
get_green = ...
|
||||
get_blue = ...
|
||||
get_clear = ...
|
||||
|
||||
class ColourSensor:
|
||||
def __init__(self, gain=..., integration_cycles=..., interface=...) -> None: ...
|
||||
@property
|
||||
def enabled(self): ...
|
||||
@enabled.setter
|
||||
def enabled(self, status): ...
|
||||
@property
|
||||
def gain(self): ...
|
||||
@gain.setter
|
||||
def gain(self, gain): ...
|
||||
@property
|
||||
def integration_cycles(self): ...
|
||||
@integration_cycles.setter
|
||||
def integration_cycles(self, integration_cycles): ...
|
||||
@property
|
||||
def integration_time(self): ...
|
||||
@property
|
||||
def max_raw(self): ...
|
||||
@property
|
||||
def colour_raw(self): ...
|
||||
|
||||
color_raw = ...
|
||||
red_raw = ...
|
||||
green_raw = ...
|
||||
blue_raw = ...
|
||||
clear_raw = ...
|
||||
brightness = ...
|
||||
@property
|
||||
def colour(self): ...
|
||||
@property
|
||||
def rgb(self): ...
|
||||
|
||||
color = ...
|
||||
red = ...
|
||||
green = ...
|
||||
blue = ...
|
||||
clear = ...
|
20
typings/sense_hat/exceptions.pyi
Normal file
20
typings/sense_hat/exceptions.pyi
Normal file
|
@ -0,0 +1,20 @@
|
|||
"""
|
||||
This type stub file was generated by pyright.
|
||||
"""
|
||||
|
||||
class SenseHatException(Exception):
|
||||
"""
|
||||
The base exception class for all SenseHat exceptions.
|
||||
"""
|
||||
|
||||
fmt = ...
|
||||
def __init__(self, **kwargs) -> None: ...
|
||||
|
||||
class ColourSensorInitialisationError(SenseHatException):
|
||||
fmt = ...
|
||||
|
||||
class InvalidGainError(SenseHatException):
|
||||
fmt = ...
|
||||
|
||||
class InvalidIntegrationCyclesError(SenseHatException):
|
||||
fmt = ...
|
224
typings/sense_hat/sense_hat.pyi
Normal file
224
typings/sense_hat/sense_hat.pyi
Normal file
|
@ -0,0 +1,224 @@
|
|||
"""
|
||||
This type stub file was generated by pyright.
|
||||
"""
|
||||
from sense_hat.stick import SenseStick
|
||||
|
||||
class SenseHat:
|
||||
SENSE_HAT_FB_NAME = ...
|
||||
SENSE_HAT_FB_FBIOGET_GAMMA = ...
|
||||
SENSE_HAT_FB_FBIOSET_GAMMA = ...
|
||||
SENSE_HAT_FB_FBIORESET_GAMMA = ...
|
||||
SENSE_HAT_FB_GAMMA_DEFAULT = ...
|
||||
SENSE_HAT_FB_GAMMA_LOW = ...
|
||||
SENSE_HAT_FB_GAMMA_USER = ...
|
||||
SETTINGS_HOME_PATH = ...
|
||||
def __init__(self, imu_settings_file=..., text_assets=...) -> None: ...
|
||||
@property
|
||||
def stick(self) -> SenseStick: ...
|
||||
@property
|
||||
def colour(self): ...
|
||||
|
||||
color = ...
|
||||
def has_colour_sensor(self): ...
|
||||
@property
|
||||
def rotation(self): ...
|
||||
@rotation.setter
|
||||
def rotation(self, r): ...
|
||||
def set_rotation(self, r=..., redraw=...): # -> None:
|
||||
"""
|
||||
Sets the LED matrix rotation for viewing, adjust if the Pi is upside
|
||||
down or sideways. 0 is with the Pi HDMI port facing downwards
|
||||
"""
|
||||
...
|
||||
def flip_h(self, redraw=...): # -> list[Any]:
|
||||
"""
|
||||
Flip LED matrix horizontal
|
||||
"""
|
||||
...
|
||||
def flip_v(self, redraw=...): # -> list[Any]:
|
||||
"""
|
||||
Flip LED matrix vertical
|
||||
"""
|
||||
...
|
||||
def set_pixels(self, pixel_list: list[tuple[int, int, int]]) -> None: # -> None:
|
||||
"""
|
||||
Accepts a list containing 64 smaller lists of [R,G,B] pixels and
|
||||
updates the LED matrix. R,G,B elements must integers between 0
|
||||
and 255
|
||||
"""
|
||||
...
|
||||
def get_pixels(self): # -> list[Any]:
|
||||
"""
|
||||
Returns a list containing 64 smaller lists of [R,G,B] pixels
|
||||
representing what is currently displayed on the LED matrix
|
||||
"""
|
||||
...
|
||||
def set_pixel(self, x, y, *args): # -> None:
|
||||
"""
|
||||
Updates the single [R,G,B] pixel specified by x and y on the LED matrix
|
||||
Top left = 0,0 Bottom right = 7,7
|
||||
|
||||
e.g. ap.set_pixel(x, y, r, g, b)
|
||||
or
|
||||
pixel = (r, g, b)
|
||||
ap.set_pixel(x, y, pixel)
|
||||
"""
|
||||
...
|
||||
def get_pixel(self, x, y): # -> list[int]:
|
||||
"""
|
||||
Returns a list of [R,G,B] representing the pixel specified by x and y
|
||||
on the LED matrix. Top left = 0,0 Bottom right = 7,7
|
||||
"""
|
||||
...
|
||||
def load_image(self, file_path, redraw=...): # -> list[list[Any]]:
|
||||
"""
|
||||
Accepts a path to an 8 x 8 image file and updates the LED matrix with
|
||||
the image
|
||||
"""
|
||||
...
|
||||
def clear(self, *args): # -> None:
|
||||
"""
|
||||
Clears the LED matrix with a single colour, default is black / off
|
||||
|
||||
e.g. ap.clear()
|
||||
or
|
||||
ap.clear(r, g, b)
|
||||
or
|
||||
colour = (r, g, b)
|
||||
ap.clear(colour)
|
||||
"""
|
||||
...
|
||||
def show_message(
|
||||
self, text_string, scroll_speed=..., text_colour=..., back_colour=...
|
||||
): # -> None:
|
||||
"""
|
||||
Scrolls a string of text across the LED matrix using the specified
|
||||
speed and colours
|
||||
"""
|
||||
...
|
||||
def show_letter(self, s, text_colour=..., back_colour=...): # -> None:
|
||||
"""
|
||||
Displays a single text character on the LED matrix using the specified
|
||||
colours
|
||||
"""
|
||||
...
|
||||
@property
|
||||
def gamma(self): ...
|
||||
@gamma.setter
|
||||
def gamma(self, buffer): ...
|
||||
def gamma_reset(self): # -> None:
|
||||
"""
|
||||
Resets the LED matrix gamma correction to default
|
||||
"""
|
||||
...
|
||||
@property
|
||||
def low_light(self): ...
|
||||
@low_light.setter
|
||||
def low_light(self, value): ...
|
||||
def get_humidity(self): # -> Literal[0]:
|
||||
"""
|
||||
Returns the percentage of relative humidity
|
||||
"""
|
||||
...
|
||||
@property
|
||||
def humidity(self): ...
|
||||
def get_temperature_from_humidity(self): # -> Literal[0]:
|
||||
"""
|
||||
Returns the temperature in Celsius from the humidity sensor
|
||||
"""
|
||||
...
|
||||
def get_temperature_from_pressure(self): # -> Literal[0]:
|
||||
"""
|
||||
Returns the temperature in Celsius from the pressure sensor
|
||||
"""
|
||||
...
|
||||
def get_temperature(self): # -> Literal[0]:
|
||||
"""
|
||||
Returns the temperature in Celsius
|
||||
"""
|
||||
...
|
||||
@property
|
||||
def temp(self): ...
|
||||
@property
|
||||
def temperature(self): ...
|
||||
def get_pressure(self): # -> Literal[0]:
|
||||
"""
|
||||
Returns the pressure in Millibars
|
||||
"""
|
||||
...
|
||||
@property
|
||||
def pressure(self): ...
|
||||
def set_imu_config(self, compass_enabled, gyro_enabled, accel_enabled): # -> None:
|
||||
"""
|
||||
Enables and disables the gyroscope, accelerometer and/or magnetometer
|
||||
input to the orientation functions
|
||||
"""
|
||||
...
|
||||
def get_orientation_radians(self): # -> dict[str, Any] | dict[str, int]:
|
||||
"""
|
||||
Returns a dictionary object to represent the current orientation in
|
||||
radians using the aircraft principal axes of pitch, roll and yaw
|
||||
"""
|
||||
...
|
||||
@property
|
||||
def orientation_radians(self): ...
|
||||
def get_orientation_degrees(self): # -> dict[str, Any] | dict[str, int]:
|
||||
"""
|
||||
Returns a dictionary object to represent the current orientation
|
||||
in degrees, 0 to 360, using the aircraft principal axes of
|
||||
pitch, roll and yaw
|
||||
"""
|
||||
...
|
||||
def get_orientation(self): ...
|
||||
@property
|
||||
def orientation(self): ...
|
||||
def get_compass(self): # -> int | None:
|
||||
"""
|
||||
Gets the direction of North from the magnetometer in degrees
|
||||
"""
|
||||
...
|
||||
@property
|
||||
def compass(self): ...
|
||||
def get_compass_raw(self): # -> dict[str, Any] | dict[str, int]:
|
||||
"""
|
||||
Magnetometer x y z raw data in uT (micro teslas)
|
||||
"""
|
||||
...
|
||||
@property
|
||||
def compass_raw(self): ...
|
||||
def get_gyroscope(self): # -> dict[str, Any] | dict[str, int]:
|
||||
"""
|
||||
Gets the orientation in degrees from the gyroscope only
|
||||
"""
|
||||
...
|
||||
@property
|
||||
def gyro(self): ...
|
||||
@property
|
||||
def gyroscope(self): ...
|
||||
def get_gyroscope_raw(self): # -> dict[str, Any] | dict[str, int]:
|
||||
"""
|
||||
Gyroscope x y z raw data in radians per second
|
||||
"""
|
||||
...
|
||||
@property
|
||||
def gyro_raw(self): ...
|
||||
@property
|
||||
def gyroscope_raw(self): ...
|
||||
def get_accelerometer(self): # -> dict[str, Any] | dict[str, int]:
|
||||
"""
|
||||
Gets the orientation in degrees from the accelerometer only
|
||||
"""
|
||||
...
|
||||
@property
|
||||
def accel(self): ...
|
||||
@property
|
||||
def accelerometer(self): ...
|
||||
def get_accelerometer_raw(self): # -> dict[str, Any] | dict[str, int]:
|
||||
"""
|
||||
Accelerometer x y z raw data in Gs
|
||||
"""
|
||||
...
|
||||
@property
|
||||
def accel_raw(self): ...
|
||||
@property
|
||||
def accelerometer_raw(self): ...
|
132
typings/sense_hat/stick.pyi
Normal file
132
typings/sense_hat/stick.pyi
Normal file
|
@ -0,0 +1,132 @@
|
|||
"""
|
||||
This type stub file was generated by pyright.
|
||||
"""
|
||||
from collections.abc import Callable
|
||||
from typing import Any, NamedTuple
|
||||
|
||||
# native_str = str
|
||||
# str = ...
|
||||
DIRECTION_UP = ...
|
||||
DIRECTION_DOWN = ...
|
||||
DIRECTION_LEFT = ...
|
||||
DIRECTION_RIGHT = ...
|
||||
DIRECTION_MIDDLE = ...
|
||||
ACTION_PRESSED = ...
|
||||
ACTION_RELEASED = ...
|
||||
ACTION_HELD = ...
|
||||
|
||||
class InputEvent(NamedTuple):
|
||||
timestamp: int
|
||||
direction: str
|
||||
action: str
|
||||
|
||||
class SenseStick:
|
||||
"""
|
||||
Represents the joystick on the Sense HAT.
|
||||
"""
|
||||
|
||||
SENSE_HAT_EVDEV_NAME = ...
|
||||
EVENT_FORMAT = ...
|
||||
EVENT_SIZE = ...
|
||||
EV_KEY = ...
|
||||
STATE_RELEASE = ...
|
||||
STATE_PRESS = ...
|
||||
STATE_HOLD = ...
|
||||
KEY_UP = ...
|
||||
KEY_LEFT = ...
|
||||
KEY_RIGHT = ...
|
||||
KEY_DOWN = ...
|
||||
KEY_ENTER = ...
|
||||
def __init__(self) -> None: ...
|
||||
def close(self): ...
|
||||
def __enter__(self): ...
|
||||
def __exit__(self, exc_type, exc_value, exc_tb): ...
|
||||
def wait_for_event(self, emptybuffer=...): # -> InputEvent | None:
|
||||
"""
|
||||
Waits until a joystick event becomes available. Returns the event, as
|
||||
an `InputEvent` tuple.
|
||||
|
||||
If *emptybuffer* is `True` (it defaults to `False`), any pending
|
||||
events will be thrown away first. This is most useful if you are only
|
||||
interested in "pressed" events.
|
||||
"""
|
||||
...
|
||||
def get_events(self): # -> list[Any]:
|
||||
"""
|
||||
Returns a list of all joystick events that have occurred since the last
|
||||
call to `get_events`. The list contains events in the order that they
|
||||
occurred. If no events have occurred in the intervening time, the
|
||||
result is an empty list.
|
||||
"""
|
||||
...
|
||||
@property
|
||||
def direction_up(self): # -> None:
|
||||
"""
|
||||
The function to be called when the joystick is pushed up. The function
|
||||
can either take a parameter which will be the `InputEvent` tuple that
|
||||
has occurred, or the function can take no parameters at all.
|
||||
"""
|
||||
...
|
||||
@direction_up.setter
|
||||
def direction_up(self, value: Callable[[InputEvent], Any]) -> None: ...
|
||||
@property
|
||||
def direction_down(self): # -> None:
|
||||
"""
|
||||
The function to be called when the joystick is pushed down. The
|
||||
function can either take a parameter which will be the `InputEvent`
|
||||
tuple that has occurred, or the function can take no parameters at all.
|
||||
|
||||
Assign `None` to prevent this event from being fired.
|
||||
"""
|
||||
...
|
||||
@direction_down.setter
|
||||
def direction_down(self, value: Callable[[InputEvent], Any]) -> None: ...
|
||||
@property
|
||||
def direction_left(self): # -> None:
|
||||
"""
|
||||
The function to be called when the joystick is pushed left. The
|
||||
function can either take a parameter which will be the `InputEvent`
|
||||
tuple that has occurred, or the function can take no parameters at all.
|
||||
|
||||
Assign `None` to prevent this event from being fired.
|
||||
"""
|
||||
...
|
||||
@direction_left.setter
|
||||
def direction_left(self, value: Callable[[InputEvent], Any]) -> None: ...
|
||||
@property
|
||||
def direction_right(self): # -> None:
|
||||
"""
|
||||
The function to be called when the joystick is pushed right. The
|
||||
function can either take a parameter which will be the `InputEvent`
|
||||
tuple that has occurred, or the function can take no parameters at all.
|
||||
|
||||
Assign `None` to prevent this event from being fired.
|
||||
"""
|
||||
...
|
||||
@direction_right.setter
|
||||
def direction_right(self, value: Callable[[InputEvent], Any]) -> None: ...
|
||||
@property
|
||||
def direction_middle(self): # -> None:
|
||||
"""
|
||||
The function to be called when the joystick middle click is pressed. The
|
||||
function can either take a parameter which will be the `InputEvent` tuple
|
||||
that has occurred, or the function can take no parameters at all.
|
||||
|
||||
Assign `None` to prevent this event from being fired.
|
||||
"""
|
||||
...
|
||||
@direction_middle.setter
|
||||
def direction_middle(self, value: Callable[[InputEvent], Any]) -> None: ...
|
||||
@property
|
||||
def direction_any(self): # -> None:
|
||||
"""
|
||||
The function to be called when the joystick is used. The function
|
||||
can either take a parameter which will be the `InputEvent` tuple that
|
||||
has occurred, or the function can take no parameters at all.
|
||||
|
||||
This event will always be called *after* events associated with a
|
||||
specific action. Assign `None` to prevent this event from being fired.
|
||||
"""
|
||||
...
|
||||
@direction_any.setter
|
||||
def direction_any(self, value: Callable[[InputEvent], Any]) -> None: ...
|
Loading…
Reference in a new issue