multisplit
[iramuteq] / checkinstall.py
index 34b3748..7b8e51b 100644 (file)
@@ -1,55 +1,89 @@
-#!/bin/env python
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
-#Copyright (c) 2008 Pierre Ratinaud
+#Copyright (c) 2008-2020 Pierre Ratinaud
+#modification pour python 3 : Laurent Mérat, 6x7 - mai 2020
 #License: GNU/GPL
 
+#------------------------------------
+# import des modules python
+#------------------------------------
 import os
 import sys
 import shutil
-from chemins import ConstructConfigPath, ConstructDicoPath
-from functions import exec_rcode, exec_RCMD
-import wx
-import tempfile
-from ConfigParser import *
 from time import sleep
 import logging
+import tempfile
+
+#------------------------------------
+# import des modules wx
+#------------------------------------
+import wx
+
+#------------------------------------
+# import des fichiers du projet
+#------------------------------------
+from chemins import ConstructConfigPath, ConstructDicoPath
+from functions import exec_rcode, exec_RCMD
+from configparser import *
 
 log = logging.getLogger('iramuteq.checkinstall')
 
+
 def IsNew(self):
     version_glob = self.ConfigGlob.get('DEFAULT', 'version_nb').split('.')
     try :
         version_user = self.pref.get('iramuteq','version_nb').split('.')
     except NoOptionError :
         return True
+    userab = False
+    globab = False
     if version_user :
         version_user[0] = int(version_user[0])
         version_user[1] = int(version_user[1])
         version_glob[0] = int(version_glob[0])
         version_glob[1] = int(version_glob[1])
+        if len(version_user) == 3 :
+            if 'a' in version_user[2] :
+                userab = 'a'
+                version_user[2] = int(version_user[2].replace('a', ''))
+            elif 'b' in version_user[2] :
+                userab = 'b'
+                version_user[2] = int(version_user[2].replace('b', ''))
+            else :
+                version_user[2] = int(version_user[2])
+        if len(version_glob) == 3 :
+            if 'a' in version_glob[2] :
+                globab = 'a'
+                version_glob[2] = int(version_glob[2].replace('a', ''))
+            elif 'b' in version_glob[2] :
+                globab = 'b'
+                version_glob[2] = int(version_glob[2].replace('b', ''))
+            else :
+                version_glob[2] = int(version_glob[2])
         if len(version_user) == len(version_glob) :
             if version_glob > version_user :
                 return True
+            elif version_glob == version_user :
+                if globab == userab :
+                    return False
+                elif globab > userab :
+                    return True
+                else :
+                    return False
             else :
                 return False
-        if len(version_glob) == 2 :
-            if version_glob[:2] >= version_user[:2] :
+        else :
+            if version_glob > version_user :
                 return True
             else :
                 return False
-        elif len(version_glob) == 3 :
-            if version_glob[:2] <= version_user[:2] :
-                return False
-            else :
-                return True
 
 def UpgradeConf(self) :
     log.info('upgrade conf')
     dictuser = self.ConfigPath
     dictappli = ConstructConfigPath(self.AppliPath, user = False)
-    for item,filein in dictuser.iteritems():
-        if not item == u'global' and not item == u'history':
+    for item,filein in dictuser.items():
+        if not item == 'global' and not item == 'history':
             shutil.copyfile(dictappli[item], filein)
     dicoUser = self.DictPath
     dicoAppli = ConstructDicoPath(self.AppliPath)
@@ -66,13 +100,13 @@ def CreateIraDirectory(UserConfigPath,AppliPath):
 def CopyConf(self) :
     DictUser = self.ConfigPath
     DictAppli = ConstructConfigPath(self.AppliPath,user=False)
-    for item, filein in DictUser.iteritems():
-        if not item == u'global' and not item == u'path' and not item == u'preferences' and not item == u'history' :
+    for item, filein in DictUser.items():
+        if not item == 'global' and not item == 'path' and not item == 'preferences' and not item == 'history' :
             shutil.copyfile(DictAppli[item],filein)
-        if item == u'path':
+        if item == 'path':
             if not os.path.exists(filein):
                 shutil.copyfile(DictAppli[item],filein)
