import datetime
from copy import copy
from shutil import copyfile
+import shelve
#from dialog import BugDialog
import logging
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]
-
- 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)
+ 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', [])])
+ d.close()
+ def write(self) :
+ d = shelve.open(self.filein)
+ d['history'] = self.history
+ d.close()
+
def add(self, 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(tosave)
+ 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'] = [tosave]
- self.analyses[analyse['uuid']] = tosave
+ self.history[self.ordercorpus[acorpus_uuid]]['analyses'] = [tosave]
else :
- self.analyses[analyse['uuid']] = tosave
- elif 'corpus_name' in analyse :
+ self.orph.append(tosave)
+ else :
tosave['corpus_name'] = analyse['corpus_name']
- self.history[analyse['uuid']] = tosave
- self.corpora[analyse['uuid']] = tosave
+ self.history.append(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'])
+ self.history.pop(self.ordercorpus[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)
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 :
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].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' % (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' % (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 :
for val in parametres :
if isinstance(parametres[val], int) :
txt.append(' \t\t: '.join([val, `parametres[val]`]))
- else :
+ elif isinstance(parametres[val], basestring) :
txt.append(' \t\t: '.join([val, parametres[val]]))
+ elif val in ['listet', 'stars'] :
+ pass
+ else :
+ txt.append(' \t\t: '.join([val, `parametres[val]`]))
return '\n'.join(txt)
dico[line[0]] = line[1:]
return dico
-def ReadLexique(parent, lang = 'french'):
+def ReadLexique(parent, lang = 'french', filein = None):
if lang != 'other' :
- parent.lexique = ReadDicoAsDico(parent.DictPath.get(lang, 'french'))
+ if filein is None :
+ parent.lexique = ReadDicoAsDico(parent.DictPath.get(lang, 'french'))
+ else :
+ parent.lexique = ReadDicoAsDico(filein)
else :
parent.lexique = {}
return dict, first
def exec_rcode(rpath, rcode, wait = True, graph = False):
- print rpath, rcode
+ log.info("R Script : %s" % rcode)
needX11 = False
if sys.platform == 'darwin' :
try :
ncontent=[line.replace('\n','').split(';') for line in content if line.strip() != '']
return ncontent
-class MessageImage(wx.Frame):
- def __init__(self, *args, **kwds):
- # begin wxGlade: MyFrame.__init__
- kwds["style"] = wx.DEFAULT_FRAME_STYLE
- wx.Frame.__init__(self, *args, **kwds)
- #self.text_ctrl_1 = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE)
+class MessageImage(wx.Dialog):
+ def __init__(self, parent,title, size):
+ wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = title, pos = wx.DefaultPosition, size = size, style = wx.DEFAULT_DIALOG_STYLE )
+ self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
self.imageFile = False
self.imagename = u"chi_classe.png"
self.HtmlPage = wx.html.HtmlWindow(self, -1)
+ self.HtmlPage.SetMinSize(size)
if "gtk2" in wx.PlatformInfo:
self.HtmlPage.SetStandardFonts()
self.HtmlPage.SetFonts('Courier', 'Courier')
- self.button_1 = wx.Button(self, -1, u"Fermer")
+ self.button_1 = wx.Button(self, wx.ID_CANCEL)
+ self.button_2 = wx.Button(self, wx.ID_SAVE)
self.Bind(wx.EVT_BUTTON, self.OnCloseMe, self.button_1)
- self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
- self.__do_layout()
- # end wxGlade
-
- def __do_layout(self):
- # begin wxGlade: MyFrame.__do_layout
- sizer_1 = wx.BoxSizer(wx.VERTICAL)
- self.sizer_2 = wx.BoxSizer(wx.VERTICAL)
- self.sizer_2.Add(self.HtmlPage, 1, wx.EXPAND | wx.ADJUST_MINSIZE, 0)
- self.sizer_2.Add(self.button_1, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ADJUST_MINSIZE, 0)
- sizer_1.Add(self.sizer_2, 1, wx.EXPAND, 0)
- self.SetAutoLayout(True)
- self.SetSizer(sizer_1)
- # end wxGlade
-
- def addsaveimage(self, imageFile) :
- self.imageFile = imageFile
- self.button_2 = wx.Button(self, -1, u"Enregistrer l'image...")
self.Bind(wx.EVT_BUTTON, self.OnSaveImage, self.button_2)
- self.sizer_2.Add(self.button_2, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ADJUST_MINSIZE, 0)
+ self.do_layout()
+
+ def do_layout(self):
+ self.sizer_1 = wx.BoxSizer(wx.VERTICAL)
+ self.sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
+ self.sizer_1.Add(self.HtmlPage, 2, wx.EXPAND, 0)
+
+ self.m_sdbSizer1 = wx.StdDialogButtonSizer()
+ self.m_sdbSizer1.AddButton( self.button_2 )
+ self.m_sdbSizer1.AddButton( self.button_1 )
+ self.m_sdbSizer1.Realize()
+ self.sizer_1.Add(self.m_sdbSizer1, 0, wx.EXPAND, 5)
+ self.SetSizer(self.sizer_1)
self.Layout()
+ self.sizer_1.Fit( self )
+ def addsaveimage(self, imageFile) :
+ self.imageFile = imageFile
+
def OnCloseMe(self, event):
- self.Close(True)
-
- def OnCloseWindow(self, event):
self.Destroy()
def OnSaveImage(self, event) :