installation textometrieR
authorPierre <ratinaud@univ-tlse2.fr>
Sun, 6 Jan 2013 14:11:36 +0000 (15:11 +0100)
committerPierre <ratinaud@univ-tlse2.fr>
Sun, 6 Jan 2013 14:11:36 +0000 (15:11 +0100)
analysetxt.py
checkinstall.py
configuration/.corpus.cfg.swp [deleted file]
configuration/path.cfg
corpusNG.py
functions.py
iramuteq.py
profile_segment.py
textsimi.py
tree.py

index afaf355..54f0c5c 100644 (file)
@@ -52,6 +52,7 @@ class AnalyseText :
         self.dlg = dlg
         self.dialok = True
         self.parametres = parametres
+        self.val = False
         self.pathout = PathOut(corpus.parametres['originalpath'], analyse_type = parametres['type'], dirout = corpus.parametres['pathout'])
         self.parametres = self.make_config(parametres)
         log.info(self.pathout.dirout)
@@ -125,7 +126,7 @@ class AnalyseText :
                 sleep(0.2)
             else :
                 sleep(0.2)
-        check_Rresult(self.ira, pid)
+        return check_Rresult(self.ira, pid)
 
 
 
index c379287..38640ed 100644 (file)
@@ -8,11 +8,14 @@ import os
 import sys
 import shutil
 from chemins import ConstructConfigPath
-from functions import exec_rcode
+from functions import exec_rcode, exec_RCMD
 import wx
 import tempfile
 from ConfigParser import *
 from time import sleep
+import logging
+
+log = logging.getLogger('iramuteq.checkinstall')
 
 def IsNew(self):
     version_glob = self.ConfigGlob.get('DEFAULT', 'version_nb').split('.')
@@ -100,18 +103,29 @@ def FindRPathNix():
         BestPath='/usr/local/bin/R'
     return BestPath
 
-def CheckRapp(Path):
-    return os.path.exists(Path)
-
 def RLibsAreInstalled(self) :
     rlibs = self.pref.get('iramuteq', 'rlibs')
-    if rlibs == 'false' :
+    if rlibs == 'false' or rlibs == 'False' :
         return False
     else :
         return True
 
+def install_textometrieR(self) :
+    dlg = wx.ProgressDialog("Installation de textometrieR",
+    "Veuillez patientez...",
+    maximum= 2,
+    parent=self,
+    style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME | wx.PD_CAN_ABORT
+    )
+    dlg.Center()
+    dlg.Update(1, 'Installation de textometrieR')
+    path = os.path.join(self.AppliPath, 'Rlib', 'textometrieR')
+    exec_RCMD(self.RPath, path)
+    dlg.Update(2,'fini')
+    dlg.Destroy()
+
 def CheckRPackages(self):
-    listdep = ['ca', 'gee', 'ape', 'igraph','proxy', 'Matrix','wordcloud']
+    listdep = ['ca', 'gee', 'ape', 'igraph','proxy', 'wordcloud', 'textometrieR']
     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)
@@ -121,14 +135,20 @@ def CheckRPackages(self):
         dlg.Update(i, "test de %s" % bib)
         txt = """library("%s")""" % bib
         tmpscript = tempfile.mktemp(dir=self.TEMPDIR)
-        file = open(tmpscript, 'w')
-        file.write(txt)
-        file.close()
+        with open(tmpscript, 'w') as f :
+            f.write(txt)
         test = exec_rcode(self.RPath, tmpscript, wait = True)
         if test :
+            log.info('packages %s : NOT INSTALLED' % bib)
             nolib.append(bib)
+        else :
+            log.info('packages %s : OK' % bib)
     dlg.Update(len(listdep),'fini')
     dlg.Destroy()
+    install_textoR = False
+    if 'textometrieR' in nolib :
+         nolib.pop(nolib.index('textometrieR'))
+         install_textoR = True
     if nolib != [] :
         txt = '\n'.join(nolib)
         msg = u"""Les bibliothèques de R suivantes sont manquantes :
@@ -142,8 +162,8 @@ Sans ces bibliothèques, IRamuteq ne fonctionnera pas.
         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 du CICT de Toulouse.
-        """ % txt
+        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.NO_DEFAULT | wx.ICON_WARNING)
         dial.CenterOnParent()
         val = dial.ShowModal()
@@ -157,6 +177,7 @@ Sans ces bibliothèques, IRamuteq ne fonctionnera pas.
             dlg.Center()
             dlg.Update(1, u"installation...") 
             compt = 0
+
             for bib in nolib :
                 compt += 1
                 dlg.Update(compt, u"installation librairie %s" % bib)
@@ -172,22 +193,21 @@ Sans ces bibliothèques, IRamuteq ne fonctionnera pas.
                 .libPaths
                 """
                 txt += """
