import datetime
from copy import copy
from shutil import copyfile
+import shelve
#from dialog import BugDialog
-print 'TEST LOGGING funcion'
import logging
log = logging.getLogger('iramuteq')
self.syscoding = syscoding
self.corpora = {}
self.openedcorpus = {}
+ self.orph = []
self.analyses = {}
- self.history = {}
+ self.history = []
self.opened = {}
self.read()
def read(self) :
- self.conf = DoConf(self.filein)
- self.order = {}
- self.ordera = {}
- for i, section in enumerate(self.conf.conf.sections()) :
- if self.conf.conf.has_option(section, 'corpus_name') :
- self.corpora[section] = self.conf.getoptions(section)
- self.order[len(self.order)] = section
- else :
- self.analyses[section] = self.conf.getoptions(section)
- self.ordera[len(self.ordera)] = section
- todel = []
- for corpus in self.corpora :
- self.history[corpus] = copy(self.corpora[corpus])
- for analyse in self.analyses :
- if self.analyses[analyse]['corpus'] in self.corpora :
- if 'analyses' in self.history[self.analyses[analyse]['corpus']] :
- self.history[self.analyses[analyse]['corpus']]['analyses'].append(self.analyses[analyse])
- todel.append(analyse)
- else :
- self.history[self.analyses[analyse]['corpus']]['analyses'] = [self.analyses[analyse]]
- todel.append(analyse)
- else :
- self.history[analyse] = self.analyses[analyse]
- #for analyse in todel :
- # del self.analyses[analyse]
-
+ d = shelve.open(self.filein)
+ self.history = d.get('history', [])
+ self.ordercorpus = dict([[corpus['uuid'], i] for i, corpus in enumerate(self.history)])
+ self.corpus = dict([[corpus['uuid'], corpus] for i, corpus in enumerate(self.history)])
+ self.analyses = dict([[analyse['uuid'], analyse] for corpus in self.history for analyse in corpus.get('analyses', [])])
+ #corpusorder = d.get('corpusorder',[])
+ #self.analyseorder = d['analyseorder']
+ #self.order = [uuid for uuid in self.history]
+ #self.order = dict([[i, uuid] for i, uuid in enumerate(self.order)])
+ #self.order = dict([[i, corpus] for i, corpus in enumerate(corpusorder)])
+ #for uuid in self.history :
+ # if 'corpus_name' in self.history[uuid] :
+ # self.corpora[uuid] = self.history[uuid]
+ d.close()
+
+# def read(self) :
+# self.conf = DoConf(self.filein)
+# self.order = {}
+# self.ordera = {}
+# for i, section in enumerate(self.conf.conf.sections()) :
+# if self.conf.conf.has_option(section, 'corpus_name') :
+# self.corpora[section] = self.conf.getoptions(section)
+# self.order[len(self.order)] = section
+# else :
+# self.analyses[section] = self.conf.getoptions(section)
+# self.ordera[len(self.ordera)] = section
+# todel = []
+# for corpus in self.corpora :
+# self.history[corpus] = copy(self.corpora[corpus])
+# for analyse in self.analyses :
+# if self.analyses[analyse]['corpus'] in self.corpora :
+# if 'analyses' in self.history[self.analyses[analyse]['corpus']] :
+# self.history[self.analyses[analyse]['corpus']]['analyses'].append(self.analyses[analyse])
+# todel.append(analyse)
+# else :
+# self.history[self.analyses[analyse]['corpus']]['analyses'] = [self.analyses[analyse]]
+# todel.append(analyse)
+# else :
+# self.history[analyse] = self.analyses[analyse]
+# #for analyse in todel :
+# # del self.analyses[analyse]
def write(self) :
- sections = self.corpora.keys() + self.analyses.keys()
- parametres = [self.corpora[key] for key in self.corpora.keys()] + [self.analyses[key] for key in self.analyses.keys()]
- self.conf.makeoptions(sections, parametres)
- log.info('write history')
+ d = shelve.open(self.filein)
+ d['history'] = self.history
+ #order = [i for i in self.order]
+ #order.sort()
+ #d['corpusorder'] = [self.order[i] for i in order]
+ d.close()
+
+# def write(self) :
+# sections = self.corpora.keys() + self.analyses.keys()
+# parametres = [self.corpora[key] for key in self.corpora.keys()] + [self.analyses[key] for key in self.analyses.keys()]
+# self.conf.makeoptions(sections, parametres)
+# log.info('write history')
+#
def add(self, analyse) :
- if 'corpus' in analyse :
+ log.info('add to history %s' % analyse.get('corpus_name', 'pas un corpus'))
+ tosave = {'uuid' : analyse['uuid'], 'ira': analyse['ira'], 'type' : analyse['type']}
+ if analyse.get('corpus', False) :
+ if analyse['uuid'] in self.analyses :
+ return
+ tosave['corpus'] = analyse['corpus']
+ tosave['name'] = analyse['name']
acorpus_uuid = analyse['corpus']
- if acorpus_uuid in self.corpora :
- if 'analyses' in self.history[acorpus_uuid] :
- self.history[acorpus_uuid]['analyses'].append(analyse)
+ if acorpus_uuid in self.ordercorpus :
+ if 'analyses' in self.history[self.ordercorpus[acorpus_uuid]] :
+ self.history[self.ordercorpus[acorpus_uuid]]['analyses'].append(tosave)
else :
- self.history[acorpus_uuid]['analyses'] = [analyse]
- self.analyses[analyse['uuid']] = analyse
+ self.history[self.ordercorpus[acorpus_uuid]]['analyses'] = [tosave]
+ #self.analyses[analyse['uuid']] = tosave
else :
- self.analyses[analyse['uuid']] = analyse
- elif 'corpus_name' in analyse :
- self.history[analyse['uuid']] = analyse
- self.corpora[analyse['uuid']] = analyse
+ self.orph.append(tosave)
+ #self.order[len(self.order)] = analyse['uuid']
+ #self.analyses[analyse['uuid']] = tosave
+ else :
+ tosave['corpus_name'] = analyse['corpus_name']
+ self.history.append(tosave)
+ #self.order[len(self.order)] = analyse['uuid']
+ #self.corpora[analyse['uuid']] = tosave
self.write()
+ self.read()
- def delete(self, uuid, corpus = False) :
+ def delete(self, analyse, corpus = False) :
if corpus :
- del self.corpora[uuid]
- self.conf.conf.remove_section(uuid)
- for analyse in self.history[uuid].get('analyses', [False]) :
- if analyse :
- del self.analyses[analyse['uuid']]
- self.conf.conf.remove_section(analyse['uuid'])
+ #del self.history[uuid]
+ self.history.pop(self.ordercorpus[analyse['uuid']])
+ #todel = [i for i in self.order if self.order[i] == uuid]
+ #del self.order[todel[0]]
+ #del self.corpora[uuid]
+ #del self.corpora[uuid]
+ #self.conf.conf.remove_section(uuid)
+ #for analyse in self.history[uuid].get('analyses', [False]) :
+ # if analyse :
+ # del self.analyses[analyse['uuid']]
+ # self.conf.conf.remove_section(analyse['uuid'])
else :
- del self.analyses[uuid]
- self.conf.conf.remove_section(uuid)
+ todel = [i for i, ana in enumerate(self.corpus[analyse['corpus']]['analyses']) if ana['uuid'] == analyse['uuid']][0]
+ self.history[self.ordercorpus[analyse['corpus']]]['analyses'].pop(todel)
+ #del self.analyses[uuid]
+ #self.conf.conf.remove_section(uuid)
self.write()
+ self.read()
def addtab(self, analyse) :
self.opened[analyse['uuid']] = analyse
parametres[option] = True
elif self.conf.get(section, option).startswith('(') and self.conf.get(section, option).endswith(')') :
parametres[option] = ast.literal_eval(self.conf.get(section, option))
+ elif self.conf.get(section, option).startswith('[') and self.conf.get(section, option).endswith(']') :
+ parametres[option] = ast.literal_eval(self.conf.get(section, option))
else :
parametres[option] = self.conf.get(section, option)
if 'type' not in parametres :
return parametres
def makeoptions(self, sections, parametres, outfile = None) :
+ txt = ''
for i, section in enumerate(sections) :
+ txt += '[%s]\n' % section
if not self.conf.has_section(section) :
self.conf.add_section(section)
for option in parametres[i] :
if isinstance(parametres[i][option], int) :
self.conf.set(section, option, `parametres[i][option]`)
+ txt += '%s = %i\n' % (option, parametres[i][option])
elif isinstance(parametres[i][option], basestring) :
self.conf.set(section, option, parametres[i][option].encode('utf8'))
+ txt += '%s = %s\n' % (option, parametres[i][option])
elif isinstance(parametres[i][option], wx.Colour) :
self.conf.set(section, option, str(parametres[i][option]))
+ txt += '%s = %s\n' % (option, str(parametres[i][option]))
+ elif option == 'analyses' :
+ pass
else :
self.conf.set(section, option, `parametres[i][option]`)
+ txt += '%s = %s\n' % (option, `parametres[i][option]`)
if outfile is None :
outfile = self.configfile
with codecs.open(outfile, 'w', 'utf8') as f :
- self.conf.write(f)
+ f.write(txt)
+ #self.conf.write(f)
def totext(self, parametres) :
- txt = ['Corpus']
+ #txt = ['Corpus']
+ txt = []
for val in parametres :
if isinstance(parametres[val], int) :
txt.append(' \t\t: '.join([val, `parametres[val]`]))
cla, exc, trbk = sys.exc_info()
excName = cla.__name__
try:
- excArgs = exc.__dict__["args"]
- except KeyError:
+ excArgs = exc.args[0]
+ except :
excArgs = "<no args>"
excTb = traceback.format_tb(trbk, maxTBlevel)
return (excName, excArgs, excTb)
Si on trouve un '$', c'est fini.
Sinon, on cherche le meilleur candidat. C'est-à-dire le rapport poids/distance le plus important.
"""
- separateurs = [[u'.', 60.0], [u'?', 60.0], [u'!', 60.0], [u'£', 60], [u':', 50.0], [u';', 40.0], [u',', 10.0], [u' ', 0.1]]
+ separateurs = [[u'.', 60.0], [u'?', 60.0], [u'!', 60.0], [u'£$£', 60], [u':', 50.0], [u';', 40.0], [u',', 10.0], [u' ', 0.1]]
trouve = False # si on a trouvé un bon séparateur
iDecoupe = 0 # indice du caractere ou il faut decouper
# si on a rien trouvé
return False, chaine.split(), ''
-def BugReport(parent):
+def BugReport(parent, error = None):
for ch in parent.GetChildren():
if "<class 'wx._windows.ProgressDialog'>" == str(type(ch)):
ch.Destroy()
+ excName, exc, excTb = formatExceptionInfo()
+ if excName == 'Exception' :
+ txt = 'Message :\n'
+ else :
+ txt = u' !== BUG ==! \n'
+ txt += u'*************************************\n'
+ txt += '\n'.join(excTb).replace(' ', ' ')
+ txt += excName + '\n'
+ txt += exc
+
dial = BugDialog(parent)
- txt = u' !== BUG ==! \n'
- txt += u'*************************************\n'
- for line in formatExceptionInfo():
- if type(line) == type([]):
- for don in line:
- txt += don.replace(' ', ' ')
- else:
- txt += line + '\n'
+ #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)
dial.text_ctrl_1.write(txt)
dial.CenterOnParent()
dial.ShowModal()
- raise NameError('Bug')
+ #raise Exception('Bug')
def PlaySound(parent):
if parent.pref.getboolean('iramuteq', 'sound') :
return dico
def ReadLexique(parent, lang = 'french'):
- parent.lexique = ReadDicoAsDico(parent.DictPath.get(lang, 'french'))
+ if lang != 'other' :
+ parent.lexique = ReadDicoAsDico(parent.DictPath.get(lang, 'french'))
+ else :
+ parent.lexique = {}
def ReadList(filein, encoding = sys.getdefaultencoding()):
#file = open(filein)
except :
BugReport(parent)
else :
- if pid !=0 :
+ if pid != 0 :
try :
raise Exception(u'Erreur R')
except :