# HG changeset patch # User Miguel Ángel Bárcena Rodríguez # Date 1289075433 -3600 # Node ID 6502bfdaa84dc09fa5534a681ba1d3f1f0a12fb9 # Parent 4e976a99efb97debd07f224c8673619211d1069f update import durus database diff -r 4e976a99efb9 -r 6502bfdaa84d .hgignore --- a/.hgignore Sun Oct 31 23:12:06 2010 +0100 +++ b/.hgignore Sat Nov 06 21:30:33 2010 +0100 @@ -3,3 +3,4 @@ *.bak *.pyc *.sh +durus/* diff -r 4e976a99efb9 -r 6502bfdaa84d Generic/durusdatabase.py --- a/Generic/durusdatabase.py Sun Oct 31 23:12:06 2010 +0100 +++ b/Generic/durusdatabase.py Sat Nov 06 21:30:33 2010 +0100 @@ -21,9 +21,12 @@ # Modules import os.path +import time # Durus Modules from durus.file_storage import FileStorage from durus.connection import Connection +# pyArq Presupuestos Modules +from Generic import utils class DurusFile(object): def __init__(self, file, new): @@ -44,3 +47,32 @@ self.__root["budget"] = budget self.__connection.commit() +class Read(object): + def __init__(self, filename=None, budget=None): + self.__budget = budget + self.__filename = filename + self.__cancel = False + + def cancel(self): + """def cancel(self) + + It do nothing + """ + # TODO: Cancel reading Durus database. + self.__cancel = True + + def readFile(self, budget=None, filename=None, interface=None): + if not filename is None: + self.__filename = filename + if self.__filename is None or self.__cancel == True: + return None + if not os.path.exists(self.__filename): + return None + print utils.mapping(_("Loading file: $1:"), (self.__filename,)) + _time = time.time() + _durus_file = DurusFile(self.__filename, False) + self.__budget = _durus_file.getBudget() + _durus_file.close() + print utils.mapping(_("Loadig time: $1 seconds"), + (("%.2f" %(time.time()-_time)),)) + return self.__budget diff -r 4e976a99efb9 -r 6502bfdaa84d Generic/fiebdc.py --- a/Generic/fiebdc.py Sun Oct 31 23:12:06 2010 +0100 +++ b/Generic/fiebdc.py Sat Nov 06 21:30:33 2010 +0100 @@ -1938,12 +1938,11 @@ recordStatistics(...) Return the budget objetc or None if the file can be readed """ - if filename != None and budget != None: + if not filename is None and not budget is None: self.__filename = filename self.__budget = budget self.__budget.filename = self.__filename - if self.__filename is None or self.__budget is None or \ - self.__cancel == True: + if self.__filename is None or self.__budget is None or self.__cancel: return None if not os.path.exists(self.__filename): return None @@ -2014,7 +2013,7 @@ # beginning of the first registry “~” is ignored #"after_first_tilde" : "^[^~]*~" _buffer = self.__pattern["after_first_tilde"].sub("",_buffer) - while _buffer != "" and self.__cancel != True: + while _buffer != "" and not self.__cancel: #-# the blank characters (32), tabs (9) and end of line (13 and 10) # before the separators '~', '|' are erased. # Before separator \ not deleted because it affects the reading of @@ -2035,7 +2034,7 @@ _record_list[-1]) _last_record = "" for record in _record_list: - if self.__cancel == True: + if self.__cancel: break self.parseRecord(record) interface.progress(_file.tell() / _filesize) @@ -2045,7 +2044,7 @@ _buffer2 = _buffer2.encode("utf8") _buffer = _last_record + _buffer2 _file.close() - if self.__cancel == True: + if self.__cancel: print _("Cancelled process") return None else: diff -r 4e976a99efb9 -r 6502bfdaa84d Gtk/gui.py --- a/Gtk/gui.py Sun Oct 31 23:12:06 2010 +0100 +++ b/Gtk/gui.py Sat Nov 06 21:30:33 2010 +0100 @@ -70,7 +70,7 @@ (globals.getAppPath("ICON"),)) # Autodetect desktop -if globals.desktop["autodetect"] is True: +if globals.desktop["autodetect"]: openwith.autodetect_desktop() print utils.mapping(_("pyArq-Presupuestos running on $1"), (globals.desktop["desktop"],)) @@ -205,7 +205,7 @@ Appends a budget in the "__budget_list" """ - if budget != None: + if not budget is None: _budget = budget if _budget in self.__budget_temp_list: self.__budget_temp_list.remove(_budget) @@ -229,8 +229,6 @@ widget: the widget where the event is emitted from Callback to open a budget file. - Inits a timeout to test if a budgets is appended to "__budget_list" - calling _testBudgetList method if it is true. Creates and shows a window to open a budget file. """ @@ -249,17 +247,15 @@ widget: the widget where the event is emitted from Callback to open a budget file. - Inits a timeout to test if a budgets is appended to "__budget_list" - calling _testBudgetList method if it is true. - - Creates and shows a window to open a budget file. + + Creates and shows a window to open a price database file. """ _budget = base.Budget() self.__budget_temp_list.append(_budget) _budget_file = fiebdc.Read() _read_method = _budget_file.readFile _filename = "file" - _filetype = "basedate" + _filetype = "database" _exit_method = _budget_file.cancel _file_window = importFiebdc.FileSelectionWindow(self, _read_method, _budget, _filename, _exit_method, _filetype) @@ -268,32 +264,19 @@ """def _menuitemOpenPriceDatabase(self, widget) widget: the widget where the event is emitted from - Callback to open a budget file. - - Creates and shows a window to open a budget file. + Callback to open a price database from a durus file. + + Creates and shows a window to open a durus database """ - _openDialog = OpenDurusDatabase(self._OpenDurusDatabase) - _openDialog.main() - - def _OpenDurusDatabase(self, file): - """def _menuitemImportFiebdc(self, widget) - - widget: the widget where the event is emitted from - - Callback to open a budget file from a durus file. - """ - _file = file - print utils.mapping(_("Loading file: $1:"), (_file,)) - _time = time.time() - _durus_file = durusdatabase.DurusFile(_file,False) - _budget = _durus_file.getBudget() - _durus_file.close() - print utils.mapping(("Loadig time: $1 seconds"), - (("%.2f" %(time.time()-_time)),)) - self.__budget_list.append(_budget) - _page = Page(_budget) - self.__notebook.append_page(_page.widget, _page.title) - self.__page_list.append(_page) + _budget = None + self.__budget_temp_list.append(_budget) + _budget_file = durusdatabase.Read() + _read_method = _budget_file.readFile + _filename = "file" + _filetype = "durus" + _exit_method = _budget_file.cancel + _file_window = importFiebdc.FileSelectionWindow(self, + _read_method, _budget, _filename, _exit_method, _filetype) def _menuitemClose(self, widget): """def _menuitemClose(self, widget) @@ -305,12 +288,17 @@ _page_num = self.__notebook.get_current_page() if _page_num == -1: return - _page = self.__page_list.pop(_page_num) + #_page = self.__page_list.pop(_page_num) + _page = self.__page_list[_page_num] if isinstance(_page, Page): #not loading budget self.__budget_list.pop(_page_num) - _page.clear() - self.__notebook.remove_page(_page_num) + if isinstance(_page, EmptyPage) and _page.filetype == "durus": + print _("Cancel reading Durus database has not been implemented.") + else: + self.__page_list.pop(_page_num) + _page.clear() + self.__notebook.remove_page(_page_num) def _delete_event(self, widget, event): """_delete_event(self, widget, event) @@ -405,7 +393,8 @@ _progressframe.set_shadow_type(gtk.SHADOW_IN) _progressframe.show() self.__progress_bar = gtk.ProgressBar() - self.__progress_bar.show() + if self.__filetype != "durus": + self.__progress_bar.show() _progressframe.add(self.__progress_bar) self.__statusbar.pack_start(_progressframe, False, False, 0) self.__widget.pack_end(self.__statusbar, False, True, 0) @@ -445,9 +434,12 @@ 2- update time label 3- If the other timetouts are stoped the window is closed """ - gobject.timeout_add(500, self._updateProgressBar) gobject.timeout_add(1000, self._updateLabel, time.time()) - self.__cancel = [False, False] + if self.__filetype != "durus": + gobject.timeout_add(500, self._updateProgressBar) + self.__cancel = [False, False] + else: + self.__cancel = [True, False] gobject.timeout_add(1000, self._autoClose) def _updateProgressBar(self): @@ -492,14 +484,14 @@ else: return True - def closeWindow(self): + def threadFinishedSignal(self, budget): """def closeWindow(self) Sets the __children atribute to None This causes that the timeouts is ended. This method is called from thread when it is finished - TODO: it must called threadFinished or somethig """ + self.__budget = budget self.__children = None self.stopLoading() _page = Page(self.__budget) @@ -536,16 +528,24 @@ return self.__widget def getTitle(self): - """def getTtle(self) + """def getTitle(self) Return the title of the page, a gtk.Label objetc """ return self.__title + def getFiletype(self): + """def getFiletipe(self) + + Return the title of the page, a gtk.Label objetc + """ + return self.__filetype widget = property(getWidget, None, None, "Main widget showed in the pane") title = property(getTitle, None, None, "Page Title") + filetype = property(getFiletype, None, None, + "Filetype: budget, basedata or durus") class Page(object): """gui.Page: @@ -4399,58 +4399,4 @@ return the main widget (gtk.ScrolledWindow) """ - return self.__widget - widget = property(getWidget, None, None, - "The main widget (gtk.ScrolledWindow)") - - -class OpenDurusDatabase(object): - """gui.OpenFiebdc - - Description: - Class to show a dialog to open a durus price database - Constructor: - OpenDurusDatabase() - Ancestry: - +-- object - +-- OpenDurusDatabase - Atributes: - "_openMethod": The method to open the file - "__file": the filename to open - "__window": the File Selection window - Methods: - __init__(self) - setActiveCode(self, code) - """ - def __init__(self, openMethod): - self.__openMethod = openMethod - self.__file = None - self.__window = gtk.FileSelection("Abrir Archivo") - self.__window.connect("destroy", self.destroy) - self.__window.ok_button.connect("clicked", self._openFile) - self.__window.cancel_button.connect("clicked", - lambda w: self.__window.destroy()) - self.__window.set_filename(globals.getHomePath("DURUS-DATABASE")) - self.__window.show() - - def destroy(self, widget): - gtk.main_quit() - - def main(self): - gtk.main() - - def _openFile(self, w): - self.__file = self.__window.get_filename() - _filename = os.path.basename(self.__file) - _filename_list = _filename.split(".") - _filename_ext = _filename_list[-1] - if _filename == "": - print _("No file selected") - elif len(_filename_list) < 2 or _filename_ext != "durus": - print _("The filename must have durus extension") - else: - try: - self.__openMethod(self.__window.get_filename()) - self.__window.destroy() - except IOError: - print utils.mapping("IOError, $1", (self.__file,)) + return self.__widget \ No newline at end of file diff -r 4e976a99efb9 -r 6502bfdaa84d Gtk/importFiebdc.py --- a/Gtk/importFiebdc.py Sun Oct 31 23:12:06 2010 +0100 +++ b/Gtk/importFiebdc.py Sat Nov 06 21:30:33 2010 +0100 @@ -52,18 +52,15 @@ "__readFileMethod": Method to read the selected file "__budget": Budget object "__filename": "file" - "__filetype": "budget" or "database" + "__filetype": "budget" ,"database" or "durus" "__cancelMethod": Method to cancel the read method "__file": The selected file "__window": The selection file window Methods: __init__(self, mainWindow, readFileMethod, budget arg_List, cancelMethod) - destroy(self, widget) - main(self) _launchProgressWindow(self, _file) - _openFile(self, w) - _openFile2(Self, filename) + _openFile(self, filename) """ def __init__(self, mainWindow, readFileMethod, budget, filename, @@ -76,7 +73,7 @@ budget: base.Budget object filename: "file" cancelMethod: Method to cancel the read method - fileytpe: "budget" or "database" + fileytpe: "budget", "database" or "durus". Sets the init atributes, creates the file selection window Connects the events: * clicked ok button: _openFile @@ -96,7 +93,11 @@ buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN,gtk.RESPONSE_OK)) self.__window.set_default_response(gtk.RESPONSE_OK) - self.__window.set_filename(globals.getHomePath("BUDGET")) + if self.__filetype == "budget" or self.__filetype == "database": + self.__window.set_current_folder(globals.getHomePath("BUDGET")) + else: # "durus" + self.__window.set_current_folder( + globals.getHomePath("DURUS-DATABASE")) if self.__window.run() == gtk.RESPONSE_OK: self._openFile(self.__window.get_filename()) self.__window.destroy() @@ -107,7 +108,6 @@ Launch the progress window """ self.__filename = file - _emptyPage = gui.EmptyPage(self.__mainWindow, self.__readFileMethod, self.__budget, self.__filename, self.__cancelMethod, self.__filetype) @@ -116,14 +116,6 @@ self.__mainWindow.getPageList().append(_emptyPage) _emptyPage.run() - def _launchProgressTab(self, file): - """def _launchProgressTab(self, file) - - Launch the progress window - """ - self.__filename = file - print "abriendo fichero", self.__filename - def _openFile(self, filename): """def _openFile(self, filename) @@ -140,14 +132,15 @@ self.__file = _file _filename = os.path.basename(self.__file) _filename_ext = _filename.split(".")[-1] - if _filename_ext != "bc3" and _filename_ext != "BC3": + if (self.__filetype == "budget" or self.__filetype == "database") and \ + _filename_ext != "bc3" and _filename_ext != "BC3": print _("The file must have 'bc3' extension") + elif self.__filetype == "durus" and _filename_ext != "durus": + print _("The file must have 'durus' extension") else: self.__window.destroy() - if self.__file: - # TODO: the file exits? is it not binary?, can it be readed? - self._launchProgressWindow(self.__file) - + # TODO: the file exits? is it not binary?, can it be readed? + self._launchProgressWindow(self.__file) class ProgressWindow(object): @@ -380,13 +373,13 @@ +--threading.Thread +-- importFiebdc.Thread Atributes: - "__page": The page instanca that launch the thread + "__page": The page instance that launch the thread "__mainWindow": gui.MainWindow instance "__readFileMethod": Method to read the selected file "__budget "__filename": "file" "__cancelMethod": Method to cancel the read method - "__filetype": "budget" or "database" + "__filetype": "budget", "database" or "durus" "__cancel": Boolean value, True: the thread is stoped Methods: __init__(self, page, mainWindow, @@ -407,7 +400,7 @@ budget: base.Budget object filename: "file" cancelMethod: Method to cancel the read method - feletype: "budget" or "basedate" + feletype: "budget", "database" or "durus" Sets the instance atributes. """ super(Thread, self).__init__() @@ -425,16 +418,15 @@ """ - _result = self.__readFileMethod(self.__budget, self.__filename, + _budget = self.__readFileMethod(self.__budget, self.__filename, self.__page) - if _result is None: + if _budget is None: self.__page.threadCanceled() else: _mainWindow = self.__mainWindow - _mainWindow._addBudget(_result) - self.__page.closeWindow() - - if self.__filetype == "basedate": + _mainWindow._addBudget(_budget) + self.__page.threadFinishedSignal(_budget) + if self.__filetype == "database": self.saveDurusDatabase() self.clear() @@ -475,8 +467,4 @@ del self.__budget del self.__filename del self.__cancelMethod - del self.__cancel - - - - + del self.__cancel \ No newline at end of file diff -r 4e976a99efb9 -r 6502bfdaa84d images/acumulatedline.svg --- a/images/acumulatedline.svg Sun Oct 31 23:12:06 2010 +0100 +++ b/images/acumulatedline.svg Sat Nov 06 21:30:33 2010 +0100 @@ -14,7 +14,6 @@ id="svg1872" sodipodi:version="0.32" inkscape:version="0.45.1" - sodipodi:docbase="/home/io/Desarrollo/FIEBDC-3/pyArq-Presupuestos/images" sodipodi:docname="acumulatedline.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape"> diff -r 4e976a99efb9 -r 6502bfdaa84d images/close.svg --- a/images/close.svg Sun Oct 31 23:12:06 2010 +0100 +++ b/images/close.svg Sat Nov 06 21:30:33 2010 +0100 @@ -13,7 +13,6 @@ id="svg1872" sodipodi:version="0.32" inkscape:version="0.45.1" - sodipodi:docbase="/home/io/Desarrollo/FIEBDC-3/Arquimeter/images" sodipodi:docname="close.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape"> diff -r 4e976a99efb9 -r 6502bfdaa84d images/decomposition.svg --- a/images/decomposition.svg Sun Oct 31 23:12:06 2010 +0100 +++ b/images/decomposition.svg Sat Nov 06 21:30:33 2010 +0100 @@ -13,7 +13,6 @@ id="svg1933" sodipodi:version="0.32" inkscape:version="0.45.1" - sodipodi:docbase="/home/io/Desarrollo/FIEBDC-3/Arquimeter/images" sodipodi:docname="decomposition.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape"> diff -r 4e976a99efb9 -r 6502bfdaa84d images/disconnected.svg --- a/images/disconnected.svg Sun Oct 31 23:12:06 2010 +0100 +++ b/images/disconnected.svg Sat Nov 06 21:30:33 2010 +0100 @@ -14,7 +14,6 @@ id="svg1872" sodipodi:version="0.32" inkscape:version="0.44.1" - sodipodi:docbase="/home/io/Desarrollo/FIEBDC-3/Arquimeter/images" sodipodi:docname="disconnected.svg"> diff -r 4e976a99efb9 -r 6502bfdaa84d images/dxf.svg --- a/images/dxf.svg Sun Oct 31 23:12:06 2010 +0100 +++ b/images/dxf.svg Sat Nov 06 21:30:33 2010 +0100 @@ -13,7 +13,6 @@ id="svg2194" sodipodi:version="0.32" inkscape:version="0.45.1" - sodipodi:docbase="/home/io/Desarrollo/FIEBDC-3/Arquimeter/images" sodipodi:docname="dxf.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape"> + sodipodi:docname="labourforce.svg"> + sodipodi:docname="machinery.svg"> + sodipodi:docname="material.svg"> diff -r 4e976a99efb9 -r 6502bfdaa84d images/menu.svg --- a/images/menu.svg Sun Oct 31 23:12:06 2010 +0100 +++ b/images/menu.svg Sat Nov 06 21:30:33 2010 +0100 @@ -13,7 +13,6 @@ id="svg1872" sodipodi:version="0.32" inkscape:version="0.45.1" - sodipodi:docbase="/home/io/Desarrollo/FIEBDC-3/Arquimeter/images" sodipodi:docname="menu.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape"> + sodipodi:docname="pyArq-Presupuestos.svg"> @@ -119,7 +118,6 @@ sodipodi:ry="1.5467961" d="m 8.5736698,1.7252818 a 1.016466,1.5467961 0 1 1 -2.0329321,0 1.016466,1.5467961 0 1 1 2.0329321,0 z" transform="matrix(1.9676014,0,0,1.9394929,-6.8695653,-0.34617159)" - inkscape:export-filename="/home/io/Desarrollo/FIEBDC-3/pyArq-Presupuestos/images/throbber5.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" /> @@ -166,7 +161,6 @@ sodipodi:ry="1.5467961" d="m 8.5736698,1.7252818 a 1.016466,1.5467961 0 1 1 -2.0329321,0 1.016466,1.5467961 0 1 1 2.0329321,0 z" transform="matrix(-0.9838007,-1.7039928,1.6796501,-0.96974644,8.2067862,25.050507)" - inkscape:export-filename="/home/io/Desarrollo/FIEBDC-3/pyArq-Presupuestos/images/throbber5.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" /> @@ -190,7 +183,6 @@ sodipodi:ry="1.5467961" d="m 8.5736698,1.7252818 a 1.016466,1.5467961 0 1 1 -2.0329321,0 1.016466,1.5467961 0 1 1 2.0329321,0 z" transform="matrix(-1.9676014,0,0,-1.9394929,22.869564,16.346171)" - inkscape:export-filename="/home/io/Desarrollo/FIEBDC-3/pyArq-Presupuestos/images/throbber5.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" /> @@ -214,7 +205,6 @@ sodipodi:ry="1.5467961" d="m 8.5736698,1.7252818 a 1.016466,1.5467961 0 1 1 -2.0329321,0 1.016466,1.5467961 0 1 1 2.0329321,0 z" transform="matrix(-0.9838007,1.7039928,-1.6796501,-0.96974643,22.662777,-0.7043353)" - inkscape:export-filename="/home/io/Desarrollo/FIEBDC-3/pyArq-Presupuestos/images/throbber5.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" /> @@ -238,7 +227,6 @@ sodipodi:ry="1.5467961" d="m 8.5736698,1.7252818 a 1.016466,1.5467961 0 1 1 -2.0329321,0 1.016466,1.5467961 0 1 1 2.0329321,0 z" transform="matrix(0.9838007,1.7039928,-1.6796501,0.96974644,7.7932129,-9.0505065)" - inkscape:export-filename="/home/io/Desarrollo/FIEBDC-3/pyArq-Presupuestos/images/throbber5.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" /> diff -r 4e976a99efb9 -r 6502bfdaa84d images/unit.svg --- a/images/unit.svg Sun Oct 31 23:12:06 2010 +0100 +++ b/images/unit.svg Sat Nov 06 21:30:33 2010 +0100 @@ -14,7 +14,6 @@ id="svg1884" sodipodi:version="0.32" inkscape:version="0.44.1" - sodipodi:docbase="/home/io/Desarrollo/FIEBDC-3/Arquimeter/images" sodipodi:docname="unit.svg">