Fix various typing issues (#18187)

* Fix the `Any` typing hint treewide

There has been confusion between the Any type[1] and the any function[2]
in typing hints.

[1] https://docs.python.org/3/library/typing.html#typing.Any
[2] https://docs.python.org/3/library/functions.html#any

* Fix typing for various frame_shape members

Frame shapes are most likely defined by height and width, so a single int
cannot express that.

* Wrap gpu stats functions in Optional[]

These can return `None`, so they need to be `Type | None`, which is what
`Optional` expresses very nicely.

* Fix return type in get_latest_segment_datetime

Returns a datetime object, not an integer.

* Make the return type of FrameManager.write optional

This is necessary since the SharedMemoryFrameManager.write function can
return None.

* Fix total_seconds() return type in get_tz_modifiers

The function returns a float, not an int.

https://docs.python.org/3/library/datetime.html#datetime.timedelta.total_seconds

* Account for floating point results in to_relative_box

Because the function uses division the return types may either be int or
float.

* Resolve ruff deprecation warning

The config has been split into formatter and linter, and the global
options are deprecated.
This commit is contained in:
Martin Weinelt
2025-05-13 08:27:20 -06:00
committed by GitHub
parent 2c9bfaa49c
commit 4d4d54d030
50 changed files with 191 additions and 164 deletions
+5 -5
View File
@@ -10,7 +10,7 @@ import queue
import subprocess as sp
import threading
import traceback
from typing import Optional
from typing import Any, Optional
import cv2
import numpy as np
@@ -542,10 +542,10 @@ class BirdsEyeFrameManager:
self,
cameras_to_add: list[str],
coefficient: float,
) -> tuple[any]:
) -> tuple[Any]:
"""Calculate the optimal layout for 2+ cameras."""
def map_layout(camera_layout: list[list[any]], row_height: int):
def map_layout(camera_layout: list[list[Any]], row_height: int):
"""Map the calculated layout."""
candidate_layout = []
starting_x = 0
@@ -588,7 +588,7 @@ class BirdsEyeFrameManager:
return max_width, y, candidate_layout
canvas_aspect_x, canvas_aspect_y = self.canvas.get_aspect(coefficient)
camera_layout: list[list[any]] = []
camera_layout: list[list[Any]] = []
camera_layout.append([])
starting_x = 0
x = starting_x
@@ -786,7 +786,7 @@ class Birdseye:
def write_data(
self,
camera: str,
current_tracked_objects: list[dict[str, any]],
current_tracked_objects: list[dict[str, Any]],
motion_boxes: list[list[int]],
frame_time: float,
frame: np.ndarray,
+3 -2
View File
@@ -8,6 +8,7 @@ import subprocess as sp
import threading
import time
from pathlib import Path
from typing import Any
import cv2
import numpy as np
@@ -255,7 +256,7 @@ class PreviewRecorder:
def should_write_frame(
self,
current_tracked_objects: list[dict[str, any]],
current_tracked_objects: list[dict[str, Any]],
motion_boxes: list[list[int]],
frame_time: float,
) -> bool:
@@ -315,7 +316,7 @@ class PreviewRecorder:
def write_data(
self,
current_tracked_objects: list[dict[str, any]],
current_tracked_objects: list[dict[str, Any]],
motion_boxes: list[list[int]],
frame_time: float,
frame: np.ndarray,