Light refactors for how we manage child threads and pass data back and forth in a threadsafe manner.
Replaces the keep_running check with the more standard threading.Event objects.
Child thread loops exit when Event.is_set().
Implements thread sleeps as Event.wait(timeout=foo).
New ThreadsafeVar[T] generic type class. Some child threads update or return variables that previously had to be stuffed into the ThreadsafeCounter class even if the use case within the thread wasn't actually an int counter (e.g. bools). This was always a bit awkward and made the code difficult to understand ("why is this counter storing 0 and being treated as False"?). The generic typing allows the ThreadsafeVar to be typed and instantiated for a specific basic type (int, str, bool, etc).
Extensive tests added to specifically test:
The new basic threading utility classes
Brute force address verification thread
Flow-based test for the address verification flow
Light misc refactors to support flow-based test
Minor bugfix: Live camera preview can sometimes remain onscreen when LEFT (cancel) is used. This is caused by a race condition between the parent Coordinator thread returning to Home and rendering the screen vs the child live preview thread continuing to do its work before it is successfully killed. This fix explicitly waits for the child thread to exit (thread.join()) before the Coordinator thread can move on.
Misc:
Whitespace on tests/test_seed.py changed from tabs to spaces.
Remaining steps
-[ ] Verify SD card inserted/removed toast notifications
-[ ] Expand brute force address verification tests to include all supported address types
Include screenshots of any new or modified screens (or at least explain why they were omitted)
This pull request is categorized as a:
[x] Code refactor
Checklist
[x] I’ve run pytest and made sure all unit tests pass before sumbitting the PR
If you modified or added functionality/workflow, did you add new unit tests?
[x] Yes
I have tested this PR on the following platforms/os:
Note: Keep your changes limited in scope; if you uncover other issues or improvements along the way, ideally submit those as a separate PR. The more complicated the PR the harder to review, test, and merge.
Description
Light refactors for how we manage child threads and pass data back and forth in a threadsafe manner.
Replaces the
keep_running
check with the more standardthreading.Event
objects.Event.is_set()
.Event.wait(timeout=foo)
.New
ThreadsafeVar[T]
generic type class. Some child threads update or return variables that previously had to be stuffed into theThreadsafeCounter
class even if the use case within the thread wasn't actually an int counter (e.g. bools). This was always a bit awkward and made the code difficult to understand ("why is this counter storing 0 and being treated as False"?). The generic typing allows theThreadsafeVar
to be typed and instantiated for a specific basic type (int, str, bool, etc).Extensive tests added to specifically test:
Minor bugfix: Live camera preview can sometimes remain onscreen when LEFT (cancel) is used. This is caused by a race condition between the parent Coordinator thread returning to Home and rendering the screen vs the child live preview thread continuing to do its work before it is successfully killed. This fix explicitly waits for the child thread to exit (
thread.join()
) before the Coordinator thread can move on.Misc:
Remaining steps
-[ ] Verify SD card inserted/removed toast notifications -[ ] Expand brute force address verification tests to include all supported address types
Include screenshots of any new or modified screens (or at least explain why they were omitted)
This pull request is categorized as a:
Checklist
pytest
and made sure all unit tests pass before sumbitting the PRIf you modified or added functionality/workflow, did you add new unit tests?
I have tested this PR on the following platforms/os:
Note: Keep your changes limited in scope; if you uncover other issues or improvements along the way, ideally submit those as a separate PR. The more complicated the PR the harder to review, test, and merge.