Skip to content

Commit 98bf4d4

Browse files
committed
feat: finaliser la passe globale docs/normalisation et stabilisation
1 parent b49b5f9 commit 98bf4d4

34 files changed

Lines changed: 1386 additions & 1363 deletions

Core/ArkConfigManager.py

Lines changed: 81 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -131,19 +131,19 @@
131131

132132
def _deep_merge_dict(base: dict, override: dict) -> dict:
133133
"""
134-
Recursively merge two dictionaries.
134+
Recursively merge two dictionaries.
135135
136-
Cette fonction permet de combiner une configuration de base avec des
137-
valeurs personnalisées. Les dictionnaires imbriqués sont fusionnés
138-
plutôt que remplacés, permettant une configuration modulaire.
136+
Cette fonction permet de combiner une configuration de base avec des
137+
valeurs personnalisées. Les dictionnaires imbriqués sont fusionnés
138+
plutôt que remplacés, permettant une configuration modulaire.
139139
140-
Args:
141-
base: Dictionnaire de configuration de base
142-
override: Dictionnaire contenant les valeurs à surloadr
140+
Args:
141+
base: Dictionnaire de configuration de base
142+
override: Dictionnaire contenant les valeurs à surloadr
143143
144-
Returns:
145-
Un nouveau dictionnaire avec les valeurs fusionnées
146-
"""
144+
Returns:
145+
Un nouveau dictionnaire avec les valeurs fusionnées
146+
"""
147147
result = base.copy()
148148
for key, value in override.items():
149149
if key in result and isinstance(result[key], dict) and isinstance(value, dict):
@@ -157,25 +157,25 @@ def _deep_merge_dict(base: dict, override: dict) -> dict:
157157

158158
def load_ark_config(workspace_dir: str) -> dict[str, Any]:
159159
"""
160-
Load ARK configuration from a YAML file.
160+
Load ARK configuration from a YAML file.
161161
162-
Cette fonction recherche un file de configuration dans le workspace
163-
selon un ordre de priorité prédéfini et fusionne la configuration
164-
utilisateur avec les valeurs par défaut.
162+
Cette fonction recherche un file de configuration dans le workspace
163+
selon un ordre de priorité prédéfini et fusionne la configuration
164+
utilisateur avec les valeurs par défaut.
165165
166-
Fichiers recherchés (ordre de priorité):
167-
1. ARK_Main_Config.yaml
168-
2. ARK_Main_Config.yml
169-
3. .ARK_Main_Config.yaml
170-
4. .ARK_Main_Config.yml
166+
Fichiers recherchés (ordre de priorité):
167+
1. ARK_Main_Config.yaml
168+
2. ARK_Main_Config.yml
169+
3. .ARK_Main_Config.yaml
170+
4. .ARK_Main_Config.yml
171171
172-
Args:
173-
workspace_dir: Path absolu vers le directory du workspace
172+
Args:
173+
workspace_dir: Path absolu vers le directory du workspace
174174
175-
Returns:
176-
Dictionnaire complet de configuration, incluant les valeurs par défaut
177-
et les personnalisations utilisateur
178-
"""
175+
Returns:
176+
Dictionnaire complet de configuration, incluant les valeurs par défaut
177+
et les personnalisations utilisateur
178+
"""
179179
import copy
180180

181181
# Commencer avec une copie complète de la configuration par défaut
@@ -283,41 +283,41 @@ def load_ark_config(workspace_dir: str) -> dict[str, Any]:
283283

284284
def get_dependency_options(config: dict[str, Any]) -> dict[str, Any]:
285285
"""
286-
Return dependency management options.
286+
Return dependency management options.
287287
288-
Returns:
289-
Dictionnaire des options de dependencies
290-
"""
288+
Returns:
289+
Dictionnaire des options de dependencies
290+
"""
291291
return config.get("dependencies", {})
292292

293293

294294
def get_environment_manager_options(config: dict[str, Any]) -> dict[str, Any]:
295295
"""
296-
Return virtual environment manager options.
296+
Return virtual environment manager options.
297297
298-
Returns:
299-
Dictionary of environment manager options.
300-
"""
298+
Returns:
299+
Dictionary of environment manager options.
300+
"""
301301
return config.get("environment_manager", {})
302302