-                install.packages("%s", repos = 'http://cran.cict.fr')
-                """ % bib
+                install.packages("%s", repos = "%s")
+                """ % (bib, self.pref.get('iramuteq','rmirror'))
                 tmpscript = tempfile.mktemp(dir=self.TEMPDIR)
-                file = open(tmpscript, 'w')
-                file.write(txt)
-                file.close()
+                with open(tmpscript, 'w') as f :
+                    f.write(txt)
                 test = exec_rcode(self.RPath, tmpscript, wait = False)
                 while test.poll() == None :
                     dlg.Pulse(u"installation librairie %s" % bib)
                     sleep(0.2)
             dlg.Update(len(nolib) + 1, 'fin')
             dlg.Destroy()
-        else :
-            pass
         dial.Destroy()
-    else :
+    if install_textoR :
+         install_textometrieR(self)
+    if nolib == [] and not install_textoR :
         self.pref.set('iramuteq', 'rlibs', True)
         with open(self.ConfigPath['preferences'], 'w') as f :
             self.pref.write(f)
diff --git a/configuration/.corpus.cfg.swp b/configuration/.corpus.cfg.swp
deleted file mode 100644 (file)
index 93eacb7..0000000
Binary files a/configuration/.corpus.cfg.swp and /dev/null differ
index ec92226..46a7f61 100644 (file)
@@ -1,4 +1,3 @@
 [PATHS]\r
 rpath = \r
 lastpath = \r
-rapp = /Applications/R.app/Contents/MacOS/R\r
index 50f90e7..cbaefa3 100644 (file)
@@ -526,7 +526,8 @@ class Corpus :
                         lim -= 1
             else :
                 stop = nbmax - 1
-        log.info('nb actives = %i - eff min = %i ' % (stop, lim))
+                lim = effs[stop]
+        log.info('nb actives = %i - eff min = %i ' % (stop + 1, lim))
         return [val[1] for val in allactives[0:stop + 1]], lim
 
     def make_and_write_profile(self, actives, ucecl, fileout) :
index aee5d9b..8abda95 100644 (file)
@@ -388,23 +388,14 @@ def BugReport(parent, error = None):
     txt += exc
 
     dial = BugDialog(parent)
-    #for line in formatExceptionInfo():
-    #    if type(line) == type([]):
-    #        for don in line:
-    #            txt += don.replace('    ', ' ')
-    #    else:
-    #        txt += line + '\n'
     if 'Rerror' in dir(parent) :
         txt += parent.Rerror
         parent.Rerror = ''
-    #if error is not None :
-    #    txt += '\n%s\n' %error
-    print formatExceptionInfo()
-    log.error(txt)
+    log.info(txt)
     dial.text_ctrl_1.write(txt)
     dial.CenterOnParent()
     dial.ShowModal()
-    #raise Exception('Bug')
+    dial.Destroy()
     
 def PlaySound(parent):
     if parent.pref.getboolean('iramuteq', 'sound') :
@@ -462,6 +453,12 @@ def ReadList(filein, encoding = sys.getdefaultencoding()):
         i += 1
     return dict, first
 
+def exec_RCMD(rpath, command) :
+    log.info('R CMD INSTALL %s' % command)
+    rpath = rpath.replace('\\','\\\\')
+    error = call(["%s" % rpath, 'CMD', 'INSTALL', "%s" % command])
+    return error
+
 def exec_rcode(rpath, rcode, wait = True, graph = False):
     log.info("R Script : %s" % rcode)
     needX11 = False
@@ -518,16 +515,18 @@ def check_Rresult(parent, pid) :
             if error[1] is None :
                 error[1] = 'None'
             parent.Rerror = '\n'.join([str(pid.returncode), '\n'.join(error)])
-            try :
-                raise Exception('\n'.join(u'Erreur R', '\n'.join(error[1:])))
-            except :
-                BugReport(parent)
+            #try :
+            raise Exception('\n'.join([u'Erreur R', '\n'.join(error[1:])]))
+            return False
+            #except :
+            #    BugReport(parent)
     else :
         if pid != 0 :
-            try :
-                raise Exception(u'Erreur R')
-            except :
-                BugReport(parent)
+            #try :
+            raise Exception(u'Erreur R')
+            return False
+            #except :
+            #    BugReport(parent)
 
 def print_liste(filename,liste):
     with open(filename,'w') as f :
index 91cf8f0..a5d5d9a 100644 (file)
@@ -61,7 +61,7 @@ from textcheckcorpus import checkcorpus
 from openanalyse import OpenAnalyse
 from corpusNG import BuildFromAlceste, Builder
 from sheet import MySheet
