mirror of
https://github.com/yusufipk/dikte.git
synced 2026-09-11 19:06:11 +00:00
Reworked on top of master. The Groq request itself needed nothing beyond a key, a base URL and a model id, but two providers fit in an if and an else where three do not, and each one was written out four times: in transcribe_target(), in the key rows of the settings window, in save and in load. config.TRANSCRIBERS holds them now, one row each: the name the user sees and the three settings that keep its key, its endpoint and its model. The variable an empty key falls back to is the name of its setting, shouted. The provider box, save, load, `dikte models --provider` and `dikte test-key` all read that table, so a fourth provider is a row and a default rather than a branch in five files. The key field, its Test button and its answer line are built once and the three signals became one that carries which key was asked about. The tests moved into the files of the modules they cover and check what a provider actually changes: that the request goes to api.groq.com with the right model and fields, that the glossary now reaches everything except OpenRouter, that a Groq error says Groq, and that the settings window carries the key and the model there and back. GROQ_API_KEY is cleared for the test run like the other two, so a developer who has one does not send a test to the network. Co-authored-by: Muzaffer Emre <[email protected]>
32 lines
1.2 KiB
Python
32 lines
1.2 KiB
Python
"""Test-wide safety net, applied before anything under test is imported.
|
|
|
|
Every module resolves its paths at import time from the XDG variables, so those
|
|
are redirected here: a test that forgets to ask for a throwaway directory writes
|
|
into a temporary one instead of into the real ~/.config/dikte. The Qt platform
|
|
is pinned for the same reason, so that a machine with no display and a CI runner
|
|
behave the way a desktop does.
|
|
"""
|
|
|
|
import atexit
|
|
import os
|
|
import shutil
|
|
import tempfile
|
|
|
|
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
|
|
|
|
_SANDBOX = tempfile.mkdtemp(prefix="dikte-tests-")
|
|
os.environ["XDG_CONFIG_HOME"] = os.path.join(_SANDBOX, "config")
|
|
os.environ["XDG_DATA_HOME"] = os.path.join(_SANDBOX, "data")
|
|
atexit.register(shutil.rmtree, _SANDBOX, True)
|
|
|
|
# A key sitting in the environment would otherwise reach the code that falls
|
|
# back to it, and the tests for "there is no key" would pass only on a machine
|
|
# without one.
|
|
for _var in ("OPENAI_API_KEY", "GROQ_API_KEY", "OPENROUTER_API_KEY"):
|
|
os.environ.pop(_var, None)
|
|
|
|
# The interface language leaks through module-level state, so the tests fix it
|
|
# rather than inherit whatever the developer's locale says.
|
|
for _var in ("LC_ALL", "LC_MESSAGES", "LANG"):
|
|
os.environ.pop(_var, None)
|