303303

304304
def get_build_options(config: dict[str, Any]) -> dict[str, Any]:
305305
"""
306-
Return build options.
306+
Return build options.
307307
308-
Returns:
309-
Dictionary of build options.
310-
"""
308+
Returns:
309+
Dictionary of build options.
310+
"""
311311
return config.get("build", {})
312312

313313

314314
def get_entrypoint(config: dict[str, Any]) -> Optional[str]:
315315
"""
316-
Return configured entry point.
316+
Return configured entry point.
317317
318-
Returns:
319-
Path relatif du point d'entrée ou None
320-
"""
318+
Returns:
319+
Path relatif du point d'entrée ou None
320+
"""
321321
build_opts = get_build_options(config)
322322
if not isinstance(build_opts, dict):
323323
return None
@@ -327,15 +327,15 @@ def get_entrypoint(config: dict[str, Any]) -> Optional[str]:
327327

328328
def save_ark_config(workspace_dir: str, config: dict[str, Any]) -> bool:
329329
"""
330-
Save ARK configuration to ARK_Main_Config.yml.
330+
Save ARK configuration to ARK_Main_Config.yml.
331331
332-
Args:
333-
workspace_dir: Path du workspace
334-
config: Configuration complète à enregistrer
332+
Args:
333+
workspace_dir: Path du workspace
334+
config: Configuration complète à enregistrer
335335
336-
Returns:
337-
True si success, False sinon
338-
"""
336+
Returns:
337+
True si success, False sinon
338+
"""
339339
if not workspace_dir or not isinstance(config, dict):
340340
return False
341341
try:
@@ -356,15 +356,15 @@ def save_ark_config(workspace_dir: str, config: dict[str, Any]) -> bool:
356356

357357
def set_entrypoint(workspace_dir: str, entrypoint: Optional[str]) -> bool:
358358
"""
359-
Update entry point in ARK_Main_Config.yml.
359+
Update entry point in ARK_Main_Config.yml.
360360
361-
Args:
362-
workspace_dir: Path du workspace
363-
entrypoint: Path relatif du point d'entrée (ou None pour clearr)
361+
Args:
362+
workspace_dir: Path du workspace
363+
entrypoint: Path relatif du point d'entrée (ou None pour clearr)
364364
365-
Returns:
366-
True si success, False sinon
367-
"""
365+
Returns:
366+
True si success, False sinon
367+
"""
368368
if not workspace_dir:
369369
return False
370370
cfg = load_ark_config(workspace_dir)
@@ -382,12 +382,12 @@ def set_entrypoint(workspace_dir: str, entrypoint: Optional[str]) -> bool:
382382

