Source code for stoq.lib.startup

# -*- coding: utf-8 -*-
# vi:si:et:sw=4:sts=4:ts=4

##
## Copyright (C) 2005, 2006 Async Open Source <http://www.async.com.br>
## All rights reserved
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU Lesser General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
## USA.
##
## Author(s): Stoq Team <stoq-devel@async.com.br>
##
##
""" Database startup routines"""

import logging
import os
import sys

from kiwi.component import provide_utility
from stoqlib.database.migration import StoqlibSchemaMigration
from stoqlib.database.debug import enable as enable_debugging
from stoqlib.database.runtime import (get_default_store,
                                      set_current_branch_station)
from stoqlib.exceptions import DatabaseError
from stoqlib.lib.configparser import register_config, StoqConfig
from stoqlib.lib.interfaces import IApplicationDescriptions
from stoqlib.lib.message import error
from stoqlib.lib.osutils import read_registry_key
from stoqlib.lib.translation import stoqlib_gettext as _

from stoq.lib.options import get_option_parser

log = logging.getLogger(__name__)


[docs]def setup_path(): import platform if platform.system() != 'Windows': return paths = [] # FIXME. This needs some updating # PostgreSQL, we're only working with 8.4 for now key = r'Software\PostgreSQL\Installations\postgresql-8.4' base_dir = read_registry_key('HKLM', key, 'Base Directory') if base_dir is not None: paths.append(os.path.join(base_dir, 'bin')) # Stoq, for stoqdbadmin and restarting Stoq itself key = r'Software\Stoq' stoq_dir = read_registry_key('HKCC', r'Software\Stoq', 'Path') if stoq_dir is not None: paths.append(stoq_dir) for path in paths: if path not in os.environ['PATH']: os.environ['PATH'] += ';' + path
[docs]def setup(config=None, options=None, register_station=True, check_schema=True, load_plugins=True): """ Loads the configuration from arguments and configuration file. @param config: a StoqConfig instance @param options: a Optionparser instance @param register_station: if we should register the branch station. @param check_schema: if we should check the schema @param load_plugins: if we should load plugins for the system """ # NOTE: No GUI calls are allowed in here # If you change anything here, you need to verify that all # callsites are still working properly. # bin/stoq # bin/stoqdbadmin # python stoq/tests/runtest.py if options is None: parser = get_option_parser() options, args = parser.parse_args(sys.argv) if options.verbose: from kiwi.log import set_log_level set_log_level('stoq*', 0) setup_path() if config is None: config = StoqConfig() if options.filename: config.load(options.filename) else: config.load_default() config.set_from_options(options) register_config(config) if options and options.sqldebug: enable_debugging() from stoq.lib.applist import ApplicationDescriptions provide_utility(IApplicationDescriptions, ApplicationDescriptions(), replace=True) db_settings = config.get_settings() try: default_store = get_default_store() except DatabaseError as e: # Only raise an error if a database is actually required if register_station or load_plugins or check_schema: error(e.short, str(e.msg)) else: default_store = None if register_station: db_settings.check_version(default_store) if check_schema: migration = StoqlibSchemaMigration() migration.check() if options and options.sqldebug: enable_debugging() set_current_branch_station(default_store, station_name=None) if load_plugins: from stoqlib.lib.pluginmanager import get_plugin_manager manager = get_plugin_manager() manager.activate_installed_plugins() if check_schema: if not default_store.table_exists('system_table'): error( _("Database schema error"), _("Table 'system_table' does not exist.\n" "Consult your database administrator to solve this problem.")) if check_schema: migration = StoqlibSchemaMigration() migration.check()