PropelUtility : maintenir et exporter un schéma Propel avec MySQLWorkbench
J’ai toujours aimé les solutions graphiques pour le design du modèle des applications PHP que je développe. Que ce soit avec DBDesigner pour symfony 1.0, ou avec MySQLWorkbench pour symfony > 1.2 .
Etant maintenant fixé sur l’ORM Propel j’ai pris le parti de développer un outil permettant de gérer l’intégralité des paramètres du schéma Propel avec précision et de les exporter au format xml: PropelUtility
PropelUtility s’appuie sur l’outil de modélisation graphique MySQLWorkbench et lui ajoute simplement une interface de gestion et d’export de tous les paramètres propres à Propel.
PropelUtility est pérenne puisque MySQLWorkbench est maintenu par l’équipe MySQL elle même (DBDesigner est déprécié) et qu’il sera compatible Propel 2 !
J’ajoute que c’est mon premier projet Python … Alors n’hésitez pas à me conseiller si vous êtes un habitué: je ne demande qu’à améliorer PropelUtility
qu’est ce que PropelUtility ?
- PropelUtility permet de concevoir et d’exporter au format xml un schéma Propel à partir d’un schéma MySQLWorkbench existant (fichier *.mwb)
- PropelUtility permet de gérer tous les éléments de schéma propres à Propel non gérés par MySQLWorkbench
- PropelUtility est livré sous forme d’un plugin MySQLWorkbench écrit en Python. En cela il marche sous Windows, Linux et Mac OS
Ce que PropelUtility n’est pas …
- PropelUtility ne permet pas de modifier les informations du schéma modifiables avec MySQLWorkbench
- PropelUtility ne prévoit aucune conversion ou sortie en YAML (vous pouvez par exemple utiliser la commande symfony propel:schema-to-yml)
PropelUtility
Installation
via la ligne de commande
ou dézippez l’archive téléchargée à partir de la page github de PropelUtility
EDIT!!
Cette partie de l’installation a été simplifiée par une version en un seul fichier
La version en plusieurs fichiers est maintenue sous le nom de PropelUtilityDev pour faciliter les contributions
Copiez ensuite la totalité du projet (i.e. propel_utility_grt.py ainsi que le dossier PropelUtility et son contenu) dans l’un des répertoires « modules » de MySQLWorkbench.
Ce peut être un répertoire de l’installation de MySQLWorkbench, c’est à dire quelque chose comme:
- C:\Program Files\mysql-workbench\modules
- ou /usr/lib/mysql-workbench/modules sous linux
ou mieux un répertoire de l’utilisateur, typiquement:
- C:\Users\username\AppData\Roaming\MySQL\Workbench\modules
- /home/username/.mysql/workbench/modules sous linux
Une fois copié …
allez dans « Scripting » -> « Install Plugin / Module … » naviguer jusqu’à l’emplacement du fichier propel_utility_grt.py qui vient d’être copié dézippé ou gité, sélectionnez le, puis redémarrez MySQLWorkbench.
PropelUtility ajoute deux nouvelles entrées à MySQLWorkbench dans « Plugins » -> « Catalog » :
- « Propel Utility »
- « Propel Erase All Data »
N.B. ce n’est pas exactement la procédure préconsiée par MySQLWorkbench pour l’installation d’un plugin. Le fait que PropelUtility soit découpé en plusieurs fichiers oblige à copier l’arborescence du projet dans le répertoire « modules » manuellement avant l’installation dans MySQLWrokbench.
utilisation
Toutes les modifications effectuées sur les informations Propel avec PropelUtility ne seront validées qu’après un clique sur le bouton OK.
En cas de clique sur CANCEL, les modifications seront perdues.
Pour enregistrer définitivement les modifications des informations Propel il ne faut pas oublier d’enregistrer le document .mwb lui même
Il y a trois types de champs:
- Les champs non modifiables : ils ont un caractère informatif et peuvent être modifiés directement via MySQLWorkbench, mais pas via PropelUtility
- Les champs modifiables : en cliquant une fois sur l’un de ses champs il est possible de modifier sa valeur par une saisie clavier
- Les champs modifiables avec liste de choix : non seulement en cliquant une fois sur l’un de ses champs il est possible de modifier sa valeur par une saisie clavier, mais il est également possible de faire apparaitre une liste de choix en double cliquant. Il suffit alors de choisir une valeur et ensuite de cliquer sur le bouton « select this value ».
N.B. Les listes de choix ne sont pas disponibles sous linux. (l’objet mforms.TreeView permettant de gérer des tableaux ne supportent pas nativement les listes de choix et l’astuce permettant de les déclencher au double clique semblent ne fonctionner que sous Windows :/)
onglets
- Database permet de gérer les attributs de la balise xml <database />
- Tables permet de gérer les attributs de la balise xml <table />
- Columns permet de gérer les attributs de la balise xml <column />
- Foreign Keys permet de gérer les attributs de la balise xml <foreign-key />
- Indices permet de gérer les attributs des balises xml <index /> et <unique/>
- Behaviors permet de gérer les Behaviors associés chaque table (balsie <behavior />) ainsi que leurs paramètres (balise <parameter />)
- Export permet d’exporter les données manipulées via les onglets sus-citées selon la logique suivante: les attributs obligatoires sont systématiquement exportés, alors que seuls les attributs optionnels possédant une valeur différente de leur valeur par défaut le sont.
personnalisation
Vous pouvez choisir les champs affichés, ou modifier l’ordre d’affichage, ou encore modifier la taille des colonnes des champs pour chaque onglet en allant modifier la liste « fields_list » de la classe associée à l’onglet (PropelTabDatabase.py pour l’onglet Database par exemple)
De la même manière il est possible d’ajouter ses propres behaviors en complétant les listes PropelBehavior.behaviors et PropelBehavior.fields['name']['items']
Propel Erase all data
Cette entrée permet de réintialiser toutes les données Propel gérées par PropelUtility et seulement celles ci (les informations géres par MySQLWOrkbench ne seront pas affectées)
TODO
- ajouter une possibilité d’export individuel pour chaque indice (<index /> ou <unique />)
- ajouter le support pour la « single inheritance »
- ajouter un onglet « Settings » pour chosir les colonnes à afficher dans chaque onglet
ajouter un onglet « Import » pour créer un schéma MySQLWorkbench (fichier *.mwb) à partir d’un schema.xml Propel existantinutile avec les fonctionnalités d’importation d’un schéma de base de données à partir d’un base MySQL existante



