예제 #1
0
 def GetDictConfig(self):
     """ Recupere une copie du dictionnaire du fichier de config """
     data = {}
     try :
         data = UTILS_Json.Lire(self.nomFichier)
     except:
         nom_fichier_bak = self.nomFichier + ".bak"
         if os.path.isfile(nom_fichier_bak):
             print("Recuperation de config.json.bak")
             data = UTILS_Json.Lire(nom_fichier_bak)
     return data
예제 #2
0
    def OnBoutonExporterCodes(self, event):
        wildcard = _(u"Paramétrage fichier réseau Noethys (*.nnc)|*.nnc|Tous les fichiers (*.*)|*.*")
        sp = wx.StandardPaths.Get()
        dlg = wx.FileDialog(
            self, message=_(u"Choisissez un fichier à importer"),
            defaultDir=sp.GetDocumentsDir(),
            defaultFile="",
            wildcard=wildcard,
            style=wx.FD_SAVE
        )
        if dlg.ShowModal() == wx.ID_OK:
            nomFichierCourt = dlg.GetFilename()
            nomFichierLong = dlg.GetPath()
            dlg.Destroy()
            data = {
                "host": self.ctrl_hote.GetValue(),
                "user": self.ctrl_utilisateur.GetValue(),
                "pwd": self.ctrl_motdepasse.GetValue(),
                "port": self.ctrl_port.GetValue(),
            }
            UTILS_Json.Ecrire(nomFichierLong, data=data)
        else:
            dlg.Destroy()
            return

        return
예제 #3
0
    def GetTracks(self):
        """ Récupération des données """
        # Récupération des textes originaux
        dictTextes = {}
        data = UTILS_Json.Lire(Chemins.GetStaticPath("Databases/Textes.dat"),
                               conversion_auto=True)
        for texte, listeFichiers in data.items():
            dictTextes[texte] = listeFichiers

        # Récupération des traductions existantes
        dictTraductionsInitiales, dictTraductionsPerso = self.GetTraductionsExistantes(
        )

        # Regroupement des prestations par label
        listeListeView = []
        for texte, listeFichiers in dictTextes.items():
            traduction_initiale = ""
            traduction_perso = ""
            if texte in dictTraductionsInitiales:
                traduction_initiale = dictTraductionsInitiales[texte]
            if texte in dictTraductionsPerso:
                traduction_perso = dictTraductionsPerso[texte]
            dictDonnees = {
                "texte": texte,
                "traduction_initiale": traduction_initiale,
                "traduction_perso": traduction_perso,
                "listeFichiers": listeFichiers
            }
            track = Track(dictDonnees)
            track.MAJ()
            listeListeView.append(track)
        return listeListeView
예제 #4
0
 def SetDictConfig(self, dictConfig={}):
     """ Remplace le fichier de config présent sur le disque dur par le dict donné """
     UTILS_Json.Ecrire(nom_fichier=self.nomFichier, data=dictConfig)
     # Création d'une copie de sauvegarde du config
     nom_fichier_bak = self.nomFichier + ".bak"
     if not os.path.isfile(nom_fichier_bak) or random.randint(0, 5) == 0:
         shutil.copyfile(self.nomFichier, nom_fichier_bak)
예제 #5
0
 def Enregistrer(self, fichier=""):
     data = {
         "categorie": self.categorie,
         "contenu": self.contenu,
     }
     if six.PY2:
         fichier = fichier.encode("iso-8859-15")
     UTILS_Json.Ecrire(nom_fichier=fichier, data=data)
예제 #6
0
def InfosFichier(fichier=""):
    """ Récupère les infos principales sur un fichier """
    if os.path.isfile(fichier) == False:
        print("Pas de fichier a cet emplacement !")
        return None

    if six.PY2:
        fichier = fichier.encode("iso-8859-15")
    data = UTILS_Json.Lire(fichier)
    return data
