Skip to content

Commit 4414622

Browse files
author
PyCompiler ARK++
committed
amelioration des loader de config bcasl et acasl
1 parent ef856ba commit 4414622

2 files changed

Lines changed: 86 additions & 23 deletions

File tree

Core/ark_config_loader.py

Lines changed: 79 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,13 @@ def _deep_merge_dict(base: dict, override: dict) -> dict:
145145

146146
def load_ark_config(workspace_dir: str) -> dict[str, Any]:
147147
"""
148-
Charge la configuration ARK depuis ARK_Main_Config.yml
148+
Charge la configuration ARK depuis ARK_Main_Config.yml (YAML ONLY)
149+
150+
Cherche les fichiers dans cet ordre (priorité):
151+
1. ARK_Main_Config.yaml
152+
2. ARK_Main_Config.yml
153+
3. .ARK_Main_Config.yaml
154+
4. .ARK_Main_Config.yml
149155
150156
Args:
151157
workspace_dir: Chemin du workspace
@@ -160,9 +166,23 @@ def load_ark_config(workspace_dir: str) -> dict[str, Any]:
160166
return config
161167

162168
workspace_path = Path(workspace_dir)
163-
config_file = workspace_path / "ARK_Main_Config.yml"
164169

165-
if not config_file.exists():
170+
# Chercher les fichiers YAML dans l'ordre de priorité
171+
# Priorité: ARK_Main_Config.yaml > ARK_Main_Config.yml > .ARK_Main_Config.yaml > .ARK_Main_Config.yml
172+
config_candidates = [
173+
workspace_path / "ARK_Main_Config.yaml",
174+
workspace_path / "ARK_Main_Config.yml",
175+
workspace_path / ".ARK_Main_Config.yaml",
176+
workspace_path / ".ARK_Main_Config.yml",
177+
]
178+
179+
config_file = None
180+
for candidate in config_candidates:
181+
if candidate.exists() and candidate.is_file():
182+
config_file = candidate
183+
break
184+
185+
if not config_file:
166186
return config
167187

168188
try:
@@ -194,7 +214,7 @@ def load_ark_config(workspace_dir: str) -> dict[str, Any]:
194214
return config
195215

196216
except Exception as e:
197-
print(f"Warning: Failed to load ARK_Main_Config.yml: {e}")
217+
print(f"Warning: Failed to load ARK config from {config_file}: {e}")
198218
return config
199219

200220

@@ -399,11 +419,35 @@ def _write_yaml_atomic(path: Path, data: dict) -> bool:
399419

400420

401421
def load_engine_ui_state(workspace_dir: str, engine_id: str) -> dict:
402-
"""Load saved UI state for an engine from ARK_Main_Config.yml.
422+
"""Load saved UI state for an engine from ARK_Main_Config.yml (YAML ONLY).
423+
Cherche les fichiers dans cet ordre:
424+
1. ARK_Main_Config.yaml
425+
2. ARK_Main_Config.yml
426+
3. .ARK_Main_Config.yaml
427+
4. .ARK_Main_Config.yml
428+
403429
Returns a mapping {widgetName: {prop: value}} or {}.
404430
"""
405431
try:
406-
cfg = _read_yaml(Path(workspace_dir) / "ARK_Main_Config.yml") if workspace_dir else {}
432+
if not workspace_dir:
433+
return {}
434+
435+
workspace_path = Path(workspace_dir)
436+
437+
# Chercher les fichiers YAML dans l'ordre de priorité
438+
config_candidates = [
439+
workspace_path / "ARK_Main_Config.yaml",
440+
workspace_path / "ARK_Main_Config.yml",
441+
workspace_path / ".ARK_Main_Config.yaml",
442+
workspace_path / ".ARK_Main_Config.yml",
443+
]
444+
445+
cfg = {}
446+
for candidate in config_candidates:
447+
if candidate.exists() and candidate.is_file():
448+
cfg = _read_yaml(candidate)
449+
break
450+
407451
engines = cfg.get("engines", {}) if isinstance(cfg, dict) else {}
408452
e = engines.get(str(engine_id), {}) if isinstance(engines, dict) else {}
409453
ui = e.get("ui", {}) if isinstance(e, dict) else {}
@@ -414,7 +458,15 @@ def load_engine_ui_state(workspace_dir: str, engine_id: str) -> dict:
414458

415459