383383
def _normalize_exclusion_pattern(pattern: str) -> str:
384384
"""
385-
Normalize exclusion pattern for reliable cross-platform matching.
385+
Normalize exclusion pattern for reliable cross-platform matching.
386386
387-
- Convertit les séparateurs Windows en "/"
388-
- Retire le préfixe "./"
389-
- Si le pattern se termine par "/", on l'étend à "/**"
390-
"""
387+
- Convertit les séparateurs Windows en "/"
388+
- Retire le préfixe "./"
389+
- Si le pattern se termine par "/", on l'étend à "/**"
390+
"""
391391
p = str(pattern).strip()
392392
if not p:
393393
return ""
@@ -403,20 +403,20 @@ def should_exclude_file(
403403
file_path: str, workspace_dir: str, exclusion_patterns: Optional[list[str]]
404404
) -> bool:
405405
"""
406-
Determine whether a file must be excluded from compilation.
406+
Determine whether a file must be excluded from compilation.
407407
408-
Compare file path with configured exclusion patterns. The function
409-
normalizes separators and combines `Path.match()` with `fnmatch` to
410-
support glob patterns like `**` in a cross-platform way.
408+
Compare file path with configured exclusion patterns. The function
409+
normalizes separators and combines `Path.match()` with `fnmatch` to
410+
support glob patterns like `**` in a cross-platform way.
411411
412-
Args:
413-
file_path: Absolute file path to check.
414-
workspace_dir: Absolute workspace path.
415-
exclusion_patterns: List of exclusion patterns.
412+
Args:
413+
file_path: Absolute file path to check.
414+
workspace_dir: Absolute workspace path.
415+
exclusion_patterns: List of exclusion patterns.
416416
417-
Returns:
418-
`True` when file must be excluded, otherwise `False`.
419-
"""
417+
Returns:
418+
`True` when file must be excluded, otherwise `False`.
419+
"""
420420
try:
421421
if not file_path or not workspace_dir:
422422
return False
@@ -482,19 +482,19 @@ def should_exclude_file(
482482

483483
def create_default_ark_config(workspace_dir: str) -> bool:
484484
"""
485-
Create ARK_Main_Config.yml with default configuration.
485+
Create ARK_Main_Config.yml with default configuration.
486486
487-
Cette fonction génère un file de configuration complet avec
488-
toutes les options disponibles et leurs valeurs par défaut.
489-
Elle ne remplace pas un file existant.
487+
Cette fonction génère un file de configuration complet avec
488+
toutes les options disponibles et leurs valeurs par défaut.
489+
Elle ne remplace pas un file existant.
490490
491-
Args:
492-
workspace_dir: Path du directory du workspace
491+
Args:
492+
workspace_dir: Path du directory du workspace
493493
494-
Returns:
495-
True si le file a été créé avec success, False s'il existe déjà
496-
ou si une erreur s'est produite
497-
"""
494+
Returns:
495+
True si le file a été créé avec success, False s'il existe déjà
496+
ou si une erreur s'est produite
497+
"""
498498
if not workspace_dir:
499499
return False
500500

Core/Auto_Command_Builder/auto_build.py

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,8 @@ def _load_mapping(
179179
base_dir: str, workspace_dir: Optional[str] = None
180180
) -> tuple[dict[str, dict[str, Optional[str]]], Optional[str]]:
181181
"""Load mapping from environment variable only.
182-
Returns `(mapping, used_path)` or `({}, None)` when undefined.
183-
"""
182+
Returns `(mapping, used_path)` or `({}, None)` when undefined.
183+
"""
184184
# ENV-only mapping loader; legacy locations disabled
185185
try:
186186
env_path = os.environ.get("PYCOMPILER_MAPPING")
@@ -198,9 +198,9 @@ def _load_mapping(
198198

199199
def _parse_requirements(requirements_path: str) -> set[str]:
200200
"""Extract package names from requirements.txt, handling URLs, VCS, and extras.
201-
- Supports lines like 'package==1.2', 'package[extra]', 'name @ https://...', 'git+https://...#egg=name'
202-
- Ignores comments, markers, and includes (-r ...)
203-
"""
201+
- Supports lines like 'package==1.2', 'package[extra]', 'name @ https://...', 'git+https://...#egg=name'
202+
- Ignores comments, markers, and includes (-r ...)
203+
"""
204204
found: set[str] = set()
205205
if not os.path.isfile(requirements_path):
206206
return found
@@ -259,10 +259,10 @@ def _parse_requirements(requirements_path: str) -> set[str]:
259259

260260
def _scan_imports(py_files: list[str], workspace_dir: str) -> set[str]:
261261
"""Analyze .py files and return imported top-level module names.
262-
- Ignore venv/, __pycache__/ et folders cachés
263-
- Ignore files trop volumineux (>1.5 Mo) pour robustesse
264-
- Tolérant aux erreurs d'encodage/syntaxe
265-
"""
262+
- Ignore venv/, __pycache__/ et folders cachés
263+
- Ignore files trop volumineux (>1.5 Mo) pour robustesse
264+
- Tolérant aux erreurs d'encodage/syntaxe
265+
"""
266266
found: set[str] = set()
267267
# Exclure venv interne
268268
venv_dir = os.path.abspath(os.path.join(workspace_dir, "venv"))
@@ -312,9 +312,9 @@ def _match_modules_to_mapping(
312312
modules: set[str], mapping: dict[str, dict[str, Optional[str]]]
313313
) -> tuple[dict[str, dict[str, Optional[str]]], dict[str, str]]:
314314
"""Return two dictionaries:
315-
- `matched`: `{package_key_in_mapping: mapping_entry}`
316-
- `package_to_import_name`: `{package_key_in_mapping: import_name}`
317-
"""
315+
- `matched`: `{package_key_in_mapping: mapping_entry}`
316+
- `package_to_import_name`: `{package_key_in_mapping: import_name}`
317+
"""
318318
# Build lookup index insensible à la casse et aux tirets
319319
index = {_norm(name): name for name in mapping.keys()}
320320

@@ -395,17 +395,17 @@ def _builder(
395395

396396
def register_auto_builder(engine_id: str, builder) -> None:
397397
"""Register a builder function for a given engine_id.
398-
The builder signature must be (matched: dict, pkg_to_import: dict) -> List[str].
399-
"""
398+
The builder signature must be (matched: dict, pkg_to_import: dict) -> List[str].
399+
"""
400400
if not engine_id or not callable(builder):
401401
return
402402
_ENGINE_BUILDERS[engine_id] = builder
403403

404404

405405
def _maybe_load_plugin_auto_builder(engine_id: str) -> None:
406406
"""Optionally load a plugin-provided auto builder for engine_id.
407-
Tries to import '<engine_id>.auto_plugins' without failing app logic.
408-
"""
407+
Tries to import '<engine_id>.auto_plugins' without failing app logic.
408+
"""
409409
try:
410410
mod = importlib.import_module(f"{engine_id}.auto_plugins")
411411
auto_builder = getattr(mod, "AUTO_BUILDER", None)
@@ -580,14 +580,14 @@ def compute_for_all(
580580
self, engine_ids: Optional[list[str]] = None
581581
) -> dict[str, list[str]]:
582582
"""
583-
Compute auto arguments for all engines (plug-and-play).
584-
- engine_ids: liste optionnelle d'identifiants de engines à traiter. Si None,
585-
on detect automatiquement:
586-
* engines enregistrés dans _ENGINE_BUILDERS
587-
* engines avec un mapping engine_plugins/<engine_id>/mapping.json
588-
* engines embarqués utils/engines/<engine_id>/mapping.json
589-
Return un dict: { engine_id: List[str] }.
590-
"""
583+
Compute auto arguments for all engines (plug-and-play).
584+
- engine_ids: liste optionnelle d'identifiants de engines à traiter. Si None,
585+
on detect automatiquement:
586+
* engines enregistrés dans _ENGINE_BUILDERS
587+
* engines avec un mapping engine_plugins/<engine_id>/mapping.json
588+
* engines embarqués utils/engines/<engine_id>/mapping.json
589+
Return un dict: { engine_id: List[str] }.
590+
"""
591591
# Construire la liste ordonnée des moteurs à traiter
592592
ordered: list[str] = []
593593
if engine_ids:
@@ -646,11 +646,11 @@ def _load_engine_package_mapping(
646646
engine_id: str,
647647
) -> tuple[dict[str, dict[str, Optional[str]]], Optional[str]]:
648648
"""Load engine-specific mapping from multiple locations with priorities:
649-
1) `mapping.json` embedded in imported engine package (`engine_id`)
650-
2) `ENGINES/<engine_id>/mapping.json` from project files
651-
3) Optional path from `PYCOMPILER_MAPPING` environment variable (merged)
652-
Returns `(combined_mapping, primary_used_path)`.
653-
"""
649+
1) `mapping.json` embedded in imported engine package (`engine_id`)
650+
2) `ENGINES/<engine_id>/mapping.json` from project files
651+
3) Optional path from `PYCOMPILER_MAPPING` environment variable (merged)
652+
Returns `(combined_mapping, primary_used_path)`.
653+
"""
654654
combined: dict[str, dict[str, Optional[str]]] = {}
655655
used: Optional[str] = None
656656

0 commit comments

Comments
 (0)