-        if item == u'preferences' :
+        if item == 'preferences' :
             if not os.path.exists(filein) :
                 shutil.copyfile(DictAppli[item],filein)
     dicoUser = self.DictPath
@@ -86,7 +120,7 @@ def CheckRPath(PathPath):
         return False
     else :
         return True
-        
+
 def FindRPAthWin32():
     BestPath=False
     progpaths=[]
@@ -101,7 +135,7 @@ def FindRPAthWin32():
         for progpath in progpaths :
             rpath = os.path.join(progpath, "R")
             if os.path.exists(rpath) :
-                for maj in range(2,4) :
+                for maj in range(3,5) :
                     for i in range(0,30):
                         for j in range(0,20):
                             for poss in ['', 'i386', 'x64'] :
@@ -126,7 +160,7 @@ def RLibsAreInstalled(self) :
         return True
 
 def CheckRPackages(self):
-    listdep = ['ca', 'rgl', 'gee', 'ape', 'igraph','proxy', 'wordcloud', 'irlba', 'textometry']
+    listdep = ['ca', 'gee', 'ape', 'igraph','proxy', 'wordcloud', 'irlba', 'textometry', 'sna', 'network', 'intergraph', 'rgl']
     nolib = []
     i=0
     dlg = wx.ProgressDialog("Test des librairies de R", "test en cours...", maximum = len(listdep), parent=self, style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME | wx.PD_CAN_ABORT)
@@ -148,20 +182,20 @@ def CheckRPackages(self):
     dlg.Destroy()
     if nolib != [] :
         txt = '\n'.join(nolib)
-        msg = u"""Les bibliothèques de R suivantes sont manquantes :
+        msg = """Les bibliothèques de R suivantes sont manquantes :
 %s
 
 Sans ces bibliothèques, IRamuteq ne fonctionnera pas.
-    
+
 - Vous pouvez installer ces bibliothèques manuellement :
         Cliquez sur Annuler
         Lancez R
         Tapez install.packages('nom de la bibiothèque')
-        
+
 - ou laisser IRamuteq les installer automatiquement en cliquant sur VALIDER .
         Les bibliothèques seront téléchargées depuis le site miroir de R %s.
         """ % (txt, self.pref.get('iramuteq','rmirror'))
-        dial = wx.MessageDialog(self, msg, u"Installation incomplète", wx.OK | wx.CANCEL | wx.ICON_WARNING)
+        dial = wx.MessageDialog(self, msg, "Installation incomplète", wx.OK | wx.CANCEL | wx.ICON_WARNING)
         dial.CenterOnParent()
         val = dial.ShowModal()
         if val == wx.ID_OK :
@@ -172,16 +206,16 @@ Sans ces bibliothèques, IRamuteq ne fonctionnera pas.
                                        style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME | wx.PD_CAN_ABORT
                                        )
             dlg.Center()
-            dlg.Update(1, u"installation...") 
+            dlg.Update(1, "installation...")
             compt = 0
 
             for bib in nolib :
                 compt += 1
-                dlg.Update(compt, u"installation librairie %s" % bib)
+                dlg.Update(compt, "installation librairie %s" % bib)
                 txt = """
                 userdir <- unlist(strsplit(Sys.getenv("R_LIBS_USER"), .Platform$path.sep))[1]
                 if (!file.exists(userdir)) {
-                    if (!dir.create(userdir, recursive = TRUE)) 
+                    if (!dir.create(userdir, recursive = TRUE))
                         print('pas possible')
                     lib <- userdir
                     .libPaths(c(userdir, .libPaths()))
@@ -197,12 +231,12 @@ Sans ces bibliothèques, IRamuteq ne fonctionnera pas.
                     f.write(txt)
                 test = exec_rcode(self.RPath, tmpscript, wait = False)
                 while test.poll() == None :
-                    dlg.Pulse(u"installation librairie %s" % bib)
+                    dlg.Pulse("installation librairie %s" % bib)
                     sleep(0.2)
             dlg.Update(len(nolib) + 1, 'fin')
             dlg.Destroy()
         dial.Destroy()
-    if nolib == [] : 
+    if nolib == [] :
         self.pref.set('iramuteq', 'rlibs', True)
         with open(self.ConfigPath['preferences'], 'w') as f :
             self.pref.write(f)