diff --git a/handymenuMigration.py b/handymenuMigration.py new file mode 100755 index 0000000000000000000000000000000000000000..4b0048f01f199afab15bb5a4d39bba33691d497c --- /dev/null +++ b/handymenuMigration.py @@ -0,0 +1,151 @@ +#!/usr/bin/python +# -*- coding:Utf-8 -*- + +import sys +import os +import traceback +import pickle +import io +import yaml +from shutil import copyfile + +def coloring(message, ok=False): + color = '\033[91m' + if ok: + color = '\033[92m' + print( + color + + message + + '\033[0m' + ) + +def convert_config(in_path, out_path, skel_path=None, verbose=False): + """ 1. Convertis les fichiers .conv provenant des 4 sessions par défaut + 2. Enregistre le résultat dans /etc/handymenu/handymenu-{lasession}.yaml + 3. Enregistre le résultat dans le squelette de la session soit dans /etc/skel/handymenu.yaml (par exemple pour le prof) + """ + try: + with open(in_path, 'rb') as pkl: + try: + config = pickle.load(pkl) + except: + try: + config = pickle.load(pkl, encoding="utf-8") + except: + coloring( + "Impossible de décoder le fichier %s" % in_path + ) + if verbose: + traceback.print_exc() + return + except: + coloring( + "Impossible d'ouvrir fichier %s" % in_path + ) + if verbose: + traceback.print_exc() + return + try: + with io.open(out_path, 'w', encoding='utf8') as outfile: + try: + yaml.safe_dump( + config, + outfile, + default_flow_style=False, + allow_unicode=True + ) + coloring("%s créé." % out_path, True) + except: + coloring("Impossible d'encoder le fichier %s" % out_path) + if verbose: + traceback.print_exc() + return + except: + coloring( + "Impossible d'enregistrer le fichier %s" % out_path + ) + if verbose: + traceback.print_exc() + if skel_path == None: + return + try: + with io.open(skel_path, 'w', encoding='utf8') as outfile: + try: + yaml.safe_dump( + config, + outfile, + default_flow_style=False, + allow_unicode=True + ) + coloring("%s créé." % skel_path, True) + except: + coloring("Impossible d'encoder le fichier %s" % skel_path) + if verbose: + traceback.print_exc() + return + except: + coloring( + "Impossible d'enregistrer le fichier %s" % skel_path + ) + if verbose: + traceback.print_exc() + +if __name__ == "__main__": + verbose = False + if ( + len(sys.argv) > 1 + and (sys.argv[1] == "-v" or sys.argv[1] == "--verbose") + ): + verbose = True + coloring( + "Etape 1 : Migration des sessions mini, super, maxi et prof", + True + ) + sessions = ['01-mini', '02-super', '03-maxi', 'administrateur'] + for session in sessions: + skel_session = session.replace('01', '').replace('02', '').replace('03', '').replace('administrateur', '') + if session == 'administrateur': + session = 'prof' + convert_config( + "/home/" + session + "/handymenu.conf", + "/etc/handymenu/handymenu-" + session + ".yaml", + "/etc/skel" + skel_session + "/.handymenu.conf", + verbose + ) + + coloring("Etape 2 : Migration des comptes personnalisés", True) + custom_sessions = list( + set(os.listdir("/home/")) + - set(sessions) + - set(['lost+found']) + ) + for custom_session in custom_sessions: + convert_config( + "/home/" + custom_session + "/.handymenu.conf", + "/home/" + custom_session + "/.config/handymenu/conf.yaml", + None, + verbose + ) + icon_path = "/usr/share/handymenu/icons/primtuxmenu_icon-prof.png" + custom_icon_path = "/home/" + custom_session + "/.config/handymenu/menu.png" + try: + copyfile( + icon_path, + custom_icon_path + ) + coloring( + "Copie du fichier {0} dans {1} !".format( + icon_path, + custom_icon_path + ), True + ) + except: + if verbose: + traceback.print_exc() + coloring( + "Impossible de copier le fichier {0} dans {1} !".format( + icon_path, + custom_icon_path + ) + ) + coloring("Migration terminée !", True) diff --git a/pickleToYaml.py b/pickleToYaml.py new file mode 100644 index 0000000000000000000000000000000000000000..b87047525c2ee59cedb11aa97aa0a1231e1525ca --- /dev/null +++ b/pickleToYaml.py @@ -0,0 +1,72 @@ +#!/usr/bin/python +# -*- coding:Utf-8 -*- + +import sys +import traceback +import pickle +import io +import yaml + +def coloring(message, ok=False): + color = '\033[91m' + if ok: + color = '\033[92m' + print( + color + + message + + '\033[0m' + ) + +def convert_config(in_path, out_path): + try: + with open(in_path, 'rb') as pkl: + try: + config = pickle.load(pkl) + except: + try: + config = pickle.load(pkl, encoding="utf-8") + except: + coloring( + "Impossible de décoder le fichier %s" % in_path + ) + traceback.print_exc() + exit(0) + except: + coloring( + "Impossible d'ouvrir fichier %s" % in_path + ) + traceback.print_exc() + exit(0) + try: + with io.open(out_path, 'w', encoding='utf8') as outfile: + try: + yaml.safe_dump( + config, + outfile, + default_flow_style=False, + allow_unicode=True + ) + except: + coloring( + "Impossible d'encoder le fichier %s" % out_path + ) + traceback.print_exc() + exit(0) + except: + coloring( + "Impossible d'enregistrer le fichier %s" % out_path + ) + if verbose: + traceback.print_exc() +if __name__ == "__main__": + if len(sys.argv) < 2: + coloring("Il vous manque un fichier d'entrée") + exit(0) + if len(sys.argv) < 3: + coloring("Il vous manque un fichier de sortie") + exit(0) + convert_config(sys.argv[1], sys.argv[2]) + coloring( + "Votre fichier de configuration a bien été converti !", + True + )