mirror of
https://github.com/got-feedBack/feedBack.git
synced 2026-07-22 04:41:23 +00:00
Some checks are pending
ship-ci / ci (push) Waiting to run
The merged-tuning-catalog route moves to lib/routers/tunings.py, verbatim except
@app->@router, CONFIG_DIR->appstate.config_dir, and the two seam substrates it
needed:
- lib/appconfig.py — the pure config.json reader `_load_config` (used by ~11
server sites + future config-reading routers). server.py re-imports it, so
those call sites and any `server._load_config` test reference are unchanged.
- appstate.tuning_providers — the TuningProviderRegistry instance injected by
reference (a stable object mutated in place via register()/unregister()), so
the router reads the same registry plugins populate through plugin_context.
The instance stays defined in server.py, so `server.tuning_providers` still
resolves — zero test retargets.
The tuning constants (DEFAULT_REFERENCE_PITCH, TUNING_PRESET_MIDIS,
freqs_to_midis) already live in lib/tunings.py and are imported directly.
server.py: 6,960 -> 6,917.
Verified: pyflakes clean (bar the pre-existing unused `tuning_name` import);
route table IDENTICAL (143); full pytest 2400 passed (110 tuning/config cases);
eslint 0. Boot smoke: /api/tunings serves referencePitch + tunings + tuningMidis.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
29 lines
1.2 KiB
Python
29 lines
1.2 KiB
Python
"""Reading the app's config.json — the one shared, pure helper (R3).
|
|
|
|
Extracted verbatim from server.py so route modules that need a config value
|
|
(reference pitch, server_config, …) can read it without reaching back into the
|
|
host file. server.py re-imports it, so its ~11 call sites and any
|
|
`server._load_config` test reference keep resolving unchanged.
|
|
"""
|
|
|
|
import json
|
|
|
|
|
|
def _load_config(config_file):
|
|
"""Read and parse config.json. Returns the parsed dict, or None if
|
|
the file is missing, unreadable, invalid JSON, or parses to a
|
|
non-dict (e.g. the file contains `[]` or `42`). Callers treat None
|
|
as "fall back to defaults". Shared between GET and POST so both
|
|
handle bad files the same way."""
|
|
if not config_file.exists():
|
|
return None
|
|
try:
|
|
# Explicit UTF-8: save_settings()/import write config.json as
|
|
# UTF-8 bytes, so the read must not depend on the platform's
|
|
# default text encoding (cp1252 on Windows would mojibake or
|
|
# UnicodeDecodeError on a non-ASCII DLC path).
|
|
parsed = json.loads(config_file.read_text(encoding="utf-8"))
|
|
except Exception:
|
|
return None
|
|
return parsed if isinstance(parsed, dict) else None
|