-from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRapp, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled
+from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled
 from chemins import ConstructRscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut
 from parse_factiva_xml import ImportFactiva
 from tree import LeftTree
@@ -127,6 +127,13 @@ fh.setFormatter(formatter)
 log.addHandler(ch)
 log.addHandler(fh)
 log.setLevel(logging.INFO)
+
+
+class writer(object):
+    def write(self, data):
+        if data.strip() != '' :
+            log.info('BUG : %s' % data)
+sys.stderr = writer()
 ConfigPath = ConstructConfigPath(UserConfigPath)
 #####################################################################
 
@@ -419,17 +426,13 @@ class IraFrame(wx.Frame):
 Le chemin de l'executable de R n'a pas été trouvé.
 Si R n'est pas installé, vous devez l'installer (http://www.r-project.org/).
 Si R n'est pas installé dans le répertoire par défaut
-(C:\Program Files\R\R-2.x.x\R.exe sous windows ou /usr/bin/R sous linux ou Mac Os X)
+(souvent C:\Program Files\R\R-2.x.x\R.exe sous windows ou /usr/bin/R sous linux ou Mac Os X)
 vous devez signaler le chemin de l'éxecutable de R dans les préférences.""" 
             dlg = wx.MessageDialog(self, msg, u"Problème de configuration", wx.OK | wx.NO_DEFAULT | wx.ICON_WARNING)
             dlg.CenterOnParent()
             if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
                  evt.Veto()
-            else :
-                print 'ok'
-        if sys.platform == 'darwin':
-            self.Rapp = self.PathPath.get('PATHS', 'rapp')
-            RappOk = CheckRapp(self.Rapp)
+            dlg.Destroy()
         self.DataPop = False
         self.DataTxt = False
         self.Text = ''
@@ -814,18 +817,22 @@ Voulez-vous fermer quand même ?"""
             BugReport(self)
 
     def OnSimiTxt(self, evt, corpus = None) :
-            print 'PLUS DE BUG SUR SIMITXT'
-        #try :
+        #    print 'PLUS DE BUG SUR SIMITXT'
+        try :
             #self.Text = SimiTxt(self)
+            if corpus is None :
+                corpus = self.tree.getcorpus()            
             self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = progressbar(self, 3))
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
-        #except :
-        #    BugReport(self)
+        except :
+            BugReport(self)
     
     def OnWordCloud(self, evt, corpus = None) :
         #    print 'PLUS DE BUG SUR WORDCLOUD'
         try :
+            if corpus is None :
+                corpus = self.tree.getcorpus()            
             self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = progressbar(self, 3))
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
@@ -848,6 +855,8 @@ Voulez-vous fermer quand même ?"""
     def OnTextStat(self, event, corpus = None):
             print 'PAS DE BUG SUR TEXT STAT'
         #try:
+            if corpus is None :
+                corpus = self.tree.getcorpus()
             self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = progressbar(self, 7))
             
             if self.Text.val == wx.ID_OK :
@@ -859,6 +868,8 @@ Voulez-vous fermer quand même ?"""
         #try:
             #self.Text = AsLexico(self)
             print('ATTENTION : PLUS DE BUG SUR LEXICO')
+            if corpus is None :
+                corpus = self.tree.getcorpus()
             self.Text = Lexico(self, corpus, parametres = {'type' : 'spec'}, dlg = progressbar(self, 3))
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
@@ -879,16 +890,16 @@ Voulez-vous fermer quand même ?"""
             BugReport(self)
 
     def OnTextAlceste(self, event, corpus = None):
-        #try:
-            print('ATTENTION : PLUS DE BUG SUR ALCESTE')
+        try:
+            #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
             #RunAnalyse(self, corpus, Alceste, OptAlceste)
+            if corpus is None :
+                corpus = self.tree.getcorpus()            
             self.Text = Alceste(self, corpus, parametres = {'type': 'alceste'}, dlg = progressbar(self,6))
-            #self.history.addtab(self.Text.parametres)
-            #OpenAnalyse(self, self.Text.parametres['ira'])
             if self.Text.val == wx.ID_OK:
                 PlaySound(self)
-        #except:
-        #    BugReport(self)
+        except:
+            BugReport(self)
 
     def OnPamSimple(self, event):
         try:
index 639b660..3973d84 100644 (file)
@@ -64,7 +64,7 @@ class ProfileSegment() :
     def do_layout(self) :
         SelectTab = self.parent.nb.GetSelection()
         page = self.parent.nb.GetPage(SelectTab).TabChdSim
-        prof_seg = ReadProfileAsDico(self, self.dictpathout['prof_seg'], True, self.parent.syscoding)
+        prof_seg = ReadProfileAsDico(self.dictpathout['prof_seg'], True, self.parent.syscoding)
         prof_seg_nb = aui.AuiNotebook(self.parent, -1, wx.DefaultPosition)
         for i in range(0,len(self.corpus.lc)) :
             ntab = ProfListctrlPanel(self.parent, self, prof_seg[str(i + 1)], False, i + 1)
