testsAndMisc/python_pkg
Krzysztof kuhy Rudnicki 325d5a8baa
Some checks are pending
Pre-commit checks / pre-commit (push) Waiting to run
Python tests / test (push) Waiting to run
Shell tests / shell-tests (push) Waiting to run
Shell tests / arch-tests (push) Waiting to run
Stop the endurain importer duplicating RunnerUp's own uploads
RunnerUp can now upload to Endurain directly as well as through the WebDAV
inbox, and the two paths cannot see each other: the same run landed twice
(activities 14 and 15, identical start time, distances differing only by
tcx/gpx rounding). The ledger only knows what this importer handled, so it
could not catch it.

Add a third dedupe check that asks Endurain what it already holds, queried
once per run. Endurain exposes no query-by-start-time endpoint, so a page of
recent activities is fetched and compared client-side, with a +/-120s
tolerance: the file for activity 15 embeds 21:51:04Z while the server stored
21:51:05Z, so exact equality misses the very duplicate that motivated this.
A failed or unauthorised query returns None, never an empty list, so it can
never be read as "nothing matches" and upload on the strength of it.

Export filenames are parsed as LOCAL wall-clock time. RunnerUp_2026-08-14-
00-58-45_Running is 2026-08-13 22:58:45 UTC; reading it as UTC would move a
late-evening run onto the wrong day and defeat the comparison.

Also fix the adb fallback, which broke the moment a second device attached:
phone_attached() returned true if ANY device was in the 'device' state, then
every bare adb call failed with "more than one device/emulator" as a warning
on a path nobody watches. The serial is now resolved once and threaded into
every call as -s. Ambiguity is settled by configuration, never by guessing --
several devices and no ENDURAIN_ADB_SERIAL means the fallback is skipped.

The remote check stays inert until the API key is granted activities:read;
until then it falls back to the ledger, which is the previous behaviour.

85 tests, 100% branch coverage on all four modules, no suppressions. The
oversized test modules are split by concern to stay under the 250-line cap.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GbYEnfGnf1988cdFdGebot
2026-08-23 14:36:03 +02:00
..
android_ui Clear five python_pkg packages under the cap 2026-08-16 18:14:36 +02:00
app_icons Phase 2: enforce the 250-line cap and stop pushing red 2026-08-21 16:41:31 +02:00
archwiki_rag archwiki_rag: offline semantic search over the Arch Wiki 2026-08-10 15:33:18 +02:00
artgate artgate: add 64px icon spec for the diffusion route 2026-08-15 23:30:32 +02:00
billsplit_coverage Move billsplit Flutter app into the monorepo 2026-08-03 12:22:22 +02:00
brother_printer Clear the last three brother_printer test modules over the cap 2026-08-16 17:27:07 +02:00
code_tutor Clear the seven over-cap code_tutor test modules 2026-08-16 18:06:38 +02:00
endurain_import Stop the endurain importer duplicating RunnerUp's own uploads 2026-08-23 14:36:03 +02:00
focus_policy Clear five python_pkg packages under the cap 2026-08-16 18:14:36 +02:00
live_calc refactor: extract all inline Python from shell scripts into proper .py files 2026-06-06 10:31:48 +02:00
morning_routine Remove wake_alarm (extracted to kuhyx/wake-alarm) and fix the orchestrator 2026-06-22 12:47:06 +02:00
random_jpg Clear five python_pkg packages under the cap 2026-08-16 18:14:36 +02:00
shared Migrate wake_alarm to the shared gatelock backend 2026-06-22 07:33:49 +02:00
syncyomi_guard syncyomi_guard: refuse a collapsed payload as the new good copy 2026-08-10 15:33:18 +02:00
tests Instrument: multi-line array elements are not statements; clear arch_perf_fixes 2026-08-22 20:13:45 +02:00
token_audit Land the token_audit standing-cost checkup (116 tests, 100% branch coverage) 2026-08-22 14:33:03 +02:00
vscode_optimizer vscode_optimizer: detect Intel iGPUs as Intel, not AMD 2026-08-17 14:49:43 +02:00
wsg_grabber Clear the wsg_grabber test modules: python_pkg is now under the cap 2026-08-16 18:19:26 +02:00
__init__.py feat(screen_locker): harden table tennis verification, remove running option 2026-02-02 21:38:52 +01:00
.gitignore screen_locker: enhance workout logging and UI 2025-12-02 23:22:13 +01:00
conftest.py test: achieve 100% branch coverage across all python_pkg packages 2026-03-21 17:51:36 +01:00