- systeme/macos.py : SystemeMacOS (sons afplay, modificateurs Quartz, chemins, verrou d'instance fcntl) implementant le contrat Systeme. - systeme/__init__.py : choisir_systeme() fabrique selon sys.platform, refuse clairement une plateforme inconnue. - core.py : verrou d'instance (fcntl, LOCK_PATH, acquire_single_instance_lock) retire ; import os retire aussi, verifie inutilise ailleurs dans le fichier. - app.py : passe par choisir_systeme().acquerir_verrou_instance(dossier_donnees() + instance.lock) au lieu de core.acquire_single_instance_lock. Seul changement dans ce fichier, nom de fichier inchange. - tests/test_single_instance.py : reoriente vers choisir_systeme(), memes assertions et meme nombre de tests. - tests/test_systeme.py (nouveau) : verrou du test_le_verrou_refuse_une_seconde_prise garde desormais la reference au premier verrou — sans variable, CPython le garbage-collectait entre les deux assert (refcount 0 -> fermeture -> verrou relache), le test passait pour la mauvaise raison. 89 tests verts (84 + 5).
16 lines
527 B
Python
16 lines
527 B
Python
"""Choisit la couche système selon la plateforme."""
|
|
import sys
|
|
|
|
|
|
def choisir_systeme(plateforme=None):
|
|
"""Rend l'implémentation du contrat Systeme pour cette machine.
|
|
|
|
`plateforme` est injectable pour tester les branches absentes de la machine
|
|
de développement.
|
|
"""
|
|
plateforme = plateforme or sys.platform
|
|
if plateforme.startswith("darwin"):
|
|
from systeme.macos import SystemeMacOS
|
|
return SystemeMacOS()
|
|
raise NotImplementedError(f"Plateforme non prise en charge : {plateforme}")
|