@@ -139,7 +139,7 @@ class ProfilType() :
         page = self.parent.nb.GetPage(SelectTab).TabChdSim
         prof_seg_nb = aui.AuiNotebook(self.parent, -1, wx.DefaultPosition)
         if alceste :
-            prof_seg = ReadProfileAsDico(self, self.outprof, True)
+            prof_seg = ReadProfileAsDico(self.outprof, True)
             for i in range(0,len(self.corpus.lc)) :
                 ntab = ProfListctrlPanel(self.parent, self, prof_seg[str(i + 1)], False, i + 1)
                 prof_seg_nb.AddPage(ntab, 'classe %i' % (i + 1))
index 9a68ac3..a5b8c7b 100644 (file)
@@ -48,7 +48,8 @@ class SimiTxt(AnalyseText):
             self.makefiles()
             script = PrintSimiScript(self)
             script.make_script()
-            self.doR(script.scriptout)
+            if not self.doR(script.scriptout) :
+                return False
             if self.parametres['type_graph'] == 1:
                 if os.path.exists(self.pathout['liste_graph']):
                     graph_simi = read_list_file(self.pathout['liste_graph'])
diff --git a/tree.py b/tree.py
index 9d69efc..ef324e0 100644 (file)
--- a/tree.py
+++ b/tree.py
@@ -303,6 +303,7 @@ class LeftTree(CT.CustomTreeCtrl):
         itemtype = self.GetItemType(item)
         text = self.GetItemText(item)
         pydata = self.GetPyData(item)
+        self.pydata = pydata
         
         self.current = item
         self.itemdict = {"ishtml": ishtml, "back": back, "fore": fore, "isbold": isbold,
@@ -377,29 +378,36 @@ class LeftTree(CT.CustomTreeCtrl):
         self.PopupMenu(menu)
         menu.Destroy()
 
-    def getcorpus(self, itemdict):
-        if itemdict['pydata']['uuid'] in self.parent.history.openedcorpus :
-            return copycorpus(self.parent.history.openedcorpus[itemdict['pydata']['uuid']])
+    def getcorpus(self):
+        if self.pydata['uuid'] in self.parent.history.openedcorpus :
+            return copycorpus(self.parent.history.openedcorpus[self.pydata['uuid']])
+        elif 'corpus_name' in self.pydata :
+            return Corpus(self.parent, parametres = DoConf(self.pydata['ira']).getoptions('corpus'), read = True)
         else :
-            return Corpus(self.parent, parametres = DoConf(itemdict['pydata']['ira']).getoptions('corpus'), read = True)
+            cuuid = self.pydata['corpus']
+            if cuuid in self.parent.history.openedcorpus :
+                return copycorpus(self.parent.history.openedcorpus[cuuid])
+            else :
+                irapath = self.parent.history.corpus[cuuid]['ira']
+                return Corpus(self.parent, parametres = DoConf(irapath).getoptions('corpus'), read = True)
 
     def OnSpec(self, evt) :
-        self.parent.OnTextSpec(evt, self.getcorpus(self.itemdict))
+        self.parent.OnTextSpec(evt, self.getcorpus())
 
     def OnStat(self, evt) :
-        self.parent.OnTextStat(evt, self.getcorpus(self.itemdict))
+        self.parent.OnTextStat(evt, self.getcorpus())
         
     def OnAlceste(self, evt) :
-        self.parent.OnTextAlceste(evt, self.getcorpus(self.itemdict))
+        self.parent.OnTextAlceste(evt, self.getcorpus())
 
     def OnPam(self, evt) :
         print 'rien'
 
     def OnSimiTxt(self, evt) :
-        self.parent.OnSimiTxt(evt, self.getcorpus(self.itemdict))
+        self.parent.OnSimiTxt(evt, self.getcorpus())
 
     def OnWordCloud(self, evt) :
-        self.parent.OnWordCloud(evt, self.getcorpus(self.itemdict))
+        self.parent.OnWordCloud(evt, self.getcorpus())
 
     def OnProfSR(self, evt) :
         ProfileSegment(self.parent, self.page.dictpathout, self.page.parametres, self.page.corpus)
@@ -787,6 +795,7 @@ class LeftTree(CT.CustomTreeCtrl):
             item = event.GetItem()
             pydata = self.GetPyData(item)
         if pydata is not None :
+            self.pydata = pydata
             if pydata['uuid'] in self.parent.history.opened :
                 for i in range(self.parent.nb.GetPageCount()) :
                     self.page = self.parent.nb.GetPage(i)