Co-Authored-By: Quentin Torroba <quentin.torroba@mistral.ai> Co-Authored-By: Laure Hugo <laure.hugo@mistral.ai> Co-Authored-By: Benjamin Trom <benjamin.trom@mistral.ai> Co-Authored-By: Mathias Gesbert <mathias.gesbert@ext.mistral.ai> Co-Authored-By: Michel Thomazo <michel.thomazo@mistral.ai> Co-Authored-By: Clément Drouin <clement.drouin@mistral.ai> Co-Authored-By: Vincent Guilloux <vincent.guilloux@mistral.ai> Co-Authored-By: Valentin Berard <val@mistral.ai> Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
from __future__ import annotations
|
|
|
|
from contextlib import contextmanager
|
|
from pathlib import Path
|
|
import tomllib
|
|
|
|
import tomli_w
|
|
|
|
from vibe.core import config
|
|
from vibe.core.config import VibeConfig
|
|
|
|
|
|
def _restore_dump_config(config_file: Path):
|
|
original_dump_config = VibeConfig.dump_config
|
|
|
|
def real_dump_config(cls, config_dict: dict) -> None:
|
|
try:
|
|
with config_file.open("wb") as f:
|
|
tomli_w.dump(config_dict, f)
|
|
except OSError:
|
|
config_file.write_text(
|
|
"\n".join(
|
|
f"{k} = {v!r}" for k, v in config_dict.items() if v is not None
|
|
),
|
|
encoding="utf-8",
|
|
)
|
|
|
|
VibeConfig.dump_config = classmethod(real_dump_config) # type: ignore[assignment]
|
|
return original_dump_config
|
|
|
|
|
|
@contextmanager
|
|
def _migrate_config_file(tmp_path: Path, content: str):
|
|
config_file = tmp_path / "config.toml"
|
|
config_file.write_text(content, encoding="utf-8")
|
|
|
|
original_config_file = config.CONFIG_FILE
|
|
original_dump_config = _restore_dump_config(config_file)
|
|
|
|
try:
|
|
config.CONFIG_FILE = config_file
|
|
VibeConfig._migrate()
|
|
yield config_file
|
|
finally:
|
|
config.CONFIG_FILE = original_config_file
|
|
VibeConfig.dump_config = original_dump_config
|
|
|
|
|
|
def _load_migrated_config(config_file: Path) -> dict:
|
|
with config_file.open("rb") as f:
|
|
return tomllib.load(f)
|