def initialize_system(password=None, testsuite=False, force=False): """Call all the necessary methods to startup Stoq applications for every purpose: production usage, testing or demonstration """ log.info("Initialize_system") try: db_settings.clean_database(db_settings.dbname, force=force) create_base_schema() create_log("INIT START") store = new_store() populate_initial_data(store) register_accounts(store) register_payment_methods(store) from stoqlib.domain.uiform import create_default_forms create_default_forms(store) store.commit(close=True) ensure_sellable_constants() ensure_system_parameters() _ensure_card_providers() create_default_profiles() _install_invoice_templates() if not testsuite: create_default_profile_settings() ensure_admin_user(password) except Exception, e: raise if not testsuite: collect_traceback(sys.exc_info(), submit=True) raise SystemExit("Could not initialize system: %r" % (e, ))
def update(self, plugins=True, backup=True, check_database=True): log.info("Upgrading database (plugins=%r, backup=%r)" % (plugins, backup)) if check_database and not self._check_database(): return False if backup: self._backup_database() # We have to wrap a try/except statement inside a try/finally to # support python previous to 2.5 version. try: try: super(StoqlibSchemaMigration, self).update() if plugins: self.update_plugins() except Exception: exc = sys.exc_info() tb_str = ''.join(traceback.format_exception(*exc)) collect_traceback(exc, submit=True) create_log.info("ERROR:%s" % (tb_str, )) self._restore_backup() return False finally: self._remove_backup() log.info("Migration done") return True
def initialize_system(password=None, testsuite=False, force=False): """Call all the necessary methods to startup Stoq applications for every purpose: production usage, testing or demonstration """ log.info("Initialize_system") try: db_settings.clean_database(db_settings.dbname, force=force) create_base_schema() create_log("INIT START") store = new_store() populate_initial_data(store) register_accounts(store) register_payment_methods(store) from stoqlib.domain.uiform import create_default_forms create_default_forms(store) store.commit(close=True) ensure_sellable_constants() ensure_system_parameters() _ensure_card_providers() create_default_profiles() _install_invoice_templates() if not testsuite: create_default_profile_settings() ensure_admin_user(password) except Exception as e: raise if not testsuite: collect_traceback(sys.exc_info(), submit=True) raise SystemExit("Could not initialize system: %r" % (e, )) create_log("INIT DONE")
def update(self, plugins=True, backup=True, check_database=True): log.info("Upgrading database (plugins=%r, backup=%r)" % ( plugins, backup)) if check_database and not self._check_database(): return False if backup: self._backup_database() # We have to wrap a try/except statement inside a try/finally to # support python previous to 2.5 version. try: try: super(StoqlibSchemaMigration, self).update() if plugins: self.update_plugins() except Exception: exc = sys.exc_info() tb_str = ''.join(traceback.format_exception(*exc)) collect_traceback(exc, submit=True) create_log.info("ERROR:%s" % (tb_str, )) self._restore_backup() return False finally: self._remove_backup() log.info("Migration done") return True
def _render_bill(bill): try: bill.render() except (BoletoException, ValueError): exc = sys.exc_info() tb_str = ''.join(traceback.format_exception(*exc)) collect_traceback(exc, submit=True) raise ReportError(tb_str)
def _write_exception_hook(self, exctype, value, tb): # NOTE: This exception hook depends on gtk, kiwi, twisted being present # In the future we might want it to run without some of these # dependencies, so we can crash reports that happens really # really early on for users with weird environments. if not self.entered_main: self._setup_twisted(raise_=False) try: from psycopg2 import OperationalError if exctype == OperationalError: from stoqlib.lib.message import error from stoqlib.lib.translation import stoqlib_gettext as _ return error(_('There was an error quering the database'), str(value)) except ImportError: pass appname = 'unknown' try: from stoq.gui.shell.shell import get_shell shell = get_shell() if shell: appname = shell.get_current_app_name() except ImportError: pass window_name = 'unknown' try: from stoqlib.gui.base.dialogs import get_current_toplevel window = get_current_toplevel() if window: window_name = window.get_name() except ImportError: pass log.info('An error occurred in application "%s", toplevel window=%s' % ( appname, window_name)) exc_lines = traceback.format_exception(exctype, value, tb) for line in ''.join(exc_lines).split('\n')[:-1]: log.error(line) from stoqlib.lib.crashreport import collect_traceback collect_traceback((exctype, value, tb)) if self.entered_main: return from stoqlib.gui.dialogs.crashreportdialog import show_dialog d = show_dialog() from twisted.internet import reactor d.addCallback(lambda *x: reactor.stop()) reactor.run() raise SystemExit
def _write_exception_hook(self, exctype, value, tb): # NOTE: This exception hook depends on gtk, kiwi, twisted being present # In the future we might want it to run without some of these # dependencies, so we can crash reports that happens really # really early on for users with weird environments. if not self.entered_main: self._setup_twisted(raise_=False) try: from psycopg2 import OperationalError if exctype == OperationalError: from stoqlib.lib.message import error from stoqlib.lib.translation import stoqlib_gettext as _ return error(_('There was an error quering the database'), str(value)) except ImportError: pass appname = 'unknown' try: from stoq.gui.shell.shell import get_shell shell = get_shell() if shell: appname = shell.get_current_app_name() except ImportError: pass window_name = 'unknown' try: from stoqlib.gui.base.dialogs import get_current_toplevel window = get_current_toplevel() if window: window_name = window.get_name() except ImportError: pass log.info('An error occurred in application "%s", toplevel window=%s' % (appname, window_name)) exc_lines = traceback.format_exception(exctype, value, tb) for line in ''.join(exc_lines).split('\n')[:-1]: log.error(line) from stoqlib.lib.crashreport import collect_traceback collect_traceback((exctype, value, tb)) if self.entered_main: return from stoqlib.gui.dialogs.crashreportdialog import show_dialog d = show_dialog() from twisted.internet import reactor d.addCallback(lambda *x: reactor.stop()) reactor.run() raise SystemExit
def _write_exception_hook(self, exctype, value, tb): try: from psycopg2 import OperationalError if exctype == OperationalError: from stoqlib.lib.message import error from stoqlib.lib.translation import stoqlib_gettext as _ return error(_('There was an error quering the database'), str(value)) except ImportError: pass appname = 'unknown' try: from stoq.gui.shell.shell import get_shell shell = get_shell() if shell: appname = shell.get_current_app_name() except ImportError: pass window_name = 'unknown' try: from stoqlib.gui.base.dialogs import get_current_toplevel window = get_current_toplevel() if window: window_name = window.get_name() except ImportError: pass log.info('An error occurred in application "%s", toplevel window=%s' % (appname, window_name)) exc_lines = traceback.format_exception(exctype, value, tb) for line in ''.join(exc_lines).split('\n')[:-1]: log.error(line) from stoqlib.lib.crashreport import collect_traceback collect_traceback((exctype, value, tb)) if self.entered_main: return from gi.repository import Gtk from stoqlib.gui.dialogs.crashreportdialog import show_dialog show_dialog(callback=Gtk.main_quit) Gtk.main() raise SystemExit
def _write_exception_hook(self, exctype, value, tb): try: from psycopg2 import OperationalError if exctype == OperationalError: from stoqlib.lib.message import error from stoqlib.lib.translation import stoqlib_gettext as _ return error(_('There was an error quering the database'), str(value)) except ImportError: pass appname = 'unknown' try: from stoq.gui.shell.shell import get_shell shell = get_shell() if shell: appname = shell.get_current_app_name() except ImportError: pass window_name = 'unknown' try: from stoqlib.gui.base.dialogs import get_current_toplevel window = get_current_toplevel() if window: window_name = window.get_name() except ImportError: pass log.info('An error occurred in application "%s", toplevel window=%s' % ( appname, window_name)) exc_lines = traceback.format_exception(exctype, value, tb) for line in ''.join(exc_lines).split('\n')[:-1]: log.error(line) from stoqlib.lib.crashreport import collect_traceback collect_traceback((exctype, value, tb)) if self.entered_main: return import gtk from stoqlib.gui.dialogs.crashreportdialog import show_dialog show_dialog(callback=gtk.main_quit) gtk.main() raise SystemExit
def _write_exception_hook(self, exctype, value, tb): # NOTE: This exception hook depends on gtk, kiwi, twisted being present # In the future we might want it to run without some of these # dependencies, so we can crash reports that happens really # really early on for users with weird environments. if not self.entered_main: self._setup_twisted(raise_=False) appname = 'unknown' try: from stoq.gui.shell import get_shell shell = get_shell() if shell: appname = shell.get_current_app_name() except ImportError: pass window_name = 'unknown' try: from stoqlib.gui.base.dialogs import get_current_toplevel window = get_current_toplevel() if window: window_name = window.get_name() except ImportError: pass log.info('An error occurred in application "%s", toplevel window=%s:' % (appname, window_name)) traceback.print_exception(exctype, value, tb, file=self.stream) from stoqlib.lib.crashreport import collect_traceback collect_traceback((exctype, value, tb)) if self.entered_main: return from stoqlib.gui.dialogs.crashreportdialog import show_dialog d = show_dialog() from twisted.internet import reactor d.addCallback(lambda *x: reactor.stop()) reactor.run() raise SystemExit
def _write_exception_hook(self, exctype, value, tb): # NOTE: This exception hook depends on gtk, kiwi, twisted being present # In the future we might want it to run without some of these # dependencies, so we can crash reports that happens really # really early on for users with weird environments. if not self.entered_main: self._setup_twisted(raise_=False) appname = 'unknown' try: from stoq.gui.shell import get_shell shell = get_shell() if shell: appname = shell.get_current_app_name() except ImportError: pass window_name = 'unknown' try: from stoqlib.gui.base.dialogs import get_current_toplevel window = get_current_toplevel() if window: window_name = window.get_name() except ImportError: pass log.info('An error occurred in application "%s", toplevel window=%s:' % ( appname, window_name)) traceback.print_exception(exctype, value, tb, file=self.stream) from stoqlib.lib.crashreport import collect_traceback collect_traceback((exctype, value, tb)) if self.entered_main: return from stoqlib.gui.dialogs.crashreportdialog import show_dialog d = show_dialog() from twisted.internet import reactor d.addCallback(lambda *x: reactor.stop()) reactor.run() raise SystemExit
def update(self, plugins=True, backup=True, check_database=True): log.info("Upgrading database (plugins=%r, backup=%r)" % (plugins, backup)) if check_database and not self._check_database(): return False if backup: self._backup_database() # Don't try to update the plugins if the database doesn't # have the plugin_egg table, which was included in patch-05-15 if self.get_current_version() >= (5, 15): manager = get_plugin_manager() for egg_plugin in manager.egg_plugins_names: try: manager.download_plugin(egg_plugin) except Exception: pass # We have to wrap a try/except statement inside a try/finally to # support python previous to 2.5 version. try: try: super(StoqlibSchemaMigration, self).update() if plugins: self.update_plugins() except Exception: exc = sys.exc_info() tb_str = ''.join(traceback.format_exception(*exc)) collect_traceback(exc, submit=True) create_log.info("ERROR:%s" % (tb_str, )) self._restore_backup() return False finally: self._remove_backup() log.info("Migration done") return True
def update(self, plugins=True, backup=True, check_database=True): log.info("Upgrading database (plugins=%r, backup=%r)" % ( plugins, backup)) if check_database and not self._check_database(): return False if backup: self._backup_database() # Don't try to update the plugins if the database doesn't # have the plugin_egg table, which was included in patch-05-15 if self.get_current_version() >= (5, 15): manager = get_plugin_manager() for egg_plugin in manager.egg_plugins_names: try: manager.download_plugin(egg_plugin) except Exception: pass # We have to wrap a try/except statement inside a try/finally to # support python previous to 2.5 version. try: try: super(StoqlibSchemaMigration, self).update() if plugins: self.update_plugins() except Exception: exc = sys.exc_info() tb_str = ''.join(traceback.format_exception(*exc)) collect_traceback(exc, submit=True) create_log.info("ERROR:%s" % (tb_str, )) self._restore_backup() return False finally: self._remove_backup() log.info("Migration done") return True
def update(self, plugins=True, backup=True): log.info("Upgrading database (plugins=%r, backup=%r)" % ( plugins, backup)) try: log.info("Locking database") self.default_store.lock_database() except DatabaseError: msg = _('Could not lock database. This means there are other clients ' 'connected. Make sure to close every Stoq client ' 'before updating the database') error(msg) # Database migration is actually run in subprocesses, We need to unlock # the tables again and let the upgrade continue log.info("Releasing database lock") self.default_store.unlock_database() sucess = db_settings.test_connection() if not sucess: # FIXME: Improve this message after 1.5 is released msg = _(u'Could not connect to the database using command line ' 'tool! Aborting.') + ' ' msg += _(u'Please, check if you can connect to the database ' 'using:') + ' ' msg += _(u'psql -l -h <server> -p <port> -U <username>') error(msg) return if backup: temporary = tempfile.mktemp(prefix="stoq-dump-") log.info("Making a backup to %s" % (temporary, )) create_log.info("BACKUP-START:") success = db_settings.dump_database(temporary) if not success: info(_(u'Could not create backup! Aborting.')) info(_(u'Please contact stoq team to inform this problem.\n')) return # We have to wrap a try/except statement inside a try/finally to # support python previous to 2.5 version. try: try: super(StoqlibSchemaMigration, self).update() if plugins: self.update_plugins() except Exception: exc = sys.exc_info() tb_str = ''.join(traceback.format_exception(*exc)) collect_traceback(exc, submit=True) create_log.info("ERROR:%s" % (tb_str, )) if backup: log.info("Restoring backup %s" % (temporary, )) create_log.info("RESTORE-START:") new_name = db_settings.restore_database(temporary) create_log.info("RESTORE-DONE:%s" % (new_name, )) return False finally: if backup is True: os.unlink(temporary) log.info("Migration done") return True
def update(self, plugins=True, backup=True): log.info("Upgrading database (plugins=%r, backup=%r)" % (plugins, backup)) try: log.info("Locking database") self.default_store.lock_database() except DatabaseError: msg = _( 'Could not lock database. This means there are other clients ' 'connected. Make sure to close every Stoq client ' 'before updating the database') error(msg) # Database migration is actually run in subprocesses, We need to unlock # the tables again and let the upgrade continue log.info("Releasing database lock") self.default_store.unlock_database() sucess = db_settings.test_connection() if not sucess: # FIXME: Improve this message after 1.5 is released msg = _(u'Could not connect to the database using command line ' 'tool! Aborting.') + ' ' msg += _(u'Please, check if you can connect to the database ' 'using:') + ' ' msg += _(u'psql -l -h <server> -p <port> -U <username>') error(msg) return if backup: temporary = tempfile.mktemp(prefix="stoq-dump-") log.info("Making a backup to %s" % (temporary, )) create_log.info("BACKUP-START:") success = db_settings.dump_database(temporary) if not success: info(_(u'Could not create backup! Aborting.')) info(_(u'Please contact stoq team to inform this problem.\n')) return # We have to wrap a try/except statement inside a try/finally to # support python previous to 2.5 version. try: try: super(StoqlibSchemaMigration, self).update() if plugins: self.update_plugins() except Exception: exc = sys.exc_info() tb_str = ''.join(traceback.format_exception(*exc)) collect_traceback(exc, submit=True) create_log.info("ERROR:%s" % (tb_str, )) if backup: log.info("Restoring backup %s" % (temporary, )) create_log.info("RESTORE-START:") new_name = db_settings.restore_database(temporary) create_log.info("RESTORE-DONE:%s" % (new_name, )) return False finally: if backup is True: os.unlink(temporary) log.info("Migration done") return True