예제 #7
0
def Importer(fichier="", dictDonnees={}, IDfond=None, defaut=0):
    """ Importation d'un modèle de document depuis un fichier JSON ou un DICTIONNAIRE """
    DB = GestionDB.DB()

    if fichier != "":
        if six.PY2:
            fichier = fichier.encode("iso-8859-15")
        data = UTILS_Json.Lire(fichier)
    else:
        data = dictDonnees

    # Saisie dans la table documents_modeles
    listeDonnees = [
        ("nom", data["nom"]),
        ("categorie", data["categorie"]),
        ("supprimable", 1),
        ("largeur", data["largeur"]),
        ("hauteur", data["hauteur"]),
        ("observations", ""),
        ("IDfond", IDfond),
        ("defaut", defaut),
    ]
    IDmodele = DB.ReqInsert("documents_modeles", listeDonnees)

    # Saisie dans la table documents_objets
    listeObjets = data["objets"]
    for dictObjet in listeObjets:
        dictObjet["IDmodele"] = IDmodele

        listeDonnees = []
        for champ, donnee in dictObjet.items():
            if champ == "image":
                try:
                    donnee = base64.b64decode(donnee)
                except:
                    pass
                blob = donnee
                donnee = None
            listeDonnees.append((champ, donnee))

        IDobjet = DB.ReqInsert("documents_objets", listeDonnees)

        if blob != None:
            DB.MAJimage(table="documents_objets",
                        key="IDobjet",
                        IDkey=IDobjet,
                        blobImage=blob,
                        nomChampBlob="image")

    DB.Close()
    return IDmodele
예제 #8
0
    def GetTraductionsExistantes(self):
        """ Recherche le fichier de langage par défaut ".lang" puis un éventuel fichier perso ".xlang" """
        if self.code == None: return {}, {}
        dictTraductionsInitiales = {}
        dictTraductionsPerso = {}

        for extension, rep, dictTemp in [
            ("lang", Chemins.GetStaticPath("Lang"), dictTraductionsInitiales),
            ("xlang", UTILS_Fichiers.GetRepLang(), dictTraductionsPerso)
        ]:
            nomFichier = os.path.join(rep, u"%s.%s" % (self.code, extension))
            if os.path.isfile(nomFichier):
                data = UTILS_Json.Lire(nomFichier, conversion_auto=True)
                for key, valeur in data.items():
                    dictTemp[key] = valeur
        return dictTraductionsInitiales, dictTraductionsPerso
예제 #9
0
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, id=-1, style=wx.TAB_TRAVERSAL)

        self.staticbox_staticbox = wx.StaticBox(self, -1, _(u"Interface*"))

        # Thème
        self.liste_labels_theme = []
        self.liste_codes_theme = []
        for code, label in UTILS_Interface.THEMES :
            self.liste_labels_theme.append(label)
            self.liste_codes_theme.append(code)

        self.label_theme = wx.StaticText(self, -1, _(u"Thème :"))
        self.ctrl_theme = wx.Choice(self, -1, choices=self.liste_labels_theme)
        self.ctrl_theme.SetSelection(0)

        # Langue
        self.liste_labels_langue = [u"Français (par défaut)",]
        self.liste_codes_langue = [None,]

        for rep in (Chemins.GetStaticPath("Lang"), UTILS_Fichiers.GetRepLang()) :
            for nomFichier in os.listdir(rep) :
                if nomFichier.endswith("lang") :
                    code, extension = nomFichier.split(".")
                    data = UTILS_Json.Lire(os.path.join(rep, nomFichier), conversion_auto=True)
                    dictInfos = data["###INFOS###"]
                    nom = dictInfos["nom_langue"]
                    code = dictInfos["code_langue"]

                    if code not in self.liste_codes_langue :
                        self.liste_codes_langue.append(code)
                        self.liste_labels_langue.append(nom)
        

        self.label_langue = wx.StaticText(self, -1, _(u"Langue :"))
        self.ctrl_langue = wx.Choice(self, -1, choices=self.liste_labels_langue)
        self.ctrl_langue.SetSelection(0)

        self.__set_properties()
        self.__do_layout()
        
        # Init
        self.Importation() 
예제 #10
0
    def OnBoutonOk(self, event):
        # Récupération des paramètres
        nom_langue = self.ctrl_nom_langue.GetValue()
        code_langue = self.ctrl_code_langue.GetValue()

        # Récupération des traductions perso
        dictTraductions = self.ctrl_traductions.GetDictTraductionsPerso()

        # Création du fichier de traduction perso
        nomFichier = UTILS_Fichiers.GetRepLang(u"%s.xlang" % code_langue)
        data = {}
        data["###INFOS###"] = {
            "nom_langue": nom_langue,
            "code_langue": code_langue
        }
        for texte, traduction in dictTraductions.items():
            data[texte] = traduction
        UTILS_Json.Ecrire(nomFichier, data=data)

        # Fermeture
        self.EndModal(wx.ID_OK)
