From 9149b30b7f0317e14b3d7c1b6d0ee218821b6116 Mon Sep 17 00:00:00 2001 From: Philippe Dpt35 <philippe.dpt35@yahoo.fr> Date: Mon, 8 Oct 2018 16:21:34 +0200 Subject: [PATCH] Ajout des scripts de conversion des fichiers de configuration des handymenus --- handymenuMigration.py | 151 ++++++++++++++++++++++++++++++++++++++++++ pickleToYaml.py | 72 ++++++++++++++++++++ 2 files changed, 223 insertions(+) create mode 100755 handymenuMigration.py create mode 100644 pickleToYaml.py diff --git a/handymenuMigration.py b/handymenuMigration.py new file mode 100755 index 0000000..4b0048f --- /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 0000000..b870475 --- /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 + ) -- GitLab