Ejemplo n.º 1
0
    def run(self):
        while self.keepGoing:

            if self.active == True:

                try:

                    if self.parent.last_synchro == None:
                        # Lance une synchro quelques secondes après le démarrage
                        if self.parent.synchro_ouverture == True:
                            self.parent.last_synchro = datetime.datetime.now()
                            time.sleep(3)
                            self.start_synchro = True
                        else:
                            self.parent.last_synchro = datetime.datetime.now()
                    else:
                        # Vérifie si une synchro est nécessaire selon le délai choisi
                        if datetime.datetime.now(
                        ) >= self.GetHeureProchaineSynchro():
                            self.start_synchro = True

                    # Lancement de la procédure de synchronisation
                    if self.start_synchro == True and self.synchro_en_cours == False:

                        self.start_synchro = False

                        # Mémorise l'heure de la dernière synchro
                        self.parent.last_synchro = datetime.datetime.now()

                        # Effectue la synchro
                        self.parent.SetImage("upload")
                        self.synchro_en_cours = True
                        synchro = UTILS_Portail_synchro.Synchro(
                            log=self.parent)
                        synchro.Synchro_totale()
                        self.synchro_en_cours = False
                        self.parent.SetImage("on")
                        self.parent.MAJ_bouton()

                except Exception, err:
                    if not str(err).startswith("The C++ part"):
                        raise

            # Attends 1 seconde
            time.sleep(1)
        self.index = 0

        # Transfert local
        if self.dict_parametres["hebergement_type"] == 0 :
            dest_repertoire = self.dict_parametres["hebergement_local_repertoire"]
            self.TransfertRepertoire(path=source_repertoire, destpath=dest_repertoire, nbre_total=nbreFichiers+5, liste_exclusions=liste_exclusions)

        # Transfert FTP
        if self.dict_parametres["hebergement_type"] == 1 :
            self.TransfertRepertoire(path=source_repertoire, ftp=ftp, nbre_total=nbreFichiers+5, liste_exclusions=liste_exclusions)

        # Transfert SSH
        if self.dict_parametres["hebergement_type"] == 2 :
            self.TransfertRepertoire(path=source_repertoire, ftp=ftp, nbre_total=nbreFichiers+5, liste_exclusions=liste_exclusions)

        synchro = UTILS_Portail_synchro.Synchro(self.dict_parametres, log=self.parent)

        # Envoi du fichier de config
        keepGoing, skip = self.dlgprogress.Update(97, _(u"Installation du fichier de configuration en cours..."))
        synchro.Upload_config(ftp=ftp)

        time.sleep(4)

        # Démarrage du serveur ici si serveur autonome
        if self.server_ctrl != None and self.dict_parametres["serveur_type"] == 0 and self.server_ctrl.GetServerStatus() == False:
            keepGoing, skip = self.dlgprogress.Update(98, _(u"Tentative de lancement du serveur Connecthys..."))
            self.server_ctrl.Demarrer_serveur(event=None)

        # Demande un upgrade de l'application
        keepGoing, skip = self.dlgprogress.Update(99, _(u"Demande la mise à jour de l'application..."))
        synchro.Upgrade_application()
    def Upload(self, source_repertoire=""):
        # Récupération du nombre de fichiers à transférer
        nbreFichiers = GetNbreFichiers(source_repertoire)

        # Initialisation pour transfert local
        if self.dict_parametres["hebergement_type"] == 0:
            keepGoing, skip = self.dlgprogress.Update(
                1, _(u"Préparation de la copie..."))

            # Création du répertoire s'il n'existe pas
            localrep = self.dict_parametres["hebergement_local_repertoire"]
            try:
                os.makedirs(localrep)
            except Exception as e:
                print(e)

            keepGoing, skip = self.dlgprogress.Update(
                2, _(u"La copie va commencer..."))
            ftp = None

        # Initialisation pour transfert FTP
        if self.dict_parametres["hebergement_type"] == 1:
            keepGoing, skip = self.dlgprogress.Update(
                1, _(u"Connexion FTP en cours..."))
            ftp = ftplib.FTP(self.dict_parametres["ftp_serveur"],
                             self.dict_parametres["ftp_utilisateur"],
                             self.dict_parametres["ftp_mdp"])

            # Création du répertoire s'il n'existe pas
            try:
                ftp.mkd(self.dict_parametres["ftp_repertoire"])
            except Exception as e:
                # ignore "directory already exists"
                if not e.args[0].startswith('550'):
                    raise

            ftp.cwd(self.dict_parametres["ftp_repertoire"])
            keepGoing, skip = self.dlgprogress.Update(
                2, _(u"Connexion FTP effectuée..."))

        # Initialisation pour un transfert SSH
        if self.dict_parametres["hebergement_type"] == 2:
            keepGoing, skip = self.dlgprogress.Update(
                1, _(u"Connexion SSH/SFTP en cours..."))

            try:
                ftp = self.server_ctrl.ssh.open_sftp()
            except Exception as err:
                print(err)
                self.parent.EcritLog(_(u"[ERREUR] %s") % err)
                raise

            # Création du répertoire s'il n'existe pas
            try:
                ftp.mkdir("/" + self.dict_parametres["ssh_repertoire"])
            except Exception as e:
                pass
                # ignore "directory already exists"
                #if not e.args[0].startswith('550'):
                #    raise

            ftp.chdir("/" + self.dict_parametres["ssh_repertoire"])
            keepGoing, skip = self.dlgprogress.Update(
                2, _(u"Connexion SSH/SFTP effectuée..."))

        # Recherche le numéro de version de l'application déjà installée
        try:
            # ATTENTION: ne peut fonctionner que si Connecthys est lancé
            if self.dict_parametres["serveur_type"] == 0:
                url = self.dict_parametres["url_connecthys"]
            if self.dict_parametres["serveur_type"] == 1:
                url = self.dict_parametres[
                    "url_connecthys"] + "/" + self.dict_parametres[
                        "serveur_cgi_file"]
            if self.dict_parametres["serveur_type"] == 2:
                url = self.dict_parametres["url_connecthys"]
            url += "/get_version"

            # Récupération des données au format json
            req = Request(url)
            reponse = urlopen(req)
            page = reponse.read()
            data = json.loads(page)
            version_ancienne = data["version_str"]
        except Exception as err:
            print("ERREUR dans recuperation du numero de version :", err)
            version_ancienne = None

        # Recherche des exclusions
        if version_ancienne == None:
            liste_exclusions = []
        else:
            # Importation de la liste des exclusions dans le répertoire source
            fichier = open(os.path.join(source_repertoire, "versions.txt"),
                           "r")
            lignes = fichier.readlines()
            fichier.close()
            liste_versions = LectureFichierVersion(lignes)
            liste_exclusions = GetExclusions(liste_versions=liste_versions,
                                             version_ancienne=version_ancienne)
            print("liste_exclusions=", liste_exclusions)

            # nomFichier = "versions.py"
            # chemin = os.path.join(source_repertoire, "application")
            # sys.path.append(chemin)
            # versions = importlib.import_module(nomFichier.replace(".py", ""))
            # liste_exclusions = GetExclusions(liste_versions=versions.VERSIONS, version_ancienne=version_ancienne)

        # Envoi des données
        self.index = 0

        # Transfert local
        if self.dict_parametres["hebergement_type"] == 0:
            dest_repertoire = self.dict_parametres[
                "hebergement_local_repertoire"]
            self.TransfertRepertoire(path=source_repertoire,
                                     destpath=dest_repertoire,
                                     nbre_total=nbreFichiers + 5,
                                     liste_exclusions=liste_exclusions)

        # Transfert FTP
        if self.dict_parametres["hebergement_type"] == 1:
            self.TransfertRepertoire(path=source_repertoire,
                                     ftp=ftp,
                                     nbre_total=nbreFichiers + 5,
                                     liste_exclusions=liste_exclusions)

        # Transfert SSH
        if self.dict_parametres["hebergement_type"] == 2:
            self.TransfertRepertoire(path=source_repertoire,
                                     ftp=ftp,
                                     nbre_total=nbreFichiers + 5,
                                     liste_exclusions=liste_exclusions)

        synchro = UTILS_Portail_synchro.Synchro(self.dict_parametres,
                                                log=self.parent)

        # Envoi du fichier de config
        keepGoing, skip = self.dlgprogress.Update(
            97, _(u"Installation du fichier de configuration en cours..."))
        synchro.Upload_config(ftp=ftp)

        time.sleep(4)

        # Démarrage du serveur ici si serveur autonome
        if self.server_ctrl != None and self.dict_parametres[
                "serveur_type"] == 0 and self.server_ctrl.GetServerStatus(
                ) == False:
            keepGoing, skip = self.dlgprogress.Update(
                98, _(u"Tentative de lancement du serveur Connecthys..."))
            self.server_ctrl.Demarrer_serveur(event=None)

        # Demande un upgrade de l'application
        keepGoing, skip = self.dlgprogress.Update(
            99, _(u"Demande la mise à jour de l'application..."))
        synchro.Upgrade_application()

        # Fermeture du FTP
        if self.dict_parametres["hebergement_type"] == 1:
            ftp.quit()

        # Fermeture du SFTP
        if self.dict_parametres["hebergement_type"] == 2:
            ftp.close()