예제 #11
0
    def MAJ(self):
        self.listeLabels = []
        self.listeDonnees = []

        # Recherche les fichiers de langues existants
        listeCodes = []
        for rep in (Chemins.GetStaticPath("Lang"),
                    UTILS_Fichiers.GetRepLang()):
            for nomFichier in os.listdir(rep):
                if nomFichier.endswith("lang"):
                    code, extension = nomFichier.split(".")
                    data = UTILS_Json.Lire(os.path.join(rep, nomFichier),
                                           conversion_auto=True)

                    # Lecture des caractéristiques
                    dictInfos = data["###INFOS###"]
                    nom = dictInfos["nom_langue"]
                    code = dictInfos["code_langue"]

                    # Lecture des textes
                    listeTextes = []
                    for texte, traduction in data.items():
                        if texte != "###INFOS###":
                            listeTextes.append(texte)

                    label = u"%s (%s)" % (nom, code)
                    if code not in listeCodes:
                        listeCodes.append(code)
                        self.listeLabels.append(label)
                        self.listeDonnees.append({
                            "nom": nom,
                            "code": code,
                            "textes": listeTextes
                        })

        # Remplissage du contrôle
        if len(self.listeLabels) == 0:
            self.Enable(False)
        self.SetItems(self.listeLabels)
예제 #12
0
def InfosFichier(fichier=""):
    """ Récupère les infos principales sur un fichier """
    if six.PY2:
        fichier = fichier.encode("iso-8859-15")
    data = UTILS_Json.Lire(fichier)
    return data
예제 #13
0
def Exporter(IDmodele=None, fichier="", depuisFichierDefaut=False):
    """ Exportation d'un modèle de document """
    # Ouverture Base
    if depuisFichierDefaut == False:
        DB = GestionDB.DB()
    else:
        DB = GestionDB.DB(
            nomFichier=Chemins.GetStaticPath("Databases/Defaut.dat"),
            suffixe=None)

    # Récupération des infos sur le modèle
    req = """SELECT nom, categorie, largeur, hauteur, IDfond, defaut
    FROM documents_modeles
    WHERE IDmodele=%d
    ;""" % IDmodele
    DB.ExecuterReq(req)
    listeDonnees = DB.ResultatReq()
    nom, categorie, largeur, hauteur, IDfond, defaut = listeDonnees[0]

    # Récupération des champs de la table des objets
    listeColonnes = DB.GetListeChamps2("documents_objets")
    listeChamps = []
    for nomChamp, typeChamp in listeColonnes:
        listeChamps.append(nomChamp)

    # Récupération des données à exporter
    req = """SELECT %s
    FROM documents_objets
    WHERE IDmodele=%d
    ;""" % (", ".join(listeChamps), IDmodele)
    DB.ExecuterReq(req)
    listeDonnees = DB.ResultatReq()

    # Fermeture Base
    DB.Close()

    # Mémorisation des objets
    listeObjets = []
    for donnees in listeDonnees:
        dictObjet = {}
        index = 0
        for donnee in donnees:
            nomChamp = listeColonnes[index][0]
            typeChamp = listeColonnes[index][1]

            # Pour les champs BLOB
            if "BLOB" in typeChamp.upper() and donnee != None:
                buffer = six.BytesIO(donnee)
                donnee = buffer.read()

            if nomChamp == "image" and donnee != None:
                donnee = base64.b64encode(donnee)

            # Mémorisation
            if nomChamp not in ("IDmodele", "IDobjet"):
                dictObjet[nomChamp] = donnee

            index += 1
        listeObjets.append(dictObjet)

    # Mémorisation dans un dict
    data = {
        "nom": nom,
        "categorie": categorie,
        "largeur": largeur,
        "hauteur": hauteur,
        "IDfond": IDfond,
        "defaut": defaut,
        "objets": listeObjets,
    }

    # Enregistrement dans un fichier Json
    if fichier != "":
        if six.PY2:
            fichier = fichier.encode("iso-8859-15")
        UTILS_Json.Ecrire(nom_fichier=fichier, data=data)

    return data
예제 #14
0
 def SetDictConfig(self, dictConfig={}):
     """ Remplace le fichier de config présent sur le disque dur par le dict donné """
     UTILS_Json.Ecrire(nom_fichier=self.nomFichier, data=dictConfig)
     # Création d'une copie de sauvegarde du config
     shutil.copyfile(self.nomFichier, self.nomFichier + ".bak")
