Bonjour
Ce titre est… le mieux que j’ai put faire et n’explique sûrement pas grand chose. Je vais donc vous expliquer le but que j’aimerais atteindre et vous expliquer ensuite comment je souhaiterais le faire (pratiquement je ne sais pas, théoriquement oui). Du coup j’aimerais savoir comment on fait dans la pratique et surtout si c’est une bonne idée (si ça ne l’est pas, comment faire autrement).
Je suis en train de développer un logiciel de traitement d’images (aucune importance) qui a une interface. Il m’est demandé de séparer l’interface et la partie traitement d’images (et de données) de l’interface. Le tout étant en python, je ne peux pas "remonter" l’architecture de mon projet, qui est comme suit :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ├── data │ ├── plotting.py │ ├── processing.py │ ├── saving.py │ └── utils.py ├── gui │ ├── controller │ ├── model │ │ ├── gallery.py │ │ ├── image.py │ │ └── plot.py │ └── view ├── image │ ├── analysis.py │ ├── preprocessing.py │ ├── processing.py │ └── utils.py ├── main.py ├── hyph.py ├── junction.py ├── saving.py └── tree.py |
Mon problème est donc, je ne peux pas appeler mes fonctions développés dans les dossiers "image" et "data" depuis mes contrôleurs, ni les scripts (hyph, junction, saving et tree) (qui sont en fait une compilation des fonctions de "image" et "data"). J’aimerais donc avoir un moyen d’executer les fonctions que je souhaite (notamment dans les scripts), c’est à dire quand je clique sur un bouton.
Pour ce faire, je me suis souvenu de ma minuscule expérience de Symfony2 et je me suis rappelé le "routage" et m’en suis inspiré à partir de souvenirs. Dans mon main, je lance mon interface et attend l’action souhaitée. J’appelle donc une fonction ("run" en l’occurence) qui me renvoie l’action ("skeleton" par exemple) et les données dont j’ai besoin, j’execute ensuite le script approprié puis appel la fonction "send" qui me permet de donner le resultat. Voici l’implémentation du main :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | def main(): end = False while not end: todo, data = manager.run() if todo == "end": end = True elif todo == "skeleton": tosend = hyph.skeleton(data) elif todo == "heads": tosend = junction.get_heads(data) elif todo == "junctions": tosend = junction.get_junctions(data) if todo != "end": manager.send(todo, tosend) |
Comme vous le voyez, c’est pas propre du tout, et en plus un peu chiant. Ce que j’aimerais faire, c’est avoir un fichier du type :
1 | "skeleton":{function:"hyph.skeleton", data:"Image originelle"} |
(J’ai utilisé une syntaxe random, qui ressemble un peu aux dictionnaires)
J’aimerais donc savoir si c’est une bonne idée, ensuite (si ça l’est) si le mieux c’est d’avoir un fichier avec un dictionnaire énorme qu’on alimentera au fur et à mesure ou s’il existe d’autres méthodes (genre avec du json ou autre).
J’espère avoir été clair, n’hésitez pas à me demander plus de précision.
Merci d’avance