416460
def save_engine_ui_state(workspace_dir: str, engine_id: str, updates: dict) -> bool:
417-
"""Save UI state for an engine into ARK_Main_Config.yml.
461+
"""Save UI state for an engine into ARK_Main_Config.yml (YAML ONLY).
462+
Cherche les fichiers existants dans cet ordre:
463+
1. ARK_Main_Config.yaml
464+
2. ARK_Main_Config.yml
465+
3. .ARK_Main_Config.yaml
466+
4. .ARK_Main_Config.yml
467+
468+
Si aucun fichier n'existe, crée ARK_Main_Config.yml par défaut.
469+
418470
- workspace_dir: project workspace path
419471
- engine_id: id string (e.g. 'pyinstaller')
420472
- updates: {widgetName: {prop: value}}
@@ -423,7 +475,26 @@ def save_engine_ui_state(workspace_dir: str, engine_id: str, updates: dict) -> b
423475
if not workspace_dir:
424476
return False
425477
try:
426-
cfg_path = Path(workspace_dir) / "ARK_Main_Config.yml"
478+
workspace_path = Path(workspace_dir)
479+
480+
# Chercher les fichiers YAML existants dans l'ordre de priorité
481+
config_candidates = [
482+
workspace_path / "ARK_Main_Config.yaml",
483+
workspace_path / "ARK_Main_Config.yml",
484+
workspace_path / ".ARK_Main_Config.yaml",
485+
workspace_path / ".ARK_Main_Config.yml",
486+
]
487+
488+
cfg_path = None
489+
for candidate in config_candidates:
490+
if candidate.exists() and candidate.is_file():
491+
cfg_path = candidate
492+
break
493+
494+
# Si aucun fichier n'existe, utiliser ARK_Main_Config.yml par défaut
495+
if cfg_path is None:
496+
cfg_path = workspace_path / "ARK_Main_Config.yml"
497+
427498
cfg = _read_yaml(cfg_path)
428499
if not isinstance(cfg, dict):
429500
cfg = {}

bcasl/Loader.py

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
BCASL loader (simplifié)
1919
2020
Objectifs de simplification:
21-
- Config YAML (bcasl.yaml/yml) ou JSON (bcasl.json/.bcasl.json) - YAML prioritaire
21+
- Config YAML uniquement (bcasl.yaml ou bcasl.yml) - YAML ONLY, NO JSON
2222
- Détection de plugins minimale: packages dans Plugins/ ayant __init__.py
2323
- Ordre: plugin_order depuis config sinon basé sur tags simples, sinon alphabétique
2424
- UI minimale pour activer/désactiver et réordonner (pas d'éditeur brut multi-format)
@@ -142,32 +142,24 @@ def _discover_bcasl_meta(api_dir: Path) -> dict[str, dict[str, Any]]:
142142

143143

144144
def _load_workspace_config(workspace_root: Path) -> dict[str, Any]:
145-
"""Charge bcasl.yaml/yml ou bcasl.json si présent, sinon génère une config par défaut minimale et l'écrit.
145+
"""Charge bcasl.yaml ou bcasl.yml si présent, sinon génère une config par défaut minimale et l'écrit.
146146
147147
Fusionne aussi avec ARK_Main_Config.yml si disponible pour les patterns et options plugins.
148-
Priorité: YAML > JSON
148+
YAML ONLY - JSON files are NOT supported.
149149
"""
150150

151-
def _read_json(p: Path) -> dict[str, Any]:
152-
try:
153-
return json.loads(p.read_text(encoding="utf-8"))
154-
except Exception:
155-
return {}
156-
157151
def _read_yaml(p: Path) -> dict[str, Any]:
158152
try:
159153
return yaml.safe_load(p.read_text(encoding="utf-8")) or {}
160154
except Exception:
161155
return {}
162156

163-
# 1) Fichiers candidats (YAML prioritaire, puis JSON)
164-
for name in ("bcasl.yaml", "bcasl.yml", "bcasl.json", ".bcasl.json"):
157+
# 1) Fichiers candidats (YAML uniquement - NO JSON)
158+
# Priorité: bcasl.yaml > bcasl.yml > .bcasl.yaml > .bcasl.yml
159+
for name in ("bcasl.yaml", "bcasl.yml", ".bcasl.yaml", ".bcasl.yml"):
165160
p = workspace_root / name
166161
if p.exists() and p.is_file():
167-
if name.endswith((".yaml", ".yml")):
168-
data = _read_yaml(p)
169-
else:
170-
data = _read_json(p)
162+
data = _read_yaml(p)
171163

172164
if isinstance(data, dict) and data:
173165
# Fusionner avec ARK_Main_Config.yml si disponible

0 commit comments

Comments
 (0)