예제 #15
0
    def OnBoutonImporter(self, event):
        # Récupération de la langue
        dictLangue = self.ctrl_langues.GetCode()
        if dictLangue == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez sélectionner une langue dans la liste !"),
                _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        nom_langue = dictLangue["nom"]
        code_langue = dictLangue["code"]
        textes_langue = dictLangue["textes"]

        # Récupération des fichiers
        fichier_original = self.ctrl_fichier_importer_original.GetValue()
        if fichier_original == "":
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez sélectionner un fichier de textes originaux !"
                  ), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        fichier_traduction = self.ctrl_fichier_importer_traduction.GetValue()
        if fichier_traduction == "":
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez sélectionner un fichier de textes traduits !"),
                _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Lecture des textes
        fichier = open(fichier_original, "r")
        lignesOriginal = fichier.readlines()
        fichier.close()

        fichier = open(fichier_traduction, "r")
        lignesTraduction = fichier.readlines()
        fichier.close()

        if len(lignesOriginal) != len(lignesTraduction):
            dlg = wx.MessageDialog(
                self,
                _(u"Le nombre de lignes des deux fichiers doit être identique !"
                  ), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Demande de confirmation
        dlg = wx.MessageDialog(
            None,
            _(u"Confirmez-vous l'insertion de %d textes traduits dans le fichier '%s' ?"
              ) % (len(lignesOriginal), nom_langue), "Confirmation",
            wx.YES_NO | wx.YES_DEFAULT | wx.ICON_EXCLAMATION)
        if dlg.ShowModal() == wx.ID_NO:
            return False
            dlg.Destroy()
        else:
            dlg.Destroy()

        # Fusion des traductions
        dictTraductions = {}
        indexLigne = 0
        for texte in lignesOriginal:
            if len(texte) > 0:
                dictTraductions[texte[:-1]] = lignesTraduction[indexLigne][:-1]
            indexLigne += 1

        # Création du fichier de traduction perso
        nomFichier = UTILS_Fichiers.GetRepLang(u"%s.xlang" % code_langue)
        data = {}
        data["###INFOS###"] = {
            "nom_langue": nom_langue,
            "code_langue": code_langue
        }
        for texte, traduction in dictTraductions.items():
            data[texte] = traduction
        UTILS_Json.Ecrire(nomFichier, data=data)

        # Confirmation
        dlg = wx.MessageDialog(
            self,
            _(u"L'importation des traductions s'est déroulée avec succès !"
              ), _(u"Succès"), wx.OK | wx.ICON_INFORMATION)
        dlg.ShowModal()
        dlg.Destroy()
예제 #16
0
    def OnBoutonExporter(self, event):
        # Récupération de la langue
        dictLangue = self.ctrl_langues.GetCode()
        if dictLangue == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez sélectionner une langue dans la liste !"),
                _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        nom = dictLangue["nom"]
        textesLangue = dictLangue["textes"]

        # Demande à l'utilisateur le nom de fichier et le répertoire de destination
        nom_fichier = u"Textes_originaux.txt"
        wildcard = u"Fichier Texte (*.txt)|*.xml| Tous les fichiers (*.*)|*.*"
        sp = wx.StandardPaths.Get()
        cheminDefaut = sp.GetDocumentsDir()
        dlg = wx.FileDialog(
            None,
            message=
            _(u"Veuillez sélectionner le répertoire de destination et le nom du fichier"
              ),
            defaultDir=cheminDefaut,
            defaultFile=nom_fichier,
            wildcard=wildcard,
            style=wx.FD_SAVE)
        dlg.SetFilterIndex(0)
        if dlg.ShowModal() == wx.ID_OK:
            cheminFichier = dlg.GetPath()
            dlg.Destroy()
        else:
            dlg.Destroy()
            return

        # Le fichier de destination existe déjà :
        if os.path.isfile(cheminFichier) == True:
            dlg = wx.MessageDialog(
                None,
                _(u"Un fichier portant ce nom existe déjà. \n\nVoulez-vous le remplacer ?"
                  ), "Attention !",
                wx.YES_NO | wx.NO_DEFAULT | wx.ICON_EXCLAMATION)
            if dlg.ShowModal() == wx.ID_NO:
                return False
                dlg.Destroy()
            else:
                dlg.Destroy()

        # Lecture du fichier dat
        data = UTILS_Json.Lire(Chemins.GetStaticPath("Databases/Textes.dat"),
                               conversion_auto=True)
        listeTextes = []
        for texte, listeFichiers in data.items():
            listeTextes.append(texte)
        listeTextes.sort()

        # Enregistrement du fichier texte
        fichier = open(cheminFichier, "w")
        nbreTextes = 0
        for texte in listeTextes:
            if self.check_nontraduits.GetValue() == False or (
                    self.check_nontraduits.GetValue() == True
                    and texte not in textesLangue):
                fichier.write(texte + "\n")
                nbreTextes += 1
        fichier.close()

        # Confirmation fin
        dlg = wx.MessageDialog(
            self,
            _(u"Le fichier a été généré avec succès (%d textes) !") %
            nbreTextes, _(u"Génération"), wx.OK | wx.ICON_INFORMATION)
        dlg.ShowModal()
        dlg.Destroy()