def __init__(self, options, config=None): if not config: config = StoqConfig() self.settings = config.get_settings() self.link_request_done = False self.create_examples = False self.config = config self.enable_production = False self.has_installed_db = False self.options = options self.plugins = [] self.db_is_local = False self.enable_online_services = True self.auth_type = TRUST_AUTHENTICATION if config.get('Database', 'enable_production') == 'True': self.enable_production = True if self.enable_production: first_step = PluginStep(self) else: first_step = WelcomeStep(self) BaseWizard.__init__(self, None, first_step, title=self.title) self.get_toplevel().set_deletable(False) self.next_button.grab_focus()
def main(args): if platform.system() == 'Windows': _windows_fixes() handler = StoqServerCmdHandler() if not args: handler.cmd_help() return 1 cmd = args[0] args = args[1:] parser = get_option_parser() handler.add_options(cmd, parser) options, args = parser.parse_args(args) config = StoqConfig() filename = (options.filename if options.load_config and options.filename else APP_CONF_FILE) config.load(filename) # FIXME: This is called only when register_station=True. Without # this, db_settings would not be updated. We should fix it on Stoq config.get_settings() register_config(config) global SENTRY_URL, raven_client SENTRY_URL = config.get('Sentry', 'url') or SENTRY_URL raven_client = raven.Client(SENTRY_URL, release=stoqserver.version_str) setup_excepthook(SENTRY_URL) return handler.run_cmd(cmd, options, *args)
def __init__(self, options, config=None): if not config: config = StoqConfig() self.settings = config.get_settings() self.enable_production = False self.config = config self.remove_demo = False self.has_installed_db = False self.options = options self.plugins = [] self.db_is_local = False self.enable_online_services = True self.auth_type = TRUST_AUTHENTICATION if config.get('Database', 'enable_production') == 'True': self.remove_demo = True if self.remove_demo: first_step = PluginStep(self) else: first_step = WelcomeStep(self) BaseWizard.__init__(self, None, first_step, title=self.title) self.get_toplevel().set_deletable(False) self.next_button.grab_focus()
def setup_sentry(options): config = StoqConfig() filename = (options.filename if options.load_config and options.filename else APP_CONF_FILE) config.load(filename) # FIXME: This is called only when register_station=True. Without # this, db_settings would not be updated. We should fix it on Stoq config.get_settings() register_config(config) global SENTRY_URL, raven_client SENTRY_URL = config.get('Sentry', 'url') or SENTRY_URL raven_client = raven.Client(SENTRY_URL, release=stoqserver.version_str, transport=SilentTransport) setup_excepthook()
def __init__(self, options, config=None): if not config: config = StoqConfig() self.settings = config.get_settings() if is_windows: self.settings.username = WINDOWS_DEFAULT_USER self.settings.password = WINDOWS_DEFAULT_PASSWORD self.settings.dbname = WINDOWS_DEFAULT_DBNAME self.settings.address = "localhost" self.settings.port = 5432 self.link_request_done = False self.create_examples = False self.config = config self.enable_production = False self.has_installed_db = False self.options = options self.db_is_local = False self.enable_online_services = True self.auth_type = TRUST_AUTHENTICATION if config.get('Database', 'enable_production') == 'True': self.enable_production = True if self.enable_production: first_step = CreateDatabaseStep(self) elif is_windows and self.try_connect(self.settings, warn=False): self.auth_type = PASSWORD_AUTHENTICATION self.write_pgpass() first_step = self.connect_for_settings() else: first_step = DatabaseLocationStep(self) BaseWizard.__init__(self, None, first_step, title=self.title) self.get_toplevel().set_deletable(False) self.next_button.grab_focus()
class ShellDatabaseConnection(object): """Sets up a database connection - Connects to a database - Telling why if it failed - Runs database wizard if needed - Runs schema migration - Activates plugins - Sets up main branch """ def __init__(self, options): self._options = options self._config = None self._ran_wizard = False def connect(self): self._load_configuration() self._maybe_run_first_time_wizard() self._try_connect() self._post_connect() def _load_configuration(self): from stoqlib.lib.configparser import StoqConfig log.debug('reading configuration') self._config = StoqConfig() if self._options.filename: self._config.load(self._options.filename) else: self._config.load_default() def _maybe_run_first_time_wizard(self): from stoqlib.gui.base.dialogs import run_dialog from stoq.gui.config import FirstTimeConfigWizard config_file = self._config.get_filename() if self._options.wizard or not os.path.exists(config_file): run_dialog(FirstTimeConfigWizard, None, self._options) self._ran_wizard = True if self._config.get('Database', 'enable_production') == 'True': run_dialog(FirstTimeConfigWizard, None, self._options, self._config) self._ran_wizard = True def _get_password(self): import binascii configdir = self._config.get_config_directory() filename = os.path.join(configdir, 'data') if not os.path.exists(filename): return with open(filename, 'rb') as f: return binascii.a2b_base64(f.read()).decode() def _try_connect(self): from stoqlib.lib.message import error try: store_uri = self._config.get_settings().get_store_uri() except Exception: type, value, trace = sys.exc_info() error(_("Could not open the database config file"), _("Invalid config file settings, got error '%s', " "of type '%s'") % (value, type)) from stoqlib.database.exceptions import PostgreSQLError from stoqlib.database.runtime import get_default_store from stoqlib.exceptions import DatabaseError from stoqlib.lib.pgpass import write_pg_pass from stoq.lib.startup import setup # XXX: progress dialog for connecting (if it takes more than # 2 seconds) or creating the database log.debug('calling setup()') try: setup(self._config, self._options, register_station=False, check_schema=False, load_plugins=False) # the setup call above is not really trying to connect (since # register_station, check_schema and load_plugins are all False). # Try to really connect here. get_default_store() except (StoqlibError, PostgreSQLError) as e: log.debug('Connection failed.') error(_('Could not connect to the database'), 'error=%s uri=%s' % (str(e), store_uri)) except DatabaseError: log.debug('Connection failed. Tring to setup .pgpass') # This is probably a missing password configuration. Setup the # pgpass file and try again. try: password = self._get_password() if not password: # There is no password stored in data file. Abort raise from stoqlib.database.settings import db_settings write_pg_pass(db_settings.dbname, db_settings.address, db_settings.port, db_settings.username, password) # Now that there is a pg_pass file, try to connect again get_default_store() except DatabaseError as e: log.debug('Connection failed again.') error(_('Could not connect to the database'), 'error=%s uri=%s' % (str(e), store_uri)) def _post_connect(self): self._check_schema_migration() self._check_branch() self._activate_plugins() def _check_schema_migration(self): from stoqlib.lib.message import error from stoqlib.database.migration import needs_schema_update from stoqlib.exceptions import DatabaseInconsistency if needs_schema_update(): self._run_update_wizard() from stoqlib.database.migration import StoqlibSchemaMigration migration = StoqlibSchemaMigration() try: migration.check() except DatabaseInconsistency as e: error(_('The database version differs from your installed ' 'version.'), str(e)) def _activate_plugins(self): from stoqlib.lib.pluginmanager import get_plugin_manager manager = get_plugin_manager() manager.activate_installed_plugins() def _check_branch(self): from stoqlib.database.runtime import (get_default_store, new_store, get_current_station, set_current_branch_station) from stoqlib.domain.person import Company from stoqlib.lib.parameters import sysparam from stoqlib.lib.message import info default_store = get_default_store() compaines = default_store.find(Company) if (compaines.count() == 0 or not sysparam.has_object('MAIN_COMPANY')): from stoqlib.gui.base.dialogs import run_dialog from stoqlib.gui.dialogs.branchdialog import BranchDialog if self._ran_wizard: info(_("You need to register a company before start using Stoq")) else: info(_("Could not find a company. You'll need to register one " "before start using Stoq")) store = new_store() person = run_dialog(BranchDialog, None, store) if not person: raise SystemExit branch = person.branch sysparam.set_object(store, 'MAIN_COMPANY', branch) current_station = get_current_station(store) if current_station is not None: current_station.branch = branch store.commit() store.close() set_current_branch_station(default_store, station_name=None) def _run_update_wizard(self): from stoqlib.gui.base.dialogs import run_dialog from stoq.gui.update import SchemaUpdateWizard retval = run_dialog(SchemaUpdateWizard, None) if not retval: raise SystemExit()
class ShellDatabaseConnection(object): """Sets up a database connection - Connects to a database - Telling why if it failed - Runs database wizard if needed - Runs schema migration - Activates plugins - Sets up main branch """ def __init__(self, options): self._options = options self._config = None self._ran_wizard = False def connect(self): self._load_configuration() self._maybe_run_first_time_wizard() self._try_connect() self._post_connect() def _load_configuration(self): from stoqlib.lib.configparser import StoqConfig log.debug('reading configuration') self._config = StoqConfig() if self._options.filename: self._config.load(self._options.filename) else: self._config.load_default() def _maybe_run_first_time_wizard(self): from stoqlib.gui.base.dialogs import run_dialog from stoq.gui.config import FirstTimeConfigWizard config_file = self._config.get_filename() if self._options.wizard or not os.path.exists(config_file): run_dialog(FirstTimeConfigWizard, None, self._options) self._ran_wizard = True if self._config.get('Database', 'enable_production') == 'True': run_dialog(FirstTimeConfigWizard, None, self._options, self._config) self._ran_wizard = True def _try_connect(self): from stoqlib.lib.message import error try: store_dsn = self._config.get_settings().get_store_dsn() except: type, value, trace = sys.exc_info() error(_("Could not open the database config file"), _("Invalid config file settings, got error '%s', " "of type '%s'") % (value, type)) from stoqlib.database.exceptions import PostgreSQLError from stoq.lib.startup import setup # XXX: progress dialog for connecting (if it takes more than # 2 seconds) or creating the database log.debug('calling setup()') try: setup(self._config, self._options, register_station=False, check_schema=False, load_plugins=False) except (StoqlibError, PostgreSQLError) as e: error(_('Could not connect to the database'), 'error=%s uri=%s' % (str(e), store_dsn)) def _post_connect(self): self._check_schema_migration() self._check_branch() self._activate_plugins() def _check_schema_migration(self): from stoqlib.lib.message import error from stoqlib.database.migration import needs_schema_update from stoqlib.exceptions import DatabaseInconsistency if needs_schema_update(): self._run_update_wizard() from stoqlib.database.migration import StoqlibSchemaMigration migration = StoqlibSchemaMigration() try: migration.check() except DatabaseInconsistency as e: error(_('The database version differs from your installed ' 'version.'), str(e)) def _activate_plugins(self): from stoqlib.lib.pluginmanager import get_plugin_manager manager = get_plugin_manager() manager.activate_installed_plugins() def _check_branch(self): from stoqlib.database.runtime import (get_default_store, new_store, get_current_station, set_current_branch_station) from stoqlib.domain.person import Company from stoqlib.lib.parameters import sysparam from stoqlib.lib.message import info default_store = get_default_store() set_current_branch_station(default_store, station_name=None) compaines = default_store.find(Company) if (compaines.count() == 0 or not sysparam.has_object('MAIN_COMPANY')): from stoqlib.gui.base.dialogs import run_dialog from stoqlib.gui.dialogs.branchdialog import BranchDialog if self._ran_wizard: info(_("You need to register a company before start using Stoq")) else: info(_("Could not find a company. You'll need to register one " "before start using Stoq")) store = new_store() person = run_dialog(BranchDialog, None, store) if not person: raise SystemExit branch = person.branch sysparam.set_object(store, 'MAIN_COMPANY', branch) get_current_station(store).branch = branch store.commit() store.close() def _run_update_wizard(self): from stoqlib.gui.base.dialogs import run_dialog from stoq.gui.update import SchemaUpdateWizard retval = run_dialog(SchemaUpdateWizard, None) if not retval: raise SystemExit()
class ShellDatabaseConnection(object): """Sets up a database connection - Connects to a database - Telling why if it failed - Runs database wizard if needed - Runs schema migration - Activates plugins - Sets up main branch """ def __init__(self, options): self._options = options self._config = None self._ran_wizard = False def connect(self): self._load_configuration() self._maybe_run_first_time_wizard() self._try_connect() self._post_connect() def _load_configuration(self): from stoqlib.lib.configparser import StoqConfig log.debug('reading configuration') self._config = StoqConfig() if self._options.filename: self._config.load(self._options.filename) else: self._config.load_default() def _maybe_run_first_time_wizard(self): from stoqlib.gui.base.dialogs import run_dialog from stoq.gui.config import FirstTimeConfigWizard config_file = self._config.get_filename() if self._options.wizard or not os.path.exists(config_file): run_dialog(FirstTimeConfigWizard, None, self._options) self._ran_wizard = True if self._config.get('Database', 'enable_production') == 'True': run_dialog(FirstTimeConfigWizard, None, self._options, self._config) self._ran_wizard = True def _try_connect(self): from stoqlib.lib.message import error try: store_dsn = self._config.get_settings().get_store_dsn() except: type, value, trace = sys.exc_info() error(_("Could not open the database config file"), _("Invalid config file settings, got error '%s', " "of type '%s'") % (value, type)) from stoqlib.database.exceptions import PostgreSQLError from stoq.lib.startup import setup # XXX: progress dialog for connecting (if it takes more than # 2 seconds) or creating the database log.debug('calling setup()') try: setup(self._config, self._options, register_station=False, check_schema=False, load_plugins=False) except (StoqlibError, PostgreSQLError) as e: error(_('Could not connect to the database'), 'error=%s uri=%s' % (str(e), store_dsn)) def _post_connect(self): self._check_schema_migration() self._check_branch() self._activate_plugins() def _check_schema_migration(self): from stoqlib.lib.message import error from stoqlib.database.migration import needs_schema_update from stoqlib.exceptions import DatabaseInconsistency if needs_schema_update(): self._run_update_wizard() from stoqlib.database.migration import StoqlibSchemaMigration migration = StoqlibSchemaMigration() try: migration.check() except DatabaseInconsistency as e: error(_('The database version differs from your installed ' 'version.'), str(e)) def _activate_plugins(self): from stoqlib.lib.pluginmanager import get_plugin_manager manager = get_plugin_manager() manager.activate_installed_plugins() def _check_branch(self): from stoqlib.database.runtime import (get_default_store, new_store, get_current_station, set_current_branch_station) from stoqlib.domain.person import Company from stoqlib.lib.parameters import sysparam from stoqlib.lib.message import info default_store = get_default_store() set_current_branch_station(default_store, station_name=None) compaines = default_store.find(Company) if (compaines.count() == 0 or not sysparam(default_store).MAIN_COMPANY): from stoqlib.gui.base.dialogs import run_dialog from stoqlib.gui.dialogs.branchdialog import BranchDialog if self._ran_wizard: info(_("You need to register a company before start using Stoq")) else: info(_("Could not find a company. You'll need to register one " "before start using Stoq")) store = new_store() person = run_dialog(BranchDialog, None, store) if not person: raise SystemExit branch = person.branch sysparam(store).MAIN_COMPANY = branch.id get_current_station(store).branch = branch store.commit() store.close() def _run_update_wizard(self): from stoqlib.gui.base.dialogs import run_dialog from stoq.gui.update import SchemaUpdateWizard retval = run_dialog(SchemaUpdateWizard, None) if not retval: raise SystemExit()